From bbd2debc08fc8ade8cfbc0fa5c74a6b0f44748b8 Mon Sep 17 00:00:00 2001 From: ronancpl Date: Mon, 5 Mar 2018 21:23:50 -0300 Subject: [PATCH] Reactor drops & Looting & Mob HP overhaul + TreasurePQ Modified coupon rates buff icon to not show up as expirable. Reactor drops now also drops quest items at the border of the dropped items. Added themed drop data for the Cake boss. Reworked the Balrog expedition. Added quest script for the Assassinate skill. Fixed looting system blocking the killer's party from retrieving a loot until the FFA timeout. Fixed a deadlock with the MapleMap class. Refactored damage/heal contabilization on mobs. Fixed issues with HT and status-based damage, providing weird issues with mob HP. New PQ: TreasurePQ, for level 140+. --- docs/feature_list.md | 6 +- docs/mychanges_ptbr.txt | 20 +- handbook/Map.txt | 2 +- handbook/Use.txt | 8 +- compile-posix.sh => posix-compile.sh | 0 launch.sh => posix-launch.sh | 0 scripts/REACT Base.js | 28 + scripts/event/BalrogBattle.js | 258 + scripts/event/BalrogBattle_Easy.js | 258 + scripts/event/TreasurePQ.js | 225 + scripts/map/onFirstUserEnter/balog_summon.js | 13 - scripts/npc/1002004.js | 2 +- scripts/npc/1032005.js | 6 +- scripts/npc/1061014.js | 217 +- scripts/npc/1061018.js | 72 +- scripts/npc/2060009.js | 2 +- scripts/npc/2081000.js | 2 +- scripts/npc/9201056.js | 23 +- scripts/npc/9209000.js | 2 +- scripts/npc/9220018.js | 67 + scripts/npc/9220019.js | 59 + scripts/npc/9220020.js | 68 + scripts/portal/MD_cakeEnter.js | 4 + scripts/portal/enter_td.js | 4 + scripts/portal/guyfawkes0_esc.js | 28 + scripts/portal/guyfawkes0_floor.js | 23 + scripts/portal/nets_in.js | 4 +- scripts/portal/nets_out.js | 6 +- scripts/portal/s4hitman.js | 4 +- scripts/quest/3108.js | 2 +- scripts/reactor/1020000.js | 28 + scripts/reactor/1020001.js | 28 + scripts/reactor/1020002.js | 28 + scripts/reactor/1021000.js | 28 + scripts/reactor/1021001.js | 28 + scripts/reactor/1021002.js | 28 + scripts/reactor/1022000.js | 28 + scripts/reactor/1052001.js | 2 +- scripts/reactor/1052002.js | 2 +- scripts/reactor/6741001.js | 23 + scripts/reactor/6741015.js | 23 + scripts/reactor/6742014.js | 23 + sql/db_database.sql | 92 +- sql/db_drops.sql | 329 +- src/client/MapleCharacter.java | 15 +- src/client/command/Commands.java | 12 +- .../channel/handlers/PetLootHandler.java | 1 + src/scripting/event/EventInstanceManager.java | 1 + .../reactor/ReactorActionManager.java | 71 +- src/server/events/BalrogPQ.java | 112 - src/server/life/MapleMonster.java | 136 +- src/server/life/MonsterListener.java | 1 + src/server/life/SpawnPoint.java | 3 + src/server/maps/MapleMap.java | 105 +- src/server/maps/MapleMapFactory.java | 12 +- src/server/maps/MapleMapItem.java | 37 +- src/tools/MaplePacketCreator.java | 16 +- wz/Item.wz/Cash/0521.img.xml | 60 +- wz/Item.wz/Cash/0536.img.xml | 20 +- wz/Item.wz/Etc/0403.img.xml | 2 + wz/Map.wz/Map/Map1/102000000.img.xml | 15915 +++++++------ wz/Map.wz/Map/Map2/251000000.img.xml | 8816 ++++---- wz/Map.wz/Map/Map6/674030000.img.xml | 18461 ++++++++-------- wz/Mob.wz/9400589.img.xml | 31 +- wz/Mob.wz/9400739.img.xml | 24 +- wz/Mob.wz/9400740.img.xml | 24 +- wz/Mob.wz/9400741.img.xml | 18 +- wz/Mob.wz/9400742.img.xml | 18 +- wz/Mob.wz/9400743.img.xml | 20 +- wz/Mob.wz/9400744.img.xml | 26 +- wz/Mob.wz/9400745.img.xml | 28 +- wz/Mob.wz/9400746.img.xml | 22 +- wz/Mob.wz/9400747.img.xml | 24 +- wz/Mob.wz/9400748.img.xml | 31 +- wz/Mob.wz/9400749.img.xml | 2 +- wz/String.wz/Consume.img.xml | 8 +- wz/String.wz/Map.img.xml | 10 +- wz/UI.wz/UIWindow.img.xml | 8 + 78 files changed, 24225 insertions(+), 21968 deletions(-) rename compile-posix.sh => posix-compile.sh (100%) rename launch.sh => posix-launch.sh (100%) create mode 100644 scripts/REACT Base.js create mode 100644 scripts/event/BalrogBattle.js create mode 100644 scripts/event/BalrogBattle_Easy.js create mode 100644 scripts/event/TreasurePQ.js delete mode 100644 scripts/map/onFirstUserEnter/balog_summon.js create mode 100644 scripts/npc/9220018.js create mode 100644 scripts/npc/9220019.js create mode 100644 scripts/npc/9220020.js create mode 100644 scripts/portal/MD_cakeEnter.js create mode 100644 scripts/portal/enter_td.js create mode 100644 scripts/portal/guyfawkes0_esc.js create mode 100644 scripts/portal/guyfawkes0_floor.js create mode 100644 scripts/reactor/1020000.js create mode 100644 scripts/reactor/1020001.js create mode 100644 scripts/reactor/1020002.js create mode 100644 scripts/reactor/1021000.js create mode 100644 scripts/reactor/1021001.js create mode 100644 scripts/reactor/1021002.js create mode 100644 scripts/reactor/1022000.js create mode 100644 scripts/reactor/6741001.js create mode 100644 scripts/reactor/6741015.js create mode 100644 scripts/reactor/6742014.js delete mode 100644 src/server/events/BalrogPQ.java diff --git a/docs/feature_list.md b/docs/feature_list.md index 44a1fe1bed..83c13e2af5 100644 --- a/docs/feature_list.md +++ b/docs/feature_list.md @@ -22,13 +22,12 @@ Feature list: PQs: -* HPQ/KPQ/LPQ/LMPQ/OPQ/EllinPQ/PiratePQ/MagatiaPQ/HorntailPQ/AmoriaPQ. +* HPQ/KPQ/LPQ/LMPQ/OPQ/EllinPQ/PiratePQ/MagatiaPQ/HorntailPQ/AmoriaPQ/TreasurePQ. * CWKPQ as Expedition-based event. -* Expeditions: Scarga/Horntail/Showa/Zakum/Pinkbean. +* Expeditions: Scarga/Horntail/Showa/Balrog/Zakum/Pinkbean. * GuildPQ 100% + Guild queue with multi-lobby systems available. * Brand-new PQs: BossRushPQ, CafePQ. * Mu Lung Dojo. -* BalrogPQ semi-functional. * Capt. Latanica remade as an event (parties can now fight the boss). Skills: @@ -76,6 +75,7 @@ Monsters, Maps & Reactors: * PQs, Taxis and other event-driven situations warps players at random spawnpoints, GMS-like. * Some reactors (PQ bonus boxes) now sprays items on the map, instead of dropping everything at once. * Updated Crimsonwood, World Tour, Nihal Desert and Neo City, enabling quest completion and game progression in these areas. +* Giant Cake (anniversary-themed boss) drops Maple equipments, Maple scrolls, summoning bags and many more interesting items. PQ potentials: diff --git a/docs/mychanges_ptbr.txt b/docs/mychanges_ptbr.txt index eb7572aebc..c80f1f7462 100644 --- a/docs/mychanges_ptbr.txt +++ b/docs/mychanges_ptbr.txt @@ -17,7 +17,7 @@ Inclui constante SCROLL_CHANCE_RATE: repete resultados na tentativa de scrolls. Inclui constantes ADD_SLOTS_BY_LEVEL + ADD_RATES_BY_LEVEL: muda rates do gameplay de um personagem com a evolucao dele. Alterei APs podendo aumentar ate 32767. Corrigi alguns XMLs dos mapas de Omega Sector, tinham ordem dos portais invertidas. -AUTOBAN eh uma constante setavel do server agora. +AUTOBAN eh uma constante setável do server agora. 17 Julho 2015, Adaptei todos os scripts de 2nd job adv. Nao testado ainda! @@ -805,4 +805,20 @@ Novo comando: reach. Transporta o usuário do comando a um ponto próximo ao jog 20 Fevereiro 2018, Corrigido skill Steal não agindo corretamente. Ratio de drops agora segue conformante ao determinado pelas chances de sair cada item (itens comuns cairão com mais frequência). -Modificado skill Steal para não dropar mais itens de PQ nem de quest. \ No newline at end of file +Modificado skill Steal para não dropar mais itens de PQ nem de quest. + +22 - 24 Fevereiro 2018, +Modificado atributo "time" dos buffs de rate cupons para ser não-expirável a curto prazo. +Melhorado drops de itens de reatores agora centralizando e não deixando "espaços vazios" (ocupados por itens de quest não-visíveis pelo jogador). +Corrigido portal mal-posicionado em Herb Town. +Adicionado drop data para Giant Cake. +Implementado expedição Balrog. + +01 - 05 Março 2018, +Implementado missão da skill Assassinate. +Resolvido bug com jogador em party tendo que esperar um tempo antes de pegar loot. +Resolvido problemas com loots não diferenciando partyids de playerids, além de permitir exploits para ações de pickup dos jogadores e autoloot de pets. +Resolvido caso de deadlock no MapleMap (uso de broadcastMessage, que usa chrLock, após adquirido objectLock). +Refatorado dano/cura em mobs, agora encapsulando atomicamente as mudanças de HP. Resolvido também problemas de acesso concorrente quanto a isso. +Resolvido problemas com HT e danos de status poison, bagunçando as contabilizações de HP de vez em quando. +Nova PQ: TreasurePQ, level 140+, acessível via portal em NLC. \ No newline at end of file diff --git a/handbook/Map.txt b/handbook/Map.txt index 9c5bdc793c..a5d43df729 100644 --- a/handbook/Map.txt +++ b/handbook/Map.txt @@ -2175,10 +2175,10 @@ etc 680100001 - Maple 7th Day Market - Maple 7th Day Market 680100002 - Maple 7th Day Market - Maple 7th Day Market 680100003 - Maple 7th Day Market - Maple 7th Day Market -674030300 - Treasure Dungeon - (no map name) 674030000 - Initiation - (no map name) 674030100 - Entrance to MV's Lair - (no map name) 674030200 - The Lair of MV - (no map name) +674030300 - Treasure Dungeon - (no map name) 910020000 - Hidden Street - Nest of a Baby Bird 910100000 - Hidden Street - The Cursed Forest 910100001 - Hidden Street - The Cursed Forest diff --git a/handbook/Use.txt b/handbook/Use.txt index 5b48ddf3f3..6dbac5ec5f 100644 --- a/handbook/Use.txt +++ b/handbook/Use.txt @@ -580,10 +580,10 @@ 2040717 - Dark scroll for Shoes for Speed - Improves speed on shoes.\nSuccess rate:30%, speed+3nIf failed, the item will be destroyed at a 50% rate. 2040718 - Scroll for Shoes for DEX - Improves dexterity on shoes.\nSuccess rate:65%, avoidability+2, accuracy+1 2040719 - Scroll for Shoes for DEX - Improves dexterity on shoes.\nSuccess rate:15%, avoidability+5, accuracy+3, speed+1 -2040720 - Scroll for Jump for DEX - Improves jump on shoes.\nSuccess rate:65%, jump+2, DEX+1 -2040721 - Scroll for Jump for DEX - Improves jump on shoes.\nSuccess rate:15%, jump+5, DEX+3, speed+1 -2040722 - Scroll for Speed for DEX - Improves speed on shoes.\nSuccess rate:65%, speed+2 -2040723 - Scroll for Speed for DEX - Improves speed on shoes.\nSuccess rate:15%, speed+3 +2040720 - Scroll for Shoes for Jump - Improves jump on shoes.\nSuccess rate:65%, jump+2, DEX+1 +2040721 - Scroll for Shoes for Jump - Improves jump on shoes.\nSuccess rate:15%, jump+5, DEX+3, speed+1 +2040722 - Scroll for Shoes for Speed - Improves speed on shoes.\nSuccess rate:65%, speed+2 +2040723 - Scroll for Shoes for Speed - Improves speed on shoes.\nSuccess rate:15%, speed+3 2040727 - Scroll for Spikes on Shoes 10% - Adds traction to the shoes, which prevents the shoes from slipping on slippery surface.\nSuccess rate:10%, Does not affect the number of upgrades available. The success rate of this scroll can be enhanced by Vega's Spell. 2040800 - Scroll for Gloves for DEX - Improves dexterity on gloves.\nSuccess rate:100%, accurcacy +1 2040801 - Scroll for Gloves for DEX - Improves dexterity on gloves.\nSuccess rate: 60%, accuracy+2, DEX+1. The success rate of this scroll can be enhanced by Vega's Spell. diff --git a/compile-posix.sh b/posix-compile.sh similarity index 100% rename from compile-posix.sh rename to posix-compile.sh diff --git a/launch.sh b/posix-launch.sh similarity index 100% rename from launch.sh rename to posix-launch.sh diff --git a/scripts/REACT Base.js b/scripts/REACT Base.js new file mode 100644 index 0000000000..e3d81de4e8 --- /dev/null +++ b/scripts/REACT Base.js @@ -0,0 +1,28 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +/* @Author Ronan + * + * REACTORID.js: sample text +*/ + +function act() { + +} \ No newline at end of file diff --git a/scripts/event/BalrogBattle.js b/scripts/event/BalrogBattle.js new file mode 100644 index 0000000000..9a49d92092 --- /dev/null +++ b/scripts/event/BalrogBattle.js @@ -0,0 +1,258 @@ +/** + * @author: Ronan + * @event: Vs Balrog +*/ + +importPackage(Packages.server.life); + +var isPq = true; +var minPlayers = 6, maxPlayers = 30; +var minLevel = 50, maxLevel = 255; +var entryMap = 105100300; +var exitMap = 105100100; +var recruitMap = 105100100; +var clearMap = 105100301; + +var minMapId = 105100300; +var maxMapId = 105100301; + +var minMobId = 8830000; +var maxMobId = 8830006; +var bossMobId = 8830003; + +var eventTime = 60; // 60 minutes +var releaseClawTime = 1; + +var lobbyRange = [0, 0]; + +function init() { + setEventRequirements(); +} + +function setLobbyRange() { + return lobbyRange; +} + +function setEventRequirements() { + var reqStr = ""; + + reqStr += "\r\n Number of players: "; + if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers; + else reqStr += minPlayers; + + reqStr += "\r\n Level range: "; + if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel; + else reqStr += minLevel; + + reqStr += "\r\n Time limit: "; + reqStr += eventTime + " minutes"; + + em.setProperty("party", reqStr); +} + +function setEventExclusives(eim) { + var itemSet = []; + eim.setExclusiveItems(itemSet); +} + +function setEventRewards(eim) { + var itemSet, itemQty, evLevel, expStages; + + evLevel = 1; //Rewards at clear PQ + itemSet = []; + itemQty = []; + eim.setEventRewards(evLevel, itemSet, itemQty); + + expStages = []; //bonus exp given on CLEAR stage signal + eim.setEventClearStageExp(expStages); +} + +function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event + var eligible = []; + var hasLeader = false; + + if(party.size() > 0) { + var partyList = party.toArray(); + + for(var i = 0; i < party.size(); i++) { + var ch = partyList[i]; + + if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) { + if(ch.isLeader()) hasLeader = true; + eligible.push(ch); + } + } + } + + if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = []; + return eligible; +} + +function setup(level, lobbyid) { + var eim = em.newInstance("Balrog" + lobbyid); + eim.setProperty("level", level); + eim.setProperty("boss", "0"); + + eim.getInstanceMap(105100300).resetPQ(level); + eim.getInstanceMap(105100301).resetPQ(level); + eim.schedule("releaseLeftClaw", releaseClawTime * 60000); + + respawnStages(eim); + eim.startEventTimer(eventTime * 60000); + setEventRewards(eim); + setEventExclusives(eim); + return eim; +} + +function afterSetup(eim) { + spawnBalrog(eim); +} + +function respawnStages(eim) {} + +function releaseLeftClaw(eim) { + eim.getInstanceMap(entryMap).killMonster(8830006); +} + +function spawnBalrog(eim) { + var mapObj = eim.getInstanceMap(entryMap); + + mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830000), new Packages.java.awt.Point(412, 258)); + mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830002), new Packages.java.awt.Point(412, 258)); + mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830006), new Packages.java.awt.Point(412, 258)); +} + +function spawnSealedBalrog(eim) { + eim.getInstanceMap(entryMap).spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830003), new Packages.java.awt.Point(412, 258)); +} + +function playerEntry(eim, player) { + var map = eim.getMapInstance(entryMap); + player.changeMap(map, map.getPortal(0)); +} + +function scheduledTimeout(eim) { + end(eim); +} + +function playerUnregistered(eim, player) {} + +function playerExit(eim, player) { + eim.unregisterPlayer(player); + player.changeMap(exitMap, 0); +} + +function playerLeft(eim, player) { + if(!eim.isEventCleared()) { + playerExit(eim, player); + } +} + +function changedMap(eim, player, mapid) { + if (mapid < minMapId || mapid > maxMapId) { + if (eim.isEventTeamLackingNow(true, minPlayers, player)) { + eim.unregisterPlayer(player); + end(eim); + } + else + eim.unregisterPlayer(player); + } +} + +function changedLeader(eim, leader) { + var mapid = leader.getMapId(); + if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) { + end(eim); + } +} + +function playerDead(eim, player) {} + +function playerRevive(eim, player) { // player presses ok on the death pop up. + if (eim.isEventTeamLackingNow(true, minPlayers, player)) { + eim.unregisterPlayer(player); + end(eim); + } + else + eim.unregisterPlayer(player); +} + +function playerDisconnected(eim, player) { + if (eim.isEventTeamLackingNow(true, minPlayers, player)) { + eim.unregisterPlayer(player); + end(eim); + } + else + eim.unregisterPlayer(player); +} + +function leftParty(eim, player) { + if (eim.isEventTeamLackingNow(false, minPlayers, player)) { + end(eim); + } + else + playerLeft(eim, player); +} + +function disbandParty(eim) { + if (!eim.isEventCleared()) { + end(eim); + } +} + +function monsterValue(eim, mobId) { + return 1; +} + +function end(eim) { + var party = eim.getPlayers(); + + for (var i = 0; i < party.size(); i++) { + playerExit(eim, party.get(i)); + } + eim.dispose(); +} + +function giveRandomEventReward(eim, player) { + eim.giveEventReward(player); +} + +function clearPQ(eim) { + eim.stopEventTimer(); + eim.setEventCleared(); +} + +function isUnsealedBalrog(mob) { + var balrogid = mob.getId() - 8830000; + return balrogid >= 0 && balrogid <= 2; +} + +function isBalrogBody(mob) { + return mob.getId() == minMobId; +} + +function monsterKilled(mob, eim) { + if(isUnsealedBalrog(mob)) { + var count = eim.getIntProperty("boss"); + + if(count == 2) { + eim.showClearEffect(); + eim.clearPQ(); + + mob.getMap().broadcastBalrogVictory(eim.getLeader().getName()); + } else { + eim.setIntProperty("boss", count + 1); + } + + if(isBalrogBody(mob)) { + eim.schedule("spawnSealedBalrog", 10 * 1000); + } + } +} + +function allMonstersDead(eim) {} + +function cancelSchedule() {} + +function dispose(eim) {} + diff --git a/scripts/event/BalrogBattle_Easy.js b/scripts/event/BalrogBattle_Easy.js new file mode 100644 index 0000000000..c33f170cb2 --- /dev/null +++ b/scripts/event/BalrogBattle_Easy.js @@ -0,0 +1,258 @@ +/** + * @author: Ronan + * @event: Vs Balrog +*/ + +importPackage(Packages.server.life); + +var isPq = true; +var minPlayers = 3, maxPlayers = 30; +var minLevel = 50, maxLevel = 255; +var entryMap = 105100400; +var exitMap = 105100100; +var recruitMap = 105100100; +var clearMap = 105100401; + +var minMapId = 105100400; +var maxMapId = 105100401; + +var minMobId = 8830007; +var maxMobId = 8830013; +var bossMobId = 8830010; + +var eventTime = 60; // 60 minutes +var releaseClawTime = 1; + +var lobbyRange = [0, 0]; + +function init() { + setEventRequirements(); +} + +function setLobbyRange() { + return lobbyRange; +} + +function setEventRequirements() { + var reqStr = ""; + + reqStr += "\r\n Number of players: "; + if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers; + else reqStr += minPlayers; + + reqStr += "\r\n Level range: "; + if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel; + else reqStr += minLevel; + + reqStr += "\r\n Time limit: "; + reqStr += eventTime + " minutes"; + + em.setProperty("party", reqStr); +} + +function setEventExclusives(eim) { + var itemSet = []; + eim.setExclusiveItems(itemSet); +} + +function setEventRewards(eim) { + var itemSet, itemQty, evLevel, expStages; + + evLevel = 1; //Rewards at clear PQ + itemSet = []; + itemQty = []; + eim.setEventRewards(evLevel, itemSet, itemQty); + + expStages = []; //bonus exp given on CLEAR stage signal + eim.setEventClearStageExp(expStages); +} + +function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event + var eligible = []; + var hasLeader = false; + + if(party.size() > 0) { + var partyList = party.toArray(); + + for(var i = 0; i < party.size(); i++) { + var ch = partyList[i]; + + if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) { + if(ch.isLeader()) hasLeader = true; + eligible.push(ch); + } + } + } + + if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = []; + return eligible; +} + +function setup(level, lobbyid) { + var eim = em.newInstance("Balrog" + lobbyid); + eim.setProperty("level", level); + eim.setProperty("boss", "0"); + + eim.getInstanceMap(105100400).resetPQ(level); + eim.getInstanceMap(105100401).resetPQ(level); + eim.schedule("releaseLeftClaw", releaseClawTime * 60000); + + respawnStages(eim); + eim.startEventTimer(eventTime * 60000); + setEventRewards(eim); + setEventExclusives(eim); + return eim; +} + +function afterSetup(eim) { + spawnBalrog(eim); +} + +function respawnStages(eim) {} + +function releaseLeftClaw(eim) { + eim.getInstanceMap(entryMap).killMonster(8830013); +} + +function spawnBalrog(eim) { + var mapObj = eim.getInstanceMap(entryMap); + + mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830007), new Packages.java.awt.Point(412, 258)); + mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830009), new Packages.java.awt.Point(412, 258)); + mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830013), new Packages.java.awt.Point(412, 258)); +} + +function spawnSealedBalrog(eim) { + eim.getInstanceMap(entryMap).spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830010), new Packages.java.awt.Point(412, 258)); +} + +function playerEntry(eim, player) { + var map = eim.getMapInstance(entryMap); + player.changeMap(map, map.getPortal(0)); +} + +function scheduledTimeout(eim) { + end(eim); +} + +function playerUnregistered(eim, player) {} + +function playerExit(eim, player) { + eim.unregisterPlayer(player); + player.changeMap(exitMap, 0); +} + +function playerLeft(eim, player) { + if(!eim.isEventCleared()) { + playerExit(eim, player); + } +} + +function changedMap(eim, player, mapid) { + if (mapid < minMapId || mapid > maxMapId) { + if (eim.isEventTeamLackingNow(true, minPlayers, player)) { + eim.unregisterPlayer(player); + end(eim); + } + else + eim.unregisterPlayer(player); + } +} + +function changedLeader(eim, leader) { + var mapid = leader.getMapId(); + if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) { + end(eim); + } +} + +function playerDead(eim, player) {} + +function playerRevive(eim, player) { // player presses ok on the death pop up. + if (eim.isEventTeamLackingNow(true, minPlayers, player)) { + eim.unregisterPlayer(player); + end(eim); + } + else + eim.unregisterPlayer(player); +} + +function playerDisconnected(eim, player) { + if (eim.isEventTeamLackingNow(true, minPlayers, player)) { + eim.unregisterPlayer(player); + end(eim); + } + else + eim.unregisterPlayer(player); +} + +function leftParty(eim, player) { + if (eim.isEventTeamLackingNow(false, minPlayers, player)) { + end(eim); + } + else + playerLeft(eim, player); +} + +function disbandParty(eim) { + if (!eim.isEventCleared()) { + end(eim); + } +} + +function monsterValue(eim, mobId) { + return 1; +} + +function end(eim) { + var party = eim.getPlayers(); + + for (var i = 0; i < party.size(); i++) { + playerExit(eim, party.get(i)); + } + eim.dispose(); +} + +function giveRandomEventReward(eim, player) { + eim.giveEventReward(player); +} + +function clearPQ(eim) { + eim.stopEventTimer(); + eim.setEventCleared(); +} + +function isUnsealedBalrog(mob) { + var balrogid = mob.getId() - 8830007; + return balrogid >= 0 && balrogid <= 2; +} + +function isBalrogBody(mob) { + return mob.getId() == minMobId; +} + +function monsterKilled(mob, eim) { + if(isUnsealedBalrog(mob)) { + var count = eim.getIntProperty("boss"); + + if(count == 2) { + eim.showClearEffect(); + eim.clearPQ(); + + mob.getMap().broadcastBalrogVictory(eim.getLeader().getName()); + } else { + eim.setIntProperty("boss", count + 1); + } + + if(isBalrogBody(mob)) { + eim.schedule("spawnSealedBalrog", 10 * 1000); + } + } +} + +function allMonstersDead(eim) {} + +function cancelSchedule() {} + +function dispose(eim) {} + diff --git a/scripts/event/TreasurePQ.js b/scripts/event/TreasurePQ.js new file mode 100644 index 0000000000..242286a265 --- /dev/null +++ b/scripts/event/TreasurePQ.js @@ -0,0 +1,225 @@ +/** + * @author: Ronan + * @event: Treasure PQ +*/ + +var isPq = true; +var minPlayers = 4, maxPlayers = 6; +var minLevel = 140, maxLevel = 255; +var entryMap = 674030000; +var exitMap = 674030100; +var recruitMap = 674030100; +var clearMap = 674030300; + +var minMapId = 674030000; +var maxMapId = 674030300; + +var eventTime = 45; // 45 minutes +var bonusTime = 10; // 10 minutes + +var lobbyRange = [0, 0]; + +function init() { + setEventRequirements(); +} + +function setLobbyRange() { + return lobbyRange; +} + +function setEventRequirements() { + var reqStr = ""; + + reqStr += "\r\n Number of players: "; + if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers; + else reqStr += minPlayers; + + reqStr += "\r\n Level range: "; + if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel; + else reqStr += minLevel; + + reqStr += "\r\n Time limit: "; + reqStr += eventTime + " minutes"; + + em.setProperty("party", reqStr); +} + +function setEventExclusives(eim) { + var itemSet = [4032118]; + eim.setExclusiveItems(itemSet); +} + +function setEventRewards(eim) { + var itemSet, itemQty, evLevel, expStages; + + evLevel = 1; //Rewards at clear PQ + itemSet = []; + itemQty = []; + eim.setEventRewards(evLevel, itemSet, itemQty); + + expStages = [60000, 100000]; //bonus exp given on CLEAR stage signal + eim.setEventClearStageExp(expStages); +} + +function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event + var eligible = []; + var hasLeader = false; + + if(party.size() > 0) { + var partyList = party.toArray(); + + for(var i = 0; i < party.size(); i++) { + var ch = partyList[i]; + + if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) { + if(ch.isLeader()) hasLeader = true; + eligible.push(ch); + } + } + } + + if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = []; + return eligible; +} + +function setup(level, lobbyid) { + var eim = em.newInstance("Treasure" + lobbyid); + eim.setProperty("level", level); + + eim.setProperty("statusStg1", "0"); + + eim.getInstanceMap(674030000).shuffleReactors(); + + respawnStages(eim); + eim.startEventTimer(eventTime * 60000); + setEventRewards(eim); + setEventExclusives(eim); + return eim; +} + +function afterSetup(eim) {} + +function respawnStages(eim) { + eim.getMapInstance(674030000).instanceMapRespawn(); + eim.schedule("respawnStages", 15 * 1000); +} + +function playerEntry(eim, player) { + var map = eim.getMapInstance(entryMap); + player.changeMap(map, map.getPortal(0)); +} + +function scheduledTimeout(eim) { + end(eim); +} + +function playerUnregistered(eim, player) {} + +function playerExit(eim, player) { + eim.unregisterPlayer(player); + player.changeMap(exitMap, 0); +} + +function playerLeft(eim, player) { + if(!eim.isEventCleared()) { + playerExit(eim, player); + } +} + +function changedMap(eim, player, mapid) { + if (mapid < minMapId || mapid > maxMapId || mapid == 674030100) { + if (eim.isEventTeamLackingNow(true, minPlayers, player)) { + eim.unregisterPlayer(player); + end(eim); + } + else + eim.unregisterPlayer(player); + } +} + +function changedLeader(eim, leader) { + var mapid = leader.getMapId(); + if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId || mapid == 674030100)) { + end(eim); + } +} + +function playerDead(eim, player) {} + +function playerRevive(eim, player) { // player presses ok on the death pop up. + if (eim.isEventTeamLackingNow(true, minPlayers, player)) { + eim.unregisterPlayer(player); + end(eim); + } + else + eim.unregisterPlayer(player); +} + +function playerDisconnected(eim, player) { + if (eim.isEventTeamLackingNow(true, minPlayers, player)) { + eim.unregisterPlayer(player); + end(eim); + } + else + eim.unregisterPlayer(player); +} + +function leftParty(eim, player) { + if (eim.isEventTeamLackingNow(false, minPlayers, player)) { + end(eim); + } + else + playerLeft(eim, player); +} + +function disbandParty(eim) { + if (!eim.isEventCleared()) { + end(eim); + } +} + +function monsterValue(eim, mobId) { + return 1; +} + +function end(eim) { + var party = eim.getPlayers(); + for (var i = 0; i < party.size(); i++) { + playerExit(eim, party.get(i)); + } + eim.dispose(); +} + +function giveRandomEventReward(eim, player) { + eim.giveEventReward(player); +} + +function warpBonus(eim) { + eim.startEventTimer(bonusTime * 60000); + eim.warpEventTeam(674030300); +} + +function clearPQ(eim) { + eim.stopEventTimer(); + eim.setEventCleared(); + + eim.schedule("warpBonus", 10 * 1000); +} + +function isMV(mob) { + var mobid = mob.getId(); + return (mobid == 9400589); +} + +function monsterKilled(mob, eim) { + if(isMV(mob)) { + eim.showClearEffect(); + eim.clearPQ(); + } +} + +function allMonstersDead(eim) {} + +function cancelSchedule() {} + +function dispose(eim) {} diff --git a/scripts/map/onFirstUserEnter/balog_summon.js b/scripts/map/onFirstUserEnter/balog_summon.js deleted file mode 100644 index a11306b3c8..0000000000 --- a/scripts/map/onFirstUserEnter/balog_summon.js +++ /dev/null @@ -1,13 +0,0 @@ -importPackage(Packages.server.life); -importPackage(Packages.tools); -importPackage(Packages.server.events); - -function start(ms) { - try { - ms.getPlayer().resetEnteredScript(); - ms.getPlayer().getClient().getSession().write(MaplePacketCreator.getClock(BalrogPQ.getSecondsLeft())); // 60 mins(1hr) - BalrogPQ.spawnBalrog(1, ms.getPlayer()); - } catch(err) { - ms.getPlayer().dropMessage(err); - } -} \ No newline at end of file diff --git a/scripts/npc/1002004.js b/scripts/npc/1002004.js index f5b2e2918f..7c71b507cf 100644 --- a/scripts/npc/1002004.js +++ b/scripts/npc/1002004.js @@ -41,7 +41,7 @@ function action(mode, type, selection) { if (mode == -1){ cm.dispose(); return; - }else if(mode == 0) { + } else if (mode == 0) { cm.sendOk("This town also has a lot to offer. Find us if and when you feel the need to go to the Ant Tunnel Park."); cm.dispose(); return; diff --git a/scripts/npc/1032005.js b/scripts/npc/1032005.js index e03312c65f..21d68f7bc6 100644 --- a/scripts/npc/1032005.js +++ b/scripts/npc/1032005.js @@ -39,10 +39,12 @@ function start() { function action(mode, type, selection) { status++; if (mode == -1){ - if(mode == 0) - cm.sendNext("This town also has a lot to offer. Find us if and when you feel the need to go to the Ant Tunnel Park."); cm.dispose(); return; + } else if (mode == 0) { + cm.sendOk("This town also has a lot to offer. Find us if and when you feel the need to go to the Ant Tunnel Park."); + cm.dispose(); + return; } if (status == 1) { cm.sendYesNo(cm.getJobId() == 0 ? "We have a special 90% discount for beginners. The Ant Tunnel is located deep inside in the dungeon that's placed at the center of the Victoria Island, where the 24 Hr Mobile Store is. Would you like to go there for #b1,000 mesos#k?" : "The regular fee applies for all non-beginners. The Ant Tunnel is located deep inside in the dungeon that's placed at the center of the Victoria Island, where 24 Hr Mobile Store is. Would you like to go there for #b10,000 mesos#k?"); diff --git a/scripts/npc/1061014.js b/scripts/npc/1061014.js index a0b78a4255..8d6e5b4932 100644 --- a/scripts/npc/1061014.js +++ b/scripts/npc/1061014.js @@ -1,55 +1,186 @@ -importPackage(Packages.server.events); -var status = 0; +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer -function start(){ - status = 0; + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License version 3 + as published by the Free Software Foundation. You may not use, modify + or distribute this program under any other version of the + GNU Affero General Public License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/* + * + *@author Ronan + */ + +importPackage(Packages.server.expeditions); +importPackage(Packages.tools); +importPackage(Packages.scripting.event); + +var status = 0; +var expedition; +var player; +var em; +var exped = MapleExpeditionType.BALROG_NORMAL; +var expedName = "Balrog"; +var expedBoss = "Balrog"; +var expedMap = "Balrog's Tomb"; + +var list = "What would you like to do?#b\r\n\r\n#L1#View current Expedition members#l\r\n#L2#Start the fight!#l\r\n#L3#Stop the expedition.#l"; + +function start() { action(1, 0, 0); } -function action(mode, type, selection){ - if(mode <= 0){ +function action(mode, type, selection) { + + player = cm.getPlayer(); + expedition = cm.getExpedition(exped); + em = cm.getEventManager("BalrogBattle"); + + if (mode == -1) { cm.dispose(); - } else if(status == 0){ - cm.sendNext("Hi there. I am #b#nMu Young#n#k, the temple Keeper."); - status++; - } else if(BalrogPQ.partyLeader == "undefined"){ - if(status == 1){ - var text = "This temple is currently under siege by the Balrog troops. We currently do not know who gave the orders. " + - "For a few weeks now, the #e#b Order of the Altair#n#k has been sending mercenaries, but they were eliminated every time." + - " So, traveler, would you like to try your luck at defeating this unspeakable horror? \r\n\r\n " + - "#L0#Yes. Please register me as party leader\r\n#L1#What is the #eOrder of the Altair?"; - cm.sendSimple(text); - status++; - } else if(selection == 0){ - if(cm.getPlayer().getLevel() >= 70){ - BalrogPQ.partyLeader = cm.getPlayer().getName(); - cm.sendOk("Success. Your name has been registered and you may enter the battlefield. Come speak to me when you're ready!"); - cm.getPlayer().getMap().broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(0, cm.getPlayer().getName() + " is currently fighting the balrog on CH" + cm.getPlayer().getClient().getChannel() + ". To join, do @balrogpq.")) - BalrogPQ.open(cm.getPlayer()); - cm.dispose(); - } else if(cm.getPlayer().getLevel() < 70){ - cm.sendOk("You must be at least level 70 to even consider battling the monster."); - cm.dispose(); - } - } else if(selection == 1){ - cm.sendOk("The Order of the Altair is a group of elite mercenaries that oversee the world's economy and battle operations. It was founded 40 years ago right after Black Mage was defeated in hopes of forseeing the next possible attack."); - cm.dispose(); - } else if(status == 3){ - cm.warp(105100300, 0); + } else { + if (mode == 0) { cm.dispose(); + return; } - } else { - if(status == 1){ - cm.sendYesNo(BalrogPQ.partyLeader + "'s party is currently battling the Balrog. Would you like to assist?"); - status++; - } else if(status == 2){ - if(cm.getPlayer().getLevel() > 60 && cm.getPlayer().getClient().getChannel() == BalrogPQ.channel){ - cm.warp(105100300, 0); + + if (status == 0) { + if (player.getLevel() < exped.getMinLevel() && player.getLevel() > exped.getMaxLevel()) { //Don't fit requirement + cm.sendOk("You do not meet the criteria to battle " + expedBoss + "!"); cm.dispose(); - } else { - cm.sendOk("You may not battle the balrog when you are below Lv60! \r\n\r\n Or maybe you are not on the right channel.. Try CH" + BalrogPQ.channel + "."); + } else if (expedition == null) { //Start an expedition + cm.sendSimple("#e#b\r\n#k#n" + em.getProperty("party") + "\r\n\r\nWould you like to assemble a team to take on #r" + expedBoss + "#k?\r\n#b#L1#Lets get this going!#l\r\n\#L2#No, I think I'll wait a bit...#l\r\n\#L3#I would like to see info about this expedition...#l"); + status = 1; + } else if (expedition.isLeader(player)) { //If you're the leader, manage the exped + cm.sendSimple(list); + status = 2; + } else if (expedition.isRegistering()) { //If the expedition is registering + if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient + cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin the expedition."); + cm.dispose(); + } else { //If you aren't in it, you're going to get added + cm.sendOk(expedition.addMember(cm.getPlayer())); + cm.dispose(); + } + } else if (expedition.isInProgress()) { //Only if the expedition is in progress + if (expedition.contains(player)) { //If you're registered, warp you in + var eim = em.getInstance(expedName + player.getClient().getChannel()); + if(eim.getIntProperty("canJoin") == 1) { + eim.registerPlayer(player); + } else { + cm.sendOk("Your expedition already started the battle against " + expedBoss + ". Lets pray for those brave souls."); + } + + cm.dispose(); + } else { //If you're not in by now, tough luck + cm.sendOk("Another expedition has taken the initiative to challenge " + expedBoss + ", lets pray for those brave souls."); cm.dispose(); } } + } else if (status == 1) { + if (selection == 1) { + expedition = cm.getExpedition(exped); + if(expedition != null) { + cm.sendOk("Someone already taken the initiative to be the leader of the expedition. Try joining them!"); + cm.dispose(); + return; + } + + cm.createExpedition(exped); + cm.sendOk("The #r" + expedBoss + " Expedition#k has been created.\r\n\r\nTalk to me again to view the current team, or start the fight!"); + cm.dispose(); + return; + } else if (selection == 2) { + cm.sendOk("Sure, not everyone's up to challenging " + expedBoss + "."); + cm.dispose(); + return; + } else { + cm.sendSimple("Hi there. I am #b#nMu Young#n#k, the temple Keeper. This temple is currently under siege by the Balrog troops. We currently do not know who gave the orders. " + + "For a few weeks now, the #e#b Order of the Altair#n#k has been sending mercenaries, but they were eliminated every time." + + " So, traveler, would you like to try your luck at defeating this unspeakable horror?\r\n #L1#What is the #eOrder of the Altair?"); + + status = 10; + } + } else if (status == 2) { + if (selection == 1) { + if (expedition == null) { + cm.sendOk("The expedition could not be loaded."); + cm.dispose(); + return; + } + var size = expedition.getMembers().size(); + if (size == 1) { + cm.sendOk("You are the only member of the expedition."); + cm.dispose(); + return; + } + var text = "The following members make up your expedition (Click on them to expel them):\r\n"; + text += "\r\n\t\t1." + expedition.getLeader().getName(); + for (var i = 1; i < size; i++) { + text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n"; + } + cm.sendSimple(text); + status = 6; + } else if (selection == 2) { + var min = exped.getMinSize(); + var size = expedition.getMembers().size(); + if (size < min) { + cm.sendOk("You need at least " + min + " players registered in your expedition."); + cm.dispose(); + return; + } + + cm.sendOk("The expedition will begin and you will now be escorted to the #b" + expedMap + "#k."); + status = 4; + } else if (selection == 3) { + player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); + cm.endExpedition(expedition); + cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away."); + cm.dispose(); + return; + } + } else if (status == 4) { + if (em == null) { + cm.sendOk("The event could not be initialized, please report this on the forum."); + cm.dispose(); + return; + } + + em.setProperty("leader", player.getName()); + em.setProperty("channel", player.getClient().getChannel()); + if(!em.startInstance(expedition)) { + cm.sendOk("Another expedition has taken the initiative to challenge " + expedBoss + ", lets pray for those brave souls."); + cm.dispose(); + return; + } + + cm.dispose(); + return; + } else if (status == 6) { + if (selection > 0) { + var banned = expedition.getMembers().get(selection - 1); + expedition.ban(banned); + cm.sendOk("You have banned " + banned.getName() + " from the expedition."); + cm.dispose(); + } else { + cm.sendSimple(list); + status = 2; + } + } else if (status == 10) { + cm.sendOk("The Order of the Altair is a group of elite mercenaries that oversee the world's economy and battle operations. It was founded 40 years ago right after Black Mage was defeated in hopes of forseeing the next possible attack."); + cm.dispose(); } -} \ No newline at end of file + } +} diff --git a/scripts/npc/1061018.js b/scripts/npc/1061018.js index 2832db4598..1fd6b88c23 100644 --- a/scripts/npc/1061018.js +++ b/scripts/npc/1061018.js @@ -1,41 +1,39 @@ -importPackage(Packages.server.events); - -var status = 0; -var dispose = false; -function start(){ - action(1, 0, 0); +var status; + +function start() { + status = -1; + action(1, 0, 0); } -function action(mode, type, selection){ - if(mode <= 0){ - cm.dispose(); - return; - } else if(status == 0){ - if(cm.getPlayer().getMap().getMonsters().size() == 0){ - cm.sendOk("Wow! You defeated the balrog."); - dispose = true; - cm.getPlayer().getClient().getChannelServer().broadcastPacket(Packages.tools.MaplePacketCreator.serverNotice(0, BalrogPQ.partyLeader + "'s party has successfully defeated the Balrog! Praise to them, they finished with " + cm.getPlayer().getMap().getCharacters().size() + " players.")); - status++; - } else if(cm.getPlayer().getMap().getCharacters().size() > 1){ - cm.sendYesNo("Are you really going to leave this battle and leave your fellow travelers to die?"); - dispose = false; - status++; - } else if(cm.getPlayer().getMap().getCharacters().size() <= 1){ - cm.sendYesNo("If you're a coward, you will leave."); - dispose = true; - status++; +function action(mode, type, selection) { + if (mode == -1) { + cm.dispose(); } else { - cm.sendYesNo("So you are really going to leave?"); - status++; + if (mode == 0 && type > 0) { + cm.dispose(); + return; + } + if (mode == 1) + status++; + else + status--; + + if(status == 0){ + if(cm.getEventInstance().isEventCleared()) { + cm.sendOk("Wow! You defeated the balrog."); + } else if(cm.getPlayer().getMap().getCharacters().size() > 1) { + cm.sendYesNo("Are you really going to leave this battle and leave your fellow travelers to die?"); + } else { + cm.sendYesNo("If you're a coward, you will leave."); + } + } else if(status == 1){ + if(cm.getEventInstance().isEventCleared()) { + cm.warp(cm.getMapId() == 105100300 ? 105100301 : 105100401); + } else { + cm.warp(105100100); + } + + cm.dispose(); + } } - } else if(status == 1){ - if(dispose){ - cm.getPlayer().getMap().killAllMonsters(); - BalrogPQ.partyLeader = "undefined"; - BalrogPQ.balrogSpawned = false; - BalrogPQ.close(); - } - cm.warp(105100100); - cm.dispose(); - } -} \ No newline at end of file +} diff --git a/scripts/npc/2060009.js b/scripts/npc/2060009.js index 4fd4d80f48..eccfb0a6ae 100644 --- a/scripts/npc/2060009.js +++ b/scripts/npc/2060009.js @@ -4,7 +4,7 @@ var payment = false; var atHerbTown = false; function start() { - if(cm.getPlayer().getMap().getId() == 251000100)atHerbTown = true; + if(cm.getPlayer().getMap().getId() == 251000100) atHerbTown = true; if (cm.haveItem(4031242)){ if(atHerbTown) diff --git a/scripts/npc/2081000.js b/scripts/npc/2081000.js index 7afb529b34..4a1e895741 100644 --- a/scripts/npc/2081000.js +++ b/scripts/npc/2081000.js @@ -42,7 +42,7 @@ function action(mode, type, selection) { if(selection == 0) { cm.sendSimple("You don't seem to be from out town. How can I help you?#L0##bI would like some #t4031346#.#k#l"); } else { - cm.sendNext("Under developing..."); + cm.sendNext("Under development..."); cm.dispose(); } } else if(status == 2) { diff --git a/scripts/npc/9201056.js b/scripts/npc/9201056.js index 4ecb7d89e6..0d8efd7ae4 100644 --- a/scripts/npc/9201056.js +++ b/scripts/npc/9201056.js @@ -21,6 +21,7 @@ */ var status = 0; var goToMansion = false; +var fee = 15000; function start() { status = -1; @@ -37,7 +38,7 @@ function action(mode, type, selection) { status++; if (cm.getPlayer().getMapId() == 682000000) { if (status == 0) - cm.sendSimple("Where to, boss? \r\n#L0#New Leaf City#l\r\n#L1#Haunted Mansion#l"); + cm.sendSimple("Where to, boss? \r\n#b#L0#New Leaf City (" + fee + " mesos)#l\r\n#L1#Haunted Mansion#l#k"); else if (status == 1) { if (selection == 0) cm.sendYesNo("You want to go to New Leaf City?"); @@ -46,14 +47,28 @@ function action(mode, type, selection) { cm.sendYesNo("You're sure you want to enter the Mansion?"); } } else if (status == 2) { - cm.warp(goToMansion ? 682000100 : 600000000, 0); + if(goToMansion) { + cm.warp(682000100, 0); + } else if(cm.getMeso() >= fee) { + cm.gainMeso(-fee); + cm.warp(600000000); + } else { + cm.sendOk("Hey, what are you trying to pull on? You don't have enough meso to pay the fee."); + } + cm.dispose(); } } else { if (status == 0) { - cm.sendYesNo("Would you like to go to the Haunted Mansion?"); + cm.sendYesNo("Would you like to go to the #bHaunted Mansion#k? The fee is " + fee + " mesos."); } else if (status == 1) { - cm.warp(682000000, 0); + if(cm.getMeso() >= fee) { + cm.gainMeso(-fee); + cm.warp(682000000, 0); + } else { + cm.sendOk("Hey, what are you trying to pull on? You don't have enough meso to pay the fee."); + } + cm.dispose(); } } diff --git a/scripts/npc/9209000.js b/scripts/npc/9209000.js index 81d56ade5a..bfd3747e9b 100644 --- a/scripts/npc/9209000.js +++ b/scripts/npc/9209000.js @@ -86,7 +86,7 @@ function action(mode, type, selection) { } } - cm.sendOk(sendStr); + cm.sendSimple(sendStr); cm.dispose(); } } diff --git a/scripts/npc/9220018.js b/scripts/npc/9220018.js new file mode 100644 index 0000000000..cf240a0959 --- /dev/null +++ b/scripts/npc/9220018.js @@ -0,0 +1,67 @@ +/** + * @author: Ronan + * @npc: Charles + * @func: Treasure PQ +*/ + +var status = 0; +var em = null; + +function start() { + status = -1; + action(1, 0, 0); +} + +function action(mode, type, selection) { + if (mode == -1) { + cm.dispose(); + } else { + if (mode == 0 && status == 0) { + cm.dispose(); + return; + } + if (mode == 1) + status++; + else + status--; + + if (status == 0) { + em = cm.getEventManager("TreasurePQ"); + if(em == null) { + cm.sendOk("The Treasure PQ has encountered an error."); + cm.dispose(); + return; + } + + cm.sendSimple("#e#b\r\n#k#n" + em.getProperty("party") + "\r\n\r\nYou can't go any further because of the extremely dangerous creatures lying ahead. Would you like to collaborate with party members to complete the quest? If so, please have your #bparty leader#k talk to me.#b\r\n#L0#I want to participate in the party quest.\r\n#L1#I want to find party members.\r\n#L2#I would like to hear more details."); + } else if (status == 1) { + if (selection == 0) { + if (cm.getParty() == null) { + cm.sendOk("You can participate in the party quest only if you are in a party."); + cm.dispose(); + } else if(!cm.isLeader()) { + cm.sendOk("Your party leader must talk to me to start this party quest."); + cm.dispose(); + } else { + var eli = em.getEligibleParty(cm.getParty()); + if(eli.size() > 0) { + if(!em.startInstance(cm.getParty(), cm.getPlayer().getMap(), 1)) { + cm.sendOk("Another party has already entered the #rParty Quest#k in this channel. Please try another channel, or wait for the current party to finish."); + } + } + else { + cm.sendOk("You cannot start this party quest yet, because either your party is not in the range size, some of your party members are not eligible to attempt it or they are not in this map. If you're having trouble finding party members, try Party Search."); + } + + cm.dispose(); + } + } else if (selection == 1) { + cm.sendOk("Try using a Super Megaphone or asking your buddies or guild to join!"); + cm.dispose(); + } else { + cm.sendOk("#e#b#k#n\r\nMV appeared once more, disrupting the welfare of the people of New Leaf City. Join forces with other maplers to fend off this sudden attack. After defeating MV and his minions, fetch your prizes at MV's treasure room."); + cm.dispose(); + } + } + } +} \ No newline at end of file diff --git a/scripts/npc/9220019.js b/scripts/npc/9220019.js new file mode 100644 index 0000000000..48778a7398 --- /dev/null +++ b/scripts/npc/9220019.js @@ -0,0 +1,59 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +var status; + +function start() { + status = -1; + action(1, 0, 0); +} + +function action(mode, type, selection) { + if (mode == -1) { + cm.dispose(); + } else { + if (mode == 0 && type > 0) { + cm.dispose(); + return; + } + if (mode == 1) + status++; + else + status--; + + if(status == 0) { + var mapid = cm.getMapId(); + if(mapid == 674030100) { + cm.sendNext("Hi, I'm #p9220019#."); + cm.dispose(); + return; + } else if(mapid == 674030300) { + cm.sendNext("Hi there, #h0#. This is the MV's treasure room. Use the time you have here to do whatever you want, there are a lot of things to uncover here, actually. Or else you can use the portal here to #rgo back#k to the entrance."); + cm.dispose(); + return; + } + + cm.sendYesNo("Are you sure you want to return? By returning now you are leaving your partners behind, do you really want to do it?"); + } else if(status == 1) { + cm.warp(674030100); + cm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/npc/9220020.js b/scripts/npc/9220020.js new file mode 100644 index 0000000000..8d0be4d585 --- /dev/null +++ b/scripts/npc/9220020.js @@ -0,0 +1,68 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +var status; + +function start() { + status = -1; + action(1, 0, 0); +} + +function action(mode, type, selection) { + if (mode == -1) { + cm.dispose(); + } else { + if (mode == 0 && type > 0) { + cm.dispose(); + return; + } + if (mode == 1) + status++; + else + status--; + + if(status == 0) { + if(!cm.isEventLeader()) { + cm.sendNext("Please let your party leader talk to me for further instructions to proceed to the next stage."); + cm.dispose(); + return; + } + + var eim = cm.getEventInstance(); + if(cm.haveItem(4032118, 15)) { + cm.gainItem(4032118, -15); + + eim.setIntProperty("statusStg1", 1); + eim.showClearEffect(); + + cm.sendNext("You got the letters, great! Now, you can proceed to the room MV is through this tunnel. Be prepared!"); + cm.dispose(); + } else { + if(eim.getIntProperty("statusStg1") == 1) { + cm.sendNext("Go through this tunnel for the boss battle."); + } else { + cm.sendNext("Please hand me #r15 secret letters#k."); + } + + cm.dispose(); + } + } + } +} \ No newline at end of file diff --git a/scripts/portal/MD_cakeEnter.js b/scripts/portal/MD_cakeEnter.js new file mode 100644 index 0000000000..4a59b2a76c --- /dev/null +++ b/scripts/portal/MD_cakeEnter.js @@ -0,0 +1,4 @@ +function enter(pi) { + pi.playPortalSound(); pi.warp(674030100,"in00"); + return true; +} \ No newline at end of file diff --git a/scripts/portal/enter_td.js b/scripts/portal/enter_td.js new file mode 100644 index 0000000000..1e5d569440 --- /dev/null +++ b/scripts/portal/enter_td.js @@ -0,0 +1,4 @@ +function enter(pi) { + pi.playPortalSound(); pi.warp(600000000,"yn00"); + return true; +} \ No newline at end of file diff --git a/scripts/portal/guyfawkes0_esc.js b/scripts/portal/guyfawkes0_esc.js new file mode 100644 index 0000000000..1ce0bd996c --- /dev/null +++ b/scripts/portal/guyfawkes0_esc.js @@ -0,0 +1,28 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +function enter(pi) { + if(pi.getEventInstance().getIntProperty("statusStg1") == 1) { + pi.playPortalSound(); pi.warp(674030200, 0); + return true; + } else { + pi.message("The tunnel is currently blocked."); + return false; + } +} \ No newline at end of file diff --git a/scripts/portal/guyfawkes0_floor.js b/scripts/portal/guyfawkes0_floor.js new file mode 100644 index 0000000000..6ecc924162 --- /dev/null +++ b/scripts/portal/guyfawkes0_floor.js @@ -0,0 +1,23 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +function enter(pi) { + pi.warp(674030000, 0); + return true; +} \ No newline at end of file diff --git a/scripts/portal/nets_in.js b/scripts/portal/nets_in.js index 4bae336f7d..2098cf3cf5 100644 --- a/scripts/portal/nets_in.js +++ b/scripts/portal/nets_in.js @@ -1,5 +1,5 @@ function enter(pi) { - pi.saveLocation("MIRROR"); - pi.playPortalSound(); pi.warp(926010000, 0); + pi.getPlayer().saveLocation("MIRROR"); + pi.playPortalSound(); pi.warp(926010000, 4); return true; } \ No newline at end of file diff --git a/scripts/portal/nets_out.js b/scripts/portal/nets_out.js index 28ab17cf5b..64c55d18f0 100644 --- a/scripts/portal/nets_out.js +++ b/scripts/portal/nets_out.js @@ -23,6 +23,10 @@ Author: kevintjuh93 */ function enter(pi) { - pi.playPortalSound(); pi.warp(pi.getPlayer().getSavedLocation("MIRROR")); + var mapid = pi.getPlayer().getSavedLocation("MIRROR"); + + pi.playPortalSound(); + if(mapid == 260020500) pi.warp(mapid, 3); + else pi.warp(mapid); return true; } \ No newline at end of file diff --git a/scripts/portal/s4hitman.js b/scripts/portal/s4hitman.js index 6acc5e6e71..5bdda666d1 100644 --- a/scripts/portal/s4hitman.js +++ b/scripts/portal/s4hitman.js @@ -21,10 +21,10 @@ */ /** * @author BubblesDev v83 (Moogra) - * @purpose Warps to the Junior Balrog map for the Rush Skill. + * @purpose Warps to the Relic map for the Assassinate Skill. */ function enter(pi) { - if(pi.isQuestStarted(6202)) { + if(pi.isQuestStarted(6201)) { if(pi.getWarpMap(910200000).countPlayers() == 0) { pi.resetMapObjects(910200000); pi.playPortalSound(); pi.warp(910200000, 0); diff --git a/scripts/quest/3108.js b/scripts/quest/3108.js index d722973567..339a856c78 100644 --- a/scripts/quest/3108.js +++ b/scripts/quest/3108.js @@ -35,7 +35,7 @@ function start(mode, type, selection) { status--; if (status == 0) { - qm.sendNext("(As you peek into the shattered statue, you might have found a clue about what happened. Better talk with #rScadur#k about this.)"); + qm.sendNext("(As you peek into the shattered statue, you might have found a clue about what happened. Better talk to #rScadur#k about this.)"); qm.forceCompleteQuest(); qm.dispose(); diff --git a/scripts/reactor/1020000.js b/scripts/reactor/1020000.js new file mode 100644 index 0000000000..010625cc00 --- /dev/null +++ b/scripts/reactor/1020000.js @@ -0,0 +1,28 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +/* @Author Ronan + * + * 1020000.js: relic room next floor +*/ + +function act() { + rm.warp(910200000, "pt00"); +} \ No newline at end of file diff --git a/scripts/reactor/1020001.js b/scripts/reactor/1020001.js new file mode 100644 index 0000000000..1240852870 --- /dev/null +++ b/scripts/reactor/1020001.js @@ -0,0 +1,28 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +/* @Author Ronan + * + * 1020001.js: relic room next floor +*/ + +function act() { + rm.warp(910200000, "pt01"); +} \ No newline at end of file diff --git a/scripts/reactor/1020002.js b/scripts/reactor/1020002.js new file mode 100644 index 0000000000..ecab666900 --- /dev/null +++ b/scripts/reactor/1020002.js @@ -0,0 +1,28 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +/* @Author Ronan + * + * 1020002.js: relic room next floor +*/ + +function act() { + rm.warp(910200000, "pt02"); +} \ No newline at end of file diff --git a/scripts/reactor/1021000.js b/scripts/reactor/1021000.js new file mode 100644 index 0000000000..6d181e4ff6 --- /dev/null +++ b/scripts/reactor/1021000.js @@ -0,0 +1,28 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +/* @Author Ronan + * + * 1021000.js: relic room fail +*/ + +function act() { + rm.spawnMonster(9300091); +} \ No newline at end of file diff --git a/scripts/reactor/1021001.js b/scripts/reactor/1021001.js new file mode 100644 index 0000000000..ec4e6e43ee --- /dev/null +++ b/scripts/reactor/1021001.js @@ -0,0 +1,28 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +/* @Author Ronan + * + * 1021001.js: relic room fail +*/ + +function act() { + rm.spawnMonster(9300091); +} \ No newline at end of file diff --git a/scripts/reactor/1021002.js b/scripts/reactor/1021002.js new file mode 100644 index 0000000000..5ae54c93c2 --- /dev/null +++ b/scripts/reactor/1021002.js @@ -0,0 +1,28 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +/* @Author Ronan + * + * 1021002.js: relic room fail +*/ + +function act() { + rm.spawnMonster(9300091); +} \ No newline at end of file diff --git a/scripts/reactor/1022000.js b/scripts/reactor/1022000.js new file mode 100644 index 0000000000..5ae3a13613 --- /dev/null +++ b/scripts/reactor/1022000.js @@ -0,0 +1,28 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +/* @Author Ronan + * + * 1022000.js: relic complete +*/ + +function act() { + rm.dropItems(); +} \ No newline at end of file diff --git a/scripts/reactor/1052001.js b/scripts/reactor/1052001.js index c06753da3b..1dcc195f35 100644 --- a/scripts/reactor/1052001.js +++ b/scripts/reactor/1052001.js @@ -1,3 +1,3 @@ function act() { - rm.dropItems(); + rm.sprayItems(true, 1, 500, 1000, 15); } \ No newline at end of file diff --git a/scripts/reactor/1052002.js b/scripts/reactor/1052002.js index c06753da3b..1dcc195f35 100644 --- a/scripts/reactor/1052002.js +++ b/scripts/reactor/1052002.js @@ -1,3 +1,3 @@ function act() { - rm.dropItems(); + rm.sprayItems(true, 1, 500, 1000, 15); } \ No newline at end of file diff --git a/scripts/reactor/6741001.js b/scripts/reactor/6741001.js new file mode 100644 index 0000000000..088d9bea75 --- /dev/null +++ b/scripts/reactor/6741001.js @@ -0,0 +1,23 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +function act() { + rm.spawnMonster(9400589); +} \ No newline at end of file diff --git a/scripts/reactor/6741015.js b/scripts/reactor/6741015.js new file mode 100644 index 0000000000..193b5bfd7f --- /dev/null +++ b/scripts/reactor/6741015.js @@ -0,0 +1,23 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +function act() { + rm.dropItems(); +} \ No newline at end of file diff --git a/scripts/reactor/6742014.js b/scripts/reactor/6742014.js new file mode 100644 index 0000000000..b343b07cde --- /dev/null +++ b/scripts/reactor/6742014.js @@ -0,0 +1,23 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +function act() { + rm.sprayItems(true, 1, 5, 25, 15); +} \ No newline at end of file diff --git a/sql/db_database.sql b/sql/db_database.sql index 6e3e6735da..11e0ebe93c 100644 --- a/sql/db_database.sql +++ b/sql/db_database.sql @@ -9896,7 +9896,7 @@ INSERT IGNORE INTO `temp_data` (`id`, `dropperid`, `itemid`, `minimum_quantity`, (9674, 5150000, 2383043, 1, 1, 0, 1000), (9675, 6130100, 2383044, 1, 1, 0, 1000), (9676, 6130103, 2383045, 1, 1, 0, 1000), -(9677, 6130201, 2383046, 1, 1, 0, 1000), +(9677, 6130202, 2383046, 1, 1, 0, 20000), (9678, 6130203, 2383047, 1, 1, 0, 1000), (9679, 5090000, 2383048, 1, 1, 0, 25000), (9680, 5090001, 2383049, 1, 1, 0, 25000), @@ -10416,10 +10416,10 @@ INSERT IGNORE INTO `temp_data` (`id`, `dropperid`, `itemid`, `minimum_quantity`, (10194, 8500002, 4031196, 1, 1, 0, 1000000), (10195, 8500002, 4031196, 1, 1, 0, 187500), (10196, 8500002, 4031196, 1, 1, 0, 125000), -(10197, 3000006, 4031209, 1, 1, 0, 500000), -(10198, 2230109, 4031209, 1, 1, 0, 500000), -(10199, 2230200, 4031209, 1, 1, 0, 500000), -(10200, 3230104, 4031209, 1, 1, 0, 500000), +(10197, 3000006, 4031209, 1, 1, 3072, 500000), +(10198, 2230109, 4031209, 1, 1, 3072, 500000), +(10199, 2230200, 4031209, 1, 1, 3072, 500000), +(10200, 3230104, 4031209, 1, 1, 3072, 500000), (10201, 3230306, 4031159, 1, 1, 2074, 500000), (10202, 9500400, 4031224, 1, 1, 3607, 1000000), (10203, 9500400, 4031223, 1, 1, 3607, 1000000), @@ -16168,7 +16168,7 @@ INSERT INTO `monstercarddata` (`id`, `cardid`, `mobid`) VALUES (152, 2383043, 5150000), (153, 2383044, 6130100), (154, 2383045, 6130103), -(155, 2383046, 6130201), +(155, 2383046, 6130202), (156, 2383047, 6130203), (157, 2383048, 5090000), (158, 2383049, 5090001), @@ -16591,7 +16591,7 @@ INSERT INTO `reactordrops` (`reactordropid`, `reactorid`, `itemid`, `chance`, `q (41, 2212004, 4031116, 2, -1), (42, 2212004, 2000001, 2, -1), (43, 2212005, 4031136, 8, 3439), -(44, 2222000, 4031231, 2, -1), +(44, 2222000, 4031231, 2, 3620), (45, 2222000, 4031258, 2, -1), (46, 2222000, 2000002, 3, -1), (47, 2302000, 2000001, 3, -1), @@ -16667,7 +16667,7 @@ INSERT INTO `reactordrops` (`reactordropid`, `reactorid`, `itemid`, `chance`, `q (117, 1302000, 4032267, 1, 20013), (118, 1052000, 4031471, 1, 6153), (119, 2112015, 2280000, 1, -1), -(120, 1022000, 4031452, 1, -1), +(120, 1022000, 4031452, 1, 6201), (121, 2202003, 4001022, 1, -1), (122, 2201001, 4001022, 1, -1), (123, 1402000, 4032309, 1, 21013), @@ -16728,44 +16728,44 @@ INSERT INTO `reactordrops` (`reactordropid`, `reactorid`, `itemid`, `chance`, `q (178, 1052001, 1412039, 3, -1), (179, 1052001, 1422042, 3, -1), (180, 1052001, 1422043, 3, -1), -(181, 1052002, 1072375, 3, -1), -(182, 1052002, 1072376, 3, -1), -(183, 1052002, 2040728, 3, -1), -(184, 1052002, 2040729, 3, -1), -(185, 1052002, 2040730, 3, -1), -(186, 1052002, 2040731, 3, -1), -(187, 1052002, 2040732, 3, -1), -(188, 1052002, 2040733, 3, -1), -(189, 1052002, 2040734, 3, -1), -(190, 1052002, 2040735, 3, -1), -(191, 1052002, 2040736, 3, -1), -(192, 1052002, 2040737, 3, -1), -(193, 1052002, 2040738, 3, -1), -(194, 1052002, 2040739, 3, -1), -(195, 1052002, 1302112, 3, -1), -(196, 1052002, 1302113, 3, -1), -(197, 1052002, 1312042, 3, -1), -(198, 1052002, 1312043, 3, -1), -(199, 1052002, 1322068, 3, -1), -(200, 1052002, 1322069, 3, -1), -(201, 1052002, 1332084, 3, -1), -(202, 1052002, 1332085, 3, -1), -(203, 1052002, 1332086, 3, -1), -(204, 1052002, 1332087, 3, -1), -(205, 1052002, 1342019, 3, -1), -(206, 1052002, 1342020, 3, -1), -(207, 1052002, 1372050, 3, -1), -(208, 1052002, 1372051, 3, -1), -(209, 1052002, 1382066, 3, -1), -(210, 1052002, 1382067, 3, -1), -(211, 1052002, 1402056, 3, -1), -(212, 1052002, 1402057, 3, -1), -(213, 1052002, 1402058, 3, -1), -(214, 1052002, 1402059, 3, -1), -(215, 1052002, 1412038, 3, -1), -(216, 1052002, 1412039, 3, -1), -(217, 1052002, 1422042, 3, -1), -(218, 1052002, 1422043, 3, -1), +(181, 1052002, 1072375, 5, -1), +(182, 1052002, 1072376, 5, -1), +(183, 1052002, 2040728, 5, -1), +(184, 1052002, 2040729, 5, -1), +(185, 1052002, 2040730, 5, -1), +(186, 1052002, 2040731, 5, -1), +(187, 1052002, 2040732, 5, -1), +(188, 1052002, 2040733, 5, -1), +(189, 1052002, 2040734, 5, -1), +(190, 1052002, 2040735, 5, -1), +(191, 1052002, 2040736, 5, -1), +(192, 1052002, 2040737, 5, -1), +(193, 1052002, 2040738, 5, -1), +(194, 1052002, 2040739, 5, -1), +(195, 1052002, 1302112, 5, -1), +(196, 1052002, 1302113, 5, -1), +(197, 1052002, 1312042, 5, -1), +(198, 1052002, 1312043, 5, -1), +(199, 1052002, 1322068, 5, -1), +(200, 1052002, 1322069, 5, -1), +(201, 1052002, 1332084, 5, -1), +(202, 1052002, 1332085, 5, -1), +(203, 1052002, 1332086, 5, -1), +(204, 1052002, 1332087, 5, -1), +(205, 1052002, 1342019, 5, -1), +(206, 1052002, 1342020, 5, -1), +(207, 1052002, 1372050, 5, -1), +(208, 1052002, 1372051, 5, -1), +(209, 1052002, 1382066, 5, -1), +(210, 1052002, 1382067, 5, -1), +(211, 1052002, 1402056, 5, -1), +(212, 1052002, 1402057, 5, -1), +(213, 1052002, 1402058, 5, -1), +(214, 1052002, 1402059, 5, -1), +(215, 1052002, 1412038, 5, -1), +(216, 1052002, 1412039, 5, -1), +(217, 1052002, 1422042, 5, -1), +(218, 1052002, 1422043, 5, -1), (219, 1002008, 4032452, 1, 22502), (220, 6102001, 4001260, 1, -1), (221, 6102002, 1472051, 25, -1), diff --git a/sql/db_drops.sql b/sql/db_drops.sql index c8b218ffa2..0812abb511 100644 --- a/sql/db_drops.sql +++ b/sql/db_drops.sql @@ -2261,8 +2261,8 @@ USE `heavenms`; (2230104, 1082043, 1, 1, 0, 700), (2230104, 1332010, 1, 1, 0, 700), (2230104, 1052104, 1, 1, 0, 700), -(2230109, 4031209, 1, 1, 0, 7000), -(9410016, 4031209, 1, 1, 0, 7000), +(2230109, 4031209, 1, 1, 3072, 7000), +(9410016, 4031209, 1, 1, 3072, 7000), (2230109, 4131010, 1, 1, 0, 3000), (9410016, 4131010, 1, 1, 0, 3000), (2230109, 2000002, 1, 1, 0, 40000), @@ -2308,7 +2308,7 @@ USE `heavenms`; (2230109, 1002619, 1, 1, 0, 700), (9410016, 1002619, 1, 1, 0, 700), (2230200, 4000165, 1, 1, 0, 200000), -(2230200, 4031209, 1, 1, 0, 7000), +(2230200, 4031209, 1, 1, 3072, 7000), (2230200, 4006000, 1, 1, 0, 7000), (2230200, 2000001, 1, 1, 0, 40000), (2230200, 2040501, 1, 1, 0, 750), @@ -2642,7 +2642,7 @@ USE `heavenms`; (9400247, 1492004, 1, 1, 0, 700), (9500107, 1492004, 1, 1, 0, 700), (3000006, 4000166, 1, 1, 0, 200000), -(3000006, 4031209, 1, 1, 0, 7000), +(3000006, 4031209, 1, 1, 3072, 7000), (3000006, 4131003, 1, 1, 0, 3000), (3000006, 2000002, 1, 1, 0, 40000), (3000006, 2000003, 1, 1, 0, 40000), @@ -2958,7 +2958,7 @@ USE `heavenms`; (3210100, 1002178, 1, 1, 0, 700), (3210100, 1052107, 1, 1, 0, 700), (3230104, 4000167, 1, 1, 0, 200000), -(3230104, 4031209, 1, 1, 0, 7000), +(3230104, 4031209, 1, 1, 3072, 7000), (3230104, 4030012, 1, 1, 0, 10000), (3230104, 2000002, 1, 1, 0, 40000), (3230104, 2022040, 1, 1, 0, 3000), @@ -4473,8 +4473,8 @@ USE `heavenms`; (3230303, 1482005, 1, 1, 0, 700), (3230405, 4000154, 1, 1, 0, 200000), (9410020, 4000154, 1, 1, 0, 200000), -(3230405, 4031209, 1, 1, 0, 7000), -(9410020, 4031209, 1, 1, 0, 7000), +(3230405, 4031209, 1, 1, 3072, 7000), +(9410020, 4031209, 1, 1, 3072, 7000), (3230405, 2002005, 1, 1, 0, 10000), (9410020, 2002005, 1, 1, 0, 10000), (3230405, 2022040, 1, 1, 0, 3000), @@ -5135,8 +5135,8 @@ USE `heavenms`; (9300233, 1052113, 1, 1, 0, 700), (4230200, 4000158, 1, 1, 0, 200000), (9410018, 4000158, 1, 1, 0, 200000), -(4230200, 4031209, 1, 1, 0, 7000), -(9410018, 4031209, 1, 1, 0, 7000), +(4230200, 4031209, 1, 1, 3072, 7000), +(9410018, 4031209, 1, 1, 3072, 7000), (4230200, 2022040, 1, 1, 0, 3000), (9410018, 2022040, 1, 1, 0, 3000), (4230200, 2040707, 1, 1, 0, 750), @@ -5167,8 +5167,8 @@ USE `heavenms`; (9410018, 1072110, 1, 1, 0, 700), (4230200, 1472014, 1, 1, 0, 700), (9410018, 1472014, 1, 1, 0, 700), -(4230201, 4031209, 1, 1, 0, 7000), -(4230201, 2022040, 1, 1, 0, 3000), +(4230201, 4031209, 1, 1, 3072, 7000), +(4230201, 2022040, 1, 1, 3072, 3000), (4230201, 2000002, 1, 1, 0, 40000), (4230201, 2000003, 1, 1, 0, 40000), (4230201, 2002004, 1, 1, 0, 10000), @@ -5815,9 +5815,9 @@ USE `heavenms`; (4230124, 4000157, 1, 1, 0, 200000), (9300090, 4000157, 1, 1, 0, 200000), (9420501, 4000157, 1, 1, 0, 200000), -(4230124, 4031209, 1, 1, 0, 7000), -(9300090, 4031209, 1, 1, 0, 7000), -(9420501, 4031209, 1, 1, 0, 7000), +(4230124, 4031209, 1, 1, 3072, 7000), +(9300090, 4031209, 1, 1, 3072, 7000), +(9420501, 4031209, 1, 1, 3072, 7000), (4230124, 4030012, 1, 1, 0, 10000), (9300090, 4030012, 1, 1, 0, 10000), (9420501, 4030012, 1, 1, 0, 10000), @@ -6047,7 +6047,7 @@ USE `heavenms`; (4230108, 1472018, 1, 1, 0, 700), (4230123, 4000156, 1, 1, 0, 200000), (4230123, 4000157, 1, 1, 0, 200000), -(4230123, 4031209, 1, 1, 0, 7000), +(4230123, 4031209, 1, 1, 3072, 7000), (4230123, 4030012, 1, 1, 0, 10000), (4230123, 4003004, 1, 1, 0, 7000), (4230123, 4130015, 1, 1, 0, 3000), @@ -10055,7 +10055,6 @@ USE `heavenms`; (6130202, 2040004, 1, 1, 0, 750), (6130202, 2040501, 1, 1, 0, 750), (6130202, 2040401, 1, 1, 0, 750), -(6130202, 2383046, 1, 1, 0, 20000), (6130202, 4004002, 1, 1, 0, 3000), (6130202, 4010001, 1, 1, 0, 7000), (6130202, 4020008, 1, 1, 0, 7000), @@ -19559,7 +19558,6 @@ USE `heavenms`; (9400583, 2041030, 1, 1, 0, 5000), (9400583, 4006000, 1, 1, 0, 20000), (9400583, 2070005, 1, 1, 0, 400), -(9400583, 1042013, 1, 1, 0, 2000), (9400583, 1002391, 1, 1, 0, 2000), (9400583, 1302096, 1, 1, 0, 2000), (9400583, 1041099, 1, 1, 0, 2000), @@ -19770,8 +19768,8 @@ USE `heavenms`; (1120100, 4001361, 1, 1, 28250, 70000), (2230110, 4032146, 1, 1, 20722, 40000), (2230111, 4032147, 1, 1, 20723, 40000), -(9300378, 4001272, 1, 1, 0, 400000), -(9300378, 4032324, 1, 1, 21736, 40000), +(9300347, 4001272, 1, 1, 0, 400000), +(9300347, 4032324, 1, 1, 21736, 40000), (9300344, 4032322, 1, 1, 21731, 999999), (3400008, 1302008, 1, 1, 0, 8500), (3400008, 1412004, 1, 1, 0, 8500), @@ -20024,7 +20022,86 @@ USE `heavenms`; (7220002, 4031789, 1, 1, 3844, 999999), (9300102, 4031507, 1, 1, 6002, 999999), (9300061, 4001101, 1, 1, 0, 999999), -(9300093, 4031495, 1, 1, 6192, 999999); +(9300093, 4031495, 1, 1, 6192, 999999), +(8830007, 1302112, 1, 1, 0, 4000), +(8830007, 1302113, 1, 1, 0, 4000), +(8830007, 1312042, 1, 1, 0, 4000), +(8830007, 1312043, 1, 1, 0, 4000), +(8830007, 1322068, 1, 1, 0, 4000), +(8830007, 1322069, 1, 1, 0, 4000), +(8830007, 1332084, 1, 1, 0, 3000), +(8830007, 1332085, 1, 1, 0, 3000), +(8830007, 1332086, 1, 1, 0, 3000), +(8830007, 1332087, 1, 1, 0, 3000), +(8830007, 1372050, 1, 1, 0, 4000), +(8830007, 1382066, 1, 1, 0, 4000), +(8830007, 1382067, 1, 1, 0, 4000), +(8830007, 1402056, 1, 1, 0, 4000), +(8830007, 1402057, 1, 1, 0, 4000), +(8830007, 1402058, 1, 1, 0, 4000), +(8830007, 1402059, 1, 1, 0, 4000), +(8830007, 1412038, 1, 1, 0, 4000), +(8830007, 1412039, 1, 1, 0, 4000), +(8830007, 1422042, 1, 1, 0, 4000), +(8830007, 1422043, 1, 1, 0, 4000), +(8830007, 1432054, 1, 1, 0, 3000), +(8830007, 1432055, 1, 1, 0, 3000), +(8830007, 1442074, 1, 1, 0, 4000), +(8830007, 1442075, 1, 1, 0, 4000), +(8830007, 1452066, 1, 1, 0, 3000), +(8830007, 1452067, 1, 1, 0, 3000), +(8830007, 1452068, 1, 1, 0, 3000), +(8830007, 1452069, 1, 1, 0, 3000), +(8830007, 1452070, 1, 1, 0, 3000), +(8830007, 1462059, 1, 1, 0, 3000), +(8830007, 1462060, 1, 1, 0, 3000), +(8830007, 1462061, 1, 1, 0, 3000), +(8830007, 1462062, 1, 1, 0, 3000), +(8830007, 1462063, 1, 1, 0, 3000), +(8830007, 1472083, 1, 1, 0, 3000), +(8830007, 1472084, 1, 1, 0, 3000), +(8830007, 1482031, 1, 1, 0, 3000), +(8830007, 1482032, 1, 1, 0, 3000), +(8830007, 1492035, 1, 1, 0, 3000), +(8830007, 1492036, 1, 1, 0, 3000), +(8830007, 2000004, 1, 1, 0, 999999), +(8830007, 2000005, 1, 1, 0, 999999), +(8830007, 2000006, 1, 1, 0, 999999), +(8830007, 2030000, 1, 1, 0, 100000), +(8830007, 2050004, 1, 1, 0, 300000), +(8830007, 2020001, 1, 1, 0, 100000), +(8830007, 2020000, 1, 1, 0, 100000), +(8830007, 2000002, 1, 1, 0, 100000), +(8830007, 2020005, 1, 1, 0, 100000), +(8830007, 2020003, 1, 1, 0, 100000), +(8830007, 2020009, 1, 1, 0, 100000), +(8830007, 2020006, 1, 1, 0, 100000), +(8830007, 2020007, 1, 1, 0, 100000), +(8830007, 2022000, 1, 1, 0, 100000), +(8830007, 2020010, 1, 1, 0, 100000), +(8830007, 2001000, 1, 1, 0, 100000), +(8830007, 2001002, 1, 1, 0, 100000), +(8830007, 2020012, 1, 1, 0, 100000), +(8830007, 2020013, 1, 1, 0, 999999), +(8830007, 2020014, 1, 1, 0, 100000), +(8830007, 2020015, 1, 1, 0, 999999), +(8830007, 2049100, 1, 1, 0, 2000), +(8830007, 2049000, 1, 1, 0, 1000), +(8830007, 2040739, 1, 1, 0, 2000), +(8830007, 1072376, 1, 1, 0, 6000), +(8830007, 4001261, 1, 1, 0, 400000), +(8830007, 2330005, 1, 1, 0, 3000), +(8830007, 1382068, 1, 1, 0, 5000), +(8830007, 1402062, 1, 1, 0, 5000), +(8830007, 1472086, 1, 1, 0, 3000), +(8830007, 1442078, 1, 1, 0, 5000), +(8830007, 1452071, 1, 1, 0, 3000), +(8830007, 1492037, 1, 1, 0, 3000), +(8830007, 2388055, 1, 1, 0, 25000), +(9400748, 1002858, 1, 1, 0, 40000), +(9400748, 1002859, 1, 1, 0, 40000), +(9400748, 1002860, 1, 1, 0, 40000), +(9400748, 1002861, 1, 1, 0, 80000); # (dropperid, itemid, minqty, maxqty, questid, chance) @@ -20315,7 +20392,7 @@ USE `heavenms`; UPDATE IGNORE temp_data SET questid=0 WHERE dropperid=2022354; UPDATE IGNORE temp_data SET chance=600000 WHERE itemid=4000058; - #update USE drops that were supposed to be ETC + # update USE drops that were supposed to be ETC INSERT IGNORE INTO temp_data (dropperid, itemid, minimum_quantity, maximum_quantity, questid, chance) SELECT dropperid, 4001006, 1, 1, 0, 10000 FROM temp_data @@ -20326,6 +20403,169 @@ USE `heavenms`; FROM temp_data WHERE itemid = 2011000; #Poisonous Mushroom + # add Giant Cake anniversary-themed drops + INSERT IGNORE INTO temp_data (`dropperid`, `itemid`, `minimum_quantity`, `maximum_quantity`, `questid`, `chance`) VALUES +(9400606, 1012098, 1, 1, 0, 120000), +(9400606, 1012101, 1, 1, 0, 120000), +(9400606, 1012102, 1, 1, 0, 120000), +(9400606, 1012103, 1, 1, 0, 120000), +(9400606, 1032040, 1, 1, 0, 120000), +(9400606, 1032041, 1, 1, 0, 120000), +(9400606, 1032042, 1, 1, 0, 120000), +(9400606, 1002508, 1, 1, 0, 120000), +(9400606, 1002509, 1, 1, 0, 120000), +(9400606, 1002510, 1, 1, 0, 120000), +(9400606, 1002511, 1, 1, 0, 120000), +(9400606, 1002758, 1, 1, 0, 120000), +(9400606, 1102166, 1, 1, 0, 120000), +(9400606, 1102167, 1, 1, 0, 120000), +(9400606, 1102168, 1, 1, 0, 120000), +(9400606, 1082252, 1, 1, 0, 120000), +(9400606, 1092030, 1, 1, 0, 120000), +(9400606, 1092045, 1, 1, 0, 120000), +(9400606, 1092046, 1, 1, 0, 120000), +(9400606, 1092047, 1, 1, 0, 120000), +(9400606, 1302020, 1, 1, 0, 120000), +(9400606, 1302030, 1, 1, 0, 120000), +(9400606, 1302033, 1, 1, 0, 120000), +(9400606, 1302058, 1, 1, 0, 120000), +(9400606, 1302065, 1, 1, 0, 120000), +(9400606, 1312032, 1, 1, 0, 120000), +(9400606, 1322054, 1, 1, 0, 120000), +(9400606, 1332025, 1, 1, 0, 120000), +(9400606, 1332055, 1, 1, 0, 120000), +(9400606, 1332056, 1, 1, 0, 120000), +(9400606, 1372034, 1, 1, 0, 120000), +(9400606, 1382009, 1, 1, 0, 120000), +(9400606, 1382012, 1, 1, 0, 120000), +(9400606, 1382039, 1, 1, 0, 120000), +(9400606, 1402039, 1, 1, 0, 120000), +(9400606, 1412011, 1, 1, 0, 120000), +(9400606, 1412027, 1, 1, 0, 120000), +(9400606, 1422014, 1, 1, 0, 120000), +(9400606, 1422029, 1, 1, 0, 120000), +(9400606, 1432012, 1, 1, 0, 120000), +(9400606, 1432040, 1, 1, 0, 120000), +(9400606, 1442024, 1, 1, 0, 120000), +(9400606, 1442030, 1, 1, 0, 120000), +(9400606, 1442051, 1, 1, 0, 120000), +(9400606, 1452016, 1, 1, 0, 120000), +(9400606, 1452022, 1, 1, 0, 120000), +(9400606, 1452045, 1, 1, 0, 120000), +(9400606, 1462014, 1, 1, 0, 120000), +(9400606, 1462019, 1, 1, 0, 120000), +(9400606, 1462040, 1, 1, 0, 120000), +(9400606, 1472030, 1, 1, 0, 120000), +(9400606, 1472032, 1, 1, 0, 120000), +(9400606, 1472055, 1, 1, 0, 120000), +(9400606, 1482020, 1, 1, 0, 120000), +(9400606, 1482021, 1, 1, 0, 120000), +(9400606, 1482022, 1, 1, 0, 120000), +(9400606, 1492020, 1, 1, 0, 120000), +(9400606, 1492021, 1, 1, 0, 120000), +(9400606, 1492022, 1, 1, 0, 120000), +(9400606, 2020002, 1, 3, 0, 600000), +(9400606, 2010005, 1, 1, 0, 120000), +(9400606, 2010006, 1, 1, 0, 120000), +(9400606, 2012001, 1, 1, 0, 120000), +(9400606, 2020003, 1, 3, 0, 600000), +(9400606, 2020004, 1, 3, 0, 600000), +(9400606, 2020005, 1, 3, 0, 600000), +(9400606, 2020006, 1, 3, 0, 600000), +(9400606, 2020009, 1, 3, 0, 600000), +(9400606, 2020010, 1, 3, 0, 600000), +(9400606, 2020011, 1, 3, 0, 600000), +(9400606, 2020012, 1, 3, 0, 600000), +(9400606, 2020013, 1, 3, 0, 600000), +(9400606, 2020014, 1, 3, 0, 600000), +(9400606, 2020015, 1, 3, 0, 600000), +(9400606, 2020016, 1, 3, 0, 600000), +(9400606, 2020017, 1, 3, 0, 600000), +(9400606, 2020018, 1, 3, 0, 600000), +(9400606, 2020019, 1, 3, 0, 600000), +(9400606, 2020022, 1, 3, 0, 600000), +(9400606, 2020023, 1, 3, 0, 600000), +(9400606, 2020024, 1, 3, 0, 600000), +(9400606, 2020025, 1, 3, 0, 600000), +(9400606, 2020026, 1, 3, 0, 600000), +(9400606, 2020027, 1, 3, 0, 600000), +(9400606, 2020028, 1, 3, 0, 600000), +(9400606, 2020032, 1, 3, 0, 600000), +(9400606, 2022004, 1, 3, 0, 600000), +(9400606, 2022005, 1, 3, 0, 600000), +(9400606, 2022006, 1, 3, 0, 600000), +(9400606, 2022015, 1, 3, 0, 600000), +(9400606, 2022016, 1, 3, 0, 600000), +(9400606, 2022031, 1, 3, 0, 600000), +(9400606, 2022043, 1, 3, 0, 600000), +(9400606, 2022044, 1, 3, 0, 600000), +(9400606, 2022045, 1, 3, 0, 600000), +(9400606, 2022047, 1, 3, 0, 600000), +(9400606, 2022058, 1, 3, 0, 600000), +(9400606, 2022068, 1, 3, 0, 600000), +(9400606, 2022069, 1, 3, 0, 600000), +(9400606, 2022071, 1, 3, 0, 600000), +(9400606, 2022072, 1, 3, 0, 600000), +(9400606, 2022075, 1, 3, 0, 600000), +(9400606, 2022079, 1, 3, 0, 600000), +(9400606, 2022117, 1, 3, 0, 600000), +(9400606, 2022189, 1, 3, 0, 600000), +(9400606, 2022190, 1, 3, 0, 600000), +(9400606, 2022191, 1, 3, 0, 600000), +(9400606, 2022195, 1, 3, 0, 600000), +(9400606, 2022276, 1, 3, 0, 600000), +(9400606, 2022310, 1, 3, 0, 600000), +(9400606, 2040315, 2, 3, 0, 200000), +(9400606, 2040912, 2, 3, 0, 200000), +(9400606, 2041059, 2, 3, 0, 200000), +(9400606, 2041060, 2, 3, 0, 200000), +(9400606, 2041061, 2, 3, 0, 200000), +(9400606, 2041062, 2, 3, 0, 200000), +(9400606, 2043013, 2, 3, 0, 200000), +(9400606, 2043108, 2, 3, 0, 200000), +(9400606, 2043208, 2, 3, 0, 200000), +(9400606, 2043308, 2, 3, 0, 200000), +(9400606, 2043708, 2, 3, 0, 200000), +(9400606, 2043808, 2, 3, 0, 200000), +(9400606, 2044008, 2, 3, 0, 200000), +(9400606, 2044108, 2, 3, 0, 200000), +(9400606, 2044208, 2, 3, 0, 200000), +(9400606, 2044308, 2, 3, 0, 200000), +(9400606, 2044408, 2, 3, 0, 200000), +(9400606, 2044508, 2, 3, 0, 200000), +(9400606, 2044608, 2, 3, 0, 200000), +(9400606, 2044708, 2, 3, 0, 200000), +(9400606, 2044810, 2, 3, 0, 200000), +(9400606, 2044905, 2, 3, 0, 200000), +(9400606, 2100120, 1, 2, 0, 120000), +(9400606, 2100121, 1, 2, 0, 120000), +(9400606, 2101023, 1, 2, 0, 120000), +(9400606, 2101000, 1, 2, 0, 120000), +(9400606, 2101001, 1, 2, 0, 120000), +(9400606, 2101013, 1, 2, 0, 120000), +(9400606, 2101110, 1, 2, 0, 120000), +(9400606, 3010025, 1, 1, 0, 120000), +(9400606, 4003000, 7, 14, 0, 400000), +(9400606, 4011000, 1, 1, 0, 240000), +(9400606, 4011001, 1, 1, 0, 240000), +(9400606, 4011002, 1, 1, 0, 240000), +(9400606, 4011003, 1, 1, 0, 240000), +(9400606, 4011004, 1, 1, 0, 240000), +(9400606, 4011005, 1, 1, 0, 240000), +(9400606, 4011006, 1, 1, 0, 240000), +(9400606, 4011008, 1, 1, 0, 240000), +(9400606, 4021000, 1, 1, 0, 240000), +(9400606, 4021001, 1, 1, 0, 240000), +(9400606, 4021002, 1, 1, 0, 240000), +(9400606, 4021003, 1, 1, 0, 240000), +(9400606, 4021004, 1, 1, 0, 240000), +(9400606, 4021005, 1, 1, 0, 240000), +(9400606, 4021006, 1, 1, 0, 240000), +(9400606, 4021007, 1, 1, 0, 240000), +(9400606, 4021008, 1, 1, 0, 240000), +(9400606, 4031348, 1, 1, 0, 100000), +(9400606, 0, 25000, 30000, 0, 600000); + CREATE TABLE IF NOT EXISTS `drop_data` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `dropperid` int(11) NOT NULL, @@ -21637,7 +21877,52 @@ USE `heavenms`; (2402008, 4032512, 5, 3720), (2602000, 4031574, 1, 3935), (2619000, 4031709, 1, 3310), - (2612005, 4031798, 1, 3366); + (2612005, 4031798, 1, 3366), + (6741015, 4032118, 1, -1), + (6742014, 2041100, 2, -1), + (6742014, 2041103, 2, -1), + (6742014, 2041106, 2, -1), + (6742014, 2041109, 2, -1), + (6742014, 2022278, 2, -1), + (6742014, 2022103, 2, -1), + (6742014, 2022098, 2, -1), + (6742014, 2022097, 2, -1), + (6742014, 2022055, 2, -1), + (6742014, 2022056, 2, -1), + (6742014, 2022063, 5, -1), + (6742014, 2022064, 5, -1), + (6742014, 2040803, 5, -1), + (6742014, 2040818, 5, -1), + (6742014, 2040909, 5, -1), + (6742014, 2049000, 5, -1), + (6742014, 2022014, 5, -1), + (6742014, 2022016, 5, -1), + (6742014, 2022020, 5, -1), + (6742014, 2022021, 5, -1), + (6742014, 2022024, 5, -1), + (6742014, 2022026, 5, -1), + (6742014, 2040823, 5, -1), + (6742014, 2022185, 5, -1), + (6742014, 1122001, 10, -1), + (6742014, 1122002, 25, -1), + (6742014, 1122003, 10, -1), + (6742014, 1122004, 15, -1), + (6742014, 1122005, 25, -1), + (6742014, 1122006, 15, -1), + (6742014, 1002527, 10, -1), + (6742014, 1442026, 10, -1), + (6742014, 1332053, 15, -1), + (6742014, 1102046, 15, -1), + (6742014, 1102047, 15, -1), + (6742014, 1102048, 15, -1), + (6742014, 1132005, 15, -1), + (6742014, 1132006, 25, -1), + (6742014, 1112407, 25, -1), + (6742014, 1112408, 25, -1), + (6742014, 1132007, 40, -1), + (6742014, 1132008, 40, -1), + (6742014, 1082223, 50, -1), + (6742014, 1132009, 50, -1); # adding wish tickets on APQ boxes INSERT INTO `reactordrops` (`reactorid`, `itemid`, `chance`, `questid`) VALUES diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java index 7e5df20526..2666a31d9d 100644 --- a/src/client/MapleCharacter.java +++ b/src/client/MapleCharacter.java @@ -1476,7 +1476,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { if (ob instanceof MapleMapItem) { MapleMapItem mapitem = (MapleMapItem) ob; - if(System.currentTimeMillis() - mapitem.getDropTime() < 900) { + if(System.currentTimeMillis() - mapitem.getDropTime() < 900 || !mapitem.canBePickedBy(this)) { client.announce(MaplePacketCreator.enableActions()); return; } @@ -5629,8 +5629,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { i = i.replace("rn", "Rn"); i = i.replace("vv", "Vv"); i = i.replace("VV", "Vv"); + return i; - } private static class MapleBuffStatValueHolder { @@ -7452,11 +7452,14 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { } announce(MaplePacketCreator.updateQuestInfo((short) quest.getQuest().getId(), quest.getNpc())); } else if (quest.getStatus().equals(MapleQuestStatus.Status.COMPLETED)) { - quest_fame += 1; - if(ServerConstants.FAME_GAIN_BY_QUEST > 0) - fameGainByQuest(); + short questid = quest.getQuest().getId(); + if(questid != 3637) { + quest_fame += 1; + if(ServerConstants.FAME_GAIN_BY_QUEST > 0) + fameGainByQuest(); + } - announce(MaplePacketCreator.completeQuest((short) quest.getQuest().getId(), quest.getCompletionTime())); + announce(MaplePacketCreator.completeQuest(questid, quest.getCompletionTime())); } else if (quest.getStatus().equals(MapleQuestStatus.Status.NOT_STARTED)) { announce(MaplePacketCreator.updateQuest(quest, false)); if (quest.getQuest().getInfoNumber() > 0) { diff --git a/src/client/command/Commands.java b/src/client/command/Commands.java index f18cb0b16c..ba4a20ff04 100644 --- a/src/client/command/Commands.java +++ b/src/client/command/Commands.java @@ -1844,8 +1844,9 @@ public class Commands { break; case "killall": - List monsters = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER)); MapleMap map = player.getMap(); + List monsters = map.getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER)); + for (MapleMapObject monstermo : monsters) { monster = (MapleMonster) monstermo; if (!monster.getStats().isFriendly()) { @@ -2287,12 +2288,7 @@ public class Commands { case "itemvac": List list = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM)); for (MapleMapObject item : list) { - MapleMapItem mapItem = (MapleMapItem) item; - int ownerId = mapItem.getOwner(); - - if(ownerId <= 0 || player.getId() == ownerId || player.isPartyMember(ownerId) || System.currentTimeMillis() - mapItem.getDropTime() >= 15 * 1000) { - player.pickupItem(item); - } + player.pickupItem(item); } break; @@ -2352,7 +2348,7 @@ public class Commands { if(newHp < 0) newHp = Integer.MAX_VALUE; monster.getStats().setHp(newHp); - monster.setHp(newHp); + monster.setStartingHp(newHp); } player.getMap().spawnMonsterOnGroundBelow(monster, player.getPosition()); diff --git a/src/net/server/channel/handlers/PetLootHandler.java b/src/net/server/channel/handlers/PetLootHandler.java index 604464ef74..dc07d32626 100644 --- a/src/net/server/channel/handlers/PetLootHandler.java +++ b/src/net/server/channel/handlers/PetLootHandler.java @@ -39,6 +39,7 @@ import constants.ServerConstants; * @author Ronan */ public final class PetLootHandler extends AbstractMaplePacketHandler { + @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { MapleCharacter chr = c.getPlayer(); if(System.currentTimeMillis() - chr.getPetLootCd() < ServerConstants.PET_LOOT_UPON_ATTACK) { diff --git a/src/scripting/event/EventInstanceManager.java b/src/scripting/event/EventInstanceManager.java index f8d92ef4ed..d462fcb1f8 100644 --- a/src/scripting/event/EventInstanceManager.java +++ b/src/scripting/event/EventInstanceManager.java @@ -660,6 +660,7 @@ public class EventInstanceManager { cancelSchedule(); killCount.clear(); + mapIds.clear(); disposeExpedition(); diff --git a/src/scripting/reactor/ReactorActionManager.java b/src/scripting/reactor/ReactorActionManager.java index 992dd4c6c4..76282c1bae 100644 --- a/src/scripting/reactor/ReactorActionManager.java +++ b/src/scripting/reactor/ReactorActionManager.java @@ -28,8 +28,7 @@ import client.inventory.Item; import client.inventory.MapleInventoryType; import constants.ItemConstants; import java.awt.Point; -import java.util.Iterator; -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.ScheduledFuture; import java.util.logging.Level; @@ -107,33 +106,19 @@ public class ReactorActionManager extends AbstractPlayerInteraction { public void dropItems(boolean delayed, int posX, int posY, boolean meso, int mesoChance, final int minMeso, final int maxMeso, int minItems) { if(c.getPlayer() == null) return; - List chances = getDropChances(); - List items = new LinkedList<>(); - int numItems = 0; - if (meso && Math.random() < (1 / (double) mesoChance)) { - items.add(new ReactorDropEntry(0, mesoChance, -1)); - } - Iterator iter = chances.iterator(); - while (iter.hasNext()) { - ReactorDropEntry d = iter.next(); - if (Math.random() < (c.getPlayer().getDropRate() / (double) d.chance)) { - numItems++; - items.add(d); - } - } - while (items.size() < minItems) { - items.add(new ReactorDropEntry(0, mesoChance, -1)); - numItems++; - } - java.util.Collections.shuffle(items); + List items = generateDropList(getDropChances(), c.getPlayer().getDropRate(), meso, mesoChance, minItems); + if(items.size() % 2 == 0) posX -= 12; final Point dropPos = new Point(posX, posY); - dropPos.x -= (12 * numItems); if(!delayed) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); + byte p = 1; for (ReactorDropEntry d : items) { + dropPos.x = (int) (posX + ((p % 2 == 0) ? (25 * ((p + 1) / 2)) : -(25 * (p / 2)))); + p++; + if (d.itemId == 0) { int range = maxMeso - minMeso; int displayDrop = (int) (Math.random() * range) + minMeso; @@ -148,9 +133,8 @@ public class ReactorActionManager extends AbstractPlayerInteraction { drop = ii.randomizeStats((Equip) ii.getEquipById(d.itemId)); } - reactor.getMap().dropFromReactor(getPlayer(), reactor, drop, dropPos, (short)d.questid); + reactor.getMap().dropFromReactor(getPlayer(), reactor, drop, dropPos, (short) d.questid); } - dropPos.x += 25; } } else { final MapleCharacter chr = client.getPlayer(); @@ -158,6 +142,8 @@ public class ReactorActionManager extends AbstractPlayerInteraction { final List dropItems = items; final int worldMesoRate = client.getWorldServer().getMesoRate(); + dropPos.x -= (12 * items.size()); + sprayTask = TimerManager.getInstance().register(new Runnable() { @Override public void run() { @@ -182,7 +168,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction { drop = ii.randomizeStats((Equip) ii.getEquipById(d.itemId)); } - r.getMap().dropFromReactor(getPlayer(), r, drop, dropPos, (short)d.questid); + r.getMap().dropFromReactor(getPlayer(), r, drop, dropPos, (short) d.questid); } dropPos.x += 25; @@ -194,6 +180,41 @@ public class ReactorActionManager extends AbstractPlayerInteraction { private List getDropChances() { return ReactorScriptManager.getInstance().getDrops(reactor.getId()); } + + private static List generateDropList(List drops, int dropRate, boolean meso, int mesoChance, int minItems) { + MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); + + List items = new ArrayList<>(); + List questItems = new ArrayList<>(); + int numItems = 0; + + if (meso && Math.random() < (1 / (double) mesoChance)) { + items.add(new ReactorDropEntry(0, mesoChance, -1)); + } + + for(ReactorDropEntry mde : drops) { + if (Math.random() < (dropRate / (double) mde.chance)) { + if(!ii.isQuestItem(mde.itemId)) { + items.add(mde); + } else { + questItems.add(mde); + } + + numItems++; + } + } + + while (numItems < minItems) { + items.add(new ReactorDropEntry(0, mesoChance, -1)); + numItems++; + } + + java.util.Collections.shuffle(items); + java.util.Collections.shuffle(questItems); + + items.addAll(questItems); + return items; + } public void spawnMonster(int id) { spawnMonster(id, 1, getPosition()); diff --git a/src/server/events/BalrogPQ.java b/src/server/events/BalrogPQ.java deleted file mode 100644 index 3776582afd..0000000000 --- a/src/server/events/BalrogPQ.java +++ /dev/null @@ -1,112 +0,0 @@ -package server.events; -import client.MapleCharacter; -import java.util.*; -import server.life.MapleLifeFactory; -import java.awt.Point; -import server.maps.MapleMap; -import server.TimerManager; - -/** - * - * @author FateJiki - * @Mapid 105100300 - */ -public class BalrogPQ { - public static final int[] EasyBalrogParts = {8830002, 8830003, 8830000}; - public static final int[] HardBalrogParts = {8830000, 8830001, 8830002}; - public static List candidates = new ArrayList<>(); - public static boolean hasStarted = false; - public static String partyLeader = "undefined"; - public static boolean balrogSpawned = false; - public static long timeStamp = 0; - public static byte channel = 1; - - public static void addCandidate(MapleCharacter chr){ - synchronized(candidates){ - candidates.add(chr); - } - } - - public static void warpAllCandidates(){ - synchronized(candidates){ - for(MapleCharacter c : candidates){ - c.changeMap(105100300); - } - } - } - - public static boolean isFull(MapleCharacter chr){ - return chr.getClient().getChannelServer().getMapFactory().getMap(105100300).getCharacters().size() > 0; - } - - public static void warpIn(MapleCharacter chr){ - if(hasStarted){ - chr.changeMap(105100300); - } - } - - public static void scheduleChecks(MapleMap map){ - final MapleMap fmap = map; - TimerManager tMan = TimerManager.getInstance(); - tMan.schedule(new Runnable(){ - @Override - public void run(){ - for(MapleCharacter chrs : fmap.getCharacters()){ - chrs.changeMap(105100100); - chrs.message("You did not defeat the balrog in time.."); - close(); - } - } - } , 60 * 60 * 1000); - - tMan.schedule(new Runnable(){ - @Override - public void run(){ - if(fmap.getCharacters().size() <= 3){ - if(fmap.getCharacters().size() > 0){ - for(MapleCharacter chrs : fmap.getCharacters()){ - chrs.message("[The Order]: What? You're down to that many mercenaries? I need to get you out of there."); - chrs.changeMap(105100100); - } - } - fmap.killAllMonsters(); - close(); - } - } - } , 60 * 1000); - } - - public static void open(MapleCharacter chr){ - channel = (byte)chr.getClient().getChannel(); - hasStarted = true; - timeStamp = System.currentTimeMillis(); - scheduleChecks(chr.getClient().getChannelServer().getMapFactory().getMap(105100300)); - } - - public static int getSecondsLeft(){ // assuming the thing lasts 60 minutes - int hour = 60 * 60; // 3600 seconds = 1hr - long elapsed = System.currentTimeMillis() - timeStamp; - int secondsLeft = (int)(hour - (elapsed / 1000)); - return secondsLeft; - } - - public static void close(){ - hasStarted = false; - balrogSpawned = false; - partyLeader = "undefined"; - synchronized(candidates){ - candidates.clear(); - } - timeStamp = 0; - } - public static void spawnBalrog(int mode, MapleCharacter chr){ - if(!balrogSpawned){ - for(int i = 0; i < HardBalrogParts.length; i++){ - chr.getClient().getChannelServer().getMapFactory().getMap(105100300).spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(HardBalrogParts[i]), new Point(412, 258)); - balrogSpawned = true; - } - } else { - // DO NUFFIN' - } - } -} \ No newline at end of file diff --git a/src/server/life/MapleMonster.java b/src/server/life/MapleMonster.java index 9d064a6a67..3cc4034333 100644 --- a/src/server/life/MapleMonster.java +++ b/src/server/life/MapleMonster.java @@ -132,8 +132,12 @@ public class MapleMonster extends AbstractLoadedMapleLife { public int getHp() { return hp.get(); } - - public void setHp(int hp) { + + public void addHp(int hp) { + this.hp.addAndGet(hp); + } + + public void setStartingHp(int hp) { this.hp.set(hp); } @@ -208,28 +212,37 @@ public class MapleMonster extends AbstractLoadedMapleLife { return stats.getTagBgColor(); } - /** - * - * @param from the player that dealt the damage - * @param damage - */ - public synchronized void damage(MapleCharacter from, int damage) { // may be pointless synchronization - if (!isAlive()) { - return; - } + public void setHpZero() { // force HP = 0 + applyAndGetHpDamage(Integer.MAX_VALUE, false); + } + + public synchronized Integer applyAndGetHpDamage(int delta, boolean stayAlive) { int curHp = hp.get(); - int trueDamage = Math.min(curHp, damage); // since magic happens otherwise B^) - - if(ServerConstants.USE_DEBUG == true) from.dropMessage(5, "Hitted MOB " + this.getId() + ", OID " + this.getObjectId()); - dispatchMonsterDamaged(from, trueDamage); - - hp.set(curHp - trueDamage); - if (!takenDamage.containsKey(from.getId())) { - takenDamage.put(from.getId(), new AtomicInteger(trueDamage)); - } else { - takenDamage.get(from.getId()).addAndGet(trueDamage); + if (curHp <= 0) { // this monster is already dead + return null; } - + + if(delta >= 0) { + if(stayAlive) curHp--; + int trueDamage = Math.min(curHp, delta); + + hp.addAndGet(-trueDamage); + return trueDamage; + } else { + int trueHeal = -delta; + int hp2Heal = curHp + trueHeal; + int maxHp = getMaxHp(); + + if (hp2Heal > maxHp) { + trueHeal -= (hp2Heal - maxHp); + } + + hp.addAndGet(trueHeal); + return trueHeal; + } + } + + public void broadcastMobHpBar(MapleCharacter from) { if (hasBossHPBar()) { from.setPlayerAggro(this.hashCode()); from.getMap().broadcastBossHpMessage(this, this.hashCode(), makeBossHPBarPacket(), getPosition()); @@ -248,26 +261,45 @@ public class MapleMonster extends AbstractLoadedMapleLife { } } } + + /** + * + * @param from the player that dealt the damage + * @param damage + */ + public synchronized void damage(MapleCharacter from, int damage, boolean stayAlive) { + Integer trueDamage = applyAndGetHpDamage(damage, stayAlive); + if (trueDamage == null) { + return; + } + + if(ServerConstants.USE_DEBUG) from.dropMessage(5, "Hitted MOB " + this.getId() + ", OID " + this.getObjectId()); + dispatchMonsterDamaged(from, trueDamage); + + if (!takenDamage.containsKey(from.getId())) { + takenDamage.put(from.getId(), new AtomicInteger(trueDamage)); + } else { + takenDamage.get(from.getId()).addAndGet(trueDamage); + } + + broadcastMobHpBar(from); + } public void heal(int hp, int mp) { - int hpHealed = hp; - int hp2Heal = getHp() + hp; - int mp2Heal = getMp() + mp; + Integer hpHealed = applyAndGetHpDamage(-hp, false); + if(hpHealed == null) return; - int maxHp = getMaxHp(); + int mp2Heal = getMp() + mp; int maxMp = getMaxMp(); - if (hp2Heal >= maxHp) { - hpHealed = hp2Heal - maxHp; - hp2Heal = maxHp; - } if (mp2Heal >= maxMp) { mp2Heal = maxMp; } - setHp(hp2Heal); setMp(mp2Heal); - getMap().broadcastMessage(MaplePacketCreator.healMonster(getObjectId(), hp)); + + if(hp > 0) getMap().broadcastMessage(MaplePacketCreator.healMonster(getObjectId(), hp)); maxHpPlusHeal.addAndGet(hpHealed); + dispatchMonsterHealed(hpHealed); } public boolean isAttackedBy(MapleCharacter chr) { @@ -471,7 +503,25 @@ public class MapleMonster extends AbstractLoadedMapleLife { reviveMap.spawnMonster(mob); if(mob.getId() >= 8810010 && mob.getId() <= 8810017 && reviveMap.isHorntailDefeated()) { - for(int i = 8810018; i >= 8810010; i--) + boolean htKilled = false; + MapleMonster ht = reviveMap.getMonsterById(8810018); + + if(ht != null) { + ht.lockMonster(); + try { + htKilled = ht.isAlive(); + ht.setHpZero(); + } finally { + ht.unlockMonster(); + } + + if(htKilled) { + reviveMap.killMonster(ht, killer, true); + ht.broadcastMobHpBar(killer); + } + } + + for(int i = 8810017; i >= 8810010; i--) reviveMap.killMonster(reviveMap.getMonsterById(i), killer, true); } } @@ -506,6 +556,12 @@ public class MapleMonster extends AbstractLoadedMapleLife { listener.monsterDamaged(from, trueDmg); } } + + private void dispatchMonsterHealed(int trueHeal) { + for (MonsterListener listener : listeners.toArray(new MonsterListener[listeners.size()])) { + listener.monsterHealed(trueHeal); + } + } // should only really be used to determine drop owner private int getHighestDamagerId() { @@ -837,10 +893,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { final Skill skill = SkillFactory.getSkill(status.getSkill().getId()); final byte level = from.getSkillLevel(skill); final int damage = (int) ((from.getStr() + from.getLuk()) * (1.5 + (level * 0.05)) * skill.getEffect(level).getDamage()); - /*if (getHp() - damage <= 1) { make hp 1 betch - damage = getHp() - (getHp() - 1); - }*/ - + status.setValue(MonsterStatus.NINJA_AMBUSH, Integer.valueOf(damage)); animationTime = broadcastStatusEffect(status); status.setDamageSchedule(timerManager.register(new DamageTask(damage, from, status, cancelTask, 2), 1000, 1000)); @@ -1092,20 +1145,19 @@ public class MapleMonster extends AbstractLoadedMapleLife { @Override public void run() { int curHp = hp.get(); - if(curHp <= 0) return; + if(curHp <= 1) return; int damage = dealDamage; if (damage >= curHp) { damage = curHp - 1; if (type == 1 || type == 2) { - map.broadcastMessage(MaplePacketCreator.damageMonster(getObjectId(), damage), getPosition()); cancelTask.run(); status.getCancelTask().cancel(false); } } - if (curHp > 1 && damage > 0) { - damage(chr, damage); - if (type == 1) { + if (damage > 0) { + damage(chr, damage, true); + if (type == 1 || type == 2) { map.broadcastMessage(MaplePacketCreator.damageMonster(getObjectId(), damage), getPosition()); } } diff --git a/src/server/life/MonsterListener.java b/src/server/life/MonsterListener.java index 49e41620a8..f16f2103c3 100644 --- a/src/server/life/MonsterListener.java +++ b/src/server/life/MonsterListener.java @@ -5,4 +5,5 @@ public interface MonsterListener { public void monsterKilled(int aniTime); public void monsterDamaged(MapleCharacter from, int trueDmg); + public void monsterHealed(int trueHeal); } diff --git a/src/server/life/SpawnPoint.java b/src/server/life/SpawnPoint.java index 3362a6231d..caa8b85a42 100644 --- a/src/server/life/SpawnPoint.java +++ b/src/server/life/SpawnPoint.java @@ -93,6 +93,9 @@ public class SpawnPoint { @Override public void monsterDamaged(MapleCharacter from, int trueDmg) {} + + @Override + public void monsterHealed(int trueHeal) {} }); if (mobTime == 0) { nextPossibleSpawn = System.currentTimeMillis() + mobInterval; diff --git a/src/server/maps/MapleMap.java b/src/server/maps/MapleMap.java index ad92746ffc..fd6173105a 100644 --- a/src/server/maps/MapleMap.java +++ b/src/server/maps/MapleMap.java @@ -254,6 +254,7 @@ public class MapleMap { } public void setReactorState() { + chrRLock.lock(); objectRLock.lock(); try { for (MapleMapObject o : mapobjects.values()) { @@ -272,6 +273,7 @@ public class MapleMap { } } finally { objectRLock.unlock(); + chrRLock.unlock(); } } @@ -564,7 +566,7 @@ public class MapleMap { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); for(MonsterDropEntry mde : from) { - if(mde.itemId == 0 || !ii.isQuestItem(mde.itemId)) { + if(!ii.isQuestItem(mde.itemId)) { item.add(mde); } else { quest.add(mde); @@ -585,9 +587,9 @@ public class MapleMap { for (final MonsterDropEntry de : dropEntry) { if (Randomizer.nextInt(999999) < (long) de.chance * chRate) { if (droptype == 3) { - pos.x = (int) (mobpos + (d % 2 == 0 ? (40 * (d + 1) / 2) : -(40 * (d / 2)))); + pos.x = (int) (mobpos + ((d % 2 == 0) ? (40 * ((d + 1) / 2)) : -(40 * (d / 2)))); } else { - pos.x = (int) (mobpos + ((d % 2 == 0) ? (25 * (d + 1) / 2) : -(25 * (d / 2)))); + pos.x = (int) (mobpos + ((d % 2 == 0) ? (25 * ((d + 1) / 2)) : -(25 * (d / 2)))); } if (de.itemId == 0) { // meso int mesos = Randomizer.nextInt(de.Maximum - de.Minimum) + de.Minimum; @@ -1014,21 +1016,10 @@ public class MapleMap { */ if (damage > 0) { - monster.damage(chr, damage); + monster.damage(chr, damage, false); if (!monster.isAlive()) { // monster just died killed = true; } - } else if (monster.getId() >= 8810002 && monster.getId() <= 8810009) { - for (MapleMapObject object : chr.getMap().getMapObjects()) { - MapleMonster mons = chr.getMap().getMonsterByOid(object.getObjectId()); - if (mons != null) { - if (monster.isAlive() && (monster.getId() >= 8810010 && monster.getId() <= 8810017)) { - if (mons.getId() == 8810018) { - killMonster(mons, chr, true); - } - } - } - } } } finally { monster.unlockMonster(); @@ -1055,6 +1046,14 @@ public class MapleMap { return mobs; } + public void broadcastBalrogVictory(String leaderName) { + for (Channel cserv : Server.getInstance().getWorld(world).getChannels()) { + for (MapleCharacter player : cserv.getPlayerStorage().getAllCharacters()) { + player.dropMessage(6, "[VICTORY] " + leaderName + "'s party has successfully defeated the Balrog! Praise to them, they finished with " + countAlivePlayers() + " players alive."); + } + } + } + public void broadcastHorntailVictory() { for (Channel cserv : Server.getInstance().getWorld(world).getChannels()) { for (MapleCharacter player : cserv.getPlayerStorage().getAllCharacters()) { @@ -1088,8 +1087,9 @@ public class MapleMap { if (chr == null) { spawnedMonstersOnMap.decrementAndGet(); - monster.setHp(0); + monster.setHpZero(); removeMapObject(monster); + monster.dispatchMonsterKilled(false); broadcastMessage(MaplePacketCreator.killMonster(monster.getObjectId(), animation), monster.getPosition()); return; @@ -1118,10 +1118,9 @@ public class MapleMap { } spawnedMonstersOnMap.decrementAndGet(); - monster.setHp(0); - //if (monster.getStats().selfDestruction() == null) {//FUU BOMBS D: + monster.setHpZero(); removeMapObject(monster); - //} + if (monster.getCP() > 0 && chr.getCarnival() != null) { chr.getCarnivalParty().addCP(chr, monster.getCP()); chr.announce(MaplePacketCreator.updateCP(chr.getCP(), chr.getObtainedCP())); @@ -1141,8 +1140,10 @@ public class MapleMap { } } if (makeZakReal) { + MapleMap map = chr.getMap(); + for (MapleMapObject object : objects) { - MapleMonster mons = chr.getMap().getMonsterByOid(object.getObjectId()); + MapleMonster mons = map.getMonsterByOid(object.getObjectId()); if (mons != null) { if (mons.getId() == 8800000) { makeMonsterReal(mons); @@ -1178,12 +1179,12 @@ public class MapleMap { this.killMonster(mob, (MapleCharacter) getPlayers().get(0), false); } - public void killMonster(int monsId) { + public void killMonster(int mobId) { List mmoL = new LinkedList(getMapObjects()); for (MapleMapObject mmo : mmoL) { if (mmo instanceof MapleMonster) { - if (((MapleMonster) mmo).getId() == monsId) { + if (((MapleMonster) mmo).getId() == mobId) { this.killMonster((MapleMonster) mmo, (MapleCharacter) getPlayers().get(0), false); } } @@ -1205,9 +1206,12 @@ public class MapleMap { if (monster.getStats().isFriendly()) { continue; } + spawnedMonstersOnMap.decrementAndGet(); - monster.setHp(0); + monster.setHpZero(); removeMapObject(monster); + + monster.dispatchMonsterKilled(false); } } @@ -1415,10 +1419,10 @@ public class MapleMap { } } - public Collection getMapObjects() { + public List getMapObjects() { objectRLock.lock(); try { - return Collections.unmodifiableCollection(mapobjects.values()); + return new LinkedList(mapobjects.values()); } finally { objectRLock.unlock(); @@ -1446,7 +1450,8 @@ public class MapleMap { public void destroyNPC(int npcid) { List npcs = getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.NPC)); - + + chrRLock.lock(); objectWLock.lock(); try { for (MapleMapObject obj : npcs) { @@ -1459,6 +1464,7 @@ public class MapleMap { } } finally { objectWLock.unlock(); + chrRLock.unlock(); } } @@ -1582,7 +1588,7 @@ public class MapleMap { if (m.getId() == 9300061) { MapleMap.this.riceCakes++; - MapleMap.this.broadcastMessage(MaplePacketCreator.serverNotice(6, "The Moon Bunny made rice cake number " + (MapleMap.this.riceCakes))); + MapleMap.this.broadcastMessage(MaplePacketCreator.serverNotice(6, "The Moon Bunny made rice cake number " + (MapleMap.this.riceCakes) + ".")); } dropFromFriendlyMonster(chr, m); @@ -3240,11 +3246,10 @@ public class MapleMap { } public void clearDrops(MapleCharacter player) { - List items = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM)); - for (MapleMapObject i : items) { + for (MapleMapObject i : getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM))) { droppedItemCount.decrementAndGet(); - player.getMap().removeMapObject(i); - player.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(i.getObjectId(), 0, player.getId())); + removeMapObject(i); + this.broadcastMessage(MaplePacketCreator.removeItemFromMap(i.getObjectId(), 0, player.getId())); } } @@ -3436,6 +3441,7 @@ public class MapleMap { } public void toggleHiddenNPC(int id) { + chrRLock.lock(); objectRLock.lock(); try { for (MapleMapObject obj : mapobjects.values()) { @@ -3452,6 +3458,7 @@ public class MapleMap { } } finally { objectRLock.unlock(); + chrRLock.unlock(); } } @@ -3531,23 +3538,43 @@ public class MapleMap { TimerManager.getInstance().schedule(new Runnable() { @Override public void run() { - for (int x = 8810002; x <= 8810009; x++) { - spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(x), targetPoint); - } + final MapleMonster ht = MapleLifeFactory.getMonster(8810018); + ht.addListener(new MonsterListener() { + @Override + public void monsterKilled(int aniTime) {} - spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8810018), targetPoint); + @Override + public void monsterDamaged(MapleCharacter from, int trueDmg) { + ht.addHp(trueDmg); + } + + @Override + public void monsterHealed(int trueHeal) { + ht.addHp(-trueHeal); + } + }); + spawnMonsterOnGroundBelow(ht, targetPoint); - final MapleMonster ht = getMonsterById(8810018); - for(int mobId = 8810002; mobId <= 8810009; mobId++) { - getMonsterById(mobId).addListener(new MonsterListener() { + for (int x = 8810002; x <= 8810009; x++) { + MapleMonster m = MapleLifeFactory.getMonster(x); + + m.addListener(new MonsterListener() { @Override public void monsterKilled(int aniTime) {} @Override public void monsterDamaged(MapleCharacter from, int trueDmg) { - ht.damage(from, trueDmg); + ht.applyAndGetHpDamage(trueDmg, true); + ht.broadcastMobHpBar(from); + } + + @Override + public void monsterHealed(int trueHeal) { + ht.addHp(trueHeal); } }); + + spawnMonsterOnGroundBelow(m, targetPoint); } } diff --git a/src/server/maps/MapleMapFactory.java b/src/server/maps/MapleMapFactory.java index ae5989e191..a3356eed81 100644 --- a/src/server/maps/MapleMapFactory.java +++ b/src/server/maps/MapleMapFactory.java @@ -379,13 +379,21 @@ public class MapleMapFactory { } else if (mapid >= 677000000 && mapid < 677100000) { builder.append("Episode1GL"); } else if (mapid >= 670000000 && mapid < 682000000) { - builder.append("weddingGL"); + if((mapid >= 674030000 && mapid < 674040000) || (mapid >= 680100000 && mapid < 680200000)) { + builder.append("etc"); + } else { + builder.append("weddingGL"); + } } else if (mapid >= 682000000 && mapid < 683000000) { builder.append("HalloweenGL"); } else if (mapid >= 683000000 && mapid < 684000000) { builder.append("event"); } else if (mapid >= 800000000 && mapid < 900000000) { - builder.append("jp"); + if((mapid >= 889100000 && mapid < 889200000)) { + builder.append("etc"); + } else { + builder.append("jp"); + } } else { builder.append("etc"); } diff --git a/src/server/maps/MapleMapItem.java b/src/server/maps/MapleMapItem.java index c4def3aa63..01fa8cce23 100644 --- a/src/server/maps/MapleMapItem.java +++ b/src/server/maps/MapleMapItem.java @@ -33,7 +33,7 @@ public class MapleMapItem extends AbstractMapleMapObject { protected MapleClient ownerClient; protected Item item; protected MapleMapObject dropper; - protected int character_ownerid, meso, questid = -1; + protected int character_ownerid, party_ownerid, meso, questid = -1; protected byte type; protected boolean pickedUp = false, playerDrop; protected long dropTime; @@ -43,7 +43,8 @@ public class MapleMapItem extends AbstractMapleMapObject { setPosition(position); this.item = item; this.dropper = dropper; - this.character_ownerid = owner.getId(); + this.character_ownerid = owner.getId(); + this.party_ownerid = owner.getPartyId(); this.ownerClient = owner.getClient(); this.meso = 0; this.type = type; @@ -54,7 +55,8 @@ public class MapleMapItem extends AbstractMapleMapObject { setPosition(position); this.item = item; this.dropper = dropper; - this.character_ownerid = owner.getParty() == null ? owner.getId() : owner.getPartyId(); + this.character_ownerid = owner.getId(); + this.party_ownerid = owner.getPartyId(); this.ownerClient = owner.getClient(); this.meso = 0; this.type = type; @@ -66,8 +68,9 @@ public class MapleMapItem extends AbstractMapleMapObject { setPosition(position); this.item = null; this.dropper = dropper; - this.character_ownerid = owner.getParty() == null ? owner.getId() : owner.getPartyId(); - this.ownerClient = owner.getClient(); + this.character_ownerid = owner.getId(); + this.party_ownerid = owner.getPartyId(); + this.ownerClient = owner.getClient(); this.meso = meso; this.type = type; this.playerDrop = playerDrop; @@ -90,10 +93,32 @@ public class MapleMapItem extends AbstractMapleMapObject { return dropper; } - public final int getOwner() { + public final int getOwnerId() { return character_ownerid; } + public final boolean canBePickedBy(MapleCharacter chr) { + if (character_ownerid <= 0) return true; + + if (party_ownerid == -1) { + if (chr.getId() == character_ownerid) { + return true; + } else if (chr.isPartyMember(character_ownerid)) { + party_ownerid = chr.getPartyId(); + return true; + } + } else { + if (chr.getPartyId() == party_ownerid) { + return true; + } else if (chr.getId() == character_ownerid) { + party_ownerid = chr.getPartyId(); + return true; + } + } + + return System.currentTimeMillis() - dropTime >= 15 * 1000; + } + public final MapleClient getOwnerClient() { return (ownerClient.isLoggedIn() && !ownerClient.getPlayer().isAwayFromWorld()) ? ownerClient : null; } diff --git a/src/tools/MaplePacketCreator.java b/src/tools/MaplePacketCreator.java index 1684d7d4b8..d1dbe88c9b 100644 --- a/src/tools/MaplePacketCreator.java +++ b/src/tools/MaplePacketCreator.java @@ -1711,10 +1711,10 @@ public class MaplePacketCreator { mplew.writeInt(drop.getObjectId()); mplew.writeBool(drop.getMeso() > 0); // 1 mesos, 0 item, 2 and above all item meso bag, mplew.writeInt(drop.getItemId()); // drop object ID - mplew.writeInt(drop.getOwner()); // owner charid/paryid :) + mplew.writeInt(drop.getOwnerId()); // owner charid/partyid :) mplew.write(drop.getDropType()); // 0 = timeout for non-owner, 1 = timeout for non-owner's party, 2 = FFA, 3 = explosive/FFA mplew.writePos(dropto); - mplew.writeInt(drop.getDropType() == 0 ? drop.getOwner() : 0); //test + mplew.writeInt(drop.getDropType() == 0 ? drop.getOwnerId() : 0); //test if (mod != 2) { mplew.writePos(dropfrom); @@ -6668,12 +6668,14 @@ public class MaplePacketCreator { mplew.writeInt(mob.getObjectId()); mplew.write(1); // direction ? mplew.writeInt(damage); - int remainingHp = mob.getHp() - damage; - if (remainingHp <= 1) { - remainingHp = 0; - mob.getMap().removeMapObject(mob); + + mob.applyAndGetHpDamage(damage, false); + int remainingHp = mob.getHp(); + if(remainingHp <= 0) { + remainingHp = 0; + mob.getMap().removeMapObject(mob); } - mob.setHp(remainingHp); + mplew.writeInt(remainingHp); mplew.writeInt(mob.getMaxHp()); return mplew.getPacket(); diff --git a/wz/Item.wz/Cash/0521.img.xml b/wz/Item.wz/Cash/0521.img.xml index 36fe766f58..5d8309d3fc 100644 --- a/wz/Item.wz/Cash/0521.img.xml +++ b/wz/Item.wz/Cash/0521.img.xml @@ -22,7 +22,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -163,7 +163,7 @@ - + @@ -184,7 +184,7 @@ - + @@ -205,7 +205,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -247,7 +247,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -299,7 +299,7 @@ - + @@ -325,7 +325,7 @@ - + @@ -351,7 +351,7 @@ - + @@ -377,7 +377,7 @@ - + @@ -401,7 +401,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -448,7 +448,7 @@ - + @@ -472,7 +472,7 @@ - + @@ -493,7 +493,7 @@ - + @@ -519,7 +519,7 @@ - + @@ -543,7 +543,7 @@ - + @@ -564,7 +564,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -616,7 +616,7 @@ - + @@ -642,7 +642,7 @@ - + @@ -668,7 +668,7 @@ - + @@ -695,7 +695,7 @@ - + @@ -722,7 +722,7 @@ - + diff --git a/wz/Item.wz/Cash/0536.img.xml b/wz/Item.wz/Cash/0536.img.xml index fc50cd2174..7647112844 100644 --- a/wz/Item.wz/Cash/0536.img.xml +++ b/wz/Item.wz/Cash/0536.img.xml @@ -22,7 +22,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -74,7 +74,7 @@ - + @@ -100,7 +100,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -152,7 +152,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -204,7 +204,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -256,7 +256,7 @@ - + diff --git a/wz/Item.wz/Etc/0403.img.xml b/wz/Item.wz/Etc/0403.img.xml index 6de4c11e80..12e942053d 100644 --- a/wz/Item.wz/Etc/0403.img.xml +++ b/wz/Item.wz/Etc/0403.img.xml @@ -2769,6 +2769,7 @@ + @@ -11404,6 +11405,7 @@ + diff --git a/wz/Map.wz/Map/Map1/102000000.img.xml b/wz/Map.wz/Map/Map1/102000000.img.xml index 2b5f51c0fc..59c270b1c4 100644 --- a/wz/Map.wz/Map/Map1/102000000.img.xml +++ b/wz/Map.wz/Map/Map1/102000000.img.xml @@ -1,1607 +1,1019 @@ - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - + + - - + + + + - - - - + + + + - - - - - - - - - - - + + + - + + + + + + + + + - - - - + + + + - - - - - - - - - - - + + + - - - - + + + + - - - + + + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + - + + + + + - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + - - - + + + - - - - + + + + - - - + + + - + + + + + - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + - - - + + + - + + + + + - + + + + + - - - - - - - - - + - - - + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - - - - + - - - + + + - - - - - + + + + + - - - + + + - - - - + + + + - - - + + + - + + + + + - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - + + + - - - + + + - - - - - + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + + + + + + + + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1609,1278 +1021,1278 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + - - - + + + - + + + + + - + + + + + - - - - - - - - - + - - - + + + - - - + + + - - - - - + + + + + - - - + + + - + + + + + - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + - - - + + + - - - - + + + + - - - + + + - + + + + + - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + - - - + + + - + + + + + - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + - - - + + + - + + + + + - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - - - - - - - - + - - - + + + - + + + + + - + + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + - + + + + + - - - - - + - + + + + + - - - - - + - - - - - + - - - + + + - + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2888,2375 +2300,2445 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + + + + + - + + + + + - - - - - + + + + + - - - - - - - - - + - - - + + + - + + + + + - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - - - - - - + + + - - - + + + - + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + - - - + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - + + + + + - + + + + + - - - - - - - - - + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - + + + + + - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + - - + + - - + + + + - - - - - + - - - - - - - - - + + + - - - - + + + + + + - - - - + + + + + + - - - - + + + + + + - - - - + + + + + + - - - - + + + + + + - - - - + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5266,898 +4748,634 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -6165,103 +5383,111 @@ - + - + - - - - - - - - - - - - - - - - - + - + - - - - - - + + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + - + - - - - - - - - - + - + - - - - - - - - - - - - - - + + + + + + - + @@ -6269,2247 +5495,1013 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -8517,103 +6509,151 @@ - + + + + + + + + + - + - - - - - - - - - - - - - - - - - + - + - - - - - - + + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + - + - - - - - - - - - + - + - - - - - - - - - - - - - - + + + + + + - + + + + + + + + + + + + + + + + + @@ -8621,475 +6661,2057 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - + - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - + - - + + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + + + + + + + + - - + + - + - - + + - + + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - - - - - - + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -9097,376 +8719,844 @@ - - - + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - + + + + + + + + + + + + + + + + + - - + + - + - - + + - + - - + + - - + + - + - - + + - - + + - - - - + + + + - - - - - - - - - - - - - - - - - + - - + + - + - - + + - - + + - + - - + + - + + + + + + + + + - - + + - - - - - - - + + + + + + + - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - + - - + + - - - - + + + + + + + + + + + + + + + + + + + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - - + + - + - - + + - + + + + + + + + + - - + + - + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -9483,455 +9573,352 @@ - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + + + + + + + + + - - - - - - + + + + + + + + + - - - - - - + + + + + + + + + - - - - - - + + + + + + + + + - - - - - - + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - - + + + + + + + + + + - - - - - - - + + + + + + + + + + - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + + - - - - - - + + + + + + + + + + + - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/wz/Map.wz/Map/Map2/251000000.img.xml b/wz/Map.wz/Map/Map2/251000000.img.xml index 278d30e671..ef18f2b791 100644 --- a/wz/Map.wz/Map/Map2/251000000.img.xml +++ b/wz/Map.wz/Map/Map2/251000000.img.xml @@ -1,4375 +1,22 @@ - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -4380,129 +27,4452 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - + + - + + - - + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wz/Map.wz/Map/Map6/674030000.img.xml b/wz/Map.wz/Map/Map6/674030000.img.xml index 513d2c26d8..d990285740 100644 --- a/wz/Map.wz/Map/Map6/674030000.img.xml +++ b/wz/Map.wz/Map/Map6/674030000.img.xml @@ -1,8973 +1,18 @@ - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -8977,23 +22,9505 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wz/Mob.wz/9400589.img.xml b/wz/Mob.wz/9400589.img.xml index e7714dfa13..da1254d0d4 100644 --- a/wz/Mob.wz/9400589.img.xml +++ b/wz/Mob.wz/9400589.img.xml @@ -2,20 +2,20 @@ - - - + + + - - - - - - - + + + + + + + - - + + @@ -27,6 +27,9 @@ + + + @@ -250,7 +253,7 @@ - + @@ -407,7 +410,7 @@ - + diff --git a/wz/Mob.wz/9400739.img.xml b/wz/Mob.wz/9400739.img.xml index 7858303129..fb7270ff60 100644 --- a/wz/Mob.wz/9400739.img.xml +++ b/wz/Mob.wz/9400739.img.xml @@ -2,20 +2,20 @@ - - - + + + - - - - - - - + + + + + + + - - + + diff --git a/wz/Mob.wz/9400740.img.xml b/wz/Mob.wz/9400740.img.xml index 3537abb819..94d623f5ea 100644 --- a/wz/Mob.wz/9400740.img.xml +++ b/wz/Mob.wz/9400740.img.xml @@ -2,20 +2,20 @@ - - - + + + - - - - - - - + + + + + + + - - + + diff --git a/wz/Mob.wz/9400741.img.xml b/wz/Mob.wz/9400741.img.xml index 81ac4db56b..d431ccad06 100644 --- a/wz/Mob.wz/9400741.img.xml +++ b/wz/Mob.wz/9400741.img.xml @@ -2,19 +2,19 @@ - - + + - - + + - - - - + + + + - + diff --git a/wz/Mob.wz/9400742.img.xml b/wz/Mob.wz/9400742.img.xml index 1a36b1d553..01cc202bdf 100644 --- a/wz/Mob.wz/9400742.img.xml +++ b/wz/Mob.wz/9400742.img.xml @@ -2,19 +2,19 @@ - - + + - - + + - - - - + + + + - + diff --git a/wz/Mob.wz/9400743.img.xml b/wz/Mob.wz/9400743.img.xml index b137074982..bbd4d88fb2 100644 --- a/wz/Mob.wz/9400743.img.xml +++ b/wz/Mob.wz/9400743.img.xml @@ -2,16 +2,16 @@ - - - + + + - - - - - - + + + + + + @@ -154,7 +154,7 @@ - + diff --git a/wz/Mob.wz/9400744.img.xml b/wz/Mob.wz/9400744.img.xml index bd914c7052..bcf179c734 100644 --- a/wz/Mob.wz/9400744.img.xml +++ b/wz/Mob.wz/9400744.img.xml @@ -2,20 +2,20 @@ - - - + + + - - - - - + + + + + - + - - + + @@ -163,7 +163,7 @@ - + @@ -345,7 +345,7 @@ - + diff --git a/wz/Mob.wz/9400745.img.xml b/wz/Mob.wz/9400745.img.xml index 7961beb7f4..658f32b691 100644 --- a/wz/Mob.wz/9400745.img.xml +++ b/wz/Mob.wz/9400745.img.xml @@ -2,20 +2,20 @@ - - - + + + - - - + + + - - - + + + - - + + @@ -187,7 +187,7 @@ - + @@ -356,7 +356,7 @@ - + @@ -463,7 +463,7 @@ - + diff --git a/wz/Mob.wz/9400746.img.xml b/wz/Mob.wz/9400746.img.xml index 768964603e..0a55a28ece 100644 --- a/wz/Mob.wz/9400746.img.xml +++ b/wz/Mob.wz/9400746.img.xml @@ -2,19 +2,19 @@ - - - + + + - - + + - - - - + + + + - + @@ -146,7 +146,7 @@ - + diff --git a/wz/Mob.wz/9400747.img.xml b/wz/Mob.wz/9400747.img.xml index 8dc61204cb..e7d3f95b20 100644 --- a/wz/Mob.wz/9400747.img.xml +++ b/wz/Mob.wz/9400747.img.xml @@ -2,19 +2,19 @@ - - - + + + - - - - - - - + + + + + + + - + @@ -141,7 +141,7 @@ - + diff --git a/wz/Mob.wz/9400748.img.xml b/wz/Mob.wz/9400748.img.xml index d8024f8c96..b014e16227 100644 --- a/wz/Mob.wz/9400748.img.xml +++ b/wz/Mob.wz/9400748.img.xml @@ -2,20 +2,9 @@ - - - - - - - - - - - - + @@ -27,6 +16,20 @@ + + + + + + + + + + + + + + @@ -250,7 +253,7 @@ - + @@ -407,7 +410,7 @@ - + diff --git a/wz/Mob.wz/9400749.img.xml b/wz/Mob.wz/9400749.img.xml index 0dbff1c4eb..ab2c2978b7 100644 --- a/wz/Mob.wz/9400749.img.xml +++ b/wz/Mob.wz/9400749.img.xml @@ -10,7 +10,7 @@ - + diff --git a/wz/String.wz/Consume.img.xml b/wz/String.wz/Consume.img.xml index cc7b624de6..0cc87d7222 100644 --- a/wz/String.wz/Consume.img.xml +++ b/wz/String.wz/Consume.img.xml @@ -2312,19 +2312,19 @@ - + - + - + - + diff --git a/wz/String.wz/Map.img.xml b/wz/String.wz/Map.img.xml index 48eb88df41..3ccb978c4f 100644 --- a/wz/String.wz/Map.img.xml +++ b/wz/String.wz/Map.img.xml @@ -8660,16 +8660,19 @@ + - + + - + + @@ -17304,7 +17307,8 @@ - + + diff --git a/wz/UI.wz/UIWindow.img.xml b/wz/UI.wz/UIWindow.img.xml index 9e64ba19aa..55aa59798f 100644 --- a/wz/UI.wz/UIWindow.img.xml +++ b/wz/UI.wz/UIWindow.img.xml @@ -10246,10 +10246,18 @@ + + + + + + + +