private static void HandleDiedInGame(ClientInfo player) { Map map = VariableContainer.GetMap(VariableContainer.selectedMap); Team team = TeamMaker.GetPlayerTeam(player.playerId); if (!VariableContainer.TeamDeaths.ContainsKey(team.id)) { VariableContainer.TeamDeaths.Add(team.id, 0); } VariableContainer.TeamDeaths[team.id]++; foreach (Team.Member member in team.members) { member.ClientInfo().SendPackage(NetPackageManager.GetPackage <NetPackageChat>().Setup(EChatType.Whisper, member.entityId, "[FF3333]" + team.id + " Deaths to loose: " + (DEATHS_TO_LOOSE - VariableContainer.TeamDeaths[team.id]), null, false, null)); } if (VariableContainer.TeamDeaths[team.id] < DEATHS_TO_LOOSE) { return; } VariableContainer.selectedMap = "none"; refubrishedCords.Clear(); VariableContainer.FreeMapSpawns(); string msg = string.Format("[FFAAAA]Team of {0} [FFAAAA]has failed miserable.", team.GetMembers()); foreach (ClientInfo pcli in ConnectionManager.Instance.Clients.List) { if (pcli == null) { continue; } string pId = pcli.playerId; VariableContainer.SetPlayerState(pId, ModState.IN_LOBBY); pcli.SendPackage(NetPackageManager.GetPackage <NetPackageTeleportPlayer>().Setup(VariableContainer.GetLobbyPosition(), null, false)); pcli.SendPackage(NetPackageManager.GetPackage <NetPackageChat>().Setup(EChatType.Whisper, pcli.entityId, msg, null, false, null)); } TeamMaker.CleanUp(); }
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)); } }
public static bool Execute(ClientInfo sender, List <string> arguments) { World world = GameManager.Instance.World; if (arguments.Count < 2) { ChatManager.Message(sender, "[85144b]You ugly bitch [FF4136]/start mapId spawnGroup (teamCount)"); return(false); } string mapId = arguments[0].Trim(); if (!VariableContainer.MapExists(mapId)) { ChatManager.Message(sender, string.Format("[FF4136]Map [FF851B]{0} [FF4136]does not exist", mapId)); return(false); } int teamCount = 2; try { teamCount = int.Parse(arguments[2]); } catch (Exception) { } string spawnGroup = arguments[1].Trim(); Map map = VariableContainer.GetMap(mapId); if (!map.spawns.ContainsKey(spawnGroup)) { ChatManager.Message(sender, string.Format("[FF4136]Group [FF851B]{0}[FF4136] does not exist at [FF851B]{1}", spawnGroup, mapId)); return(false); } if (map.spawns[spawnGroup].Count < teamCount) { ChatManager.Message(sender, string.Format("[FF4136]Group [FF851B]{0}[FF4136] ([FF851B]{1}[FF4136] spawns) is to small for [FF851B]{2}[FF4136] teams", spawnGroup, map.spawns[spawnGroup].Count, teamCount )); return(false); } List <ClientInfo> playersToSplit = new List <ClientInfo>(); foreach (EntityPlayer entityPlayer in world.Players.list) { ClientInfo client = ConnectionManager.Instance.Clients.ForEntityId(entityPlayer.entityId); playersToSplit.Add(client); } TeamMaker.SplitPlayers(playersToSplit, teamCount); VariableContainer.selectedMap = mapId; foreach (string teamName in TeamMaker.Teams.Keys) { Vector3 spawn = map.GetFreeSpawn(spawnGroup); TeamMaker.Teams[teamName].spawn = spawn; // Regenreate map after player spawn foreach (Team.Member player in TeamMaker.Teams[teamName].members) { // Respawn event will give items VariableContainer.SetPlayerState(player.pId, ModState.START_GAME); // Kill player Log.Out("Killing bc of start: " + player.nick); player.EntityPlayer().DamageEntity(new DamageSource(EnumDamageSource.Internal, EnumDamageTypes.Suicide), 99999, false, 1f); } } return(false); }
public static bool Execute(ClientInfo sender, List <string> arguments) { World world = GameManager.Instance.World; EntityPlayer entityPlayer = world.Players.dict[sender.entityId]; Vector3 playerLocation = entityPlayer.getBellyPosition(); string xyz = string.Format("X: [FFDC00]{0}[DDDDDD], Y: [FFDC00]{1}[DDDDDD], Z: [FFDC00]{2}", playerLocation.x, playerLocation.y, playerLocation.z ); // Prints current position if (arguments.Count == 0) { string msg = string.Format("[DDDDDD]Player: [FFDC00]{0}[DDDDDD], {1}", sender.playerName.Trim(), xyz ); ChatManager.Message(sender, msg); return(false); } // Lobby or map else if (arguments.Count >= 1) { if (arguments[0] == "lobby") { VariableContainer.SetLobbyPosition(playerLocation); string msg = string.Format("[DDDDDD]New pos for: [FFDC00]Lobby[DDDDDD], {0}", xyz); ChatManager.Message(sender, msg); return(false); } // Must be map id string mapId = arguments[0].Trim(); if (!VariableContainer.MapExists(mapId)) { VariableContainer.AddMap(new Map(mapId)); ChatManager.Message(sender, "[DDDDDD]Created new Map: [FFDC00]" + mapId); } Map map = VariableContainer.GetMap(mapId); string spawnFor = "team"; if (arguments.Count >= 2) { spawnFor = arguments[1].Trim(); } if (arguments.Count >= 3) { if (arguments[2].Trim() == "-d") { if (!map.spawns.ContainsKey(spawnFor)) { ChatManager.Message(sender, string.Format("[DDDDDD]Group [FFDC00]{0} [DDDDDD]does not exist", spawnFor)); return(false); } // Delete latest int index = map.spawns[spawnFor].Count - 1; if (arguments.Count == 4) { try { index = int.Parse(arguments[3].Trim()); } catch { } } map.spawns[spawnFor].RemoveAt(index); if (map.spawns[spawnFor].Count == 0) { map.spawns.Remove(spawnFor); ChatManager.Message(sender, string.Format("[DDDDDD]Group [FFDC00]{0}[DDDDDD] at map [FFDC00]{1}[DDDDDD] has been deleted", spawnFor, mapId)); } else { ChatManager.Message(sender, string.Format("[DDDDDD]Removed spawn for group [FFDC00]{0}[DDDDDD] at map [FFDC00]{1}", spawnFor, mapId)); } } else { ChatManager.Message(sender, "[DDDDDD]Usage: /pos mapId spawnGroup [FFDC00]-d [index]"); return(false); } } else { // Add spawn for group map.AddSpawn(spawnFor, playerLocation); ChatManager.Message(sender, string.Format("[DDDDDD]New pos for: [FFDC00]{0} ({1})[DDDDDD], {2}", mapId, spawnFor, xyz)); } // Save VariableContainer.SetMap(map); Configs.Save(); return(false); } else { ChatManager.Message(sender, "[DDDDDD]Usage: [FFDC00]/pos [lobby/mapId] [spawnGroup] [-d [index]]"); return(false); } }