public static void CheckPlayerLevelUp(PacketHitList hitList, Client client) { PacketHitList.MethodStart(ref hitList); if (client.Player.GetActiveRecruit().Exp > client.Player.GetActiveRecruit().GetNextLevel()) { if (client.Player.GetActiveRecruit().Level < Exp.ExpManager.Exp.MaxLevels) { Scripting.ScriptManager.InvokeSub("PlayerLevelUp", hitList, client); hitList.AddPacketToMap(client.Player.Map, TcpPacket.CreatePacket("levelup", client.ConnectionID.ToString())); //Messenger.SendDataToMap(client.Player.MapID, TcpPacket.CreatePacket("levelup", client.ConnectionID.ToString())); } if (client.Player.GetActiveRecruit().Level >= Exp.ExpManager.Exp.MaxLevels) { client.Player.GetActiveRecruit().Level = Exp.ExpManager.Exp.MaxLevels; client.Player.GetActiveRecruit().Exp = ExpManager.Exp[Exp.ExpManager.Exp.MaxLevels - 1]; } } else { PacketBuilder.AppendEXP(client, hitList); //Messenger.SendEXP(client); } PacketHitList.MethodEnded(ref hitList); //Messenger.SendActiveTeam(index); //Messenger.SendHP(index); //Messenger.SendStats(index); //Messenger.BattleMsg(index, "You.", Text.BrightBlue); }
private static void InvDrop(ICharacter character, IMap map, PacketHitList hitlist) { PacketHitList.MethodStart(ref hitlist); if (HasAbility(character, "Sticky Hold")) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " held on to its item with Sticky Hold!", Text.WhiteSmoke), character.X, character.Y, 10); } else { if (character.CharacterType == Enums.CharacterType.Recruit) { Client client = ((Recruit)character).Owner; if (client.Player.GetActiveRecruit().HeldItemSlot > -1) { client.Player.DropItem(client.Player.GetActiveRecruit().HeldItemSlot, client.Player.GetActiveRecruit().HeldItem.Amount, client); } PacketBuilder.AppendInventory(client, hitlist); } else if (character.CharacterType == Enums.CharacterType.MapNpc) { MapNpc npc = character as MapNpc; if (npc.HeldItem != null && !npc.HeldItem.Sticky) { npc.MapDropItem(npc.HeldItem.Amount, null); } } } PacketHitList.MethodEnded(ref hitlist); }
private static void HealCharacterBelly(ICharacter character, int belly, PacketHitList hitlist) { if (character.CharacterType == Enums.CharacterType.Recruit) { Recruit recruit = character as Recruit; recruit.Belly += belly; if (recruit.Belly >= recruit.MaxBelly) { recruit.Belly = recruit.MaxBelly; if (belly > 10) { hitlist.AddPacketToMap(recruit.Owner.Player.Map, PacketBuilder.CreateBattleMsg(character.Name + "'s belly was filled completely.", Text.BrightGreen), character.X, character.Y, 10); } } else { if (belly > 10) { hitlist.AddPacketToMap(recruit.Owner.Player.Map, PacketBuilder.CreateBattleMsg(character.Name + "'s belly was filled somewhat.", Text.BrightGreen), character.X, character.Y, 10); } } PacketBuilder.AppendBelly(((Recruit)character).Owner, hitlist); } }
private static void DamageCharacter(ICharacter character, IMap map, int dmg, Enums.KillType killType, PacketHitList hitlist, bool checkDeath) { int point = 0; try { character.HP -= dmg; if (dmg <= 0) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took no damage!", Text.BrightRed), character.X, character.Y, 10); //BothWaysBattleMsg(setup, setup.Defender.Name + " took no damage!", Text.BrightRed); } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took " + dmg + " damage!", Text.BrightRed), character.X, character.Y, 10); //BothWaysBattleMsg(setup, setup.Defender.Name + " took " + damage + " damage!", Text.BrightRed); } point = 1; if (checkDeath && character.HP <= 0) { if (character.CharacterType == Enums.CharacterType.Recruit) { point = 2; hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Oh, no! " + character.Name + " fainted!", Text.BrightRed)); point = 3; OnDeath(((Recruit)character).Owner, Enums.KillType.Other); point = 4; } else { if (character.HeldItem != null) { character.MapDropItem(character.HeldItem.Amount, null); } OnNpcDeath(hitlist, null, (MapNpc)character); //((MapNpc)character).Num = 0; //((MapNpc)character).HP = 0; map.ActiveNpc[((MapNpc)character).MapSlot] = new MapNpc(character.MapID, ((MapNpc)character).MapSlot); hitlist.AddPacketToMap(map, TcpPacket.CreatePacket("npcdead", ((MapNpc)character).MapSlot)); } } } catch(Exception ex) { Messenger.AdminMsg("Error: DamageCharacter", Text.Black); Messenger.AdminMsg(ex.ToString(), Text.Black); Messenger.AdminMsg(character.Name + " took " + dmg + " dmg at " + map.Name + " from " + killType + " with checkDeath=" + checkDeath + " and point=" + point, Text.Black); throw new Exception(); } }
public static void OnNpcDeath(PacketHitList hitlist, ICharacter attacker, MapNpc npc) { try { // Called when a npc faints PacketHitList.MethodStart(ref hitlist); hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateBattleMsg(npc.Name + " fainted!", Text.WhiteSmoke), npc.X, npc.Y, 10); //aftermath if (HasAbility(npc, "Aftermath")) { bool explode = true; if (!HasAbility(npc, "Mold Breaker")) { TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, MapManager.RetrieveActiveMap(npc.MapID), null, 0, 0, Enums.Direction.Up, true, true, false); for (int i = 0; i < checkedTargets.Count; i++) { if (HasAbility(checkedTargets[i], "Damp")) { explode = false; } } } if (explode) { hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateBattleMsg(npc.Name + " exploded!", Text.BrightRed), npc.X, npc.Y, 10); hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateSoundPacket("magic216.wav"), npc.X, npc.Y, 10); for (int i = npc.X - 1; i <= npc.X + 1; i++) { for (int j = npc.Y - 1; j <= npc.Y + 1; j++) { if (i < 0 || j < 0 || i > MapManager.RetrieveActiveMap(npc.MapID).MaxX || j > MapManager.RetrieveActiveMap(npc.MapID).MaxY) { } else { hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateSpellAnim(497, i, j)); } } } TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 1, MapManager.RetrieveActiveMap(npc.MapID), npc, npc.X, npc.Y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { if (MapManager.RetrieveActiveMap(npc.MapID).Moral == Enums.MapMoral.None) { if (targets[i].HP > 0) { if (HasActiveBagItem(targets[i], 6, 0, 0)) { DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 1, Enums.KillType.Tile, hitlist, true); } else { DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP / 4, Enums.KillType.Tile, hitlist, true); } } } } } else { hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateSoundPacket("magic320.wav"), npc.X, npc.Y, 10); hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateSpellAnim(505, npc.X, npc.Y)); hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateBattleMsg("The damp conditions prevented an explosion!", Text.Blue), npc.X, npc.Y, 10); } } //death flag TargetCollection witnesses = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, MapManager.RetrieveActiveMap(npc.MapID), npc, 0, 0, Enums.Direction.Up, false, true, false); for (int i = 0; i < witnesses.Count; i++) { AddExtraStatus(witnesses[i], MapManager.RetrieveActiveMap(npc.MapID), "SawAllyFaint", 0, null, "", hitlist); } RemoveAllBondedExtraStatus(npc, MapManager.RetrieveActiveMap(npc.MapID), hitlist, false); IMap map = MapManager.RetrieveActiveMap(npc.MapID); Client client = null; foreach (Client n in map.GetClients()) { client = n; break; } if (client != null) { bool doBossCheck = false; switch (npc.Num) { /* case 276: case 277: case 278: { //Dynamo Trio map.RemoveNpc(npc.MapSlot); if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3)) { map.Tile[9, 1].Mask = 96; map.Tile[9, 1].MaskSet = 4; map.Tile[9, 1].Type = Enums.TileType.Scripted; map.Tile[9, 1].Data1 = 46; map.Tile[9, 1].Data2 = 0; map.Tile[9, 1].Data3 = 0; map.Tile[9, 1].String1 = "19"; map.Tile[9, 1].String2 = "1"; map.Tile[9, 1].String3 = "10:7"; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(9, 1, map)); } } break; */ case 304: {//registeel map.RemoveNpc(npc.MapSlot); if (map.IsNpcSlotEmpty(5)) { BossBattles.EndRegisteelBattle(client); } } break;/* case 305: {//bronzong map.RemoveNpc(npc.MapSlot); if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && (npc.MapSlot == 1 || npc.MapSlot == 2)) { if (client.Player.GetStoryState(43) == true) { client.Player.SetStoryState(43, false); } StoryManager.PlayStory(client, 43); } else if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4)) { if (client.Player.GetStoryState(56) == true) { client.Player.SetStoryState(56, false); } StoryManager.PlayStory(client, 56); } } break;*/ case 220: {//Murkrow minions 2.0 if (map.IsNpcSlotEmpty(14)) { map.RemoveNpc(npc.MapSlot); } for (int i = 1; i < 14; i++) { if (map.IsNpcSlotEmpty(i) == false) { return; } } StoryManager.PlayStory(client, 160); } break; case 221: {//Honchkrow map.RemoveNpc(npc.MapSlot); for (int i = 1; i < 14; i++) { if (map.IsNpcSlotEmpty(i) == false) { map.RemoveNpc(i); } } StoryManager.PlayStory(client, 161); } break; case 224: {//Murkrow minions map.RemoveNpc(npc.MapSlot); for (int i = 1; i < 14; i++) { if (map.IsNpcSlotEmpty(i) == false) { return; } } StoryManager.PlayStory(client, 160); } break; case 259: case 306: { if (map.Name == "Iceberg Cave") { map.RemoveNpc(npc.MapSlot); if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3)) { BossBattles.EndRegiceBattle(client); } } } break; //case 177: { // map.RemoveNpc(npc.MapSlot); // if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4) && // map.IsNpcSlotEmpty(5) && map.IsNpcSlotEmpty(6) && map.IsNpcSlotEmpty(7)) { // BossBattles.RemoveLuxioTribe(client); // } //} //break; case 167: { //map.RemoveNpc(npc.MapSlot); //if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4) && //map.IsNpcSlotEmpty(5) && map.IsNpcSlotEmpty(6) && map.IsNpcSlotEmpty(7)) { // BossBattles.RemoveLuxioTribe(client); //} } break; /* case 465: { map.RemoveNpc(1); map.Tile[9, 4].Type = Enums.TileType.Scripted; map.Tile[9, 4].Data1 = 46; map.Tile[9, 4].Data2 = 0; map.Tile[9, 4].Data3 = 0; map.Tile[9, 4].String1 = "15"; map.Tile[9, 4].String2 = "93"; map.Tile[9, 4].String3 = "8:10"; map.Tile[9, 4].Mask = 96; map.Tile[9, 4].MaskSet = 4; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(9, 4, map)); } break; */ //case 212: {//fake Gengar (adjust for the actual NPC number) // if (map.MapType == Enums.MapType.RDungeonMap) { // int num = (map as RDungeonMap).RDungeonIndex; // if ((num + 1) == 20) { // StoryManager.PlayStory(client, 287); // StoryManager.PlayStory(client, 288); // StoryManager.PlayStory(client, 289); // StoryManager.PlayStory(client, 286); // StoryManager.PlayStory(client, 290); // StoryManager.PlayStory(client, 291); // StoryManager.PlayStory(client, 292); // } // } // } // break; //case 804: {//real gengar defeated // map.RemoveNpc(npc.MapSlot); // for (int i = 2; i <= 3; i++) { // if (map.IsNpcSlotEmpty(i) == false) { // map.RemoveNpc(i); // } // } // map.SetAttribute(8, 4, Enums.TileType.Scripted, 36, 0, 0, "19", "1", ""); // map.SetAttribute(9, 10, Enums.TileType.Scripted, 13, 0, 0, "", "", ""); // map.SetAttribute(10, 10, Enums.TileType.Scripted, 13, 0, 0, "", "", ""); // map.SetAttribute(8, 5, Enums.TileType.Walkable, 0, 0, 0, "", "", ""); // map.SetAttribute(13, 6, Enums.TileType.Notice, 0, 0, 0, "You hesitate...", "It's probably a good idea not to sleep here again...", ""); // StoryManager.PlayStory(client, 285); // } // break; //case 806: //case 807: {//rotom forms // map.RemoveNpc(npc.MapSlot); // map.SetAttribute(9, 10, Enums.TileType.Scripted, 13, 0, 0, "", "", ""); // map.SetAttribute(10, 10, Enums.TileType.Scripted, 13, 0, 0, "", "", ""); // Messenger.PlayerMsg(client, "The exit was opened!", Text.Yellow); // } // break; case 805: {//spiritomb defeated map.RemoveNpc(npc.MapSlot); map.SetAttribute(9, 2, Enums.TileType.Scripted, 36, 0, 0, "21", "30", ""); map.SetTile(9, 2, 96, 4, 1); StoryManager.PlayStory(client, 303); } break; /* case 440: {//Articuno* map.RemoveNpc(1); map.SetTile(12, 5, 96, 4, 1); map.SetAttribute(12, 5, Enums.TileType.Scripted, 46, 0, 0, "20", "342", "13:13"); StoryManager.PlayStory(client, 171); } break; */ case 404: {//Heatran map.RemoveNpc(1); map.SetTile(10, 6, 96, 4, 3); map.SetAttribute(10, 6, Enums.TileType.Scripted, 46, 0, 0, "18", "1313", "12:12"); //NetScript.PlayStory(index, 171); } break; case 579: case 558: case 559: case 560: case 571: case 572: case 854: case 855: case 856: case 857: case 858: case 859: case 860: case 861: case 862: case 863: { //normal PBA enemies + boss if (map.Name == "Pitch-Black Pit") { int remainingEnemies = 0; for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) { if (!map.IsNpcSlotEmpty(i)) remainingEnemies++; } if (remainingEnemies <= 1) { BossBattles.EndBossBattle(client, "Pitch-Black Pit"); } } else PitchBlackAbyss.UnlockRoom(client, map); } break; case 139: { BossBattles.EndBossBattle(client, "ThunderstormForest"); } break; case 177: { BossBattles.EndBossBattle(client, "ThunderstormForestPart2"); } break; /* case 588: case 587: { // EST Boss A Wave 1 if (map.Name == "Electrostasis Tower Chamber") { map.RemoveNpc(npc.MapSlot); if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4) && (npc.MapSlot == 1 || npc.MapSlot == 2 || npc.MapSlot == 3 || npc.MapSlot == 4)) { map.SetTile(4, 12, 0, 0, 1); map.SetAttribute(4, 12, Enums.TileType.Walkable, 0, 0, 0, "", "", ""); map.SetAttribute(9, 12, Enums.TileType.Story, 201, 0, 0, "", "", ""); hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(4, 12, map)); hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(9, 12, map)); } else if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4) && map.IsNpcSlotEmpty(5) && map.IsNpcSlotEmpty(6) && map.IsNpcSlotEmpty(7) && (npc.MapSlot == 5 || npc.MapSlot == 6 || npc.MapSlot == 7)) { BossBattles.EndBossBattle(client, "ElectrostasisTowerA1"); } } } break; */ case 963: {// Joey, Exbel Woods Clearing int recruitIndex = -1; using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players)) { recruitIndex = client.Player.AddToRecruitmentBank(dbConnection, client.Player.CreateRecruitFromNpc(npc)); } int openSlot = client.Player.FindOpenTeamSlot(); if (recruitIndex != -1 && openSlot != -1) { client.Player.AddToTeam(recruitIndex, openSlot); client.Player.Team[openSlot].HP = client.Player.Team[openSlot].MaxHP; Messenger.BattleMsg(client, "You have recruited a new team member!", Text.BrightGreen); Messenger.SendActiveTeam(client); } else { Messenger.BattleMsg(client, "You cant recruit! You have too many team members in the assembly!", Text.BrightRed); } doBossCheck = true; } break; default: { doBossCheck = true; } break; } if (doBossCheck) { if (BossBattles.IsBossBattleMap(client)) { int remainingEnemies = 0; for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) { if (!map.IsNpcSlotEmpty(i)) remainingEnemies++; } //Messenger.AdminMsg(remainingEnemies.ToString(), Text.Black); if (remainingEnemies <= 1) BossBattles.EndBossBattle(client, map.Name); } } } PacketHitList.MethodEnded(ref hitlist); } catch (Exception ex) { Messenger.AdminMsg("Error: OnNpcDeath", Text.Black); Messenger.AdminMsg("NPCNum: " + npc.Num, Text.Black); } }
public static void AppendPlayerDir(Client client, PacketHitList hitlist) { hitlist.AddPacketToMap(client.Player.Map, CreatePlayerDir(client)); }
public static void AddMapStatus(IMap map, string name, int counter, string tag, int graphicEffect, bool msg, PacketHitList hitlist) { if (map.TempStatus.GetStatus(name) == null) { map.TempStatus.Add(new MapStatus(name, counter, tag, graphicEffect)); if (msg) { switch (name) { case "TrickRoom": { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The floor's dimensions were twisted!", Text.BrightBlue)); } break; case "Gravity": { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The floor's gravity intensified!", Text.BrightBlue)); TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, 0, 0, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { DropToGround(targets[i], map, hitlist, false); } } break; case "WonderRoom": { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All physical and special attacks changed properties!", Text.BrightBlue)); } break; case "MagicRoom": { TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, 0, 0, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { targets[i].RefreshActiveItemList(); } hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All items lost their effects!", Text.BrightBlue)); } break; case "Luminous": { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The entire floor was illuminated!", Text.BrightBlue)); } break; } } RefreshMapTraits(map, hitlist); } }
//only for active recruits public static void SetStatusAilment(ICharacter character, ICharacter attacker, IMap map, Enums.StatusAilment statusAilment, int counter, PacketHitList hitlist) { PacketHitList.MethodStart(ref hitlist); //Check against status protection if (CheckStatusProtection(character, attacker, map, statusAilment.ToString() + ":" + counter, true, hitlist)) { PacketHitList.MethodEnded(ref hitlist); return; } switch (statusAilment) { case Enums.StatusAilment.OK: { switch (character.StatusAilment) { case Enums.StatusAilment.Burn: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " recovered from the burn!", Text.BrightCyan), character.X, character.Y, 10); } break; case Enums.StatusAilment.Freeze: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " thawed out!", Text.BrightCyan), character.X, character.Y, 10); } break; case Enums.StatusAilment.Paralyze: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " recovered from paralysis!", Text.BrightCyan), character.X, character.Y, 10); } break; case Enums.StatusAilment.Poison: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " recovered from the poisoning!", Text.BrightCyan), character.X, character.Y, 10); } break; case Enums.StatusAilment.Sleep: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " woke up!", Text.BrightCyan), character.X, character.Y, 10); } break; } character.StatusAilment = Enums.StatusAilment.OK; character.StatusAilmentCounter = 0; } break; case Enums.StatusAilment.Burn: { character.StatusAilment = Enums.StatusAilment.Burn; hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " sustained a burn!", Text.BrightRed), character.X, character.Y, 10); } break; case Enums.StatusAilment.Freeze: { character.StatusAilment = Enums.StatusAilment.Freeze; hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was frozen solid!", Text.BrightRed), character.X, character.Y, 10); } break; case Enums.StatusAilment.Paralyze: { character.StatusAilment = Enums.StatusAilment.Paralyze; hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became paralyzed!", Text.BrightRed), character.X, character.Y, 10); } break; case Enums.StatusAilment.Poison: { if (counter > 1) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was badly poisoned!", Text.BrightRed), character.X, character.Y, 10); } else if (counter == 1) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was poisoned!", Text.BrightRed), character.X, character.Y, 10); } character.StatusAilment = Enums.StatusAilment.Poison; character.StatusAilmentCounter = counter; } break; case Enums.StatusAilment.Sleep: { character.StatusAilment = Enums.StatusAilment.Sleep; character.StatusAilmentCounter = counter; hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " fell asleep!", Text.BrightRed), character.X, character.Y, 10); } break; } if (character.VolatileStatus.GetStatus("Yawn") != null) { RemoveExtraStatus(character, map, "Yawn", hitlist); } if (character.CharacterType == Enums.CharacterType.Recruit) { PacketBuilder.AppendStatusAilment(((Recruit)character).Owner, hitlist); } else { PacketBuilder.AppendNpcStatusAilment((MapNpc)character, hitlist); } RefreshCharacterTraits(character, map, hitlist); if (attacker != null && statusAilment != Enums.StatusAilment.OK) { if (HasAbility(character, "Synchronize")) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Synchronize shared the status problem!", Text.BrightRed), character.X, character.Y, 10); SetStatusAilment(attacker, map, statusAilment, counter, hitlist); } } PacketHitList.MethodEnded(ref hitlist); }
public static void RevealTrap(IMap map, int x, int y, PacketHitList hitlist) { PacketHitList.MethodStart(ref hitlist); map.Tile[x, y].Data2++; if (map.Tile[x, y].Data3 == 1) {//fake stairs hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("It's not a stairway! It's a trap!", Text.BrightRed), x, y, 10); } switch (map.Tile[x, y].Data1) { case 2: {//EXPLOSIONNNNN map.Tile[x, y].Mask2 = 3995; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 3: {//chestnut map.Tile[x, y].Mask2 = 3997; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 4: {//ppzero map.Tile[x, y].Mask2 = 4000; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 5: {//grimy map.Tile[x, y].Mask2 = 3999; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 6: {//poison map.Tile[x, y].Mask2 = 3993; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 7: {//random map.Tile[x, y].Mask2 = 4011; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 15: {//warp map.Tile[x, y].Mask2 = 3; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 16: {//pokemon map.Tile[x, y].Mask2 = 4007; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 17: {//spikes map.Tile[x, y].Mask2 = 4009; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 18: {//toxic spikes map.Tile[x, y].Mask2 = 4008; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 19: {//stealth rock map.Tile[x, y].Mask2 = 4010; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 23: {//sticky map.Tile[x, y].Mask2 = 3998; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 25: {//mud map.Tile[x, y].Mask2 = 3991; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 26: {//wonder tile map.Tile[x, y].Mask2 = 4; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 28: {//trip map.Tile[x, y].Mask2 = 4005; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 34: {//secret (Stairs, etc) map.Tile[x, y].Mask2 = 0; map.Tile[x, y].Mask2Set = 0; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 39: {//pitfall map.Tile[x, y].Mask2 = 3996; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 42: {//seal map.Tile[x, y].Mask2 = 4004; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 43: {//slow map.Tile[x, y].Mask2 = 4006; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 44: {//spin map.Tile[x, y].Mask2 = 4001; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 49: {//summon map.Tile[x, y].Mask2 = 4003; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 50: {//grudge map.Tile[x, y].Mask2 = 4012; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 51: {//selfdestruct map.Tile[x, y].Mask2 = 3994; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 52: {//slumber map.Tile[x, y].Mask2 = 3990; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 53: {//gust map.Tile[x, y].Mask2 = 3992; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; case 70: {//shocker map.Tile[x, y].Mask2 = 3976; map.Tile[x, y].Mask2Set = 4; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } break; } PacketHitList.MethodEnded(ref hitlist); }
public static void RemoveTrap(IMap map, int x, int y, PacketHitList hitlist) { PacketHitList.MethodStart(ref hitlist); map.Tile[x, y].Type = Enums.TileType.Walkable; map.Tile[x, y].Data1 = 0; map.Tile[x, y].Data2 = 0; map.Tile[x, y].Data3 = 0; map.Tile[x, y].String1 = ""; map.Tile[x, y].String2 = ""; map.Tile[x, y].String3 = ""; map.Tile[x, y].Mask2 = 0; map.Tile[x, y].Mask2Set = 0; map.TempChange = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); PacketHitList.MethodEnded(ref hitlist); }
public static void RandomWarp(ICharacter character, IMap warpMap, bool msg, PacketHitList hitlist, int startX, int endX, int startY, int endY) { if (HasAbility(character, "Suction Cups")) { if (msg) { hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + "'s Suction Cups prevented it from being warped!", Text.WhiteSmoke), character.X, character.Y, 10); } } else if (character.HasActiveItem(111)) { if (msg) { hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + "'s Iron Ball prevented it from being warped!", Text.WhiteSmoke), character.X, character.Y, 10); } } else { PacketHitList.MethodStart(ref hitlist); if (startX < 0) startX = 0; if (startX > warpMap.MaxX) startX = warpMap.MaxX; if (endX < 0) endX = 0; if (endX > warpMap.MaxX) endX = warpMap.MaxX; if (startY < 0) startY = 0; if (startY > warpMap.MaxY) startY = warpMap.MaxY; if (endY < 0) endY = 0; if (endY > warpMap.MaxY) endY = warpMap.MaxY; int x, y; FindFreeTile(warpMap, startX, startY, endX, endY, out x, out y); if (x == -1) { if (msg) { hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + " didn't warp.", Text.BrightRed), character.X, character.Y, 10); } } else { PointWarp(character, warpMap, hitlist, x, y); } PacketHitList.MethodEnded(ref hitlist); } }
public static void Pounce(ICharacter character, IMap map, Enums.Direction dir, bool checkAllies, bool checkFoes, PacketHitList hitlist) { WarpToNearestWallOrChar(character, map, dir, checkAllies, checkFoes, hitlist); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " went flying forward!", Text.WhiteSmoke), character.X, character.Y, 10); }
public static void PointWarp(ICharacter character, IMap warpMap, PacketHitList hitlist, int X, int Y, bool msg) { if (HasAbility(character, "Suction Cups")) { if (msg) { hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + "'s Suction Cups prevented it from being warped!", Text.WhiteSmoke), character.X, character.Y, 10); } } else if (character.HasActiveItem(111)) { if (msg) { hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + "'s Iron Ball prevented it from being warped!", Text.WhiteSmoke), character.X, character.Y, 10); } } else { PacketHitList.MethodStart(ref hitlist); if (msg) { hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + " warped!", Text.WhiteSmoke), character.X, character.Y, 10); } character.X = X; character.Y = Y; if (character.CharacterType == Enums.CharacterType.Recruit) { PacketBuilder.AppendPlayerXY(((Recruit)character).Owner, hitlist); } else if (character.CharacterType == Enums.CharacterType.MapNpc) { PacketBuilder.AppendNpcXY(warpMap, hitlist, ((MapNpc)character).MapSlot); } PacketHitList.MethodEnded(ref hitlist); } }
public static void OnStep(IMap map, ICharacter character, Enums.Speed speed, PacketHitList hitlist) { try { ExtraStatus status; PacketHitList.MethodStart(ref hitlist); if (speed != Enums.Speed.Slip) { int stepCounter; if (character.CharacterType == Enums.CharacterType.Recruit) { ((Recruit)character).Owner.Player.HPStepCounter++; if (((Recruit)character).Owner.Player.Map.HungerEnabled) { if (character.HasActiveItem(151)) { ((Recruit)character).Owner.Player.BellyStepCounter += 5; } else if (character.HasActiveItem(152)) { //nothing } else if (character.HasActiveItem(162)) { ((Recruit)character).Owner.Player.BellyStepCounter += 20; } else { ((Recruit)character).Owner.Player.BellyStepCounter += 10; } if (HasAbility(character, "Gluttony")) { ((Recruit)character).Owner.Player.BellyStepCounter += 10; } } stepCounter = ((Recruit)character).Owner.Player.HPStepCounter; ElectrostasisTower.OnPlayerStep(((Recruit)character).Owner); if (stepCounter % 5 == 0) { if (map.MapID == MapManager.GenerateMapID(737)) { bool hasBeenWelcomed = ((Recruit)character).Owner.Player.StoryHelper.ReadSetting("[Gameplay]-HasBeenWelcomed").ToBool(); if (!hasBeenWelcomed) { hitlist.AddPacketToMap(map, PacketBuilder.CreateChatMsg(((Recruit)character).Owner.Player.Name + " is new to " + Settings.GameNameShort + "! Welcome!", Text.BrightGreen)); ((Recruit)character).Owner.Player.StoryHelper.SaveSetting("[Gameplay]-HasBeenWelcomed", "True"); } } } } else { ((MapNpc)character).HPStepCounter++; stepCounter = ((MapNpc)character).HPStepCounter; } if (MapManager.IsMapActive(character.MapID)) { RemoveExtraStatus(character, map, "Roost", hitlist); RemoveExtraStatus(character, map, "Endure", hitlist); RemoveExtraStatus(character, map, "DestinyBond", hitlist); status = character.VolatileStatus.GetStatus("Rage"); if (status != null) { status.Counter--; if (status.Counter <= 0) { RemoveExtraStatus(character, map, "Rage", hitlist); } } status = character.VolatileStatus.GetStatus("MetalBurst"); if (status != null) { status.Counter--; if (status.Counter <= 0) { RemoveExtraStatus(character, map, "MetalBurst", hitlist); } } //if (character.VolatileStatus.GetStatus("Taunt") != null) { // character.VolatileStatus.GetStatus("Taunt").Counter--; // if (character.VolatileStatus.GetStatus("Taunt").Counter <= 0) { // RemoveExtraStatus(character, map, "Taunt", hitlist); // } //} Tile steppedTile = map.Tile[character.X, character.Y]; if (steppedTile.Type == Enums.TileType.MobileBlock) { if (steppedTile.Data1 % 32 >= 16) { if (character.CharacterType == Enums.CharacterType.Recruit) { if (((Recruit)character).Owner.Player.Map.HungerEnabled && character.VolatileStatus.GetStatus("SuperMobile") == null) { ((Recruit)character).Owner.Player.BellyStepCounter += 400; } } } else if (steppedTile.Data1 % 4 >= 2) { if (steppedTile.String1 == "1") { if (!CheckStatusProtection(character, map, Enums.StatusAilment.Burn.ToString(), false, hitlist)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water's boiling hot!", Text.BrightRed), character.X, character.Y, 10); SetStatusAilment(character, map, Enums.StatusAilment.Burn, 0, hitlist); } } else if (steppedTile.String1 == "2") { if (!CheckStatusProtection(character, map, Enums.StatusAilment.Freeze.ToString(), false, hitlist)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water's freezing cold!", Text.BrightRed), character.X, character.Y, 10); SetStatusAilment(character, map, Enums.StatusAilment.Freeze, 0, hitlist); } } else if (steppedTile.String1 == "3") { if (!CheckStatusProtection(character, map, Enums.StatusAilment.Paralyze.ToString(), false, hitlist)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water is numbing!", Text.BrightRed), character.X, character.Y, 10); SetStatusAilment(character, map, Enums.StatusAilment.Paralyze, 0, hitlist); } } else if (steppedTile.String1 == "4") { if (!CheckStatusProtection(character, map, Enums.StatusAilment.Poison.ToString(), false, hitlist)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water's poisoned!", Text.BrightRed), character.X, character.Y, 10); SetStatusAilment(character, map, Enums.StatusAilment.Poison, 1, hitlist); } } else if (steppedTile.String1 == "5") { if (!CheckStatusProtection(character, map, Enums.StatusAilment.Sleep.ToString(), false, hitlist)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water is oddly calming...", Text.BrightRed), character.X, character.Y, 10); SetStatusAilment(character, map, Enums.StatusAilment.Sleep, 3, hitlist); } } else if (character.StatusAilment == Enums.StatusAilment.Burn && !CheckStatusProtection(character, map, Enums.StatusAilment.OK.ToString(), false, hitlist)) { SetStatusAilment(character, map, Enums.StatusAilment.OK, 0, hitlist); } } else if (steppedTile.Data1 % 16 >= 8 && !character.HasActiveItem(805) && !CheckStatusProtection(character, map, Enums.StatusAilment.Burn.ToString(), false, hitlist)) { SetStatusAilment(character, map, Enums.StatusAilment.Burn, 0, hitlist); } } } if (stepCounter % 5 == 0) { if (character.HasActiveItem(344) && map.MapType == Enums.MapType.RDungeonMap && Server.Math.Rand(0, 3) == 0) { RandomWarp(character, map, false, hitlist); } int newHP = character.HP; //subtract weather damage, sticky items if (stepCounter % 10 == 0) { //Overcoat bool overcoat = false; TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 10, map, character, character.X, character.Y, Enums.Direction.Up, false, true, true); for (int i = 0; i < targets.Count; i++) { if (HasAbility(targets[i], "Overcoat") || HasActiveBagItem(character, 47, 0, 0)) { overcoat = true; break; } } switch (GetCharacterWeather(character)) { case (Enums.Weather.Hail): { if (HasAbility(character, "Ice Body") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) { newHP += 6; } if (HasAbility(character, "Snow Cloak")) { } else if (HasAbility(character, "Ice Body")) { } else if (HasAbility(character, "Magic Guard")) { } else if (character.Type1 == Enums.PokemonType.Ice || character.Type2 == Enums.PokemonType.Ice) { } else if (overcoat) { } else { newHP -= 6; } } break; case (Enums.Weather.Sandstorm): { if (HasAbility(character, "Magic Guard")) { } else if (HasAbility(character, "Sand Veil")) { } else if (HasAbility(character, "Sand Force")) { } else if (character.Type1 == Enums.PokemonType.Rock || character.Type2 == Enums.PokemonType.Rock) { } else if (character.Type1 == Enums.PokemonType.Ground || character.Type2 == Enums.PokemonType.Ground) { } else if (character.Type1 == Enums.PokemonType.Steel || character.Type2 == Enums.PokemonType.Steel) { } else if (overcoat) { } else { newHP -= 5; } } break; case (Enums.Weather.Sunny): { if (HasAbility(character, "Dry Skin") && !overcoat && !HasAbility(character, "Magic Guard")) { newHP -= 5; } if (HasAbility(character, "Solar Power") && !overcoat && !HasAbility(character, "Magic Guard")) { newHP -= 5; } } break; case (Enums.Weather.Thunder): case (Enums.Weather.Raining): { if (HasAbility(character, "Dry Skin") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) { newHP += 5; } if (HasAbility(character, "Rain Dish") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) { newHP += 5; } } break; } if (character.HasActiveItem(431)) { Sticky(character, map, hitlist); } } if (character.CharacterType == Enums.CharacterType.Recruit && ((Recruit)character).Belly <= 0) { newHP -= 5; hitlist.AddPacket(((Recruit)character).Owner, PacketBuilder.CreateSoundPacket("magic129.wav")); } //add HP based on natural healing int h = 0; if ((character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0) && character.StatusAilment != Enums.StatusAilment.Poison) { h += 100; } if (character.StatusAilment == Enums.StatusAilment.Poison) { if (HasAbility(character, "Poison Heal") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) { h += (200 * character.StatusAilmentCounter); } else if (HasAbility(character, "Magic Guard") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0) || (HasAbility(character, "Toxic Boost") && HasAbility(character, "Immunity"))) { } else { h -= (100 * character.StatusAilmentCounter); } } if (character.HasActiveItem(298) && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) {//heal ribbon h += 150; } if (HasActiveBagItem(character, 12, 0, 0) && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) {//heal ribbon h += 150; } if (character.HasActiveItem(154)) { if (character.Type1 == Enums.PokemonType.Poison || character.Type2 == Enums.PokemonType.Poison) { h += 50; } else { h -= 100; } } if (h != 0) { if (character.CharacterType == Enums.CharacterType.Recruit && character.HasActiveItem(298) && newHP < character.MaxHP && ((character.MaxHP + character.HPRemainder) * h / 4000) > 0) { if (((Recruit)character).Owner.Player.Map.HungerEnabled) { ((Recruit)character).Owner.Player.BellyStepCounter += 20; } } if (h > 0 && character.VolatileStatus.GetStatus("HealBlock") != null) { } else { newHP += ((character.MaxHP + character.HPRemainder) * h / 4000); } int newRemainder = ((character.MaxHP + character.HPRemainder) % 40); character.HPRemainder = newRemainder; } if (newHP > character.MaxHP) { newHP = character.MaxHP; } if (newHP != character.HP) { if (character.CharacterType == Enums.CharacterType.Recruit) { if (newHP <= 0) { hitlist.AddPacketToMap(map, PacketBuilder.CreateChatMsg("Oh, no! " + character.Name + " fainted!", Text.BrightRed)); OnDeath(((Recruit)character).Owner, Enums.KillType.Other); } else { ((Recruit)character).Owner.Player.SetHP(newHP); } } else { if (newHP <= 0) { OnNpcDeath(hitlist, null, (MapNpc)character); //((MapNpc)character).Num = 0; //((MapNpc)character).HP = 0; MapManager.RetrieveActiveMap(character.MapID).ActiveNpc[((MapNpc)character).MapSlot] = new MapNpc(character.MapID, ((MapNpc)character).MapSlot); hitlist.AddPacketToMap(map, TcpPacket.CreatePacket("npcdead", ((MapNpc)character).MapSlot)); } else { character.HP = newHP; } } } if ((character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0) && character.VolatileStatus.GetStatus("AquaRing") != null) { int heal = character.MaxHP / 32; if (heal < 1) heal = 1; hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s health is restored by Aqua Ring!", Text.BrightGreen), character.X, character.Y, 10); HealCharacter(character, map, heal, hitlist); } //if (character.VolatileStatus.GetStatus("LeechSeed:0") != null && !HasAbility(character, "Magic Guard")) { // int seeddmg = character.MaxHP / 32; // if (seeddmg < 1) seeddmg = 1; // int heal = 5; // if (character.VolatileStatus.GetStatus("LeechSeed:0").Target.HasActiveItem(194)) heal = 6; // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s health is sapped by Leech Seed!", Text.BrightRed), character.X, character.Y, 10); // DamageCharacter(character, map, seeddmg, Enums.KillType.Other, hitlist, true); // if (HasAbility(character, "Liquid Ooze")) { // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.VolatileStatus.GetStatus("LeechSeed:0").Target.Name + " sucked up the Liquid Ooze!", Text.BrightRed), character.X, character.Y, 10); // DamageCharacter(character.VolatileStatus.GetStatus("LeechSeed:0").Target, MapManager.RetrieveActiveMap(character.VolatileStatus.GetStatus("LeechSeed:0").Target.MapID), seeddmg, Enums.KillType.Other, hitlist, true); // } else { // HealCharacter(character.VolatileStatus.GetStatus("LeechSeed:0").Target, MapManager.RetrieveActiveMap(character.VolatileStatus.GetStatus("LeechSeed:0").Target.MapID), seeddmg * heal / 5, hitlist); // } //} } status = character.VolatileStatus.GetStatus("Confusion"); if (status != null) { status.Counter--; if (status.Counter <= 0) { RemoveExtraStatus(character, map, "Confusion", hitlist); } } status = character.VolatileStatus.GetStatus("Invisible"); if (status != null) { status.Counter--; if (status.Counter <= 0) { RemoveExtraStatus(character, map, "Invisible", hitlist); } } status = character.VolatileStatus.GetStatus("Blind"); if (status != null) { status.Counter--; if (status.Counter <= 0) { RemoveExtraStatus(character, map, "Blind", hitlist); } } status = character.VolatileStatus.GetStatus("Shocker"); if (status != null) { status.Counter--; if (status.Counter <= 0) { RemoveExtraStatus(character, map, "Shocker", hitlist); } } //if (character.CharacterType == Enums.CharacterType.Recruit) { // if (((Recruit)character).Owner.Player.Confusion != 0) { // ((Recruit)character).Owner.Player.Confusion--; // if (((Recruit)character).Owner.Player.Confusion <= 0) { // ((Recruit)character).Owner.Player.Confusion = 1; // if (!CheckStatusProtection(character, map, "Confusion:0", false, hitlist)) { // Confuse(character, map, 0, hitlist); // } // } // } //} else { // if (((MapNpc)character).Confused != 0) { // ((MapNpc)character).Confused--; // if (((MapNpc)character).Confused <= 0) { // ((MapNpc)character).Confused = 1; // if (!CheckStatusProtection(character, map, "Confusion:0", false, hitlist)) { // Confuse(character, map, 0, hitlist); // } // } // } //} if (character.CharacterType == Enums.CharacterType.Recruit) { ((Recruit)character).Owner.Player.ProcessHunger(hitlist); } if (character.CharacterType == Enums.CharacterType.Recruit) { Client clientOwner = ((Recruit)character).Owner; StoryHelper.OnStep(clientOwner, hitlist); if (stepCounter % 10 == 0) { EggStep(clientOwner); } } } PacketHitList.MethodEnded(ref hitlist); } catch (Exception ex) { Messenger.AdminMsg("Error: OnStep", Text.Black); } }
private static void Sticky(ICharacter character, IMap map, PacketHitList hitlist) { PacketHitList.MethodStart(ref hitlist); if (character.HasActiveItem(421)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s No-Stick Cap prevented any items from becoming sticky!", Text.WhiteSmoke), character.X, character.Y, 10); } else { if (character.CharacterType == Enums.CharacterType.Recruit) { Client client = ((Recruit)character).Owner; List<int> itemsToCheck = new List<int>(); for (int i = 1; i <= client.Player.MaxInv; i++) { if (client.Player.Inventory[i].Num > 0 && !client.Player.Inventory[i].Sticky) { itemsToCheck.Add(i); } } if (itemsToCheck.Count > 0) { int stickySlot = itemsToCheck[Server.Math.Rand(0, itemsToCheck.Count)]; if (client.Player.Inventory[stickySlot].Num > 0 && !client.Player.Inventory[stickySlot].Sticky) { client.Player.SetItemSticky(stickySlot, true); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + ItemManager.Items[client.Player.Inventory[stickySlot].Num].Name + " became sticky!", Text.BrightRed), character.X, character.Y, 10); } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Nothing particularly bad happened to " + character.Name + "...", Text.Blue), character.X, character.Y, 10); } } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Nothing particularly bad happened to " + character.Name + "...", Text.Blue), character.X, character.Y, 10); } } else if (character.CharacterType == Enums.CharacterType.MapNpc) { MapNpc npc = character as MapNpc; if (npc.HeldItem != null && !npc.HeldItem.Sticky) { npc.HeldItem.Sticky = true; if (npc.ActiveItems.Contains(npc.HeldItem.Num)) { npc.RemoveFromActiveItemList(npc.HeldItem.Num); } hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + ItemManager.Items[npc.HeldItem.Num].Name + " became sticky!", Text.BrightRed), character.X, character.Y, 10); } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Nothing particularly bad happened to " + character.Name + "...", Text.Blue), character.X, character.Y, 10); } } } PacketHitList.MethodEnded(ref hitlist); }
public static void RemoveExtraStatus(ICharacter character, IMap map, string name, PacketHitList hitlist, bool sendInfo) { PacketHitList.MethodStart(ref hitlist); ExtraStatus statusToRemove = character.VolatileStatus.GetStatus(name); if (statusToRemove != null) { string[] nameSegment = name.Split(':'); bool forme = false, sprite = false, type = false, ability = false, atkSpeed = false, confusion = false, speedLimit = false, mobility = false, visibility = false, darkness = false, swapLock = false, moves = false, extraStatus = false; switch (nameSegment[0]) { case "Confusion": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer confused!", Text.WhiteSmoke), character.X, character.Y, 10); confusion = true; extraStatus = true; } break; case "Safeguard": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected by Safeguard!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Status Guard": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected from " + (Enums.StatusAilment)(statusToRemove.Tag.ToInt()) + "!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Confusion Guard": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected from confusion!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Mist": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Mist wore off!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "LuckyChant": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Lucky Chant wore off!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Reflect": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Reflect wore off!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "LightScreen": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Light Screen wore off!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "TypeReduce": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " no longer takes less damage from " + ((Enums.PokemonType)statusToRemove.Counter).ToString() + "-type attacks!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "TypeBoost": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + ((Enums.PokemonType)statusToRemove.Counter).ToString() + "-type attacks are no longer boosted!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "AttackReturn": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer set to counter " + ((Enums.MoveCategory)statusToRemove.Counter).ToString() + " attacks!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Taunt": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s taunt wore off!", Text.WhiteSmoke), character.X, character.Y, 10); moves = true; extraStatus = true; } break; case "Snatch": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer waiting to snatch a move!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Rage": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s rage faded away!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "FocusEnergy": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Focus Energy wore off!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Torment": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Torment wore off!", Text.WhiteSmoke), character.X, character.Y, 10); moves = true; extraStatus = true; } break; case "Encore": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s encore ended!", Text.WhiteSmoke), character.X, character.Y, 10); moves = true; extraStatus = true; } break; case "Immobilize": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer immobilized!", Text.WhiteSmoke), character.X, character.Y, 10); speedLimit = true; swapLock = true; } break; case "Blind": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can see again!", Text.WhiteSmoke), character.X, character.Y, 10); darkness = true; } break; case "Nausea": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer nauseated!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "Shocker": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer shocked!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "Invisible": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became visible again!", Text.WhiteSmoke), character.X, character.Y, 10); visibility = true; } break; case "Telekinesis": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer floating!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "GastroAcid": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s abilities are no longer nullified!", Text.WhiteSmoke), character.X, character.Y, 10); ability = true; extraStatus = true; } break; case "Attract": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer infatuated!", Text.WhiteSmoke), character.X, character.Y, 10); speedLimit = true; extraStatus = true; } break; case "Nightmare": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " will no longer have nightmares when it sleeps!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Follow": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer focused on a single target!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Embargo": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can use items again!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "HealBlock": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can recover HP again!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Ingrain": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer under the effects of Ingrain!", Text.WhiteSmoke), character.X, character.Y, 10); speedLimit = true; swapLock = true; } break; case "Bind": { if (sendInfo && nameSegment[1] == "0") { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Bind!", Text.WhiteSmoke), character.X, character.Y, 10); } speedLimit = true; swapLock = true; } break; case "Clamp": { if (sendInfo && nameSegment[1] == "0") { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Clamp!", Text.WhiteSmoke), character.X, character.Y, 10); } speedLimit = true; swapLock = true; } break; case "Wrap": { if (sendInfo && nameSegment[1] == "0") { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Wrap!", Text.WhiteSmoke), character.X, character.Y, 10); } speedLimit = true; swapLock = true; } break; case "FireSpin": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Fire Spin!", Text.WhiteSmoke), character.X, character.Y, 10); speedLimit = true; swapLock = true; } break; case "Whirlpool": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Whirlpool!", Text.WhiteSmoke), character.X, character.Y, 10); speedLimit = true; swapLock = true; } break; case "Infestation": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Infestation!", Text.WhiteSmoke), character.X, character.Y, 10); speedLimit = true; swapLock = true; } break; case "SandTomb": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Sand Tomb!", Text.WhiteSmoke), character.X, character.Y, 10); speedLimit = true; swapLock = true; } break; case "MagmaStorm": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Magma Storm!", Text.WhiteSmoke), character.X, character.Y, 10); speedLimit = true; swapLock = true; } break; case "LeechSeed": { if (sendInfo && nameSegment[1] == "0") { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer seeded!", Text.WhiteSmoke), character.X, character.Y, 10); } } break; case "MoveSeal": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + MoveManager.Moves[character.Moves[nameSegment[1].ToInt()].MoveNum].Name + " is no longer sealed!", Text.WhiteSmoke), character.X, character.Y, 10); moves = true; } break; case "Disable": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer disabled!", Text.WhiteSmoke), character.X, character.Y, 10); moves = true; } break; case "FocusPunch": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s lost its focus and couldn't move!", Text.WhiteSmoke), character.X, character.Y, 10); } speedLimit = true; swapLock = true; break; case "SuperCharge": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer charged with power!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Charge": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer electrically charged!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "SureShot": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " lost its aim!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Substitute": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s substitute faded away!", Text.WhiteSmoke), character.X, character.Y, 10); sprite = true; forme = true; } break; case "Bide": { speedLimit = true; swapLock = true; } break; case "Stockpile": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s stockpiled effect wore off!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "Roost": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took flight again!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "PerishCount": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s perish count wore off!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "Curse": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The curse was lifted from " + character.Name + "!", Text.BrightRed), character.X, character.Y, 10); extraStatus = true; } break; case "Yawn": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer drowsy!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Sleepless": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer sleepless!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "WideGuard": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected from wide-range attacks!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "QuickGuard": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected from far-range attacks!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Protect": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Endure": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " stopped enduring!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "MagicCoat": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected by Magic Coat!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Counter": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Counter wore off!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "MirrorCoat": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Mirror Coat wore off!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "MetalBurst": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Metal Burst wore off!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "DestinyBond": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " gave up on the Destiny Bond!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Rebound": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer set to counter attacks!", Text.WhiteSmoke), character.X, character.Y, 10); extraStatus = true; } break; case "Illusion": { if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Illusion was broken!", Text.WhiteSmoke), character.X, character.Y, 10); sprite = true; extraStatus = true; forme = true; hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(503, character.X, character.Y)); } break; case "SkyDrop": { if (sendInfo && nameSegment[1] == "0") { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Sky Drop!", Text.WhiteSmoke), character.X, character.Y, 10); } sprite = true; speedLimit = true; swapLock = true; } break; case "SemiInvul": { sprite = true; speedLimit = true; swapLock = true; forme = true; } break; case "Slip": case "SuperMobile": { mobility = true; } break; case "Rampage": case "Rolling": case "FuryCutter": case "EchoedVoice": case "DefenseCurl": case "Minimize": case "FlashFire": case "LastHitBy": case "LastHitByOther": case "TimesLastMoveUsed": { } break; case "Ability1": case "Ability2": case "Ability3": { ability = true; } break; case "FutureSight": case "Exposed": case "MiracleEye": case "MagnetRise": case "Grudge": case "AquaRing": case "Wish": case "Autotomize": { extraStatus = true; } break; case "Type1": case "Type2": { type = true; } break; case "LastUsedMoveSlot": { moves = true; } break; case "MovementSpeed": { speedLimit = true; } break; case "SolarBeam": case "RazorWind": case "Avalanche": case "VitalThrow": { speedLimit = true; swapLock = true; } break; case "SkullBash": case "SkyAttack": { swapLock = true; } break; } character.VolatileStatus.Remove(statusToRemove); //if (character.CharacterType == Enums.CharacterType.Recruit) { // PacketBuilder.AppendVolatileStatus(((Recruit)character).Owner, hitlist); //} else if (character.CharacterType == Enums.CharacterType.MapNpc) { // PacketBuilder.AppendNpcVolatileStatus(map, hitlist, ((MapNpc)character).MapSlot); //} RefreshCharacterTraits(character, map, hitlist, forme, sprite, type, ability, atkSpeed, confusion, speedLimit, mobility, visibility, darkness, swapLock, moves, extraStatus); } PacketHitList.MethodEnded(ref hitlist); }
public static void RemoveMapStatus(IMap map, string name, bool msg, PacketHitList hitlist) { if (map.TempStatus.GetStatus(name) != null) { map.TempStatus.Remove(name); if (msg) { switch (name) { case "TrickRoom": { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The floor's dimensions returned to normal.", Text.BrightBlue)); } break; case "Gravity": { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The floor's gravity returned to normal.", Text.BrightBlue)); } break; case "WonderRoom": { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All physical and special attacks returned to normal.", Text.BrightBlue)); } break; case "MagicRoom": { TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, 0, 0, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { targets[i].RefreshActiveItemList(); } hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All items regained their effects!", Text.BrightBlue)); } break; } } RefreshMapTraits(map, hitlist); } }
public static void SetMapWeather(IMap map, Enums.Weather weather, PacketHitList hitlist) { TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, 0, 0, Enums.Direction.Up, true, true, false); for (int i = 0; i < checkedTargets.Count; i++) { if (map.Weather == Enums.Weather.None && (HasAbility(checkedTargets[i], "Cloud Nine") || HasAbility(checkedTargets[i], "Air Lock"))) { if (checkedTargets[i].CharacterType == Enums.CharacterType.Recruit) { if (((Recruit)checkedTargets[i]).Owner.Player.Dead) { } else { return; } } else { return; } } } map.Weather = weather; hitlist.AddPacketToMap(map, TcpPacket.CreatePacket("weather", ((int)map.Weather).ToString())); }
public static void AddExtraStatus(ICharacter character, ICharacter attacker, IMap map, string name, int counter, ICharacter target, string tag, PacketHitList hitlist, bool msg) { PacketHitList.MethodStart(ref hitlist); if (CheckStatusProtection(character, attacker, map, name + ":" + counter, tag, true, hitlist)) { PacketHitList.MethodEnded(ref hitlist); return; } if (name == "MovementSpeed" && character.VolatileStatus.GetStatus(name) != null || name == "TypeReduce" && character.VolatileStatus.GetStatus(name) != null || name == "TypeBoost" && character.VolatileStatus.GetStatus(name) != null || name == "AttackReturn" && character.VolatileStatus.GetStatus(name) != null || name == "Type1" && character.VolatileStatus.GetStatus(name) != null || name == "Type2" && character.VolatileStatus.GetStatus(name) != null || name == "LastUsedMoveSlot" && character.VolatileStatus.GetStatus(name) != null || name == "TimesLastMoveUsed" && character.VolatileStatus.GetStatus(name) != null || name == "Stockpile" && character.VolatileStatus.GetStatus(name) != null || name == "LastHitBy" && character.VolatileStatus.GetStatus(name) != null || name == "LastMoveHitBy" && character.VolatileStatus.GetStatus(name) != null || name == "PerishCount" && character.VolatileStatus.GetStatus(name) != null || name == "Curse" && character.VolatileStatus.GetStatus(name) != null || name == "Charge" && character.VolatileStatus.GetStatus(name) != null || name == "SureShot" && character.VolatileStatus.GetStatus(name) != null || name == "Follow" && character.VolatileStatus.GetStatus(name) != null || name == "Ability1" && character.VolatileStatus.GetStatus(name) != null || name == "Ability2" && character.VolatileStatus.GetStatus(name) != null || name == "Ability3" && character.VolatileStatus.GetStatus(name) != null || name == "ProxyAttack" && character.VolatileStatus.GetStatus(name) != null || name == "ProxyDefense" && character.VolatileStatus.GetStatus(name) != null || name == "ProxySpAttack" && character.VolatileStatus.GetStatus(name) != null || name == "ProxySpDefense" && character.VolatileStatus.GetStatus(name) != null) { RemoveExtraStatus(character, map, name, hitlist, false); } if (name == "TypeReduce" && character.VolatileStatus.GetStatus(name) != null || name == "TypeBoost" && character.VolatileStatus.GetStatus(name) != null || name == "AttackReturn" && character.VolatileStatus.GetStatus(name) != null || name == "Status Guard" && character.VolatileStatus.GetStatus(name) != null) { RemoveExtraStatus(character, map, name, hitlist, true); } if (name == "LeechSeed" && character.VolatileStatus.GetStatus(name) != null && counter == 1) { RemoveBondedExtraStatus(character, map, "LeechSeed:1", hitlist, msg); } if (character.VolatileStatus.GetStatus(name) == null) { ExtraStatus newStatus = new ExtraStatus(); newStatus.Name = name; newStatus.Emoticon = -1; newStatus.Counter = counter; newStatus.Target = target; newStatus.Tag = tag; character.VolatileStatus.Add(newStatus); string[] nameSegment = name.Split(':'); //announce to map switch (nameSegment[0]) { case "Confusion": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became confused!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 4; RefreshCharacterConfusion(character, map, hitlist); RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Safeguard": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected with a veil!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 137; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Status Guard": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from " + (Enums.StatusAilment)(tag.ToInt()) + "!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 39; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Confusion Guard": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from confusion!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 39; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Mist": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is shrouded in mist!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 179; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "LuckyChant": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Lucky Chant blocked it from critical hits!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 193; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Reflect": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Reflect slightly raised its Defense!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 25; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "LightScreen": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Light Screen slightly raised its Special Defense!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 67; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Slip": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can now travel on water!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterMobility(character, map, hitlist); } break; case "SuperMobile": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can now travel on any terrain!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterMobility(character, map, hitlist); } break; case "MovementSpeed": { RefreshCharacterSpeedLimit(character, map, hitlist); ExtraStatus addedStatus = character.VolatileStatus.GetStatus("MovementSpeed"); if (addedStatus.Counter > 2) addedStatus.Counter = 2; if (addedStatus.Counter < -3) addedStatus.Counter = -3; switch (GetSpeedLimit(character)) { case Enums.Speed.SuperSlow: { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at quarter speed!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case Enums.Speed.Slow: { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at half speed!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case Enums.Speed.Walking: { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was slowed!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case Enums.Speed.Running: { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at normal speed!", Text.WhiteSmoke), character.X, character.Y, 10); RemoveExtraStatus(character, map, name, hitlist, false); } break; case Enums.Speed.Fast: { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at double speed!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case Enums.Speed.SuperFast: { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at quadruple speed!", Text.WhiteSmoke), character.X, character.Y, 10); } break; } } break; case "AquaRing": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is surrounded by a veil of water!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 22; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Wish": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("A wish was made for " + character.Name + "!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 187; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Substitute": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " created a substitute!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSprite(character, map, hitlist); } break; case "Blind": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became blinded!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterDarkness(character, map, hitlist); newStatus.Emoticon = 17; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Nausea": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became nauseated! It can't eat anything!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 36; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Shocker": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became shocked! It can't tell friend from foe!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterDarkness(character, map, hitlist); newStatus.Emoticon = 64; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Immobilize": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became immobilized!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "GastroAcid": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s abilities were nullified!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 63; RefreshCharacterTraits(character, map, hitlist, false, false, false, true, false, false, false, false, false, false, false, false, true); } break; case "Ability1": { if (tag != "None") { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " acquired the ability " + tag + "!", Text.WhiteSmoke), character.X, character.Y, 10); } if (tag == "Insomnia") { if (character.StatusAilment == Enums.StatusAilment.Sleep) { SetStatusAilment(character, map, Enums.StatusAilment.OK, 0, hitlist); } RemoveExtraStatus(character, map, "Yawn", hitlist); } RefreshCharacterTraits(character, map, hitlist, false, false, false, true, false, false, false, false, false, false, false, false, false); } break; case "Ability2": { if (tag != "None") { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " acquired the ability " + tag + "!", Text.WhiteSmoke), character.X, character.Y, 10); } if (tag == "Insomnia") { if (character.StatusAilment == Enums.StatusAilment.Sleep) { SetStatusAilment(character, map, Enums.StatusAilment.OK, 0, hitlist); } RemoveExtraStatus(character, map, "Yawn", hitlist); } RefreshCharacterTraits(character, map, hitlist, false, false, false, true, false, false, false, false, false, false, false, false, false); } break; case "Ability3": { if (tag != "None") { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " acquired the ability " + tag + "!", Text.WhiteSmoke), character.X, character.Y, 10); } if (tag == "Insomnia") { if (character.StatusAilment == Enums.StatusAilment.Sleep) { SetStatusAilment(character, map, Enums.StatusAilment.OK, 0, hitlist); } RemoveExtraStatus(character, map, "Yawn", hitlist); } RefreshCharacterTraits(character, map, hitlist, false, false, false, true, false, false, false, false, false, false, false, false, false); } break; case "Nightmare": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " will get nightmares when it sleeps!", Text.BrightRed), character.X, character.Y, 10); newStatus.Emoticon = 85; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Attract": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became infatuated!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); if (character.HasActiveItem(704)) { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " has a Destiny Knot!", Text.WhiteSmoke), character.X, character.Y, 10); TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 10, map, character, character.X, character.Y, Enums.Direction.Up, true, false, false); for (int i = 0; i < targets.Count; i++) { AddExtraStatus(targets[i], null, map, "Attract", counter, null, "", hitlist, true); } } } break; case "Follow": { if (target != null) { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can only attack " + target.Name + " now!", Text.WhiteSmoke), character.X, character.Y, 10); } else { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "is focused on a single target now!", Text.WhiteSmoke), character.X, character.Y, 10); } newStatus.Emoticon = 75; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Embargo": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was prevented from using items!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 147; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "HealBlock": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was prevented from recovering HP!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 91; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Ingrain": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " planted its roots!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "Bind": case "Clamp": case "Wrap": { if (nameSegment[1] == "0") { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was trapped by the foe!", Text.WhiteSmoke), character.X, character.Y, 10); } RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "FireSpin": case "Whirlpool": case "SandTomb": case "Infestation": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was trapped in the swarm!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "MagmaStorm": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was trapped in the vortex!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "LeechSeed": { if (nameSegment[1] == "0") { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took on a Leech Seed!", Text.WhiteSmoke), character.X, character.Y, 10); } } break; case "Taunt": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " fell for the taunt!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 23; RefreshCharacterMoves(character, map, hitlist); RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Snatch": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is ready to snatch moves away!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 48; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Rage": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became enraged!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 136; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "FocusEnergy": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is getting pumped!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 94; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Exposed": { if (msg && !HasActiveBagItem(character, 20, 9, 0) && !HasActiveBagItem(character, 20, 6, 0)) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became exposed to Normal- and Fighting- type attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 16; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "MiracleEye": { if (msg && !HasActiveBagItem(character, 20, 2, 0)) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can now hit Dark- types with Psychic- type moves!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 116; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Torment": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was subjected to Torment!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 149; RefreshCharacterMoves(character, map, hitlist); RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Encore": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " received an encore!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 75; RefreshCharacterMoves(character, map, hitlist); RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "TypeReduce": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " will take less damage from " + ((Enums.PokemonType)counter).ToString() + "-type attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 96; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Type1": { if (counter > 0) { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s type changed to " + ((Enums.PokemonType)counter).ToString() + "!", Text.WhiteSmoke), character.X, character.Y, 10); } RefreshCharacterTraits(character, map, hitlist, false, false, true, false, false, false, false, false, false, false, false, false, false); } break; case "Type2": { if (counter > 0) { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s second type changed to " + ((Enums.PokemonType)counter).ToString() + "!", Text.WhiteSmoke), character.X, character.Y, 10); } RefreshCharacterTraits(character, map, hitlist, false, false, true, false, false, false, false, false, false, false, false, false, false); } break; case "TypeBoost": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + ((Enums.PokemonType)counter).ToString() + "-type attacks were boosted!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 111; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "AttackReturn": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to counter " + ((Enums.MoveCategory)counter).ToString() + " attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 117; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Pierce": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " acquired a Pierce status!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 192; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Longtoss": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s range increased for single-target attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 186; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "FlashFire": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Flash Fire increased the power of its Fire-type moves!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "MoveSeal": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + MoveManager.Moves[character.Moves[nameSegment[1].ToInt()].MoveNum].Name + " was sealed!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterMoves(character, map, hitlist); } break; case "Disable": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + MoveManager.Moves[character.Moves[counter].MoveNum].Name + " was disabled!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 161; RefreshCharacterMoves(character, map, hitlist); RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "SolarBeam": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took in sunlight!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "SkullBash": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " lowered its head!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSwapLock(character, map, hitlist); } break; case "RazorWind": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " whipped up a whirlwind!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "SkyAttack": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became cloaked in a harsh light!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSwapLock(character, map, hitlist); } break; case "FocusPunch": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is tightening its focus!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "SuperCharge": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is charged with power!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "Charge": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is charging electrical power!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 69; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "SureShot": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took aim!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 122; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Bide": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " began storing energy!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "Avalanche": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " readied an avalanche!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "VitalThrow": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " readied Vital Throw!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "Stockpile": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " stockpiled " + counter + "!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "Roost": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " landed on the ground!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "SkyDrop": { RemoveExtraStatus(character, map, "Grounded", hitlist, false); RefreshCharacterSprite(character, map, hitlist); if (msg && nameSegment[1] == "0") { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was taken into the sky!", Text.WhiteSmoke), character.X, character.Y, 10); } RefreshCharacterSpeedLimit(character, map, hitlist); RefreshCharacterSwapLock(character, map, hitlist); } break; case "SemiInvul": { RefreshCharacterSprite(character, map, hitlist); switch (tag) { case "Dig": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " burrowed its way underground!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "Bounce": { RemoveExtraStatus(character, map, "Grounded", hitlist, false); if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " sprang up!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "Fly": { RemoveExtraStatus(character, map, "Grounded", hitlist, false); if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " flew up high!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "ShadowForce": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " vanished instantly!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSprite(character, map, hitlist); } break; case "Dive": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " hid underwater!", Text.WhiteSmoke), character.X, character.Y, 10); } break; } RefreshCharacterSwapLock(character, map, hitlist); } break; case "Invisible": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became invisible!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterVisibility(character, map, hitlist); } break; case "PerishCount": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s perish count fell to " + counter + "!", Text.BrightRed), character.X, character.Y, 10); } break; case "Curse": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("A curse was placed on " + character.Name + "!", Text.BrightRed), character.X, character.Y, 10); newStatus.Emoticon = 99; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Grudge": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wants a foe to bear a grudge!", Text.BrightRed), character.X, character.Y, 10); newStatus.Emoticon = 123; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "FutureSight": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was targeted by Future Sight!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 173; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Yawn": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became drowsy!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 14; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Sleepless": { if (character.StatusAilment == Enums.StatusAilment.Sleep) { character.StatusAilment = Enums.StatusAilment.OK; character.StatusAilmentCounter = 0; if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was awakened!", Text.WhiteSmoke), character.X, character.Y, 10); if (character.CharacterType == Enums.CharacterType.Recruit) { PacketBuilder.AppendStatusAilment(((Recruit)character).Owner, hitlist); } else { PacketBuilder.AppendNpcStatusAilment((MapNpc)character, hitlist); } } RemoveExtraStatus(character, map, "Yawn", hitlist); if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became sleepless!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 88; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Grounded": { DropToGround(character, map, hitlist, false); if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " dropped to the ground!", Text.WhiteSmoke), character.X, character.Y, 10); } break; case "Protect": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " protected itself!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 165; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "WideGuard": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became protected from wide-range attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 151; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "QuickGuard": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became protected from far-range attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 109; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Endure": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " braced itself!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 145; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "MagicCoat": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by Magic Coat!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 95; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "MagnetRise": { RemoveExtraStatus(character, map, "Grounded", hitlist, false); if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " levitated using Magnet Rise!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 125; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Conversion": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " has Conversion up!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 162; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Conversion2": { if (HasActiveBagItem(character, 51, 0, 0)) { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " 's item activated!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 176; RefreshCharacterVolatileStatus(character, map, hitlist); } else { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " has Conversion 2 up!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 176; RefreshCharacterVolatileStatus(character, map, hitlist); } } break; case "Telekinesis": { RemoveExtraStatus(character, map, "Grounded", hitlist, false); if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was hurled into the air!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 83; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Autotomize": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became lighter!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 181; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Counter": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to counter physical attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 191; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "MirrorCoat": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to reflect special attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 81; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "MetalBurst": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to reflect attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 53; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "DestinyBond": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is trying to take its foe with it!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 43; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Rebound": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to counter attacks!", Text.WhiteSmoke), character.X, character.Y, 10); newStatus.Emoticon = 159; RefreshCharacterVolatileStatus(character, map, hitlist); } break; case "Illusion": { if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " hid behind an illusion!", Text.WhiteSmoke), character.X, character.Y, 10); RefreshCharacterSprite(character, map, hitlist); } break; case "DefenseCurl": case "Minimize": case "Rampage": case "Rolling": case "FuryCutter": case "EchoedVoice": case "TimesLastMoveUsed": case "LastHitBy": case "LastMoveHitBy": case "LastMoveHitByOther": { } break; case "LastUSedMoveSlot": { RefreshCharacterMoves(character, map, hitlist); } break; } } //if (character.CharacterType == Enums.CharacterType.Recruit) { // PacketBuilder.AppendVolatileStatus(((Recruit)character).Owner, hitlist); //} else if (character.CharacterType == Enums.CharacterType.MapNpc) { // PacketBuilder.AppendNpcVolatileStatus(map, hitlist, ((MapNpc)character).MapSlot); //} //RefreshCharacterTraits(character, map, hitlist); PacketHitList.MethodEnded(ref hitlist); }
public static void ActivateTrap(IMap map, int x, int y, int script, PacketHitList hitlist) { PacketHitList.MethodStart(ref hitlist); if (script != 7 && script != 26 && Server.Math.Rand(0, 5) == 0 && map.Tile[x, y].Data3 < 1) { hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic126.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The trap failed to work!", Text.Blue), x, y, 10); } else { TargetCollection targets; switch (script) { case 2: {//EXPLOSIONNNNN //Damp bool explode = true; TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < checkedTargets.Count; i++) { if (HasAbility(checkedTargets[i], "Damp")) { explode = false; } } if (explode) { hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic215.wav"), x, y, 10); for (int i = x - 2; i <= x + 2; i++) { for (int j = y - 2; j <= y + 2; j++) { if (i < 0 || j < 0 || i > map.MaxX || j > map.MaxY) { } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(497, i, j)); } } } targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 2, map, null, x, y, Enums.Direction.Up, true, true, true); for (int i = 0; i < targets.Count; i++) { if (HasActiveBagItem(targets[i], 6, 0, 0)) { DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 1, Enums.KillType.Tile, hitlist, true); } else { DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].HP / 2, Enums.KillType.Tile, hitlist, true); } } } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic320.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(505, x, y)); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The damp conditions prevented an explosion!", Text.Blue), x, y, 10); } } break; case 3: {//chestnut hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic218.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(551, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " was pelted by chestnuts!", Text.BrightRed), x, y, 10); DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 15, Enums.KillType.Tile, hitlist, true); } } break; case 4: {//ppzero hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic179.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(493, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { int moveSlot = Server.Math.Rand(0, 4); if (targets[i].Moves[moveSlot].MoveNum > -1 && targets[i].Moves[moveSlot].CurrentPP > 0) { targets[i].Moves[moveSlot].CurrentPP = 0; hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(targets[i].Name + "'s move " + MoveManager.Moves[targets[i].Moves[moveSlot].MoveNum].Name + " lost all of its PP!", Text.BrightRed), x, y, 10); if (targets[i].CharacterType == Enums.CharacterType.Recruit) { PacketBuilder.AppendMovePPUpdate(((Recruit)targets[i]).Owner, hitlist, moveSlot); } } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Nothing particularly bad happened to " + targets[i].Name + "...", Text.Blue), x, y, 10); } } } break; case 5: {//grimy hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic220.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(494, x, y)); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Sludge splashed up from the ground!", Text.BrightRed), x, y, 10); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { Grimy(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), hitlist); } } break; case 6: {//poison hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic221.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(496, x, y)); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Poison spikes shot out!", Text.BrightRed), x, y, 10); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { SetStatusAilment(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), Enums.StatusAilment.Poison, 1, hitlist); } } break; case 7: {//random string trapString = ""; if (map.Tile[x, y].String3.Contains(";")) { trapString = map.Tile[x, y].String3; } else { trapString = "2;3;4;5;6;15;16;17;18;19;23;25;26;28;39;42;43;44;49;50;51;52;53;70"; } string[] trapSelection = trapString.Split(';'); string chosenTrap = trapSelection[Server.Math.Rand(0, trapSelection.Length)]; if (chosenTrap.IsNumeric() && chosenTrap.ToInt() != 7) { targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { if (i != null && WillTrapActivate(targets[i], map, x, y)) { ActivateTrap(MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].X, targets[i].Y, chosenTrap.ToInt(), hitlist); } } } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("But nothing happened...", Text.Blue), x, y, 10); } } break; case 15: {//warp hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic256.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(555, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { RandomWarp(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), true, hitlist); } } break; case 16: {//pokemon //hitlist.AddPacketToMap(mapID, PacketBuilder.CreateSoundPacket(), x, y, 10); //hitlist.AddPacketToMap(mapID, PacketBuilder.CreateSpellAnim(552, x, y)); //replace all nearby items with Pokemon } break; case 17: {//spikes hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic122.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(553, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { if (map.Tile[x, y].String3.IsNumeric()) { DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP * map.Tile[x, y].String3.ToInt() / 8, Enums.KillType.Tile, hitlist, true); } else { DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP * Server.Math.Rand(1, 4) / 8, Enums.KillType.Tile, hitlist, true); } } } break; case 18: {//toxic spikes hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic122.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(554, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 10, Enums.KillType.Tile, hitlist, true); if (map.Tile[x, y].String3.IsNumeric()) { SetStatusAilment(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), Enums.StatusAilment.Poison, map.Tile[x, y].String3.ToInt(), hitlist); } else { SetStatusAilment(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), Enums.StatusAilment.Poison, Server.Math.Rand(1, 3), hitlist); } } } break; case 19: {//stealth rock hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic122.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(556, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { int HPFraction = DamageCalculator.Effectiveness[DamageCalculator.CalculateTypeMatchup(Enums.PokemonType.Rock, targets[i].Type1) + DamageCalculator.CalculateTypeMatchup(Enums.PokemonType.Rock, targets[i].Type2)]; DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP * HPFraction / 1280, Enums.KillType.Tile, hitlist, true); } } break; case 23: {//sticky hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic159.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(494, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { Sticky(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), hitlist); } } break; case 25: {//mud hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic473.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(495, x, y)); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Mud splashed up from the ground!", Text.BrightRed), x, y, 10); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { switch (Server.Math.Rand(0, 7)) { case 0: { ChangeAttackBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist); } break; case 1: { ChangeDefenseBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist); } break; case 2: { ChangeSpAtkBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist); } break; case 3: { ChangeSpDefBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist); } break; case 4: { ChangeSpeedBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist); } break; case 5: { ChangeAccuracyBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist); } break; case 6: { ChangeEvasionBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist); } break; } } } break; case 26: {//wonder tile hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic121.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(499, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { RemoveBuffs(targets[i]); hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + "'s stats were returned to normal!", Text.WhiteSmoke), x, y, 10); } } break; case 28: {//trip hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic172.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(557, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " tripped!", Text.BrightRed), x, y, 10); InvDrop(targets[i], map, hitlist); } } break; case 34: {//secret (Stairs, etc), not used here } break; case 39: {//pitfall hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("DeepFall.wav"), x, y, 10); //hitlist.AddPacketToMap(mapID, PacketBuilder.CreateSpellAnim(494, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { if (targets[i].CharacterType == Enums.CharacterType.Recruit) { Client client = ((Recruit)targets[i]).Owner; string[] trapData = map.Tile[x, y].String3.Split(';'); try { if (map.Tile[x, y].String3 == "" && map.MapType == Enums.MapType.RDungeonMap) {//fall down a level in a random dungeon if (RDungeonManager.RDungeons[((RDungeonMap)map).RDungeonIndex].Direction == Enums.Direction.Up) {//fall down a level client.Player.WarpToRDungeon(((RDungeonMap)map).RDungeonIndex, ((RDungeonMap)map).RDungeonFloor - 1); } else {//fall up a level client.Player.WarpToRDungeon(((RDungeonMap)map).RDungeonIndex, ((RDungeonMap)map).RDungeonFloor + 1); } } else {//fall down specific coordinates hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " fell through!", Text.BrightRed), x, y, 10); Messenger.PlayerWarp(client, trapData[0].ToInt(), trapData[1].ToInt(), trapData[2].ToInt()); } DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 10, Enums.KillType.Tile, hitlist, true); } catch { hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateChatMsg("This is a bad trap. Report this to an admin.", Text.Black), x, y, 10); } } else if (targets[i].CharacterType == Enums.CharacterType.MapNpc) { hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " fell through!", Text.BrightRed), x, y, 10); //((MapNpc)i).Num = 0; //((MapNpc)i).HP = 0; MapManager.RetrieveActiveMap(targets[i].MapID).ActiveNpc[((MapNpc)targets[i]).MapSlot] = new MapNpc(targets[i].MapID, ((MapNpc)targets[i]).MapSlot); hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), TcpPacket.CreatePacket("npcdead", ((MapNpc)targets[i]).MapSlot)); } } } break; case 42: {//seal hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic275.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(558, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { int rand = Server.Math.Rand(0, 4); AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "MoveSeal:" + rand, 0, null, "", hitlist); } } break; case 43: {//slow hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic180.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(559, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { ExtraStatus status = targets[i].VolatileStatus.GetStatus("MovementSpeed"); if (status != null) { AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "MovementSpeed", status.Counter - 1, null, "", hitlist); } else { AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "MovementSpeed", -1, null, "", hitlist); } //AddExtraStatus(i, MapManager.RetrieveActiveMap(i.MapID), "MovementSpeed", (int)GetSpeedLimit(i) - 1, null, hitlist); } } break; case 44: {//spin hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic198.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(560, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " spun around and around...", Text.BrightRed), x, y, 10); AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "Confusion", 15, null, "", hitlist); //Confuse(i, MapManager.RetrieveActiveMap(i.MapID), 15, hitlist); } } break; case 49: {//summon hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic197.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(561, x, y)); //hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(492, x, y)); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("A sweet scent wafted out from the ground!", Text.BrightRed), x, y, 10); for (int i = 0; i < Constants.MAX_MAP_NPCS / 4; i++) { if (Server.Math.Rand(0,2) == 0) { SpawnNpcInRange(map, x, y, 2, hitlist); } else { map.SpawnNpc(); } } hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Wild Pokémon were attracted to the scent!", Text.BrightRed), x, y, 10); } break; case 50: {//grudge hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic468.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(562, x, y)); //hitlist.AddPacketToMap(mapID, PacketBuilder.CreateSpellAnim(492, x, y)); for (int i = 0; i < Constants.MAX_MAP_NPCS / 4; i++) { SpawnNpcInRange(map, x, y, 2, hitlist); } for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) { if (map.ActiveNpc[i].Num > 0) { AddExtraStatus(map.ActiveNpc[i], map, "Grudge", 0, null, "", hitlist); } } hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All Pokémon on the floor now hold a grudge!", Text.BrightRed), x, y, 10); } break; case 51: {//selfdestruct bool explode = true; TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < checkedTargets.Count; i++) { if (HasAbility(checkedTargets[i], "Damp")) { explode = false; } } if (explode) { hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic216.wav"), x, y, 10); for (int i = x - 1; i <= x + 1; i++) { for (int j = y - 1; j <= y + 1; j++) { if (i < 0 || j < 0 || i > map.MaxX || j > map.MaxY) { } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(497, i, j)); } } } targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 1, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { if (HasActiveBagItem(targets[i], 6, 0, 0)) { DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 1, Enums.KillType.Tile, hitlist, true); } else { DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP / 4, Enums.KillType.Tile, hitlist, true); } } } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic320.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(505, x, y)); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The damp conditions prevented an explosion!", Text.Blue), x, y, 10); } } break; case 52: {//slumber hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic217.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(492, x, y)); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Sleeping gas erupted from the ground!", Text.BrightRed), x, y, 10); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { SetStatusAilment(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), Enums.StatusAilment.Sleep, 8, hitlist); } } break; case 53: {//gust hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic199.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(564, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { BlowBack(targets[i], map, (Enums.Direction)Server.Math.Rand(0, 4), hitlist); } } break; case 70: {//shocker hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic356.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(538, x, y)); targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false); for (int i = 0; i < targets.Count; i++) { AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "Shocker", 30, null, "", hitlist); } } break; } } PacketHitList.MethodEnded(ref hitlist); }
public static void ChangeAttackBuff(ICharacter character, ICharacter attacker, IMap map, int counter, PacketHitList hitlist) { if (counter < 0) { if (character.VolatileStatus.GetStatus("Mist") != null) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s stats didn't drop due to the mist!", Text.WhiteSmoke), character.X, character.Y, 10); return; } if (attacker != character && character.VolatileStatus.GetStatus("Substitute") != null) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by Substitute!", Text.WhiteSmoke), character.X, character.Y, 10); return; } //twist band if (character.HasActiveItem(172)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Twist Band prevented its Attack stats from dropping!", Text.WhiteSmoke), character.X, character.Y, 10); return; } if (HasActiveBagItem(character, 49, 0, 0)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s item prevented its stats from dropping!", Text.WhiteSmoke), character.X, character.Y, 10); return; } if (HasAbility(character, "White Smoke") && !HasAbility(attacker, "Mold Breaker")) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s White Smoke prevented its stats from dropping!", Text.WhiteSmoke), character.X, character.Y, 10); return; } if (HasAbility(character, "Clear Body") && !HasAbility(attacker, "Mold Breaker")) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Clear Body prevented its stats from dropping!", Text.WhiteSmoke), character.X, character.Y, 10); return; } if (HasAbility(character, "Hyper Cutter") && !HasAbility(attacker, "Mold Breaker")) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Hyper Cutter prevented its Attack from dropping!", Text.WhiteSmoke), character.X, character.Y, 10); return; } } if (HasAbility(character, "Contrary") && !HasAbility(attacker, "Mold Breaker")) { counter *= -1; } if (HasAbility(character, "Simple") && !HasAbility(attacker, "Mold Breaker")) { counter *= 2; } if (character.AttackBuff >= 10 && counter > 0) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack won't go higher!", Text.WhiteSmoke), character.X, character.Y, 10); return; } else if (character.AttackBuff <= -10 && counter < 0) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack won't go lower!", Text.WhiteSmoke), character.X, character.Y, 10); return; } if (character.AttackBuff + counter > 10) { counter = 10 - character.AttackBuff; } else if (character.AttackBuff + counter < -10) { counter = -10 - character.AttackBuff; } if (counter == 0) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack didn't change.", Text.WhiteSmoke), character.X, character.Y, 10); } else if (counter == 1) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack rose slightly.", Text.WhiteSmoke), character.X, character.Y, 10); } else if (counter == -1) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack fell slightly.", Text.WhiteSmoke), character.X, character.Y, 10); } else if (counter == 2) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack rose sharply!", Text.WhiteSmoke), character.X, character.Y, 10); } else if (counter == -2) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack fell harshly!", Text.WhiteSmoke), character.X, character.Y, 10); } else if (counter > 2) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack rose drastically!", Text.WhiteSmoke), character.X, character.Y, 10); } else if (counter < -2) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack fell drastically!", Text.WhiteSmoke), character.X, character.Y, 10); } character.AttackBuff += counter; if (counter < 0 && HasAbility(character, "Defiant")) { //hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " defied the stat change!", Text.WhiteSmoke), character.X, character.Y, 10); ChangeAttackBuff(character, map, 2, hitlist); } if (counter < 0 && HasAbility(character, "Competitive")) { //hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " defied the stat change!", Text.WhiteSmoke), character.X, character.Y, 10); ChangeSpAtkBuff(character, map, 2, hitlist); } }
public static void BlowBack(ICharacter character, IMap map, Enums.Direction dir, PacketHitList hitlist) { if (HasAbility(character, "Suction Cups")) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Suction Cups prevented it from being blown back!", Text.WhiteSmoke), character.X, character.Y, 10); } else if (character.HasActiveItem(111)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Iron Ball prevented it from being blown back!", Text.WhiteSmoke), character.X, character.Y, 10); } else { WarpToNearestWall(character, map, dir, hitlist); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was blown back!", Text.WhiteSmoke), character.X, character.Y, 10); } }
public static void HandleDeath(PacketHitList hitlist, Client client, Enums.KillType killType, bool autoSwitch) { PacketHitList.MethodStart(ref hitlist); //aftermath if (HasAbility(client.Player.GetActiveRecruit(), "Aftermath")) { bool explode = true; if (!HasAbility(client.Player.GetActiveRecruit(), "Mold Breaker")) { TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, client.Player.Map, null, 0, 0, Enums.Direction.Up, true, true, false); for (int i = 0; i < checkedTargets.Count; i++) { if (HasAbility(checkedTargets[i], "Damp")) { explode = false; } } } if (explode) { hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateBattleMsg(client.Player.GetActiveRecruit().Name + " exploded!", Text.BrightRed), client.Player.X, client.Player.Y, 10); hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("magic216.wav"), client.Player.X, client.Player.Y, 10); for (int i = client.Player.X - 1; i <= client.Player.X + 1; i++) { for (int j = client.Player.Y - 1; j <= client.Player.Y + 1; j++) { if (i < 0 || j < 0 || i > client.Player.Map.MaxX || j > client.Player.Map.MaxY) { } else { hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSpellAnim(497, i, j)); } } } TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 1, client.Player.Map, client.Player.GetActiveRecruit(), client.Player.X, client.Player.Y, Enums.Direction.Up, true, true, true); for (int i = 0; i < targets.Count; i++) { if (client.Player.Map.Moral == Enums.MapMoral.None) { if (targets[i].HP > 0) { if (HasActiveBagItem(targets[i], 6, 0, 0)) { DamageCharacter(targets[i], client.Player.Map, 1, Enums.KillType.Tile, hitlist, true); } else { DamageCharacter(targets[i], client.Player.Map, targets[i].MaxHP / 4, Enums.KillType.Tile, hitlist, true); } } } } } else { hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("magic320.wav"), client.Player.X, client.Player.Y, 10); hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSpellAnim(505, client.Player.X, client.Player.Y)); hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateBattleMsg("The damp conditions prevented an explosion!", Text.Blue), client.Player.X, client.Player.Y, 10); } } //death flag TargetCollection witnesses = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, client.Player.Map, client.Player.GetActiveRecruit(), 0, 0, Enums.Direction.Up, false, true, false); for (int i = 0; i < witnesses.Count; i++) { AddExtraStatus(witnesses[i], client.Player.Map, "SawAllyFaint", 0, null, "", hitlist); } // Remove status client.Player.GetActiveRecruit().StatusAilment = Enums.StatusAilment.OK; client.Player.GetActiveRecruit().StatusAilmentCounter = 0; List<ExtraStatus> passedStatus = GetTeamStatus(client.Player.GetActiveRecruit()); RemoveAllBondedExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, hitlist, false); client.Player.GetActiveRecruit().VolatileStatus.Clear(); foreach (ExtraStatus status in passedStatus) { client.Player.GetActiveRecruit().VolatileStatus.Add(status); } RefreshCharacterTraits(client.Player.GetActiveRecruit(), client.Player.Map, hitlist); PacketBuilder.AppendStatusAilment(client, hitlist); RemoveBuffs(client.Player.GetActiveRecruit()); if (Ranks.IsDisallowed(client, Enums.Rank.Moniter)) { client.Player.Hunted = false; PacketBuilder.AppendHunted(client, hitlist); } client.Player.Dead = true; PacketBuilder.AppendDead(client, hitlist); AskAfterDeathQuestion(client); /* if (client.Player.GetActiveRecruit().HeldItemSlot > -1) { if (client.Player.GetActiveRecruit().HeldItem.Num == 222) {//Enigma Berry if (Server.Math.Rand(0, 10) == 0) { Messenger.MapMsg(client.Player.MapID, client.Player.Name + " was revived!!!", Text.BrightGreen); client.Player.GetActiveRecruit().RestoreVitals(); client.Player.GetActiveRecruit().RestoreBelly(); Messenger.SendPlayerMoves(client); foreach (ExtraStatus status in passedStatus) { client.Player.GetActiveRecruit().VolatileStatus.Add(status); } PacketHitList.MethodEnded(ref hitlist); return; } } } if (client.Player.TournamentMatchUp != null) { client.Player.TournamentMatchUp.EndMatchUp(client.Player.TournamentMatchUp.SelectOtherMember(client).Client.Player.CharID); PacketHitList.MethodEnded(ref hitlist); return; } //For Reviver Seeds int slot = client.Player.HasItem(489); if (client.Player.MapID == MapManager.GenerateMapID(660)) { slot = 0; } if (slot > 0) { Messenger.MapMsg(client.Player.MapID, client.Player.Name + " was revived!", Text.BrightGreen); client.Player.GetActiveRecruit().RestoreVitals(); client.Player.GetActiveRecruit().RestoreBelly(); Messenger.SendPlayerMoves(client); client.Player.TakeItem(489, 1); client.Player.GiveItem(488, 1); //NetScript.SetPlayerInvItemNum(index, slot, 488); Messenger.SendInventory(client); foreach (ExtraStatus status in passedStatus) { client.Player.GetActiveRecruit().VolatileStatus.Add(status); } PacketHitList.MethodEnded(ref hitlist); return; } /* //Sacred Ash slot = client.Player.HasItem(523); if (client.Player.MapID == MapManager.GenerateMapID(660)) { slot = 0; } if (slot > 0) { Messenger.MapMsg(client.Player.MapID, client.Player.Name + " was revived!", Text.BrightGreen); client.Player.GetActiveRecruit().RestoreVitals(); client.Player.GetActiveRecruit().RestoreBelly(); Messenger.SendPlayerMoves(client); client.Player.GetActiveRecruit().AttackBuff += 2; client.Player.GetActiveRecruit().DefenseBuff += 2; client.Player.GetActiveRecruit().SpeedBuff += 2; client.Player.GetActiveRecruit().SpAtkBuff += 2; client.Player.TakeItem(523, 1); Messenger.SendInventory(client); return; } if (autoSwitch && client.Player.ActiveSlot != 0) { int activeSlot = client.Player.ActiveSlot; string name = client.Player.GetActiveRecruit().Name; foreach (ExtraStatus status in passedStatus) { client.Player.GetActiveRecruit().VolatileStatus.Add(status); Messenger.BattleMsg(client, status.Name, Text.BrightRed); } client.Player.SwapActiveRecruit(0); client.Player.RestoreRecruitStats(activeSlot); client.Player.RemoveFromTeam(activeSlot); if (!string.IsNullOrEmpty(name)) { Messenger.BattleMsg(client, name + " has fainted and returned home!", Text.BrightRed); } else { Messenger.BattleMsg(client, "Your team member has fainted and returned home!", Text.BrightRed); } Messenger.SendActiveTeam(client); } else { HandleGameOver(client, killType); } if (exPlayer.Get(client).VoltorbFlip) { Messenger.PlaySound(client, "Leave Slot Machine.wav"); } else { Messenger.PlaySound(client, "Death.wav"); } */ //Messenger.SendBattleDivider(client); //RefreshCharacterTraits(client.Player.GetActiveRecruit(), client.Player.Map, hitlist); PacketHitList.MethodEnded(ref hitlist); }
public static void ClearChamber(IMap map, int startX, int startY, int endX, int endY, PacketHitList hitlist) { if (map.MapType != Enums.MapType.RDungeonMap) return; PacketHitList.MethodStart(ref hitlist); int[,] intArray = new int[map.MaxX + 1, map.MaxY + 1]; for (int x = startX; x <= endX; x++) { for (int y = startY; y <= endY; y++) { if (map.Tile[x,y].Type == Enums.TileType.ScriptedSign) { if (map.Tile[x,y].Data1 == 9) { if (map.Tile[x, y].String1.IsNumeric()) { map.SpawnItem(map.Tile[x, y].String1.ToInt(), 1, false, false, map.Tile[x, y].String2, x, y, null); } intArray[x, y] = map.Tile[x, y].String3.ToInt(); RDungeonFloorGen.AmbiguateTile(map.Tile[x, y]); } else if (map.Tile[x,y].Data1 == 10) { intArray[x, y] = 3; RDungeonFloorGen.AmbiguateTile(map.Tile[x, y]); hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic161.wav"), x, y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The chamber was opened!", Text.WhiteSmoke), x, y, 10); } } else if (map.Tile[x, y].RDungeonMapValue >= 1280 && map.Tile[x, y].RDungeonMapValue < 1536) { intArray[x, y] = 1025; RDungeonFloorGen.AmbiguateTile(map.Tile[x, y]); map.Tile[x, y].Type = Enums.TileType.Blocked; } } } DungeonArrayFloor.TextureDungeon(intArray, startX+1, startY+1, endX-1, endY-1); for (int x = startX; x <= endX; x++) { for (int y = startY; y <= endY; y++) { map.Tile[x, y].RDungeonMapValue = intArray[x, y]; } } RDungeonFloorGen.TextureDungeonMap((RDungeonMap)map, startX, startY, endX, endY); for (int x = startX; x <= endX; x++) { for (int y = startY; y <= endY; y++) { hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map)); } } PacketHitList.MethodEnded(ref hitlist); }
public static void ReviveCharacter(ICharacter character, IMap map, bool fullHeal, PacketHitList hitlist) { try { PacketHitList.MethodStart(ref hitlist); if (fullHeal) { character.HP = character.MaxHP; for (int i = 0; i < character.Moves.Length; i++) { character.Moves[i].CurrentPP = character.Moves[i].MaxPP; } if (character.CharacterType == Enums.CharacterType.Recruit) { ((Recruit)character).RestoreBelly(); } hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was fully revived!", Text.BrightGreen)); } else { int hp = character.MaxHP / 2; if (hp < 1) hp = 1; character.HP = hp; //restore belly to 20 if (character.CharacterType == Enums.CharacterType.Recruit) { Recruit recruit = character as Recruit; if (recruit.Belly < 25) { recruit.Belly = 25; PacketBuilder.AppendBelly(recruit.Owner, hitlist); } } hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was revived!", Text.BrightGreen)); } hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic682.wav"), character.X, character.Y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(509, character.X, character.Y)); if (character.CharacterType == Enums.CharacterType.Recruit) { ((Recruit)character).Owner.Player.Dead = false; PacketBuilder.AppendDead(((Recruit)character).Owner, hitlist); Messenger.ForceEndStoryTo(((Recruit)character).Owner); } RefreshCharacterMoves(character, map, hitlist); PacketHitList.MethodEnded(ref hitlist); } catch (Exception ex) { Messenger.AdminMsg(ex.ToString(), Text.Black); } }
public static void EnterArena(Client client, ICharacter character, IMap map, string param2, string param3, PacketHitList hitlist) { PacketHitList.MethodStart(ref hitlist); //activate set-level mode for tanren arena if (map.MapID == MapManager.GenerateMapID(1718)) client.Player.BeginTempStatMode(50, true); if (param2.IsNumeric() && param3.IsNumeric()) { RandomWarp(character, map, false, hitlist, param2.ToInt(), param2.ToInt(), param3.ToInt(), param3.ToInt()); } else { RandomWarp(character, map, false, hitlist, 5, 24, 7, 23); } hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic256.wav"), character.X, character.Y, 10); hitlist.AddPacketToMap(map, PacketBuilder.CreateChatMsg(client.Player.Name + " has entered the arena!", Text.BrightGreen)); for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) { if (client.Player.Team[i].Loaded) { // Yes, there needs to be a check client.Player.Team[i].HP = client.Player.Team[i].MaxHP; client.Player.Team[i].RestoreBelly(); client.Player.Team[i].StatusAilment = Enums.StatusAilment.OK; client.Player.Team[i].StatusAilmentCounter = 0; for (int j = 0; j < 4; j++) { if (client.Player.GetActiveRecruit().Moves[i].MoveNum != 0) { client.Player.Team[i].Moves[j].CurrentPP = client.Player.Team[i].Moves[j].MaxPP; } } RemoveBuffs(client.Player.Team[i]); RemoveAllBondedExtraStatus(client.Player.Team[i], map, hitlist, false); client.Player.Team[i].VolatileStatus.Clear(); } } //remove statuses if (HasAbility(client.Player.GetActiveRecruit(), "Illusion")) { int selectedSlot = client.Player.ActiveSlot; for (int i = 1; i < 4; i++) { if (client.Player.Team[(selectedSlot + i) % 4] != null && client.Player.Team[(selectedSlot + i) % 4].Loaded) { selectedSlot = (selectedSlot + i) % 4; break; } } if (selectedSlot != client.Player.ActiveSlot) { AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", client.Player.Team[selectedSlot].Sprite, null, "", hitlist); } } //set illusion if (client.Player.GetActiveRecruit().HasActiveItem(213)) { AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 25, null, "", hitlist); } if (client.Player.GetActiveRecruit().HasActiveItem(224)) { AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 300, null, "", hitlist); } if (client.Player.GetActiveRecruit().HasActiveItem(244)) { AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 387, null, "", hitlist); } if (client.Player.GetActiveRecruit().HasActiveItem(245)) { AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 390, null, "", hitlist); } if (client.Player.GetActiveRecruit().HasActiveItem(246)) { AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 393, null, "", hitlist); } RefreshCharacterTraits(client.Player.GetActiveRecruit(), map, hitlist); if (!client.Player.Dead) { if (HasAbility(client.Player.GetActiveRecruit(), "Sand Stream")) { SetMapWeather(map, Enums.Weather.Sandstorm, hitlist); } else if (HasAbility(client.Player.GetActiveRecruit(), "Snow Warning")) { SetMapWeather(map, Enums.Weather.Hail, hitlist); } else if (HasAbility(client.Player.GetActiveRecruit(), "Drizzle")) { SetMapWeather(map, Enums.Weather.Raining, hitlist); } else if (HasAbility(client.Player.GetActiveRecruit(), "Drought")) { SetMapWeather(map, Enums.Weather.Sunny, hitlist); } else if (HasAbility(client.Player.GetActiveRecruit(), "Air Lock")) { SetMapWeather(map, Enums.Weather.None, hitlist); } else if (HasAbility(client.Player.GetActiveRecruit(), "Cloud Nine")) { SetMapWeather(map, Enums.Weather.None, hitlist); } } if (HasAbility(client.Player.GetActiveRecruit(), "Download")) { int totalDef = 0; int totalSpDef = 0; TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, client.Player.GetActiveRecruit(), client.Player.GetActiveRecruit().X, client.Player.GetActiveRecruit().Y, Enums.Direction.Up, true, false, false); for (int i = 0; i < targets.Foes.Count; i++) { totalDef += targets.Foes[i].Def; totalSpDef += targets.Foes[i].SpclDef; } if (totalDef < totalSpDef) { ChangeAttackBuff(client.Player.GetActiveRecruit(), map, 1, hitlist); } else { ChangeSpAtkBuff(client.Player.GetActiveRecruit(), map, 1, hitlist); } } PacketHitList.MethodEnded(ref hitlist); }
private static void HealCharacter(ICharacter character, IMap map, int hp, PacketHitList hitlist) { try { if (character.VolatileStatus.GetStatus("HealBlock") != null) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " couldn't recover HP due to the Heal Block!", Text.BrightRed), character.X, character.Y, 10); return; } if (character.HP + hp > character.MaxHP) { hp = character.MaxHP - character.HP; } character.HP += hp; if (hp <= 0) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s HP didn't change.", Text.BrightGreen), character.X, character.Y, 10); //BothWaysBattleMsg(setup, setup.Defender.Name + " took no damage!", Text.BrightRed); } else if (character.HP == character.MaxHP) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was fully healed!", Text.BrightGreen), character.X, character.Y, 10); } else { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " recovered " + hp + " HP!", Text.BrightGreen), character.X, character.Y, 10); //BothWaysBattleMsg(setup, setup.Defender.Name + " took " + damage + " damage!", Text.BrightRed); } } catch (Exception ex) { Messenger.AdminMsg("Error: HealCharacter: " + character.Name, Text.Black); Messenger.AdminMsg(ex.ToString(), Text.Black); throw new Exception(); } }
public static bool CheckStatusProtection(ICharacter character, ICharacter attacker, IMap map, string status, string tag, bool msg, PacketHitList hitlist) { try { PacketHitList.MethodStart(ref hitlist); ExtraStatus checkStatus; string[] statusParam = status.Split(':'); //if (statusParam[0] == "Confusion" && statusParam[1].ToInt() <= 0) { // if (character.CharacterType == Enums.CharacterType.Recruit && ((Recruit)character).Owner.Player.Confusion <= 0) { // PacketHitList.MethodEnded(ref hitlist); // return true; // } else if (character.CharacterType == Enums.CharacterType.MapNpc && !((MapNpc)character).Confused) { // PacketHitList.MethodEnded(ref hitlist); // return true; // } // if (character.HasActiveItem(347)) { // if (msg) { // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't recover from confusion due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10); // } // PacketHitList.MethodEnded(ref hitlist); // return true; // } //} if (IsStatusBad(status)) { if (character.VolatileStatus.GetStatus("Safeguard") != null && (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0)))) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by Safeguard!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } //pokemon specific item if (HasActiveBagItem(character, 4, -1, (int)GetCharacterWeather(character)) || HasActiveBagItem(character, 4, (int)GetCharacterWeather(character), -1) || HasActiveBagItem(character, 29, 0, 0)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } //Type Gems if (character.HasActiveItem(595) && GetCharacterWeather(character) == Enums.Weather.Cloudy) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the White Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(596) && GetCharacterWeather(character) == Enums.Weather.Sunny) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Fiery Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(597) && (GetCharacterWeather(character) == Enums.Weather.Raining || GetCharacterWeather(character) == Enums.Weather.Thunder)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Aqua Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(600) && GetCharacterWeather(character) == Enums.Weather.Hail) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Icy Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(602) && GetCharacterWeather(character) == Enums.Weather.Cloudy) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Poison Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(603) && GetCharacterWeather(character) == Enums.Weather.Sandstorm) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Earth Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(605) && GetCharacterWeather(character) == Enums.Weather.Fog) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Psyche Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(606) && (GetCharacterWeather(character) == Enums.Weather.None || GetCharacterWeather(character) == Enums.Weather.Ambiguous)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Guard Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(609) && (GetCharacterWeather(character) == Enums.Weather.None || GetCharacterWeather(character) == Enums.Weather.Ambiguous)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Dragon Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(610) && GetCharacterWeather(character) == Enums.Weather.Fog) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Dark Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(611) && GetCharacterWeather(character) == Enums.Weather.Sandstorm) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Metal Gem!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Leaf Guard") && GetCharacterWeather(character) == Enums.Weather.Sunny && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by Leaf Guard!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (attacker != character && statusParam[0] != "Pause" && statusParam[0] != "Taunt" && statusParam[0] != "Torment" && statusParam[0] != "Encore" && statusParam[0] != "MoveSeal" && statusParam[0] != "Disable" && statusParam[0] != "PerishCount" && statusParam[0] != "Curse" && statusParam[0] != "Attract" && statusParam[0] != "Grounded" && character.VolatileStatus.GetStatus("Substitute") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by Substitute!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } switch (statusParam[0]) { case "OK": { if (character.StatusAilment == Enums.StatusAilment.OK) { PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(347)) { if (msg) { switch (character.StatusAilment) { case Enums.StatusAilment.Burn: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't recover from the burn due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10); } break; case Enums.StatusAilment.Freeze: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't thaw out due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10); } break; case Enums.StatusAilment.Paralyze: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't recover from paralysis due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10); } break; case Enums.StatusAilment.Poison: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't recover from poison due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10); } break; case Enums.StatusAilment.Sleep: { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't wake up due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10); } break; } } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Burn": { if (character.StatusAilment == Enums.StatusAilment.OK) { if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) { checkStatus = character.VolatileStatus.GetStatus("Status Guard"); if (checkStatus != null && checkStatus.Tag == "1") { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from burns!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } if (character.HasActiveItem(633)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by its Rawst Scarf!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Water Veil") && !HasAbility(character, "Flare Boost") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Water Veil protected it from a burn!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.Type1 == Enums.PokemonType.Fire || character.Type2 == Enums.PokemonType.Fire) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s type doesn't get burned!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } else if (character.StatusAilment == Enums.StatusAilment.Burn) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already burned!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } else { //if (msg) { // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10); //} PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Freeze": { if (character.StatusAilment == Enums.StatusAilment.OK) { if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) { checkStatus = character.VolatileStatus.GetStatus("Status Guard"); if (checkStatus != null && checkStatus.Tag == "2") { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from being frozen!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } if (character.HasActiveItem(634)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by its Aspear Scarf!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Magma Armor") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Magma Armor protected it from being frozen!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.Type1 == Enums.PokemonType.Ice || character.Type2 == Enums.PokemonType.Ice) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s type doesn't get frozen!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } else if (character.StatusAilment == Enums.StatusAilment.Freeze) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already frozen!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } else { //if (msg) { // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10); //} PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Paralyze": { if (character.StatusAilment == Enums.StatusAilment.OK) { if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) { checkStatus = character.VolatileStatus.GetStatus("Status Guard"); if (checkStatus != null && checkStatus.Tag == "3") { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from paralysis!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } if (character.HasActiveItem(632)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by its Cheri Scarf!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Limber") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Limber prevented it from being paralyzed!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } else if (character.StatusAilment == Enums.StatusAilment.Paralyze) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already paralyzed!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } else { //if (msg) { // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10); //} PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Poison": { if (character.StatusAilment == Enums.StatusAilment.OK) { if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) { checkStatus = character.VolatileStatus.GetStatus("Status Guard"); if (checkStatus != null && checkStatus.Tag == "4") { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from poison!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } if (HasAbility(character, "Immunity") && !HasAbility(character, "Toxic Boost") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Immunity prevented it from being poisoned!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.Type1 == Enums.PokemonType.Poison || character.Type2 == Enums.PokemonType.Poison || character.Type1 == Enums.PokemonType.Steel || character.Type2 == Enums.PokemonType.Steel) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s type doesn't get poisoned!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(483)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by its Pecha Scarf!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } else if (character.StatusAilment == Enums.StatusAilment.Poison) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already poisoned!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } else { //if (msg) { // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10); //} PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Sleep": { if (character.StatusAilment == Enums.StatusAilment.OK) { if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) { checkStatus = character.VolatileStatus.GetStatus("Status Guard"); if (checkStatus != null && checkStatus.Tag == "5") { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from paralysis!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } //Sweet Veil if (HasAbility(character, "Sweet Veil") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't become drowsy due to Sweet Veil!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(59)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Insomniscope prevented it from falling asleep!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.VolatileStatus.GetStatus("Sleepless") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't fall asleep!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Insomnia") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Insomnia prevented it from falling asleep!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Vital Spirit") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Vital Spirit prevented it from falling asleep!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } else if (character.StatusAilment == Enums.StatusAilment.Sleep) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already asleep!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } else { //if (msg) { // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10); //} PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Confusion": { if (character.VolatileStatus.GetStatus("Confusion") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already confused!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if ((attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) && character.VolatileStatus.GetStatus("Confusion Guard") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from confusion!", Text.BrightCyan), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(323)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Persim Band prevented confusion!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Own Tempo") && !HasAbility(character, "Tangled Feet") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Own Tempo prevented it from becoming confused!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } //if (character.CharacterType == Enums.CharacterType.Recruit) { // if (((Recruit)character).Owner.Player.Confusion > 0 && statusParam[1].ToInt() > 0) { // if (msg) { // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already confused!", Text.BrightRed), character.X, character.Y, 10); // } // PacketHitList.MethodEnded(ref hitlist); // return true; // } //} else { // if (((MapNpc)character).Confused) { // if (msg) { // hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already confused!", Text.BrightRed), character.X, character.Y, 10); // } // PacketHitList.MethodEnded(ref hitlist); // return true; // } //} } break; case "Cringe": { if (HasAbility(character, "Inner Focus") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Inner Focus prevented it from cringing!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Immobilize": { if (character.VolatileStatus.GetStatus("Immobilize") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already Immobilized!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(40)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected from being immobilized by the Shed Shell!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Run Away")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided immobilization with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Nightmare": { if (character.VolatileStatus.GetStatus("Nightmare") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already under the effects of Nightmare!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(498)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The Lunar Wing protected " + character.Name + " from the nightmare!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "GastroAcid": { if (character.VolatileStatus.GetStatus("GastroAcid") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already under the effects of Gastro Acid!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Attract": { if (character.VolatileStatus.GetStatus("Attract") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already infatuated!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Oblivious") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided infatuation with Oblivious!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasActiveBagItem(character, 14, 0, 0)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.WhiteSmoke), character.X, character.Y, 10); } return true; } } break; case "Encore": { if (HasActiveBagItem(character, 14, 0, 0)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.WhiteSmoke), character.X, character.Y, 10); } return true; } } break; case "Torment": { if (HasActiveBagItem(character, 14, 0, 0)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.WhiteSmoke), character.X, character.Y, 10); } return true; } } break; case "Taunt": { if (HasActiveBagItem(character, 14, 0, 0)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.WhiteSmoke), character.X, character.Y, 10); } return true; } } break; case "Embargo": { if (character.VolatileStatus.GetStatus("Embargo") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already under the effects of Embargo!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "HealBlock": { if (character.VolatileStatus.GetStatus("HealBlock") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already under the effects of Heal Block!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Substitute": { if (character.VolatileStatus.GetStatus("Substitute") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has a substitute!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Ingrain": { if (character.VolatileStatus.GetStatus("Ingrain") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has its roots planted!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "AquaRing": { if (character.VolatileStatus.GetStatus("AquaRing") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has an Aqua Ring!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Wish": { if (character.VolatileStatus.GetStatus("Wish") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already being wished upon!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Exposed": { if (character.VolatileStatus.GetStatus("Exposed") != null) { if (msg && !HasActiveBagItem(character, 20, 9, 0) && !HasActiveBagItem(character, 20, 6, 0)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already exposed!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "MiracleEye": { if (character.VolatileStatus.GetStatus("MiracleEye") != null) { if (msg && !HasActiveBagItem(character, 20, 2, 0)) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can already hit Dark-type Pok�mon with Psychic-type moves!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Bind": { if (character.VolatileStatus.GetStatus("Bind:0") != null && statusParam[1] == "0" || character.VolatileStatus.GetStatus("Bind:1") != null && statusParam[1] == "1") { PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(40) && statusParam[1] == "0") { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Run Away")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Clamp": { if (character.VolatileStatus.GetStatus("Clamp:0") != null && statusParam[1] == "0" || character.VolatileStatus.GetStatus("Clamp:1") != null && statusParam[1] == "1") { PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(40) && statusParam[1] == "0") { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Run Away")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Wrap": { if (character.VolatileStatus.GetStatus("Wrap:0") != null && statusParam[1] == "0" || character.VolatileStatus.GetStatus("Wrap:1") != null && statusParam[1] == "1") { PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(40) && statusParam[1] == "0") { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Run Away")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "FireSpin": { if (character.VolatileStatus.GetStatus("FireSpin") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by Fire Spin!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(40)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Run Away")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Whirlpool": { if (character.VolatileStatus.GetStatus("Whirlpool") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by Whirlpool!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(40)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Run Away")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Infestation": { if (character.VolatileStatus.GetStatus("Infesation") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by an Infestation!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(40)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Run Away")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "SandTomb": { if (character.VolatileStatus.GetStatus("SandTomb") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by Sand Tomb!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(40)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Run Away")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "MagmaStorm": { if (character.VolatileStatus.GetStatus("MagmaStorm") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by Magma Storm!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.HasActiveItem(40)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Run Away")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "LeechSeed": { if (statusParam[1] == "0") { if (character.VolatileStatus.GetStatus("LeechSeed") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has a Leech Seed!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.Type1 == Enums.PokemonType.Grass || character.Type2 == Enums.PokemonType.Grass) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " didn't take on the Leech Seed.", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } } break; case "TypeReduce": { checkStatus = character.VolatileStatus.GetStatus("TypeReduce"); if (checkStatus != null && statusParam[1].ToInt() == checkStatus.Counter) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already takes reduced damage from " + (Enums.PokemonType)statusParam[1].ToInt() + " -type moves!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "TypeBoost": { checkStatus = character.VolatileStatus.GetStatus("TypeBoost"); if (checkStatus != null && statusParam[1].ToInt() == checkStatus.Counter) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + (Enums.PokemonType)statusParam[1].ToInt() + " -type moves are already boosted!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "AttackReturn": { checkStatus = character.VolatileStatus.GetStatus("AttackReturn"); if (checkStatus != null && statusParam[1].ToInt() == checkStatus.Counter) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already set to counter " + (Enums.MoveCategory)statusParam[1].ToInt() + " moves!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "FlashFire": { if (character.VolatileStatus.GetStatus("FlashFire") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already powered up by Flash Fire!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "MoveSeal": { if (character.Moves[statusParam[1].ToInt()].MoveNum <= 0) { PacketHitList.MethodEnded(ref hitlist); return true; } if (character.VolatileStatus.GetStatus(status) != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + MoveManager.Moves[character.Moves[statusParam[1].ToInt()].MoveNum].Name + " is already sealed!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Disable": { if (character.Moves[statusParam[1].ToInt()].MoveNum == 0) { PacketHitList.MethodEnded(ref hitlist); return true; } if (character.VolatileStatus.GetStatus("Disable") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has a move disabled!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Stockpile": { checkStatus = character.VolatileStatus.GetStatus("Stockpile"); if (checkStatus != null && checkStatus.Counter >= 3) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't stockpile any more!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Roost": { if (map.Tile[character.X, character.Y].Type == Enums.TileType.MobileBlock) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't land here!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "PerishCount": { checkStatus = character.VolatileStatus.GetStatus("PerishCount"); if (checkStatus != null && checkStatus.Counter <= statusParam[1].ToInt()) { PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "FutureSight": { if (character.VolatileStatus.GetStatus("FutureSight") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already targeted by Future Sight!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "FocusEnergy": { if (character.VolatileStatus.GetStatus("FocusEnergy") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already focused!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Yawn": { if (character.VolatileStatus.GetStatus("Sleepless") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't become drowsy its sleeplessness!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Insomnia") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't become drowsy due to Insomnia!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (HasAbility(character, "Vital Spirit") && !HasAbility(attacker, "Mold Breaker")) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't become drowsy due to Vital Spirit!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.VolatileStatus.GetStatus("Yawn") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already yawning!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.StatusAilment != Enums.StatusAilment.OK) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " didn't yawn!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Sleepless": { if (character.StatusAilment == Enums.StatusAilment.Sleep && character.HasActiveItem(347)) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't wake up due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } if (character.VolatileStatus.GetStatus("Sleepless") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already sleepless!", Text.BrightRed), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Status Guard": { checkStatus = character.VolatileStatus.GetStatus("Status Guard"); if (checkStatus != null && tag == checkStatus.Tag) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected from the " + (Enums.StatusAilment)tag.ToInt() + " status!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Confusion Guard": { if (character.VolatileStatus.GetStatus("Confusion Guard") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected from confusion", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Wide Guard": { if (character.VolatileStatus.GetStatus("WideGuard") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected by Wide Guard!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Quick Guard": { if (character.VolatileStatus.GetStatus("QuickGuard") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected by Quick Guard!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Protect": { if (character.VolatileStatus.GetStatus("Protect") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Endure": { if (character.VolatileStatus.GetStatus("Endure") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already enduring!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "MagicCoat": { if (character.VolatileStatus.GetStatus("MagicCoat") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected by Magic Coat!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "MagnetRise": { if (character.VolatileStatus.GetStatus("MagnetRise") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already levitating with Magnet Rise!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Telekinesis": { if (character.VolatileStatus.GetStatus("Telekinesis") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already floating from Telekinesis!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "Counter": { if (character.VolatileStatus.GetStatus("Counter") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has Counter up!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "MirrorCoat": { if (character.VolatileStatus.GetStatus("MirrorCoat") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has Mirror Coat up!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "MetalBurst": { if (character.VolatileStatus.GetStatus("MetalBurst") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has Metal Burst up!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; case "DestinyBond": { if (character.VolatileStatus.GetStatus("DestinyBond") != null) { if (msg) { hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has Destiny Bond up!", Text.WhiteSmoke), character.X, character.Y, 10); } PacketHitList.MethodEnded(ref hitlist); return true; } } break; } PacketHitList.MethodEnded(ref hitlist); return false; } catch (Exception ex) { Messenger.AdminMsg("Error: CheckStatusProtection " + status + " " + tag, Text.Black); Messenger.AdminMsg(ex.ToString(), Text.Black); return false; } }
private static void HealCharacterPP(ICharacter character, IMap map, int pp, PacketHitList hitlist) { for (int i = 0; i < Constants.MAX_PLAYER_MOVES; i++) { if (character.Moves[i] != null) { character.Moves[i].CurrentPP += pp; if (character.Moves[i].CurrentPP > character.Moves[i].MaxPP) { character.Moves[i].CurrentPP = character.Moves[i].MaxPP; } } } if (character.CharacterType == Enums.CharacterType.Recruit) { PacketBuilder.AppendPlayerMoves(((Recruit)character).Owner, hitlist); } hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s moves regained " + pp + " PP.", Text.BrightGreen), character.X, character.Y, 10); }
public static void Flinch(ICharacter character, ICharacter attacker, IMap map, PacketHitList hitlist) { if (!CheckStatusProtection(character, attacker, map, "Cringe", true, hitlist)) { if (character.AttackTimer == null || character.AttackTimer.Tick < Core.GetTickCount().Tick) { character.AttackTimer = new TickCount(Core.GetTickCount().Tick); } character.AttackTimer = new TickCount(character.AttackTimer.Tick + 2000); hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " cringed!", Text.BrightRed), character.X, character.Y, 10); } if (HasAbility(character, "Steadfast")) { ChangeSpeedBuff(character, map, 1, hitlist); } }