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+.
This commit is contained in:
@@ -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:
|
||||
|
||||
|
||||
+18
-2
@@ -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.
|
||||
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.
|
||||
+1
-1
@@ -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
|
||||
|
||||
+4
-4
@@ -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.
|
||||
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* REACTORID.js: sample text
|
||||
*/
|
||||
|
||||
function act() {
|
||||
|
||||
}
|
||||
@@ -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) {}
|
||||
|
||||
@@ -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) {}
|
||||
|
||||
@@ -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) {}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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?");
|
||||
|
||||
+174
-43
@@ -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 <[email protected]>
|
||||
Matthias Butz <[email protected]>
|
||||
Jan Christian Meyer <[email protected]>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*
|
||||
*
|
||||
*@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<Expedition: " + expedName + ">\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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+35
-37
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
+19
-4
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ function action(mode, type, selection) {
|
||||
}
|
||||
}
|
||||
|
||||
cm.sendOk(sendStr);
|
||||
cm.sendSimple(sendStr);
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Party Quest: MV's Lair>\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<Party Quest: MV's Lair>#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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
function enter(pi) {
|
||||
pi.playPortalSound(); pi.warp(674030100,"in00");
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
function enter(pi) {
|
||||
pi.playPortalSound(); pi.warp(600000000,"yn00");
|
||||
return true;
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
function enter(pi) {
|
||||
pi.warp(674030000, 0);
|
||||
return true;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* 1020000.js: relic room next floor
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.warp(910200000, "pt00");
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* 1020001.js: relic room next floor
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.warp(910200000, "pt01");
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* 1020002.js: relic room next floor
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.warp(910200000, "pt02");
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* 1021000.js: relic room fail
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.spawnMonster(9300091);
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* 1021001.js: relic room fail
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.spawnMonster(9300091);
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* 1021002.js: relic room fail
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.spawnMonster(9300091);
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* 1022000.js: relic complete
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.dropItems();
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
function act() {
|
||||
rm.dropItems();
|
||||
rm.sprayItems(true, 1, 500, 1000, 15);
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
function act() {
|
||||
rm.dropItems();
|
||||
rm.sprayItems(true, 1, 500, 1000, 15);
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.spawnMonster(9400589);
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.dropItems();
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
function act() {
|
||||
rm.sprayItems(true, 1, 5, 25, 15);
|
||||
}
|
||||
+46
-46
@@ -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),
|
||||
|
||||
+307
-22
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -1844,8 +1844,9 @@ public class Commands {
|
||||
break;
|
||||
|
||||
case "killall":
|
||||
List<MapleMapObject> monsters = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
|
||||
MapleMap map = player.getMap();
|
||||
List<MapleMapObject> 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<MapleMapObject> 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());
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -660,6 +660,7 @@ public class EventInstanceManager {
|
||||
|
||||
cancelSchedule();
|
||||
killCount.clear();
|
||||
mapIds.clear();
|
||||
|
||||
disposeExpedition();
|
||||
|
||||
|
||||
@@ -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<ReactorDropEntry> chances = getDropChances();
|
||||
List<ReactorDropEntry> items = new LinkedList<>();
|
||||
int numItems = 0;
|
||||
if (meso && Math.random() < (1 / (double) mesoChance)) {
|
||||
items.add(new ReactorDropEntry(0, mesoChance, -1));
|
||||
}
|
||||
Iterator<ReactorDropEntry> 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<ReactorDropEntry> 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<ReactorDropEntry> 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<ReactorDropEntry> getDropChances() {
|
||||
return ReactorScriptManager.getInstance().getDrops(reactor.getId());
|
||||
}
|
||||
|
||||
private static List<ReactorDropEntry> generateDropList(List<ReactorDropEntry> drops, int dropRate, boolean meso, int mesoChance, int minItems) {
|
||||
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
|
||||
|
||||
List<ReactorDropEntry> items = new ArrayList<>();
|
||||
List<ReactorDropEntry> 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());
|
||||
|
||||
@@ -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<MapleCharacter> 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'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,4 +5,5 @@ public interface MonsterListener {
|
||||
|
||||
public void monsterKilled(int aniTime);
|
||||
public void monsterDamaged(MapleCharacter from, int trueDmg);
|
||||
public void monsterHealed(int trueHeal);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<MapleMapObject> 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<MapleMapObject> getMapObjects() {
|
||||
public List<MapleMapObject> 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<MapleMapObject> 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<MapleMapObject> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -46,7 +46,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -70,7 +70,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -94,7 +94,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -118,7 +118,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -142,7 +142,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -163,7 +163,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -184,7 +184,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -205,7 +205,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -226,7 +226,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -247,7 +247,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -273,7 +273,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -299,7 +299,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -325,7 +325,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -351,7 +351,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -377,7 +377,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -401,7 +401,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -422,7 +422,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -448,7 +448,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -472,7 +472,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -493,7 +493,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -519,7 +519,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -543,7 +543,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -564,7 +564,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -590,7 +590,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -616,7 +616,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="3"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -642,7 +642,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="3"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -668,7 +668,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="3"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -695,7 +695,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="3"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -722,7 +722,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="172800000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="expR" value="4"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -48,7 +48,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -74,7 +74,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -100,7 +100,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -126,7 +126,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -152,7 +152,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -178,7 +178,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -204,7 +204,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -230,7 +230,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="2"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
@@ -256,7 +256,7 @@
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="spec">
|
||||
<int name="time" value="2100000"/>
|
||||
<int name="time" value="2147483647"/>
|
||||
<int name="drpR" value="3"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
|
||||
@@ -2769,6 +2769,7 @@
|
||||
<vector name="origin" x="-9" y="31"/>
|
||||
</canvas>
|
||||
<int name="price" value="1"/>
|
||||
<int name="quest" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="04031210">
|
||||
@@ -11404,6 +11405,7 @@
|
||||
<vector name="origin" x="-1" y="32"/>
|
||||
</canvas>
|
||||
<int name="price" value="1"/>
|
||||
<int name="pquest" value="1"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="04032119">
|
||||
|
||||
+7951
-7964
File diff suppressed because it is too large
Load Diff
+4388
-4418
File diff suppressed because it is too large
Load Diff
+9494
-8967
File diff suppressed because it is too large
Load Diff
+17
-14
@@ -2,20 +2,20 @@
|
||||
<imgdir name="9400589.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="30"/>
|
||||
<int name="maxHP" value="400000"/>
|
||||
<int name="maxMP" value="200"/>
|
||||
<int name="level" value="180"/>
|
||||
<int name="maxHP" value="17000000"/>
|
||||
<int name="maxMP" value="2000"/>
|
||||
<int name="speed" value="-10"/>
|
||||
<int name="PADamage" value="150"/>
|
||||
<int name="PDDamage" value="500"/>
|
||||
<int name="MADamage" value="20"/>
|
||||
<int name="MDDamage" value="450"/>
|
||||
<int name="acc" value="1000"/>
|
||||
<int name="eva" value="10"/>
|
||||
<int name="exp" value="500"/>
|
||||
<int name="PADamage" value="650"/>
|
||||
<int name="PDDamage" value="1000"/>
|
||||
<int name="MADamage" value="780"/>
|
||||
<int name="MDDamage" value="1100"/>
|
||||
<int name="acc" value="300"/>
|
||||
<int name="eva" value="50"/>
|
||||
<int name="exp" value="60000"/>
|
||||
<int name="undead" value="0"/>
|
||||
<int name="pushed" value="3000"/>
|
||||
<int name="hpRecovery" value="2000"/>
|
||||
<int name="pushed" value="42000"/>
|
||||
<int name="hpRecovery" value="20000"/>
|
||||
<int name="boss" value="1"/>
|
||||
<float name="fs" value="20.0"/>
|
||||
<int name="summonType" value="2"/>
|
||||
@@ -27,6 +27,9 @@
|
||||
<int name="effectAfter" value="900"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<int name="HPgaugeHide" value="1"/>
|
||||
<int name="hpTagBgcolor" value="5"/>
|
||||
<int name="hpTagColor" value="1"/>
|
||||
</imgdir>
|
||||
<imgdir name="move">
|
||||
<canvas name="0" width="287" height="259">
|
||||
@@ -250,7 +253,7 @@
|
||||
<int name="effectAfter" value="0"/>
|
||||
<int name="attackAfter" value="1380"/>
|
||||
<int name="jumpAttack" value="1"/>
|
||||
<int name="PADamage" value="180"/>
|
||||
<int name="PADamage" value="700"/>
|
||||
<int name="knockback" value="1"/>
|
||||
<int name="tremble" value="1"/>
|
||||
</imgdir>
|
||||
@@ -407,7 +410,7 @@
|
||||
<int name="type" value="0"/>
|
||||
<int name="effectAfter" value="0"/>
|
||||
<int name="attackAfter" value="2250"/>
|
||||
<int name="PADamage" value="200"/>
|
||||
<int name="PADamage" value="620"/>
|
||||
<int name="tremble" value="1"/>
|
||||
</imgdir>
|
||||
<canvas name="0" width="287" height="255">
|
||||
|
||||
+12
-12
@@ -2,20 +2,20 @@
|
||||
<imgdir name="9400739.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="8"/>
|
||||
<int name="maxHP" value="2000"/>
|
||||
<int name="maxMP" value="100"/>
|
||||
<int name="level" value="140"/>
|
||||
<int name="maxHP" value="200000"/>
|
||||
<int name="maxMP" value="1000"/>
|
||||
<int name="speed" value="20"/>
|
||||
<int name="PADamage" value="100"/>
|
||||
<int name="PDDamage" value="100"/>
|
||||
<int name="MADamage" value="10"/>
|
||||
<int name="MDDamage" value="70"/>
|
||||
<int name="acc" value="1000"/>
|
||||
<int name="eva" value="15"/>
|
||||
<string name="exp" value="50"/>
|
||||
<int name="PADamage" value="200"/>
|
||||
<int name="PDDamage" value="1000"/>
|
||||
<int name="MADamage" value="400"/>
|
||||
<int name="MDDamage" value="500"/>
|
||||
<int name="acc" value="210"/>
|
||||
<int name="eva" value="45"/>
|
||||
<string name="exp" value="5000"/>
|
||||
<int name="undead" value="0"/>
|
||||
<int name="pushed" value="500"/>
|
||||
<int name="hpRecovery" value="10"/>
|
||||
<int name="pushed" value="5000"/>
|
||||
<int name="hpRecovery" value="1000"/>
|
||||
<int name="boss" value="0"/>
|
||||
<float name="fs" value="20.0"/>
|
||||
<int name="summonType" value="0"/>
|
||||
|
||||
+12
-12
@@ -2,20 +2,20 @@
|
||||
<imgdir name="9400740.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="8"/>
|
||||
<int name="maxHP" value="2000"/>
|
||||
<int name="maxMP" value="100"/>
|
||||
<int name="level" value="140"/>
|
||||
<int name="maxHP" value="200000"/>
|
||||
<int name="maxMP" value="1000"/>
|
||||
<int name="speed" value="50"/>
|
||||
<int name="PADamage" value="100"/>
|
||||
<int name="PDDamage" value="100"/>
|
||||
<int name="MADamage" value="10"/>
|
||||
<int name="MDDamage" value="75"/>
|
||||
<int name="acc" value="1000"/>
|
||||
<int name="eva" value="20"/>
|
||||
<string name="exp" value="50"/>
|
||||
<int name="PADamage" value="400"/>
|
||||
<int name="PDDamage" value="500"/>
|
||||
<int name="MADamage" value="200"/>
|
||||
<int name="MDDamage" value="1000"/>
|
||||
<int name="acc" value="210"/>
|
||||
<int name="eva" value="50"/>
|
||||
<string name="exp" value="5000"/>
|
||||
<int name="undead" value="0"/>
|
||||
<int name="pushed" value="300"/>
|
||||
<int name="hpRecovery" value="20"/>
|
||||
<int name="pushed" value="3000"/>
|
||||
<int name="hpRecovery" value="2000"/>
|
||||
<int name="boss" value="0"/>
|
||||
<float name="fs" value="20.0"/>
|
||||
<int name="summonType" value="1"/>
|
||||
|
||||
@@ -2,19 +2,19 @@
|
||||
<imgdir name="9400741.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="10"/>
|
||||
<int name="maxHP" value="1200"/>
|
||||
<int name="level" value="140"/>
|
||||
<int name="maxHP" value="120000"/>
|
||||
<int name="maxMP" value="0"/>
|
||||
<int name="speed" value="20"/>
|
||||
<int name="PADamage" value="60"/>
|
||||
<int name="PDDamage" value="85"/>
|
||||
<int name="PADamage" value="420"/>
|
||||
<int name="PDDamage" value="650"/>
|
||||
<int name="MADamage" value="0"/>
|
||||
<int name="MDDamage" value="95"/>
|
||||
<int name="acc" value="60"/>
|
||||
<int name="eva" value="9"/>
|
||||
<int name="exp" value="50"/>
|
||||
<int name="MDDamage" value="500"/>
|
||||
<int name="acc" value="180"/>
|
||||
<int name="eva" value="30"/>
|
||||
<int name="exp" value="5000"/>
|
||||
<int name="undead" value="1"/>
|
||||
<int name="pushed" value="50"/>
|
||||
<int name="pushed" value="5000"/>
|
||||
<float name="fs" value="10.0"/>
|
||||
<int name="summonType" value="1"/>
|
||||
<string name="elemAttr" value="H3"/>
|
||||
|
||||
@@ -2,19 +2,19 @@
|
||||
<imgdir name="9400742.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="10"/>
|
||||
<int name="maxHP" value="1400"/>
|
||||
<int name="level" value="140"/>
|
||||
<int name="maxHP" value="140000"/>
|
||||
<int name="maxMP" value="0"/>
|
||||
<int name="speed" value="20"/>
|
||||
<int name="PADamage" value="65"/>
|
||||
<int name="PDDamage" value="90"/>
|
||||
<int name="PADamage" value="440"/>
|
||||
<int name="PDDamage" value="770"/>
|
||||
<int name="MADamage" value="0"/>
|
||||
<int name="MDDamage" value="98"/>
|
||||
<int name="acc" value="65"/>
|
||||
<int name="eva" value="9"/>
|
||||
<int name="exp" value="60"/>
|
||||
<int name="MDDamage" value="700"/>
|
||||
<int name="acc" value="180"/>
|
||||
<int name="eva" value="30"/>
|
||||
<int name="exp" value="6000"/>
|
||||
<int name="undead" value="1"/>
|
||||
<int name="pushed" value="50"/>
|
||||
<int name="pushed" value="5000"/>
|
||||
<float name="fs" value="10.0"/>
|
||||
<int name="summonType" value="1"/>
|
||||
<string name="elemAttr" value="H3"/>
|
||||
|
||||
+10
-10
@@ -2,16 +2,16 @@
|
||||
<imgdir name="9400743.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="10"/>
|
||||
<int name="maxHP" value="1600"/>
|
||||
<int name="maxMP" value="30"/>
|
||||
<int name="level" value="140"/>
|
||||
<int name="maxHP" value="160000"/>
|
||||
<int name="maxMP" value="300"/>
|
||||
<int name="speed" value="15"/>
|
||||
<int name="PADamage" value="80"/>
|
||||
<int name="PDDamage" value="80"/>
|
||||
<int name="MADamage" value="75"/>
|
||||
<int name="MDDamage" value="55"/>
|
||||
<int name="acc" value="80"/>
|
||||
<int name="eva" value="10"/>
|
||||
<int name="PADamage" value="500"/>
|
||||
<int name="PDDamage" value="700"/>
|
||||
<int name="MADamage" value="160"/>
|
||||
<int name="MDDamage" value="800"/>
|
||||
<int name="acc" value="300"/>
|
||||
<int name="eva" value="35"/>
|
||||
<int name="exp" value="70"/>
|
||||
<int name="undead" value="0"/>
|
||||
<int name="pushed" value="1"/>
|
||||
@@ -154,7 +154,7 @@
|
||||
</imgdir>
|
||||
<int name="type" value="0"/>
|
||||
<int name="attackAfter" value="840"/>
|
||||
<string name="PADamage" value="150"/>
|
||||
<string name="PADamage" value="550"/>
|
||||
</imgdir>
|
||||
<canvas name="0" width="90" height="50">
|
||||
<vector name="origin" x="36" y="50"/>
|
||||
|
||||
+13
-13
@@ -2,20 +2,20 @@
|
||||
<imgdir name="9400744.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="10"/>
|
||||
<int name="maxHP" value="100000"/>
|
||||
<int name="maxMP" value="500"/>
|
||||
<int name="level" value="168"/>
|
||||
<int name="maxHP" value="10000000"/>
|
||||
<int name="maxMP" value="5000"/>
|
||||
<int name="flySpeed" value="10"/>
|
||||
<int name="PADamage" value="100"/>
|
||||
<int name="PDDamage" value="400"/>
|
||||
<int name="MADamage" value="200"/>
|
||||
<int name="MDDamage" value="400"/>
|
||||
<int name="acc" value="90"/>
|
||||
<int name="PADamage" value="750"/>
|
||||
<int name="PDDamage" value="600"/>
|
||||
<int name="MADamage" value="700"/>
|
||||
<int name="MDDamage" value="800"/>
|
||||
<int name="acc" value="190"/>
|
||||
<int name="eva" value="20"/>
|
||||
<int name="exp" value="2500"/>
|
||||
<int name="exp" value="250000"/>
|
||||
<int name="undead" value="0"/>
|
||||
<int name="pushed" value="2000"/>
|
||||
<int name="hpRecovery" value="100"/>
|
||||
<int name="pushed" value="20000"/>
|
||||
<int name="hpRecovery" value="10000"/>
|
||||
<int name="mpRecovery" value="5"/>
|
||||
<string name="elemAttr" value="S1H3"/>
|
||||
<int name="boss" value="1"/>
|
||||
@@ -163,7 +163,7 @@
|
||||
</canvas>
|
||||
</imgdir>
|
||||
<int name="type" value="2"/>
|
||||
<int name="conMP" value="2"/>
|
||||
<int name="conMP" value="40"/>
|
||||
<int name="attackAfter" value="400"/>
|
||||
<int name="magic" value="1"/>
|
||||
</imgdir>
|
||||
@@ -345,7 +345,7 @@
|
||||
<uol name="8" value="1"/>
|
||||
</imgdir>
|
||||
<int name="type" value="0"/>
|
||||
<int name="conMP" value="2"/>
|
||||
<int name="conMP" value="40"/>
|
||||
<int name="effectAfter" value="0"/>
|
||||
<int name="attackAfter" value="720"/>
|
||||
<int name="magic" value="1"/>
|
||||
|
||||
+14
-14
@@ -2,20 +2,20 @@
|
||||
<imgdir name="9400745.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="10"/>
|
||||
<int name="maxHP" value="50000"/>
|
||||
<int name="maxMP" value="500"/>
|
||||
<int name="level" value="160"/>
|
||||
<int name="maxHP" value="5000000"/>
|
||||
<int name="maxMP" value="5000"/>
|
||||
<int name="speed" value="-20"/>
|
||||
<int name="PADamage" value="90"/>
|
||||
<int name="PDDamage" value="220"/>
|
||||
<int name="MADamage" value="150"/>
|
||||
<int name="PADamage" value="700"/>
|
||||
<int name="PDDamage" value="880"/>
|
||||
<int name="MADamage" value="550"/>
|
||||
<int name="MDDamage" value="220"/>
|
||||
<int name="acc" value="75"/>
|
||||
<int name="eva" value="15"/>
|
||||
<int name="exp" value="1000"/>
|
||||
<int name="acc" value="180"/>
|
||||
<int name="eva" value="55"/>
|
||||
<int name="exp" value="100000"/>
|
||||
<int name="undead" value="0"/>
|
||||
<int name="pushed" value="1500"/>
|
||||
<int name="hpRecovery" value="50"/>
|
||||
<int name="pushed" value="15000"/>
|
||||
<int name="hpRecovery" value="5000"/>
|
||||
<int name="mpRecovery" value="5"/>
|
||||
<string name="elemAttr" value="S1H3"/>
|
||||
<int name="boss" value="1"/>
|
||||
@@ -187,7 +187,7 @@
|
||||
</canvas>
|
||||
</imgdir>
|
||||
<int name="type" value="1"/>
|
||||
<int name="conMP" value="2"/>
|
||||
<int name="conMP" value="40"/>
|
||||
<int name="effectAfter" value="700"/>
|
||||
<int name="attackAfter" value="1300"/>
|
||||
<int name="magic" value="1"/>
|
||||
@@ -356,7 +356,7 @@
|
||||
</canvas>
|
||||
</imgdir>
|
||||
<int name="type" value="2"/>
|
||||
<int name="conMP" value="2"/>
|
||||
<int name="conMP" value="40"/>
|
||||
<int name="effectAfter" value="100"/>
|
||||
<int name="attackAfter" value="400"/>
|
||||
<int name="magic" value="1"/>
|
||||
@@ -463,7 +463,7 @@
|
||||
</canvas>
|
||||
</imgdir>
|
||||
<int name="type" value="0"/>
|
||||
<int name="conMP" value="2"/>
|
||||
<int name="conMP" value="40"/>
|
||||
<int name="effectAfter" value="500"/>
|
||||
<int name="attackAfter" value="400"/>
|
||||
<int name="magic" value="1"/>
|
||||
|
||||
+11
-11
@@ -2,19 +2,19 @@
|
||||
<imgdir name="9400746.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="10"/>
|
||||
<int name="maxHP" value="20000"/>
|
||||
<int name="maxMP" value="100"/>
|
||||
<int name="level" value="170"/>
|
||||
<int name="maxHP" value="2000000"/>
|
||||
<int name="maxMP" value="1000"/>
|
||||
<int name="speed" value="-60"/>
|
||||
<int name="PADamage" value="85"/>
|
||||
<int name="PDDamage" value="200"/>
|
||||
<int name="PADamage" value="650"/>
|
||||
<int name="PDDamage" value="800"/>
|
||||
<int name="MADamage" value="0"/>
|
||||
<int name="MDDamage" value="250"/>
|
||||
<int name="acc" value="140"/>
|
||||
<int name="eva" value="23"/>
|
||||
<int name="exp" value="300"/>
|
||||
<int name="MDDamage" value="750"/>
|
||||
<int name="acc" value="200"/>
|
||||
<int name="eva" value="56"/>
|
||||
<int name="exp" value="30000"/>
|
||||
<int name="undead" value="0"/>
|
||||
<int name="pushed" value="2500"/>
|
||||
<int name="pushed" value="25000"/>
|
||||
<string name="elemAttr" value="I2F2L2S2"/>
|
||||
<int name="boss" value="1"/>
|
||||
<float name="fs" value="10.0"/>
|
||||
@@ -146,7 +146,7 @@
|
||||
</imgdir>
|
||||
<int name="type" value="1"/>
|
||||
<int name="attackAfter" value="720"/>
|
||||
<int name="PADamage" value="135"/>
|
||||
<int name="PADamage" value="560"/>
|
||||
</imgdir>
|
||||
<canvas name="0" width="123" height="107">
|
||||
<vector name="origin" x="61" y="107"/>
|
||||
|
||||
+12
-12
@@ -2,19 +2,19 @@
|
||||
<imgdir name="9400747.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="10"/>
|
||||
<int name="maxHP" value="45000"/>
|
||||
<int name="maxMP" value="190"/>
|
||||
<int name="level" value="170"/>
|
||||
<int name="maxHP" value="4500000"/>
|
||||
<int name="maxMP" value="1900"/>
|
||||
<int name="speed" value="-20"/>
|
||||
<int name="PADamage" value="80"/>
|
||||
<int name="PDDamage" value="100"/>
|
||||
<int name="MADamage" value="80"/>
|
||||
<int name="MDDamage" value="100"/>
|
||||
<int name="acc" value="70"/>
|
||||
<int name="eva" value="15"/>
|
||||
<int name="exp" value="250"/>
|
||||
<int name="PADamage" value="700"/>
|
||||
<int name="PDDamage" value="750"/>
|
||||
<int name="MADamage" value="650"/>
|
||||
<int name="MDDamage" value="500"/>
|
||||
<int name="acc" value="210"/>
|
||||
<int name="eva" value="70"/>
|
||||
<int name="exp" value="25000"/>
|
||||
<int name="undead" value="0"/>
|
||||
<int name="pushed" value="1000"/>
|
||||
<int name="pushed" value="10000"/>
|
||||
<string name="elemAttr" value="F2I3"/>
|
||||
<int name="boss" value="1"/>
|
||||
<float name="fs" value="10.0"/>
|
||||
@@ -141,7 +141,7 @@
|
||||
</canvas>
|
||||
</imgdir>
|
||||
<int name="type" value="2"/>
|
||||
<int name="conMP" value="3"/>
|
||||
<int name="conMP" value="50"/>
|
||||
<int name="attackAfter" value="665"/>
|
||||
<int name="bulletSpeed" value="200"/>
|
||||
<string name="elemAttr" value="F"/>
|
||||
|
||||
+17
-14
@@ -2,20 +2,9 @@
|
||||
<imgdir name="9400748.img">
|
||||
<imgdir name="info">
|
||||
<int name="bodyAttack" value="1"/>
|
||||
<int name="level" value="10"/>
|
||||
<int name="maxHP" value="400000"/>
|
||||
<int name="maxMP" value="100"/>
|
||||
<int name="speed" value="-10"/>
|
||||
<int name="PADamage" value="150"/>
|
||||
<int name="PDDamage" value="500"/>
|
||||
<int name="MADamage" value="20"/>
|
||||
<int name="MDDamage" value="450"/>
|
||||
<int name="acc" value="1000"/>
|
||||
<int name="eva" value="10"/>
|
||||
<int name="exp" value="1000"/>
|
||||
<int name="undead" value="0"/>
|
||||
<int name="pushed" value="3000"/>
|
||||
<int name="hpRecovery" value="2000"/>
|
||||
<int name="hpRecovery" value="20000"/>
|
||||
<int name="boss" value="1"/>
|
||||
<float name="fs" value="20.0"/>
|
||||
<int name="summonType" value="2"/>
|
||||
@@ -27,6 +16,20 @@
|
||||
<int name="effectAfter" value="900"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<int name="acc" value="270"/>
|
||||
<int name="eva" value="50"/>
|
||||
<int name="exp" value="60000"/>
|
||||
<int name="level" value="180"/>
|
||||
<int name="MADamage" value="780"/>
|
||||
<int name="maxHP" value="17000000"/>
|
||||
<int name="maxMP" value="2000"/>
|
||||
<int name="MDDamage" value="1100"/>
|
||||
<int name="PADamage" value="650"/>
|
||||
<int name="PDDamage" value="1000"/>
|
||||
<int name="pushed" value="42000"/>
|
||||
<int name="HPgaugeHide" value="1"/>
|
||||
<int name="hpTagBgcolor" value="5"/>
|
||||
<int name="hpTagColor" value="1"/>
|
||||
</imgdir>
|
||||
<imgdir name="move">
|
||||
<canvas name="0" width="287" height="259">
|
||||
@@ -250,7 +253,7 @@
|
||||
<int name="effectAfter" value="0"/>
|
||||
<int name="attackAfter" value="1380"/>
|
||||
<int name="jumpAttack" value="1"/>
|
||||
<int name="PADamage" value="180"/>
|
||||
<int name="PADamage" value="720"/>
|
||||
<int name="knockback" value="1"/>
|
||||
<int name="tremble" value="1"/>
|
||||
</imgdir>
|
||||
@@ -407,7 +410,7 @@
|
||||
<int name="type" value="0"/>
|
||||
<int name="effectAfter" value="0"/>
|
||||
<int name="attackAfter" value="2250"/>
|
||||
<int name="PADamage" value="200"/>
|
||||
<int name="PADamage" value="640"/>
|
||||
<int name="tremble" value="1"/>
|
||||
</imgdir>
|
||||
<canvas name="0" width="287" height="255">
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<int name="PDDamage" value="90"/>
|
||||
<int name="MADamage" value="0"/>
|
||||
<int name="MDDamage" value="90"/>
|
||||
<int name="acc" value="75"/>
|
||||
<int name="acc" value="300"/>
|
||||
<int name="eva" value="12"/>
|
||||
<int name="exp" value="120"/>
|
||||
<int name="undead" value="0"/>
|
||||
|
||||
@@ -2312,19 +2312,19 @@
|
||||
<string name="desc" value="Improves dexterity on shoes.\nSuccess rate:15%, avoidability+5, accuracy+3, speed+1"/>
|
||||
</imgdir>
|
||||
<imgdir name="2040720">
|
||||
<string name="name" value="Scroll for Jump for DEX"/>
|
||||
<string name="name" value="Scroll for Shoes for Jump"/>
|
||||
<string name="desc" value="Improves jump on shoes.\nSuccess rate:65%, jump+2, DEX+1"/>
|
||||
</imgdir>
|
||||
<imgdir name="2040721">
|
||||
<string name="name" value="Scroll for Jump for DEX"/>
|
||||
<string name="name" value="Scroll for Shoes for Jump"/>
|
||||
<string name="desc" value="Improves jump on shoes.\nSuccess rate:15%, jump+5, DEX+3, speed+1"/>
|
||||
</imgdir>
|
||||
<imgdir name="2040722">
|
||||
<string name="name" value="Scroll for Speed for DEX"/>
|
||||
<string name="name" value="Scroll for Shoes for Speed"/>
|
||||
<string name="desc" value="Improves speed on shoes.\nSuccess rate:65%, speed+2"/>
|
||||
</imgdir>
|
||||
<imgdir name="2040723">
|
||||
<string name="name" value="Scroll for Speed for DEX"/>
|
||||
<string name="name" value="Scroll for Shoes for Speed"/>
|
||||
<string name="desc" value="Improves speed on shoes.\nSuccess rate:15%, speed+3"/>
|
||||
</imgdir>
|
||||
<imgdir name="2040727">
|
||||
|
||||
@@ -8660,16 +8660,19 @@
|
||||
</imgdir>
|
||||
<imgdir name="674030300">
|
||||
<string name="streetName" value="Treasure Dungeon"/>
|
||||
<string name="mapName" value="Treasure Dungeon"/>
|
||||
</imgdir>
|
||||
<imgdir name="914090011">
|
||||
<string name="streetName" value="Aran Tuto"/>
|
||||
<string name="mapName" value="Aran Tuto 2"/>
|
||||
</imgdir>
|
||||
<imgdir name="674030100">
|
||||
<string name="streetName" value="Entrance to MV's Lair"/>
|
||||
<string name="streetName" value="Treasure Dungeon"/>
|
||||
<string name="mapName" value="Entrance to MV's Lair"/>
|
||||
</imgdir>
|
||||
<imgdir name="674030200">
|
||||
<string name="streetName" value="The Lair of MV"/>
|
||||
<string name="streetName" value="Treasure Dungeon"/>
|
||||
<string name="mapName" value="The Lair of MV"/>
|
||||
</imgdir>
|
||||
<imgdir name="910020000">
|
||||
<string name="streetName" value="Hidden Street"/>
|
||||
@@ -17304,7 +17307,8 @@
|
||||
<string name="mapName" value="Aran Tuto 4"/>
|
||||
</imgdir>
|
||||
<imgdir name="674030000">
|
||||
<string name="streetName" value="Initiation"/>
|
||||
<string name="streetName" value="Treasure Dungeon"/>
|
||||
<string name="mapName" value="Initiation"/>
|
||||
</imgdir>
|
||||
</imgdir>
|
||||
<imgdir name="singapore">
|
||||
|
||||
@@ -10246,10 +10246,18 @@
|
||||
<int name="delay" value="500"/>
|
||||
<vector name="origin" x="0" y="0"/>
|
||||
</canvas>
|
||||
<canvas name="9400748" width="25" height="25">
|
||||
<int name="delay" value="500"/>
|
||||
<vector name="origin" x="0" y="0"/>
|
||||
</canvas>
|
||||
<canvas name="2220000" width="25" height="25">
|
||||
<int name="delay" value="500"/>
|
||||
<vector name="origin" x="0" y="0"/>
|
||||
</canvas>
|
||||
<canvas name="9400589" width="25" height="25">
|
||||
<int name="delay" value="500"/>
|
||||
<vector name="origin" x="0" y="0"/>
|
||||
</canvas>
|
||||
</imgdir>
|
||||
<imgdir name="Gage">
|
||||
<imgdir name="1">
|
||||
|
||||
Reference in New Issue
Block a user