// Token: 0x060027D4 RID: 10196 RVA: 0x000F171C File Offset: 0x000EFB1C
 public static void sendChat(EChatMode mode, string text)
 {
     if (!Provider.isServer)
     {
         ChatManager.manager.channel.send("askChat", ESteamCall.SERVER, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[]
         {
             (byte)mode,
             text
         });
     }
     else if (!Dedicator.isDedicated)
     {
         SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(Provider.client);
         if (steamPlayer == null)
         {
             return;
         }
         Color color  = (!Provider.isPro) ? Color.white : Palette.PRO;
         bool  isRich = false;
         bool  flag   = true;
         if (ChatManager.onChatted != null)
         {
             ChatManager.onChatted(steamPlayer, mode, ref color, ref isRich, text, ref flag);
         }
         if (ChatManager.process(steamPlayer, text) && flag)
         {
             ChatManager.list(Provider.client, mode, color, isRich, text);
         }
     }
 }
示例#2
0
 // Token: 0x0600287E RID: 10366 RVA: 0x000F5EC8 File Offset: 0x000F42C8
 private void arenaRestart()
 {
     LevelManager.arenaState = EArenaState.INTERMISSION;
     base.channel.send("tellLevelTimer", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[]
     {
         (byte)Provider.modeConfigData.Events.Arena_Restart_Timer
     });
     for (int i = 0; i < LevelManager.arenaPlayers.Count; i++)
     {
         ArenaPlayer arenaPlayer = LevelManager.arenaPlayers[i];
         if (!arenaPlayer.hasDied && arenaPlayer.steamPlayer != null && !(arenaPlayer.steamPlayer.player == null))
         {
             arenaPlayer.steamPlayer.player.sendStat(EPlayerStat.ARENA_WINS);
         }
     }
     for (int j = 0; j < Provider.clients.Count; j++)
     {
         SteamPlayer steamPlayer = Provider.clients[j];
         if (steamPlayer != null && !(steamPlayer.player == null) && !steamPlayer.player.life.isDead && !steamPlayer.player.movement.isSafe)
         {
             EPlayerKill eplayerKill;
             steamPlayer.player.life.askDamage(101, Vector3.up * 101f, EDeathCause.ARENA, ELimb.SPINE, CSteamID.Nil, out eplayerKill);
         }
     }
 }
示例#3
0
 private void Update()
 {
     if (!Provider.isServer)
     {
         return;
     }
     if (Time.realtimeSinceStartup - this.started < 3f)
     {
         return;
     }
     if (this.isRegistered)
     {
         for (int i = 0; i < Provider.clients.Count; i++)
         {
             SteamPlayer steamPlayer = Provider.clients[i];
             if (!(steamPlayer.player == null) && !(steamPlayer.player.movement == null) && !(steamPlayer.player.life == null) && !steamPlayer.player.life.isDead)
             {
                 if (steamPlayer.player.movement.nav == this.nav)
                 {
                     return;
                 }
             }
         }
     }
     BarricadeManager.damage(base.transform, 10000f, 1f, false);
 }
        protected void onChatted(SteamPlayer player, EChatMode mode, ref Color chatted, ref bool isRich, string text, ref bool isVisible)
        {
            if (player == null || player.player == null || player.player.transform == null)
            {
                // Not a player-instigated message.
                return;
            }

            if (passesModeFilter(mode) == false)
            {
                return;
            }

            if (passesPositionFilter(player.player.transform.position) == false)
            {
                return;
            }

            if (passesPhraseFilter(text) == false)
            {
                return;
            }

            OnTriggered.Invoke();
        }
示例#5
0
 public Chat(SteamPlayer newPlayer, EChatMode newMode, Color newColor, string newSpeaker, string newText)
 {
     this.player  = newPlayer;
     this.mode    = newMode;
     this.color   = newColor;
     this.speaker = newSpeaker;
     this.text    = newText;
 }
 // Token: 0x060027D9 RID: 10201 RVA: 0x000F195C File Offset: 0x000EFD5C
 private void onServerConnected(CSteamID steamID)
 {
     if (Provider.isServer && ChatManager.welcomeText != string.Empty)
     {
         SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(steamID);
         ChatManager.say(steamPlayer.playerID.steamID, string.Format(ChatManager.welcomeText, steamPlayer.playerID.characterName), ChatManager.welcomeColor, false);
     }
 }
示例#7
0
        public ArenaPlayer(SteamPlayer newSteamPlayer)
        {
            this._steamPlayer = newSteamPlayer;
            this._hasDied     = false;
            PlayerLife life = this.steamPlayer.player.life;

            life.onLifeUpdated = (LifeUpdated)Delegate.Combine(life.onLifeUpdated, new LifeUpdated(this.onLifeUpdated));
        }
示例#8
0
        public static Player getPlayer(CSteamID steamID)
        {
            SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(steamID);

            if (steamPlayer != null && steamPlayer.player != null)
            {
                return(steamPlayer.player);
            }
            return(null);
        }
示例#9
0
        public static Transform getPlayerModel(string name)
        {
            SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(name);

            if (steamPlayer != null && steamPlayer.model != null)
            {
                return(steamPlayer.model);
            }
            return(null);
        }
示例#10
0
        public static Player getPlayer(string name)
        {
            SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(name);

            if (steamPlayer != null && steamPlayer.player != null)
            {
                return(steamPlayer.player);
            }
            return(null);
        }
示例#11
0
        public static Transform getPlayerModel(CSteamID steamID)
        {
            SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(steamID);

            if (steamPlayer != null && steamPlayer.model != null)
            {
                return(steamPlayer.model);
            }
            return(null);
        }
示例#12
0
 private static void onEnemyDisconnected(SteamPlayer player)
 {
     for (int i = 0; i < Provider.clients.Count; i++)
     {
         if (Provider.clients[i] == player)
         {
             PlayerGroupUI.container.remove(PlayerGroupUI.groups[i]);
             PlayerGroupUI.groups.RemoveAt(i);
         }
     }
 }
示例#13
0
        public static bool tryGetSteamPlayer(string input, out SteamPlayer player)
        {
            player = null;
            ulong steamID;

            if (ulong.TryParse(input, out steamID))
            {
                player = PlayerTool.getSteamPlayer(steamID);
                return(player != null);
            }
            player = PlayerTool.getSteamPlayer(input);
            return(player != null);
        }
示例#14
0
 // Token: 0x060018BA RID: 6330 RVA: 0x0008A1AC File Offset: 0x000885AC
 public void askDamage(byte amount, Vector3 newRagdoll, out EPlayerKill kill, out uint xp, bool trackKill = true)
 {
     kill = EPlayerKill.NONE;
     xp   = 0u;
     if (amount == 0 || this.isDead)
     {
         return;
     }
     if (!this.isDead)
     {
         if ((ushort)amount >= this.health)
         {
             this.health = 0;
         }
         else
         {
             this.health -= (ushort)amount;
         }
         this.ragdoll = newRagdoll;
         if (this.health == 0)
         {
             kill = EPlayerKill.ANIMAL;
             if (this.asset != null)
             {
                 xp = this.asset.rewardXP;
             }
             AnimalManager.dropLoot(this);
             AnimalManager.sendAnimalDead(this, this.ragdoll);
             if (trackKill)
             {
                 for (int i = 0; i < Provider.clients.Count; i++)
                 {
                     SteamPlayer steamPlayer = Provider.clients[i];
                     if (!(steamPlayer.player == null) && !(steamPlayer.player.movement == null) && !(steamPlayer.player.life == null) && !steamPlayer.player.life.isDead)
                     {
                         if ((steamPlayer.player.transform.position - base.transform.position).sqrMagnitude < 262144f)
                         {
                             steamPlayer.player.quests.trackAnimalKill(this);
                         }
                     }
                 }
             }
         }
         else if (this.asset != null && this.asset.panics != null && this.asset.panics.Length > 0)
         {
             AnimalManager.sendAnimalPanic(this);
         }
         this.lastRegen = Time.time;
     }
 }
示例#15
0
        // Token: 0x0600279F RID: 10143 RVA: 0x000F08D8 File Offset: 0x000EECD8
        public static int getParticipants(byte nav)
        {
            int num = 0;

            for (int i = 0; i < Provider.clients.Count; i++)
            {
                SteamPlayer steamPlayer = Provider.clients[i];
                if (!(steamPlayer.player == null) && !(steamPlayer.player.movement == null) && !(steamPlayer.player.life == null) && !steamPlayer.player.life.isDead)
                {
                    if (steamPlayer.player.movement.nav == nav)
                    {
                        num++;
                    }
                }
            }
            return(num);
        }
示例#16
0
        public void UpdateRegion()
        {
            if (this.bossZombie == null)
            {
                return;
            }
            bool flag  = false;
            bool flag2 = false;

            for (int i = 0; i < Provider.clients.Count; i++)
            {
                SteamPlayer steamPlayer = Provider.clients[i];
                if (!(steamPlayer.player == null) && !(steamPlayer.player.movement == null) && !(steamPlayer.player.life == null) && !steamPlayer.player.life.isDead)
                {
                    if (steamPlayer.player.movement.bound == this.nav)
                    {
                        flag = true;
                    }
                    if (steamPlayer.player.movement.nav == this.nav)
                    {
                        flag2 = true;
                    }
                    if (flag && flag2)
                    {
                        break;
                    }
                }
            }
            if (flag)
            {
                if (this.bossZombie.isDead)
                {
                    this.bossZombie = null;
                    if (flag2)
                    {
                        this.UpdateBoss();
                    }
                }
            }
            else
            {
                EPlayerKill eplayerKill;
                uint        num;
                this.bossZombie.askDamage(50000, Vector3.up, out eplayerKill, out num, false, false);
            }
        }
示例#17
0
        private static void addGroup(SteamPlayer player)
        {
            SleekLabel sleekLabel = new SleekLabel();

            sleekLabel.sizeOffset_X = 200;
            sleekLabel.sizeOffset_Y = 30;
            if (string.IsNullOrEmpty(player.playerID.nickName))
            {
                sleekLabel.text = player.playerID.characterName;
            }
            else
            {
                sleekLabel.text = player.playerID.nickName;
            }
            PlayerGroupUI.container.add(sleekLabel);
            sleekLabel.isVisible = false;
            PlayerGroupUI.groups.Add(sleekLabel);
        }
示例#18
0
        public static bool tryGetSteamID(string input, out CSteamID steamID)
        {
            steamID = CSteamID.Nil;
            ulong num;

            if (ulong.TryParse(input, out num))
            {
                steamID..ctor(num);
                return(true);
            }
            SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(input);

            if (steamPlayer != null)
            {
                steamID = steamPlayer.playerID.steamID;
                return(true);
            }
            return(false);
        }
示例#19
0
 // Token: 0x06002875 RID: 10357 RVA: 0x000F5228 File Offset: 0x000F3628
 private void updateGroups(SteamPlayer steamPlayer)
 {
     if (!steamPlayer.player.quests.isMemberOfAGroup)
     {
         LevelManager.nonGroups--;
     }
     else
     {
         for (int i = LevelManager.arenaPlayers.Count - 1; i >= 0; i--)
         {
             ArenaPlayer arenaPlayer = LevelManager.arenaPlayers[i];
             if (arenaPlayer.steamPlayer.player.quests.isMemberOfSameGroupAs(steamPlayer.player))
             {
                 return;
             }
         }
         LevelManager.arenaGroups.Remove(steamPlayer.player.quests.groupID);
     }
 }
示例#20
0
 // Token: 0x06002874 RID: 10356 RVA: 0x000F5154 File Offset: 0x000F3554
 private void findGroups()
 {
     LevelManager.nonGroups = 0;
     LevelManager.arenaGroups.Clear();
     for (int i = 0; i < Provider.clients.Count; i++)
     {
         SteamPlayer steamPlayer = Provider.clients[i];
         if (steamPlayer != null && !(steamPlayer.player == null) && !steamPlayer.player.life.isDead)
         {
             if (!steamPlayer.player.quests.isMemberOfAGroup)
             {
                 LevelManager.nonGroups++;
             }
             else if (!LevelManager.arenaGroups.Contains(steamPlayer.player.quests.groupID))
             {
                 LevelManager.arenaGroups.Add(steamPlayer.player.quests.groupID);
             }
         }
     }
 }
示例#21
0
 private void onChatted(SteamPlayer player, EChatMode mode, ref Color chatted, string text, ref bool isVisible)
 {
     if (mode != EChatMode.LOCAL || player.player == null)
     {
         return;
     }
     if ((player.player.transform.position - base.transform.position).sqrMagnitude > this.sqrRadius)
     {
         return;
     }
     if (text.IndexOf(this.phrase, StringComparison.OrdinalIgnoreCase) == -1)
     {
         return;
     }
     if (LightingManager.day < LevelLighting.bias)
     {
         return;
     }
     ObjectManager.forceObjectBinaryState(this.target.transform, !this.target.isUsed);
     isVisible = false;
 }
示例#22
0
        // Token: 0x060027C8 RID: 10184 RVA: 0x000F0F00 File Offset: 0x000EF300
        public static bool process(SteamPlayer player, string text)
        {
            bool   flag   = false;
            bool   result = true;
            string a      = text.Substring(0, 1);

            if ((a == "@" || a == "/") && player.isAdmin)
            {
                flag   = true;
                result = false;
            }
            if (ChatManager.onCheckPermissions != null)
            {
                ChatManager.onCheckPermissions(player, text, ref flag, ref result);
            }
            if (flag)
            {
                Commander.execute(player.playerID.steamID, text.Substring(1));
            }
            return(result);
        }
示例#23
0
 public void tellVoteStart(CSteamID steamID, CSteamID origin, CSteamID target, byte votesNeeded)
 {
     if (base.channel.checkServer(steamID))
     {
         SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(origin);
         if (steamPlayer == null)
         {
             return;
         }
         SteamPlayer steamPlayer2 = PlayerTool.getSteamPlayer(target);
         if (steamPlayer2 == null)
         {
             return;
         }
         ChatManager.needsVote = true;
         ChatManager.hasVote   = false;
         if (ChatManager.onVotingStart != null)
         {
             ChatManager.onVotingStart(steamPlayer, steamPlayer2, votesNeeded);
         }
     }
 }
 public void tellPlayerStates(CSteamID steamID)
 {
     if (base.channel.checkServer(steamID))
     {
         uint num = (uint)base.channel.read(Types.UINT32_TYPE);
         if (num <= this.seq)
         {
             return;
         }
         this.seq = num;
         base.channel.useCompression = true;
         ushort num2 = (ushort)base.channel.read(Types.UINT16_TYPE);
         for (ushort num3 = 0; num3 < num2; num3 += 1)
         {
             object[] array = base.channel.read(Types.INT32_TYPE, Types.VECTOR3_TYPE, Types.BYTE_TYPE, Types.BYTE_TYPE);
             int      num4  = (int)array[0];
             int      i     = 0;
             while (i < Provider.clients.Count)
             {
                 if (Provider.clients[i].channel == num4)
                 {
                     SteamPlayer steamPlayer = Provider.clients[i];
                     if (steamPlayer == null || steamPlayer.player == null || steamPlayer.player.movement == null)
                     {
                         break;
                     }
                     steamPlayer.player.movement.tellState((Vector3)array[1], (byte)array[2], (byte)array[3]);
                     break;
                 }
                 else
                 {
                     i++;
                 }
             }
         }
         base.channel.useCompression = false;
     }
 }
示例#25
0
 public void askVote(CSteamID steamID, bool vote)
 {
     if (Provider.isServer)
     {
         SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(steamID);
         if (steamPlayer == null)
         {
             return;
         }
         if (!ChatManager.isVoting)
         {
             return;
         }
         if (!steamPlayer.player.tryToPerformRateLimitedAction())
         {
             return;
         }
         if (ChatManager.votes.Contains(steamID))
         {
             return;
         }
         ChatManager.votes.Add(steamID);
         if (vote)
         {
             ChatManager.voteYes += 1;
         }
         else
         {
             ChatManager.voteNo += 1;
         }
         ChatManager.manager.channel.send("tellVoteUpdate", ESteamCall.CLIENTS, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[]
         {
             ChatManager.voteYes,
             ChatManager.voteNo
         });
     }
 }
示例#26
0
 protected override void execute(CSteamID executorID, string parameter)
 {
     if (!Dedicator.isDedicated)
     {
         return;
     }
     if (Provider.clients.Count == 0)
     {
         CommandWindow.LogError(this.localization.format("NoPlayersErrorText"));
         return;
     }
     CommandWindow.Log(this.localization.format("PlayersText"));
     for (int i = 0; i < Provider.clients.Count; i++)
     {
         SteamPlayer steamPlayer = Provider.clients[i];
         CommandWindow.Log(this.localization.format("PlayerIDText", new object[]
         {
             steamPlayer.playerID.steamID,
             steamPlayer.playerID.playerName,
             steamPlayer.playerID.characterName,
             (int)(steamPlayer.ping * 1000f)
         }));
     }
 }
示例#27
0
 public void UpdateBoss()
 {
     if (this.bossZombie != null)
     {
         return;
     }
     for (int i = 0; i < Provider.clients.Count; i++)
     {
         SteamPlayer steamPlayer = Provider.clients[i];
         if (!(steamPlayer.player == null) && !(steamPlayer.player.movement == null) && !(steamPlayer.player.life == null) && !steamPlayer.player.life.isDead)
         {
             if (steamPlayer.player.movement.nav == this.nav)
             {
                 for (int j = 0; j < steamPlayer.player.quests.questsList.Count; j++)
                 {
                     PlayerQuest playerQuest = steamPlayer.player.quests.questsList[j];
                     if (playerQuest != null && playerQuest.asset != null)
                     {
                         for (int k = 0; k < playerQuest.asset.conditions.Length; k++)
                         {
                             NPCZombieKillsCondition npczombieKillsCondition = playerQuest.asset.conditions[k] as NPCZombieKillsCondition;
                             if (npczombieKillsCondition != null)
                             {
                                 if (npczombieKillsCondition.nav == this.nav && npczombieKillsCondition.spawn && !npczombieKillsCondition.isConditionMet(steamPlayer.player))
                                 {
                                     Zombie zombie = null;
                                     for (int l = 0; l < this.zombies.Count; l++)
                                     {
                                         Zombie zombie2 = this.zombies[l];
                                         if (zombie2 != null && zombie2.isDead)
                                         {
                                             zombie = zombie2;
                                             break;
                                         }
                                     }
                                     if (zombie == null)
                                     {
                                         for (int m = 0; m < this.zombies.Count; m++)
                                         {
                                             Zombie zombie3 = this.zombies[m];
                                             if (zombie3 != null && !zombie3.isHunting)
                                             {
                                                 zombie = zombie3;
                                                 break;
                                             }
                                         }
                                     }
                                     if (zombie == null)
                                     {
                                         zombie = this.zombies[Random.Range(0, this.zombies.Count)];
                                     }
                                     Vector3 position = zombie.transform.position;
                                     if (zombie.isDead)
                                     {
                                         for (int n = 0; n < 10; n++)
                                         {
                                             ZombieSpawnpoint zombieSpawnpoint = LevelZombies.zombies[(int)this.nav][Random.Range(0, LevelZombies.zombies[(int)this.nav].Count)];
                                             if (SafezoneManager.checkPointValid(zombieSpawnpoint.point))
                                             {
                                                 break;
                                             }
                                             position    = zombieSpawnpoint.point;
                                             position.y += 0.1f;
                                         }
                                     }
                                     this.bossZombie = zombie;
                                     this.bossZombie.sendRevive(this.bossZombie.type, (byte)npczombieKillsCondition.zombie, this.bossZombie.shirt, this.bossZombie.pants, this.bossZombie.hat, this.bossZombie.gear, position, Random.Range(0f, 360f));
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
示例#28
0
 private static void onEnemyConnected(SteamPlayer player)
 {
     PlayerGroupUI.addGroup(player);
 }
示例#29
0
        // Token: 0x0600287A RID: 10362 RVA: 0x000F56AC File Offset: 0x000F3AAC
        private void arenaSpawn()
        {
            for (byte b = 0; b < Regions.WORLD_SIZE; b += 1)
            {
                for (byte b2 = 0; b2 < Regions.WORLD_SIZE; b2 += 1)
                {
                    if (LevelItems.spawns[(int)b, (int)b2].Count > 0)
                    {
                        for (int i = 0; i < LevelItems.spawns[(int)b, (int)b2].Count; i++)
                        {
                            ItemSpawnpoint itemSpawnpoint = LevelItems.spawns[(int)b, (int)b2][i];
                            ushort         item           = LevelItems.getItem(itemSpawnpoint);
                            if (item != 0)
                            {
                                Item item2 = new Item(item, EItemOrigin.ADMIN);
                                ItemManager.dropItem(item2, itemSpawnpoint.point, false, false, false);
                            }
                        }
                    }
                }
            }
            List <VehicleSpawnpoint> spawns = LevelVehicles.spawns;

            for (int j = 0; j < spawns.Count; j++)
            {
                VehicleSpawnpoint vehicleSpawnpoint = spawns[j];
                ushort            vehicle           = LevelVehicles.getVehicle(vehicleSpawnpoint);
                if (vehicle != 0)
                {
                    Vector3 point = vehicleSpawnpoint.point;
                    point.y += 1f;
                    VehicleManager.spawnVehicle(vehicle, point, Quaternion.Euler(0f, vehicleSpawnpoint.angle, 0f));
                }
            }
            List <PlayerSpawnpoint> altSpawns = LevelPlayers.getAltSpawns();
            float num = LevelManager.arenaCurrentRadius - SafezoneNode.MIN_SIZE;

            num *= num;
            for (int k = altSpawns.Count - 1; k >= 0; k--)
            {
                PlayerSpawnpoint playerSpawnpoint = altSpawns[k];
                float            num2             = Mathf.Pow(playerSpawnpoint.point.x - LevelManager.arenaCurrentCenter.x, 2f) + Mathf.Pow(playerSpawnpoint.point.z - LevelManager.arenaCurrentCenter.z, 2f);
                if (num2 > num)
                {
                    altSpawns.RemoveAt(k);
                }
            }
            for (int l = 0; l < Provider.clients.Count; l++)
            {
                if (altSpawns.Count == 0)
                {
                    break;
                }
                SteamPlayer steamPlayer = Provider.clients[l];
                if (steamPlayer != null && !(steamPlayer.player == null) && !steamPlayer.player.life.isDead)
                {
                    int index = UnityEngine.Random.Range(0, altSpawns.Count);
                    PlayerSpawnpoint playerSpawnpoint2 = altSpawns[index];
                    altSpawns.RemoveAt(index);
                    ArenaPlayer arenaPlayer = new ArenaPlayer(steamPlayer);
                    arenaPlayer.steamPlayer.player.life.sendRevive();
                    arenaPlayer.steamPlayer.player.sendTeleport(playerSpawnpoint2.point, MeasurementTool.angleToByte(playerSpawnpoint2.angle));
                    LevelManager.arenaPlayers.Add(arenaPlayer);
                    foreach (ArenaLoadout arenaLoadout in Level.info.configData.Arena_Loadouts)
                    {
                        for (ushort num3 = 0; num3 < arenaLoadout.Amount; num3 += 1)
                        {
                            ushort newID = SpawnTableTool.resolve(arenaLoadout.Table_ID);
                            arenaPlayer.steamPlayer.player.inventory.forceAddItemAuto(new Item(newID, true), true, false, true, false);
                        }
                    }
                }
            }
            this.arenaAirdrop();
            LevelManager.arenaState = EArenaState.PLAY;
            base.channel.send("tellLevelNumber", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[]
            {
                (byte)LevelManager.arenaPlayers.Count
            });
        }
        // Token: 0x0600270D RID: 9997 RVA: 0x000E85C4 File Offset: 0x000E69C4
        private void Update()
        {
            if (!Provider.isServer || !Level.isLoaded)
            {
                return;
            }
            if (AnimalManager.animals == null || AnimalManager.animals.Count == 0)
            {
                return;
            }
            if (AnimalManager.tickingAnimals == null)
            {
                return;
            }
            int num;
            int num2;

            if (Dedicator.isDedicated)
            {
                if (AnimalManager.tickIndex >= AnimalManager.tickingAnimals.Count)
                {
                    AnimalManager.tickIndex = 0;
                }
                num  = AnimalManager.tickIndex;
                num2 = num + 25;
                if (num2 >= AnimalManager.tickingAnimals.Count)
                {
                    num2 = AnimalManager.tickingAnimals.Count;
                }
                AnimalManager.tickIndex = num2;
            }
            else
            {
                num  = 0;
                num2 = AnimalManager.tickingAnimals.Count;
            }
            for (int i = num2 - 1; i >= num; i--)
            {
                Animal animal = AnimalManager.tickingAnimals[i];
                if (animal == null)
                {
                    Debug.LogError("Missing animal " + i);
                }
                else
                {
                    animal.tick();
                }
            }
            if (Dedicator.isDedicated && Time.realtimeSinceStartup - AnimalManager.lastTick > Provider.UPDATE_TIME)
            {
                AnimalManager.lastTick += Provider.UPDATE_TIME;
                if (Time.realtimeSinceStartup - AnimalManager.lastTick > Provider.UPDATE_TIME)
                {
                    AnimalManager.lastTick = Time.realtimeSinceStartup;
                }
                base.channel.useCompression = true;
                this.seq += 1u;
                for (int j = 0; j < Provider.clients.Count; j++)
                {
                    SteamPlayer steamPlayer = Provider.clients[j];
                    if (steamPlayer != null && !(steamPlayer.player == null))
                    {
                        base.channel.openWrite();
                        base.channel.write(this.seq);
                        ushort num3 = 0;
                        int    step = base.channel.step;
                        base.channel.write(num3);
                        int num4 = 0;
                        for (int k = 0; k < AnimalManager.animals.Count; k++)
                        {
                            if (num3 >= 64)
                            {
                                break;
                            }
                            Animal animal2 = AnimalManager.animals[k];
                            if (!(animal2 == null) && animal2.isUpdated)
                            {
                                if ((animal2.transform.position - steamPlayer.player.transform.position).sqrMagnitude > 331776f)
                                {
                                    if ((ulong)(this.seq % 8u) == (ulong)((long)num4))
                                    {
                                        base.channel.write(animal2.index, animal2.transform.position, MeasurementTool.angleToByte(animal2.transform.rotation.eulerAngles.y));
                                        num3 += 1;
                                    }
                                    num4++;
                                }
                                else
                                {
                                    base.channel.write(animal2.index, animal2.transform.position, MeasurementTool.angleToByte(animal2.transform.rotation.eulerAngles.y));
                                    num3 += 1;
                                }
                            }
                        }
                        if (num3 != 0)
                        {
                            int step2 = base.channel.step;
                            base.channel.step = step;
                            base.channel.write(num3);
                            base.channel.step = step2;
                            base.channel.closeWrite("tellAnimalStates", steamPlayer.playerID.steamID, ESteamPacket.UPDATE_UNRELIABLE_CHUNK_BUFFER);
                        }
                    }
                }
                base.channel.useCompression = false;
                for (int l = 0; l < AnimalManager.animals.Count; l++)
                {
                    Animal animal3 = AnimalManager.animals[l];
                    if (!(animal3 == null))
                    {
                        animal3.isUpdated = false;
                    }
                }
            }
            this.respawnAnimals();
        }