private bool Join_Instance(Player player, ushort Instanceid, Zone_jump Jump, ushort InstancemainID) { lock (_instances) { _instances.TryGetValue(Instanceid, out Instance inst); if (inst.EncounterInProgress) { player.SendClientMessage("There is an Encounter in progress you cannot enter now", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); return(false); } if (_maxplayers == 0 || inst.Players.Count < _maxplayers) { if (Jump != null && Jump.ZoneID == 179) { ((TOTVL)inst).AddPlayer(player, Jump); } else { inst.AddPlayer(player, Jump); } } else { player.SendClientMessage("Instance is full.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); return(false); } } return(true); }
public void AddPlayer(Player player, Zone_jump jump) { lock (_Players) { if (!_Players.Contains(player.Name)) { _Players.Add(player.Name); } } player.InstanceID = ID; /* * Thread thread = new Thread(delegate () * { * Thread.Sleep(5000); */ if (jump != null) { player.Teleport(Region, jump.ZoneID, jump.WorldX, jump.WorldY, jump.WorldZ, jump.WorldO); } else { player.Teleport(Region, player._Value.ZoneId, (uint)player._Value.WorldX, (uint)player._Value.WorldY, (ushort)player._Value.WorldZ, (ushort)player._Value.WorldO); } //}); // thread.Start(); }
static public void F_ZONEJUMP(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } //Log.Dump("Jump", packet, true); UInt32 Id = packet.GetUint32(); Log.Info("Jump", "Jump to :" + Id); Zone_jump Jump = WorldMgr.GetZoneJump(Id); if (Jump != null) { cclient.Plr.Teleport(Jump.ZoneID, Jump.WorldX, Jump.WorldY, Jump.WorldZ, Jump.WorldO); } else { Log.Error("Jump", "Invalid Jump"); } }
private void ZoneJump(Player player) { #if DEBUG Log.Info("Jump", "Jump to :" + Spawn.Guid); #endif Zone_jump jump = ZoneService.GetZoneJump(Spawn.Guid); if (jump == null) { return; } if (jump.Type == 3) { if (!player.GldInterface.IsInGuild() || player.GldInterface.GetGuildLevel() < 6) { player.SendClientMessage("A Guild Rank of 6 is required to use this portal."); player.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); return; } } if (jump.Enabled || Utils.HasFlag(player.GmLevel, (int)EGmLevel.DatabaseDev)) { player.Teleport(jump.ZoneID, jump.WorldX, jump.WorldY, jump.WorldZ, jump.WorldO); } }
private ushort Create_new_instance(Player player, Zone_jump Jump) { lock (_instances) { for (ushort i = 1; i < ushort.MaxValue; i++) { if (!_instances.ContainsKey(i)) { if (Jump.ZoneID == 179) { TOTVL ints = null; Instance_Lockouts deadbosses = null; if (player._Value.GetLockout(Jump.InstanceID) != null) { if (player.PriorityGroup == null) // solo player gets his own lockouts { InstanceService._InstanceLockouts.TryGetValue(player._Value.GetLockout(Jump.InstanceID), out deadbosses); } else // group players gets the lockout of the leader { InstanceService._InstanceLockouts.TryGetValue(player.PriorityGroup.GetLeader()._Value.GetLockout(Jump.InstanceID), out deadbosses); } } ints = new TOTVL(Jump.ZoneID, i, 0, deadbosses); _instances.Add(i, ints); return(i); } else { Instance ints = null; Instance_Lockouts deadbosses = null; if (player._Value.GetLockout(Jump.InstanceID) != null) { if (player.PriorityGroup == null) // solo player gets his own lockouts { InstanceService._InstanceLockouts.TryGetValue(player._Value.GetLockout(Jump.InstanceID), out deadbosses); } else if (player.PriorityGroup.GetLeader()._Value.GetLockout(Jump.InstanceID) != null) // group players gets the lockout of the leader { InstanceService._InstanceLockouts.TryGetValue(player.PriorityGroup.GetLeader()._Value.GetLockout(Jump.InstanceID), out deadbosses); } } ints = new Instance(Jump.ZoneID, i, 0, deadbosses); _instances.Add(i, ints); return(i); } } } } return(0); }
public void AddPlayer(Player player, Zone_jump jump) { lock (Players) { if (!Players.Contains(player)) { Players.Add(player); } player.InstanceID = ZoneID + ":" + ID; if (jump != null) { player.Teleport(Region, jump.ZoneID, jump.WorldX, jump.WorldY, jump.WorldZ, jump.WorldO); } else { player.Teleport(Region, player._Value.ZoneId, (uint)player._Value.WorldX, (uint)player._Value.WorldY, (ushort)player._Value.WorldZ, (ushort)player._Value.WorldO); } Region.CheckZone(player); InstanceService.SavePlayerIDs(ZoneID + ":" + ID, Players); player.SendClientMessage("Instance ID: " + ID, SystemData.ChatLogFilters.CHATLOGFILTERS_TELL_RECEIVE); string players = string.Empty; foreach (Player plr in Players) { players += plr.Name + ","; } if (players.EndsWith(",")) { players = players.Substring(0, players.Length - 1); } player.SendClientMessage("Registered players: " + players, SystemData.ChatLogFilters.CHATLOGFILTERS_TELL_RECEIVE); player.SendClientMessage("Note: Wait for your party leader to get into the instance if you find yourself in another instance ID.", SystemData.ChatLogFilters.CHATLOGFILTERS_TELL_RECEIVE); } }
private bool Join_Instance(Player player, ushort Instanceid, Zone_jump Jump, int maxplayers, ushort InstancemainID) { lock (_instances) { Instance inst; _instances.TryGetValue(Instanceid, out inst); if (player._Value.GetLockout(InstancemainID) != null && inst.Lockout != null && inst.Lockout.InstanceID != player._Value.GetLockout(InstancemainID)) { player.SendClientMessage("Your Instance Lockout dont match the Instance you are trying to enter", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); return(false); } if (inst.Encounterinprogress) { player.SendClientMessage("There is an Encounter in progress you cannot enter now", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); return(false); } if (maxplayers == 0 || inst.Region.Players.Count <= maxplayers) { if (Jump != null && Jump.ZoneID == 179) { ((TOTVL)inst).AddPlayer(player, Jump); } else { inst.AddPlayer(player, Jump); } } else { player.SendClientMessage("Instance is full", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); return(false); } } return(true); }
private ushort Create_new_instance(Player player, Zone_jump Jump) { lock (_instances) { for (ushort i = 1; i < ushort.MaxValue; i++) { if (!_instances.ContainsKey(i)) { if (Jump.ZoneID == 179) { TOTVL ints = null; Instance_Lockouts deadbosses = null; if (player._Value.GetLockout(Jump.InstanceID) != null) { InstanceService._InstanceLockouts.TryGetValue(player._Value.GetLockout(Jump.InstanceID), out deadbosses); } ints = new TOTVL(Jump.ZoneID, i, 0, deadbosses); _instances.Add(i, ints); return(i); } else { Instance ints = null; Instance_Lockouts deadbosses = null; if (player._Value.GetLockout(Jump.InstanceID) != null) { InstanceService._InstanceLockouts.TryGetValue(player._Value.GetLockout(Jump.InstanceID), out deadbosses); } ints = new Instance(Jump.ZoneID, i, 0, deadbosses); _instances.Add(i, ints); return(i); } } } } return(0); }
public static void F_INIT_PLAYER(BaseClient client, PacketIn packet) { GameClient cclient = (GameClient)client; Player Plr = cclient.Plr; if (Plr == null) { return; } if (!Plr.IsInWorld()) // If the player is not on a map, then we add it to the map { ushort zoneId = Plr.Info.Value.ZoneId; ushort regionId = (ushort)Plr.Info.Value.RegionId; Zone_Info info = ZoneService.GetZone_Info(zoneId); if (info?.Type == 0) { RegionMgr region = WorldMgr.GetRegion(regionId, true); if (region.AddObject(Plr, zoneId, true)) { return; } } else if (info?.Type == 4 || info?.Type == 5 || info?.Type == 6) // login into a instance { if (!WorldMgr.InstanceMgr.ZoneIn(Plr, (byte)info?.Type)) // cant login into the instace port to exit { Instance_Info II; InstanceService._InstanceInfo.TryGetValue(zoneId, out II); Zone_jump ExitJump = ZoneService.GetZoneJump(II.exitzonejup); if (ExitJump == null) { Log.Error("Exit Jump in Instance", " " + zoneId + " missing!"); } else { if (ExitJump.Type == 4) { WorldMgr.InstanceMgr.ZoneIn(Plr, 4, ExitJump); } else { Plr.Teleport(ExitJump.ZoneID, ExitJump.WorldX, ExitJump.WorldY, ExitJump.WorldZ, ExitJump.WorldO); } } } return; } // Warp a player to their bind point if they attempt to load into a scenario map. RallyPoint rallyPoint = RallyPointService.GetRallyPoint(Plr.Info.Value.RallyPoint); if (rallyPoint != null) { Plr.Teleport(rallyPoint.ZoneID, rallyPoint.WorldX, rallyPoint.WorldY, rallyPoint.WorldZ, rallyPoint.WorldO); } else { CharacterInfo cInfo = CharMgr.GetCharacterInfo(Plr.Info.Career); Plr.Teleport(cInfo.ZoneId, (uint)cInfo.WorldX, (uint)cInfo.WorldY, (ushort)cInfo.WorldZ, (ushort)cInfo.WorldO); } } else { Plr.Loaded = false; Plr.StartInit(); } }
public static void F_ZONEJUMP(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } //Log.Dump("Jump", packet, true); uint destinationId = packet.GetUint32(); byte responseType = packet.GetUint8(); //Log.Info("Jump", "Jump to :" + Id); if (cclient.Plr.Zone.Info.Type == 1) { if (responseType == 0) { cclient.Plr.SendDialog(Dialog.ScenarioLeave, 586); } else { Scenario sc = cclient.Plr.ScnInterface.Scenario; if (sc == null) { cclient.Plr.SendClientMessage("No active scenario.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); } else { sc.EnqueueScenarioAction(new ScenarioQueueAction(EScenarioQueueAction.RemovePlayer, cclient.Plr)); } } return; } Zone_jump Jump = ZoneService.GetZoneJump(destinationId); if (Jump == null) { cclient.Plr.SendClientMessage("This portal's jump destination (" + destinationId + ") does not exist."); SendJumpFailed(cclient.Plr); return; } if (cclient.Plr.GmLevel > 0) { cclient.Plr.SendClientMessage("Portal Id: " + destinationId); } if (cclient.Plr.CbtInterface.IsInCombat) { cclient.Plr.SendClientMessage("You can't use a portal while in combat." + destinationId); cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); return; } if (Jump.Type == 1 && cclient.Plr.WorldGroup == null) { cclient.Plr.SendClientMessage("You must be a member of a group in order to use this portal." + destinationId); cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); return; } if (Jump.Type == 2 && cclient.Plr.Level < 30) { cclient.Plr.SendClientMessage("A Career Rank of 30 is required to use this portal." + destinationId); cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); return; } if (Jump.Type == 3 && cclient.Plr.GldInterface.GetGuildLevel() < 6) { cclient.Plr.SendClientMessage("A Guild Rank of 6 is required to use this portal." + destinationId); cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); return; } if (Jump.Type >= 4 && Jump.Type <= 6) { if (!WorldMgr.InstanceMgr.ZoneIn(cclient.Plr, Jump.Type, Jump)) { ; } SendJumpFailed(cclient.Plr); return; } if (Jump.Enabled || cclient.Plr.GmLevel > 1) { cclient.Plr.Teleport(Jump.ZoneID, Jump.WorldX, Jump.WorldY, Jump.WorldZ, Jump.WorldO); } else { cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); } }
public static void F_ZONEJUMP(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } //Log.Dump("Jump", packet, true); uint destinationId = packet.GetUint32(); byte responseType = packet.GetUint8(); //Log.Info("Jump", "Jump to :" + Id); if (cclient.Plr.Zone.Info.Type == 1) { if (responseType == 0) { cclient.Plr.SendDialog(Dialog.ScenarioLeave, 586); } else { Scenario sc = cclient.Plr.ScnInterface.Scenario; if (sc == null) { cclient.Plr.SendClientMessage("No active scenario.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); } else { sc.EnqueueScenarioAction(new ScenarioQueueAction(EScenarioQueueAction.RemovePlayer, cclient.Plr)); } } return; } Zone_jump Jump = null; // ZARU: zone jump out hackaround for LV leave if (destinationId == 272804328) { Instance_Info II; InstanceService._InstanceInfo.TryGetValue(260, out II); if (cclient.Plr.Realm == Realms.REALMS_REALM_ORDER) { Jump = ZoneService.GetZoneJump(II.OrderExitZoneJumpID); } else if (cclient.Plr.Realm == Realms.REALMS_REALM_DESTRUCTION) { Jump = ZoneService.GetZoneJump(II.DestrExitZoneJumpID); } if (Jump == null) { Jump = ZoneService.GetZoneJump(destinationId); } } else { Jump = ZoneService.GetZoneJump(destinationId); } if (Jump == null) { cclient.Plr.SendClientMessage("This portal's jump destination (" + destinationId + ") does not exist."); SendJumpFailed(cclient.Plr); return; } if (cclient.Plr.GmLevel > 0) { cclient.Plr.SendClientMessage("Portal Id: " + destinationId); } if (cclient.Plr.CbtInterface.IsInCombat) { cclient.Plr.SendClientMessage("You can't use a portal while in combat." + destinationId); cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); return; } if (Jump.Type == 1 && cclient.Plr.WorldGroup == null) { cclient.Plr.SendClientMessage("You must be a member of a group in order to use this portal." + destinationId); cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); return; } if (Jump.Type == 2 && cclient.Plr.Level < 30) { cclient.Plr.SendClientMessage("A Career Rank of 30 is required to use this portal." + destinationId); cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); return; } if (Jump.Type == 3 && cclient.Plr.GldInterface.GetGuildLevel() < 6) { cclient.Plr.SendClientMessage("A Guild Rank of 6 is required to use this portal." + destinationId); cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); return; } if (Jump.Type >= 4 && Jump.Type <= 6) { #pragma warning disable CS0642 // Возможно, ошибочный пустой оператор if (!WorldMgr.InstanceMgr.ZoneIn(cclient.Plr, Jump.Type, Jump)) { ; } #pragma warning restore CS0642 // Возможно, ошибочный пустой оператор SendJumpFailed(cclient.Plr); return; } if (Jump.Enabled || cclient.Plr.GmLevel > 1) { cclient.Plr.Teleport(Jump.ZoneID, Jump.WorldX, Jump.WorldY, Jump.WorldZ, Jump.WorldO); } else { cclient.Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_PLAYER_REGION_NOT_AVAILABLE); SendJumpFailed(cclient.Plr); } }
public static void F_INIT_PLAYER(BaseClient client, PacketIn packet) { GameClient cclient = (GameClient)client; Player Plr = cclient.Plr; if (Plr == null) { return; } // clear all lockouts if they are expired InstanceService.ClearLockouts(Plr); if (!Plr.IsInWorld()) // If the player is not on a map, then we add it to the map { ushort zoneId = Plr.Info.Value.ZoneId; ushort regionId = (ushort)Plr.Info.Value.RegionId; Zone_Info info = ZoneService.GetZone_Info(zoneId); if (info?.Type == 0) { RegionMgr region = WorldMgr.GetRegion(regionId, true); if (region.AddObject(Plr, zoneId, true)) { return; } } else if (info?.Type == 4 || info?.Type == 5 || info?.Type == 6) // login into a instance results in teleport outside { if (InstanceService._InstanceInfo.TryGetValue(zoneId, out Instance_Info II)) { Zone_jump ExitJump = null; if (Plr.Realm == Realms.REALMS_REALM_ORDER) { ExitJump = ZoneService.GetZoneJump(II.OrderExitZoneJumpID); } else if (Plr.Realm == Realms.REALMS_REALM_DESTRUCTION) { ExitJump = ZoneService.GetZoneJump(II.DestrExitZoneJumpID); } if (ExitJump == null) { Log.Error("Exit Jump in Instance", " " + zoneId + " missing!"); } else { Plr.Teleport(ExitJump.ZoneID, ExitJump.WorldX, ExitJump.WorldY, ExitJump.WorldZ, ExitJump.WorldO); } } return; } // Warp a player to their bind point if they attempt to load into a scenario map. RallyPoint rallyPoint = RallyPointService.GetRallyPoint(Plr.Info.Value.RallyPoint); if (rallyPoint != null) { Plr.Teleport(rallyPoint.ZoneID, rallyPoint.WorldX, rallyPoint.WorldY, rallyPoint.WorldZ, rallyPoint.WorldO); } else { CharacterInfo cInfo = CharMgr.GetCharacterInfo(Plr.Info.Career); Plr.Teleport(cInfo.ZoneId, (uint)cInfo.WorldX, (uint)cInfo.WorldY, (ushort)cInfo.WorldZ, (ushort)cInfo.WorldO); } } else { Plr.Loaded = false; Plr.StartInit(); } }
public bool ZoneIn(Player player, byte instancetyp, Zone_jump Jump = null) { // jump type 4 = realm 5 = raid 6 = group instances ushort zoneID; if (Jump == null) { zoneID = player.Info.Value.ZoneId; } else { zoneID = Jump.ZoneID; } Instance_Info II; InstanceService._InstanceInfo.TryGetValue(zoneID, out II); ushort InstanceMainID = II.Entry; ushort instanceid = 0; // Group Raid Instance if (instancetyp == 5) { _maxplayers = 24; } // instance handling lock (_instances) { foreach (KeyValuePair <ushort, Instance> ii in _instances) { if (ii.Value.ZoneID == zoneID) { // solo if (player.PriorityGroup == null) { // enter if instance with name found if (ii.Value.Players.Contains(player)) { instanceid = ii.Key; // enter break; } else // create new instance if not { instanceid = 0; // create new instance break; } } else // group { // player == leader if (player == player.PriorityGroup.GetLeader()) { // instance found with leaders name in it if (ii.Value.Players.Contains(player.PriorityGroup.GetLeader())) { instanceid = ii.Key; // enter break; } else // create new instance if not { instanceid = 0; // create new instance break; } } else { // instance found with leaders name in it if (ii.Value.Players.Contains(player.PriorityGroup.GetLeader())) { if (ii.Value.Players.Contains(player)) { instanceid = ii.Key; // enter break; } else { if (ii.Value.Players.Count < _maxplayers) { instanceid = ii.Key; // enter break; } else { player.SendClientMessage("This instance is already full. Please find another group or switch the group leader to open a new instance.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); return(false); } } } else { continue; } } } } } } if (instanceid == 0 && Jump == null) { return(false); } // create new instance if (instanceid == 0) { instanceid = Create_new_instance(player, Jump); } if (!Join_Instance(player, instanceid, Jump, InstanceMainID)) { return(false); } return(true); }
public bool ZoneIn(Player player, byte instancetyp, Zone_jump Jump = null) { // jump type 4 = realm 5 = raid 6= group instances Instance ints = null; ushort zoneID; if (Jump == null) { zoneID = player.Info.Value.ZoneId; } else { zoneID = Jump.ZoneID; } Instance_Info II; InstanceService._InstanceInfo.TryGetValue(zoneID, out II); ushort InstanceMainID = II.Entry; ushort instanceid = 0; byte maxplayers = 0; if (instancetyp == 4) // Realm instance { if (Jump == null && (player._Value.DisconcetTime == 0 || (player._Value.DisconcetTime + 600) < TCPManager.GetTimeStamp())) { return(false); } if (player.Realm == GameData.Realms.REALMS_REALM_DESTRUCTION) { realminstancesdestro.TryGetValue(zoneID, out instanceid); } else { realminstancesorder.TryGetValue(zoneID, out instanceid); } if (instanceid == 0) { lock (_instances) { for (ushort i = 1; i < ushort.MaxValue; i++) { if (!_instances.ContainsKey(i)) { if (player.Realm == GameData.Realms.REALMS_REALM_DESTRUCTION) { realminstancesdestro.Add(zoneID, i); } else { realminstancesorder.Add(zoneID, i); } ints = new Instance(zoneID, i, (byte)player.Realm, null); _instances.Add(i, ints); instanceid = i; break; } } } } } else // Group Raid Instance { maxplayers = 6; if (instancetyp == 5) { maxplayers = 24; } String plrlockout = player._Value.GetLockout(InstanceMainID); if (player.PriorityGroup != null && player.PriorityGroup.GetLeader() != player) { instanceid = Find_OpenInstanceoftheplayer(player.PriorityGroup.GetLeader(), zoneID); } else { instanceid = Find_OpenInstanceoftheplayer(player, zoneID); } } if (instanceid == 0 && Jump == null) { return(false); } if (instanceid == 0 && (player.PriorityGroup == null || player.PriorityGroup.GetLeader() == player)) { instanceid = Create_new_instance(player, Jump); } if (instanceid == 0) { player.SendClientMessage("Your Groupleader needs to enter first", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); return(false); } if (!Join_Instance(player, instanceid, Jump, maxplayers, InstanceMainID)) { return(false); } return(true); }