Esempio n. 1
0
        /*internal static bool RemovePlayerFromTeam(Team.Member player)
         * {
         *  foreach (string id in Teams.Keys)
         *  {
         *      RemovePlayerFromTeam(player, id);
         *  }
         *  return true;
         * }*/

        internal static void RemovePlayerAfterDisconnect(string pId, string teamId)
        {
            if (Teams[teamId] == null)
            {
                return;
            }

            int entityId = 0;

            Team.Member toRemove = null;

            foreach (Team.Member member in Teams[teamId].members)
            {
                if (member.pId == pId)
                {
                    entityId = member.entityId;
                    toRemove = member;
                    break;
                }
            }

            if (toRemove == null)
            {
                return;
            }

            Teams[teamId].RemoveMember(toRemove);

            foreach (Team.Member member in Teams[teamId].members)
            {
                member.ClientInfo().SendPackage(NetPackageManager.GetPackage <NetPackagePartyData>().Setup(member.EntityPlayer().Party, entityId, NetPackagePartyData.PartyActions.Disconnected, member.EntityPlayer().Party.MemberList.Count == 0));
            }
        }
Esempio n. 2
0
        internal static bool AddTeam(string id, List <ClientInfo> playersToAdd = null)
        {
            if (Teams.ContainsKey(id))
            {
                return(false);
            }

            Teams.Add(id, new Team(id));

            if (playersToAdd == null)
            {
                return(true);
            }

            foreach (ClientInfo player in playersToAdd)
            {
                Team.Member member = new Team.Member
                {
                    entityId = player.entityId,
                    nick     = player.playerName,
                    pId      = player.playerId
                };

                AddPlayerToTeam(member, id);
            }

            return(true);
        }
Esempio n. 3
0
        internal static void PlayerSpawnedInWorld(ClientInfo player, RespawnType respawnReason, Vector3i _pos)
        {
            string   pId         = player.playerId;
            ModState playerState = VariableContainer.GetPlayerState(pId);
            World    world       = GameManager.Instance.World;

            if (respawnReason.Equals(RespawnType.Died))
            {
                if (playerState.Equals(ModState.RECONNECTING_TO_GAME) || playerState.Equals(ModState.IN_GAME) || playerState.Equals(ModState.START_GAME))
                {
                    if (playerState.Equals(ModState.RECONNECTING_TO_GAME))
                    {
                        Team.Member member = new Team.Member
                        {
                            entityId = player.entityId,
                            nick     = player.playerName,
                            pId      = pId
                        };

                        VariableContainer.SetPlayerState(pId, ModState.IN_GAME);
                        TeamMaker.AddPlayerToTeam(member, VariableContainer.GetPlayerLastTeam(pId));
                    }

                    // Has no items, teleport to team spawn and give items
                    Map     map   = VariableContainer.GetMap(VariableContainer.selectedMap);
                    Vector3 spawn = TeamMaker.GetPlayerTeam(pId).spawn;

                    Log.Out(string.Format("Spawn for {0} is {1}", player.playerName, spawn.ToString()));

                    // Find random spor around spawn
                    Vector3 destination = Vector3.zero;
                    //if (!world.GetRandomSpawnPositionMinMaxToPosition(spawn, 0, 2, 2, false, out destination, true))
                    // {
                    destination = spawn;
                    //}

                    player.SendPackage(NetPackageManager.GetPackage <NetPackageTeleportPlayer>().Setup(destination, null, false));

                    // ReGen
                    // Rebuild terrain around spawn
                    if (!refubrishedCords.Contains(spawn))
                    {
                        // But only once
                        refubrishedCords.Add(spawn);

                        PrefabInstance prefab = GameManager.Instance.World.GetPOIAtPosition(spawn);

                        int num  = World.toChunkXZ((int)spawn.x) - 1;
                        int num2 = World.toChunkXZ((int)spawn.z) - 1;
                        int num3 = num + 2;
                        int num4 = num2 + 2;

                        HashSetLong hashSetLong = new HashSetLong();
                        for (int k = num; k <= num3; k++)
                        {
                            for (int l2 = num2; l2 <= num4; l2++)
                            {
                                hashSetLong.Add(WorldChunkCache.MakeChunkKey(k, l2));
                            }
                        }

                        ChunkCluster chunkCache = world.ChunkCache;
                        ChunkProviderGenerateWorld chunkProviderGenerateWorld = world.ChunkCache.ChunkProvider as ChunkProviderGenerateWorld;

                        foreach (long key in hashSetLong)
                        {
                            if (!chunkProviderGenerateWorld.GenerateSingleChunk(chunkCache, key, true))
                            {
                                ChatManager.Message(player, string.Format("[FF4136]Failed regenerating chunk at position [FF851B]{0}[FF4136]/[FF851B]{1}", WorldChunkCache.extractX(key) << 4, WorldChunkCache.extractZ(key) << 4));
                            }
                        }

                        world.m_ChunkManager.ResendChunksToClients(hashSetLong);

                        if (prefab != null)
                        {
                            prefab.Reset(world);
                        }
                    }

                    // Give items
                    ClassManager.ApplyClass(player);

                    if (VariableContainer.GetPlayerState(pId).Equals(ModState.START_GAME))
                    {
                        VariableContainer.SetPlayerState(pId, ModState.IN_GAME);
                    }
                    else
                    {
                        HandleDiedInGame(player);
                    }
                    return;
                }
                else
                {
                    VariableContainer.SetPlayerState(pId, ModState.IN_LOBBY);
                    player.SendPackage(NetPackageManager.GetPackage <NetPackageTeleportPlayer>().Setup(VariableContainer.GetLobbyPosition(), null, false));
                    return;
                }
            }

            if (respawnReason.Equals(RespawnType.Teleport))
            {
                return;
            }

            if (VariableContainer.GetPlayerState(pId).Equals(ModState.RECONNECTING_TO_GAME))
            {
                // Have to kill reconected player
                Log.Out("Killing bc of reconnect: " + player.playerName);
                world.Players.dict[player.entityId].DamageEntity(new DamageSource(EnumDamageSource.Internal, EnumDamageTypes.Suicide), 99999, false, 1f);
                return;
            }

            if (VariableContainer.selectedMap == "null")
            {
                VariableContainer.SetPlayerState(pId, ModState.IN_LOBBY);
                player.SendPackage(NetPackageManager.GetPackage <NetPackageTeleportPlayer>().Setup(VariableContainer.GetLobbyPosition(), null, false));
            }
        }
Esempio n. 4
0
        /*intrnal static void MovePlayerToTeam(ClientInfo player, string team)
         * {
         *  bool b1 = false, b2 = false;
         *  foreach (KeyValuePair<string, HashSet<int>> t in Teams)
         *  {
         *      if (t.Key == team)
         *      {
         *          b1 = AddPlayerToTeam(player, team);
         *      } else
         *      {
         *          b2 = RemovePlayerFromTeam(player, team);
         *      }
         *
         *      if (b1 && b2) break;
         *  }
         * }*/

        internal static bool AddPlayerToTeam(Team.Member player, string id)
        {
            try {
                if (Teams[id] == null)
                {
                    return(false);
                }

                World world = GameManager.Instance.World;
                Team  team  = Teams[id];

                EntityPlayer leaderEntity;
                // Means that this player will be leader
                if (team.leader.entityId == -1)
                {
                    Log.Out("[MOD] Making part from " + player.nick);

                    leaderEntity = world.Players.dict[player.entityId];
                    // Must leave previous party, otherwise bugs will occur
                    if (leaderEntity.IsInParty())
                    {
                        leaderEntity.LeaveParty();
                    }
                    leaderEntity.CreateParty();

                    player.ClientInfo().SendPackage(NetPackageManager.GetPackage <NetPackagePartyData>().Setup(leaderEntity.Party, player.entityId, PartyActions.AutoJoin, false));
                    Teams[id].AddMember(player);
                    Teams[id].leader = player;
                    return(true);
                }

                // We need it to access party
                leaderEntity = team.leader.EntityPlayer();

                // Must leave previous party, otherwise bugs will occur
                if (player.EntityPlayer().IsInParty())
                {
                    player.EntityPlayer().Party.RemovePlayer(player.EntityPlayer());
                    player.EntityPlayer().LeaveParty();

                    Log.Out("[MOD] Leaving party " + player.nick);

                    player.ClientInfo().SendPackage(NetPackageManager.GetPackage <NetPackagePartyData>().Setup(player.EntityPlayer().Party, player.entityId, NetPackagePartyData.PartyActions.LeaveParty, true));
                }

                Teams[id].AddMember(player);
                leaderEntity.Party.AddPlayer(player.EntityPlayer());

                foreach (Team.Member member in Teams[id].members)
                {
                    Log.Out("[MOD] Resend from " + Teams[id].leader.nick + " to " + member.nick);

                    member.ClientInfo().SendPackage(NetPackageManager.GetPackage <NetPackagePartyData>().Setup(leaderEntity.Party, member.entityId, PartyActions.AutoJoin, false));
                }

                return(true);
            } catch (Exception e)
            {
                Log.Error(string.Format("Error in AddPlayerToTeam: {0}", e.Message));
                Log.Error(e.StackTrace);
                Log.Exception(e);
                return(false);
            }
        }