Add instanced event handling

This commit is contained in:
Charlie Unfricht
2022-08-26 01:20:57 -04:00
parent 6e578a71a1
commit 2ed69407de
2 changed files with 110 additions and 40 deletions

73
scripts/event/q3239.js Normal file
View File

@@ -0,0 +1,73 @@
var entryMap;
var exitMap;
var eventLength = 20;
function init() {
em.setProperty("noEntry", "false");
entryMap = em.getChannelServer().getMapFactory().getMap(922000000);
exitMap = em.getChannelServer().getMapFactory().getMap(922000009);
}
function setup(level, lobbyid) {
var eim = em.newInstance("q3239_" + lobbyid);
return eim;
}
function playerEntry(eim, player) {
var im = eim.getInstanceMap(entryMap.getId());
// Reset instance
im.clearDrops();
im.resetReactors();
im.shuffleReactors();
// Start timer
eim.startEventTimer(eventLength * 60 * 1000);
// Warp player and mark event as occupied
player.changeMap(entryMap, 0);
em.setProperty("noEntry", "true");
}
function changedMap(eim, player, mapid) {
if (mapid != entryMap.getId())
playerExit(eim, player);
}
function playerExit(eim, player) {
end(eim);
}
function playerDisconnected(eim, player) {
end(eim);
}
function scheduledTimeout(eim) {
end(eim);
}
function end(eim) {
var party = eim.getPlayers(); // should only ever be one player
for (var i = 0; i < party.size(); i++) {
var player = party.get(i);
eim.unregisterPlayer(player);
player.changeMap(exitMap);
}
eim.dispose();
em.setProperty("noEntry", "false");
}
// Stub/filler functions
function disbandParty(eim, player) {}
function afterSetup(eim) {}
function playerUnregistered(eim, player) {}
function changedLeader(eim, leader) {}
function leftParty(eim, player) {}
function clearPQ(eim) {}
function dispose() {}
function cancelSchedule() {}
function allMonstersDead(eim) {}
function monsterValue(eim, mobId) {}
function monsterKilled(mob, eim) {}

View File

@@ -1,51 +1,48 @@
var status = 0; var status = 0;
var entry; var em;
var eim;
function sendBaseText() {
cm.sendOk("Access is restricted to the public.");
cm.dispose();
}
function start() { function start() {
if (cm.getPlayer().getMapId() == 922000000) { em = cm.getEventManager("q3239");
entry = 0; if (em != null)
cm.sendYesNo("Do you wish to quit this stage?"); eim = cm.getEventInstance();
status++;
} else if (cm.isQuestStarted(3239)) { if (em == null) { // No event handler
entry = 1; sendBaseText();
cm.sendYesNo("Do you want to enter #bToy Factory<Sector 4>#k?"); return;
status++; }
} else { else if (eim == null && !cm.isQuestStarted(3239)) { // Not in instance, quest is not in progress
cm.sendOk("Access to #bToy Factory<Sector 4>#k is restricted to the public."); sendBaseText();
cm.dispose(); return;
}
if (eim == null) { // Not in instance
cm.sendYesNo("Are you ready to enter #b#m922000000##k?");
}
else { // Inside the instance
cm.sendYesNo("Are you ready to leave this place?");
} }
} }
function action(mode, type, selection) { function action(mode, type, selection) {
if (status == 1) { if (mode < 1) {
if (entry == 0) { cm.dispose();
if (mode <= 0) { return;
cm.sendOk("Ok. Call me if you urge to exit, then."); }
cm.dispose();
return;
}
cm.warp(922000009, 0); if (eim == null) { // Not in instance, ready to enter
if (!(cm.isQuestStarted(3239) && cm.haveItem(4031092, 10))) { cm.removeAll(4031092); // This doesn't belong here - these should be removed on exit, handled by portal script
cm.removeAll(4031092); if (!em.startInstance(cm.getPlayer())) {
} cm.sendOk("Someone else is already gathering some parts for me. Please wait until the area is cleared.");
cm.dispose();
} else {
if (mode <= 0) {
cm.dispose();
return;
}
if (cm.getWarpMap(922000000).countPlayers() == 0) {
cm.warp(922000000, 0);
if (!(cm.isQuestStarted(3239) && cm.haveItem(4031092, 10))) {
cm.removeAll(4031092);
}
} else {
cm.sendOk("Someone else is already attempting the parts. Wait for them to finish before you enter.");
}
cm.dispose();
} }
} }
else { // Inside the instance, ready to exit
eim.removePlayer(cm.getPlayer()); // This will end the event and warp the player out
}
cm.dispose();
} }