Adjusted pet autopot to use temporary variables instead of the current player's HP, MP. This seems to have solved a race condition issue where the pet would instantly use up all the pots of the assigned itemid the player had on the inventory. Steal now uses the effective chance it is supposed to use. Reworked Steal so that it determines which item to drop accordingly with the drop rates of each available item. It won't drop Quest nor Party Quest items. Reworked friendly mob drops to act on the same way common mobs drops items. Fixed issues with scripted portals introduced on the Portal Soundeffect update patch. There is expected to have no more syntax errors on the portal scripts. Improved quality of the strings used on the Expedition scripts. New command: reach. Warps the caller to the area where the targeted player is.
193 lines
4.9 KiB
JavaScript
193 lines
4.9 KiB
JavaScript
/**
|
|
* @author: Ronan
|
|
* @event: Zakum Battle
|
|
*/
|
|
|
|
importPackage(Packages.server.life);
|
|
|
|
var isPq = true;
|
|
var minPlayers = 6, maxPlayers = 30;
|
|
var minLevel = 50, maxLevel = 255;
|
|
var entryMap = 280030000;
|
|
var exitMap = 211042400;
|
|
var recruitMap = 211042400;
|
|
var clearMap = 211042400;
|
|
|
|
var minMapId = 280030000;
|
|
var maxMapId = 280030000;
|
|
|
|
var eventTime = 60; // 60 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 = [];
|
|
eim.setExclusiveItems(itemSet);
|
|
}
|
|
|
|
function setEventRewards(eim) {
|
|
var itemSet, itemQty, evLevel, expStages, mesoStages;
|
|
|
|
evLevel = 1; //Rewards at clear PQ
|
|
itemSet = [];
|
|
itemQty = [];
|
|
eim.setEventRewards(evLevel, itemSet, itemQty);
|
|
|
|
expStages = []; //bonus exp given on CLEAR stage signal
|
|
eim.setEventClearStageExp(expStages);
|
|
|
|
mesoStages = []; //bonus meso given on CLEAR stage signal
|
|
eim.setEventClearStageMeso(mesoStages);
|
|
}
|
|
|
|
function afterSetup(eim) {}
|
|
|
|
function setup(channel) {
|
|
var eim = em.newInstance("Zakum" + channel);
|
|
eim.setProperty("canJoin", 1);
|
|
eim.setProperty("defeatedBoss", 0);
|
|
|
|
var level = 1;
|
|
eim.getInstanceMap(280030000).resetPQ(level);
|
|
|
|
eim.startEventTimer(eventTime * 60000);
|
|
setEventRewards(eim);
|
|
setEventExclusives(eim);
|
|
|
|
return eim;
|
|
}
|
|
|
|
function playerEntry(eim, player) {
|
|
eim.dropMessage(5, "[Expedition] " + player.getName() + " has entered the map.");
|
|
var map = eim.getMapInstance(entryMap);
|
|
player.changeMap(map, map.getPortal(0));
|
|
}
|
|
|
|
function scheduledTimeout(eim) {
|
|
end(eim);
|
|
}
|
|
|
|
function changedMap(eim, player, mapid) {
|
|
if (mapid < minMapId || mapid > maxMapId) {
|
|
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
|
eim.dropMessage(5, "[Expedition] Either the leader has quit the expedition or there is no longer the minimum number of members required to continue it.");
|
|
eim.unregisterPlayer(player);
|
|
end(eim);
|
|
}
|
|
else {
|
|
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the event.");
|
|
eim.unregisterPlayer(player);
|
|
}
|
|
}
|
|
}
|
|
|
|
function changedLeader(eim, leader) {}
|
|
|
|
function playerDead(eim, player) {}
|
|
|
|
function playerRevive(eim, player) {
|
|
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
|
eim.unregisterPlayer(player);
|
|
eim.dropMessage(5, "[Expedition] Either the leader has quit the expedition or there is no longer the minimum number of members required to continue it.");
|
|
end(eim);
|
|
}
|
|
else {
|
|
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the event.");
|
|
eim.unregisterPlayer(player);
|
|
}
|
|
}
|
|
|
|
function playerDisconnected(eim, player) {
|
|
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
|
eim.dropMessage(5, "[Expedition] Either the leader has quit the expedition or there is no longer the minimum number of members required to continue it.");
|
|
eim.unregisterPlayer(player);
|
|
end(eim);
|
|
}
|
|
else {
|
|
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the event.");
|
|
eim.unregisterPlayer(player);
|
|
}
|
|
}
|
|
|
|
function leftParty (eim, player) {}
|
|
|
|
function disbandParty (eim) {}
|
|
|
|
function monsterValue(eim, mobId) {
|
|
return 1;
|
|
}
|
|
|
|
function playerUnregistered(eim, player) {
|
|
if(eim.isEventCleared()) {
|
|
em.completeQuest(player, 100200, 2030010);
|
|
}
|
|
}
|
|
|
|
function playerExit(eim, player) {
|
|
eim.unregisterPlayer(player);
|
|
player.changeMap(exitMap, 0);
|
|
}
|
|
|
|
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 isZakum(mob) {
|
|
var mobid = mob.getId();
|
|
return (mobid == 8800002);
|
|
}
|
|
|
|
function monsterKilled(mob, eim) {
|
|
if(isZakum(mob)) {
|
|
eim.setIntProperty("defeatedBoss", 1);
|
|
eim.showClearEffect(mob.getMap().getId());
|
|
eim.clearPQ();
|
|
|
|
mob.getMap().broadcastZakumVictory();
|
|
}
|
|
}
|
|
|
|
function allMonstersDead(eim) {}
|
|
|
|
function cancelSchedule() {}
|
|
|
|
function dispose(eim) {}
|