Several PQ platform patches + Quest complete count + Fast meso drop
Implemented CPQ challenges using the matching system. Fixed LanguageConstants statically acting for all players. Fixed OPQ's <On the Way Up> stage sometimes leading players to unexpected platforms. Fixed EllinPQ fountain not giving Altaire Fragment to players. Fixed "Lab - Unit" stage on RnJPQ, now using correlated sequences between the units. Fixed Fredrick handing out negative values of mesos to players. Improved "goto" command info. Implemented quest complete count. Fixed mobs still being "controlled" by players even though it's already dead. Concurrently protected adding items into inventory. Concurrently protected EXP gain through Writs of Solomon. Adjusted smoothly respawn rate of mobs in map (solo players in a map now experiences 75% of mobs spawned). Fixed mesos not being able to drop so frequently (prior 200ms threshold between drops). Tweaked matchchecking so that match checking doesn't outright dispose matching members on dismissal (match still sticks to the player until they answer or timeout). Fixed a dupe case within storage's item store. Added any-NPC scriptable to the source.
This commit is contained in:
@@ -8,9 +8,23 @@ function start() {
|
||||
|
||||
|
||||
function action(mode, type, selection) {
|
||||
cm.warpParty(980000000);
|
||||
cm.cancelCPQLobby();
|
||||
cm.dispose();
|
||||
if (mode == -1) {
|
||||
cm.dispose();
|
||||
} else {
|
||||
if (mode == 0 && status == 0) {
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
if (mode == 1)
|
||||
status++;
|
||||
else
|
||||
status--;
|
||||
if (status == 0) {
|
||||
cm.warpParty(980000000);
|
||||
cm.cancelCPQLobby();
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -69,9 +69,13 @@ function action(mode, type, selection) {
|
||||
if(state == -1) {
|
||||
cm.sendOk("Heh, it seems you guys have company. Have fun with them, as I politely request my leave.");
|
||||
|
||||
} else if (playersTooClose() || eim.getIntProperty("npcShocked") == 0) {
|
||||
} else if (playersTooClose()) {
|
||||
cm.sendOk("Oh, hello there. I have been #bmonitoring your moves#k since you guys entered this perimeter. Quite the feat reaching here, I commend all of you. Now, now, look at the time, I've got an appointment right now, I'm afraid I will need to request my leave. But worry not, my #raccessors#k will deal with all of you. Now, if you permit me, I'm leaving now.");
|
||||
|
||||
eim.setIntProperty("yuleteTalked", -1);
|
||||
} else if (eim.getIntProperty("npcShocked") == 0) {
|
||||
cm.sendOk("Ho~ Aren't you quite the sneaky one? Well, it matters not. I have been #bmonitoring your moves#k since you guys entered this perimeter. Quite the feat reaching here, I commend all of you. Now, now, look at the time, I've got an appointment right now, I'm afraid I will need to request my leave. But worry not, my #raccessors#k will deal with all of you. Now, if you permit me, I'm leaving now.");
|
||||
|
||||
eim.setIntProperty("yuleteTalked", -1);
|
||||
} else {
|
||||
cm.sendOk("... Hah! What, wh-- How did you get here?! I though I had sealed all paths here! No matter, this situation will be resolved soon. Guys: DEPLOY the #rmaster weapon#k!! You! Yes, you. Don't you think this ends here, look back at your companions, they need some help! I'll be retreating for now.");
|
||||
|
||||
@@ -69,9 +69,13 @@ function action(mode, type, selection) {
|
||||
if(state == -1) {
|
||||
cm.sendOk("Heh, it seems you guys have company. Have fun with them, as I politely request my leave.");
|
||||
|
||||
} else if (playersTooClose() || eim.getIntProperty("npcShocked") == 0) {
|
||||
} else if (playersTooClose()) {
|
||||
cm.sendOk("Oh, hello there. I have been #bmonitoring your moves#k since you guys entered this perimeter. Quite the feat reaching here, I commend all of you. Now, now, look at the time, I've got an appointment right now, I'm afraid I will need to request my leave. But worry not, my #raccessors#k will deal with all of you. Now, if you permit me, I'm leaving now.");
|
||||
|
||||
eim.setIntProperty("yuleteTalked", -1);
|
||||
} else if (eim.getIntProperty("npcShocked") == 0) {
|
||||
cm.sendOk("Ho~ Aren't you quite the sneaky one? Well, it matters not. I have been #bmonitoring your moves#k since you guys entered this perimeter. Quite the feat reaching here, I commend all of you. Now, now, look at the time, I've got an appointment right now, I'm afraid I will need to request my leave. But worry not, my #raccessors#k will deal with all of you. Now, if you permit me, I'm leaving now.");
|
||||
|
||||
eim.setIntProperty("yuleteTalked", -1);
|
||||
} else {
|
||||
cm.sendOk("... Hah! What, wh-- How did you get here?! I though I had sealed all paths here! No matter, this situation will be resolved soon. Guys: DEPLOY the #rmaster weapon#k!! You! Yes, you. Don't you think this ends here, look back at your companions, they need some help! I'll be retreating for now.");
|
||||
|
||||
@@ -344,7 +344,7 @@ function action(mode, type, selection) {
|
||||
cm.sendOk("You have already confirmed your vows. All that is left is for your partner to confirm now.");
|
||||
} else {
|
||||
eim.setIntProperty("weddingStage", 3);
|
||||
var cmPartner = partner.getClient().getAbstractPlayerInteraction();
|
||||
var cmPartner = partner.getAbstractPlayerInteraction();
|
||||
|
||||
var playerItemId = detectPlayerItemid(player);
|
||||
var partnerItemId = (playerItemId % 2 == 1) ? playerItemId + 1 : playerItemId - 1;
|
||||
|
||||
@@ -159,7 +159,7 @@ function action(mode, type, selection) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!cm.getUnclaimedMarriageGifts().isEmpty() || !partner.getClient().getAbstractPlayerInteraction().getUnclaimedMarriageGifts().isEmpty()) {
|
||||
if(!cm.getUnclaimedMarriageGifts().isEmpty() || !partner.getAbstractPlayerInteraction().getUnclaimedMarriageGifts().isEmpty()) {
|
||||
cm.sendOk("Eerhm... I'm sorry, something doesn't seem right according to the Amoria's Wedding Gift Registry reserve. Please check in the situation with #b#p9201014##k.");
|
||||
cm.dispose();
|
||||
return;
|
||||
@@ -178,7 +178,7 @@ function action(mode, type, selection) {
|
||||
|
||||
var expirationTime = cserv.getRelativeWeddingTicketExpireTime(resStatus);
|
||||
cm.gainItem(weddingSendTicket,15,false,true,expirationTime);
|
||||
partner.getClient().getAbstractPlayerInteraction().gainItem(weddingSendTicket,15,false,true,expirationTime);
|
||||
partner.getAbstractPlayerInteraction().gainItem(weddingSendTicket,15,false,true,expirationTime);
|
||||
|
||||
var placeTime = cserv.getWeddingReservationTimeLeft(weddingId);
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ function action(mode, type, selection) {
|
||||
} else if (status == 1) {
|
||||
var cmPartner;
|
||||
try {
|
||||
cmPartner = cm.getMap().getCharacterById(cm.getPlayer().getPartnerId()).getClient().getAbstractPlayerInteraction();
|
||||
cmPartner = cm.getMap().getCharacterById(cm.getPlayer().getPartnerId()).getAbstractPlayerInteraction();
|
||||
} catch(err) {
|
||||
cmPartner = null;
|
||||
}
|
||||
|
||||
@@ -159,7 +159,7 @@ function action(mode, type, selection) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!cm.getUnclaimedMarriageGifts().isEmpty() || !partner.getClient().getAbstractPlayerInteraction().getUnclaimedMarriageGifts().isEmpty()) {
|
||||
if(!cm.getUnclaimedMarriageGifts().isEmpty() || !partner.getAbstractPlayerInteraction().getUnclaimedMarriageGifts().isEmpty()) {
|
||||
cm.sendOk("Eerhm... I'm sorry, something doesn't seem right according to the Amoria's Wedding Gift Registry reserve. Please check in the situation with #b#p9201014##k.");
|
||||
cm.dispose();
|
||||
return;
|
||||
@@ -178,7 +178,7 @@ function action(mode, type, selection) {
|
||||
|
||||
var expirationTime = cserv.getRelativeWeddingTicketExpireTime(resStatus);
|
||||
cm.gainItem(weddingSendTicket,15,false,true,expirationTime);
|
||||
partner.getClient().getAbstractPlayerInteraction().gainItem(weddingSendTicket,15,false,true,expirationTime);
|
||||
partner.getAbstractPlayerInteraction().gainItem(weddingSendTicket,15,false,true,expirationTime);
|
||||
|
||||
var placeTime = cserv.getWeddingReservationTimeLeft(weddingId);
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ function action(mode, type, selection) {
|
||||
} else if (status == 1) {
|
||||
var cmPartner;
|
||||
try {
|
||||
cmPartner = cm.getMap().getCharacterById(cm.getPlayer().getPartnerId()).getClient().getAbstractPlayerInteraction();
|
||||
cmPartner = cm.getMap().getCharacterById(cm.getPlayer().getPartnerId()).getAbstractPlayerInteraction();
|
||||
} catch(err) {
|
||||
cmPartner = null;
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ function action(mode, type, selection) {
|
||||
cm.sendOk("You have already confirmed your vows. All that is left is for your partner to confirm now.");
|
||||
} else {
|
||||
eim.setIntProperty("weddingStage", 3);
|
||||
var cmPartner = partner.getClient().getAbstractPlayerInteraction();
|
||||
var cmPartner = partner.getAbstractPlayerInteraction();
|
||||
|
||||
var playerItemId = detectPlayerItemid(player);
|
||||
var partnerItemId = (playerItemId % 2 == 1) ? playerItemId + 1 : playerItemId - 1;
|
||||
|
||||
@@ -47,7 +47,7 @@ function writeFeatureTab_PQs() {
|
||||
addFeature("Brand-new PQs: BossRushPQ, CafePQ.");
|
||||
addFeature("Mu Lung Dojo.");
|
||||
addFeature("Monster Carnival 1 & 2 - thanks Dragohe4rt & Jayd!");
|
||||
addFeature("AriantPQ - thanks Dragohe4rt!");
|
||||
addFeature("AriantPQ - thanks Dragohe4rt & Jayd!");
|
||||
addFeature("Capt. Latanica with party fighting the boss.");
|
||||
addFeature("Filled up missing obligatory event script methods.");
|
||||
addFeature("Secured uniquety of active lobby-name instances.");
|
||||
@@ -222,6 +222,7 @@ function writeFeatureTab_Serverpotentials() {
|
||||
addFeature("SP cap past tier-level, recovered after job upgrade.");
|
||||
addFeature("Bypassable PIN/PIC system for authenticated users.");
|
||||
addFeature("Automatic account registration - thanks shavit!");
|
||||
addFeature("Any NPC scriptable - thanks GabrielSin!");
|
||||
}
|
||||
|
||||
function writeFeatureTab_Commands() {
|
||||
|
||||
@@ -18,10 +18,12 @@ function start(chrs) {
|
||||
|
||||
function action(mode, type, selection) {
|
||||
if (mode == -1) {
|
||||
cm.answerCPQChallenge(false);
|
||||
cm.getChar().setChallenged(false);
|
||||
cm.dispose();
|
||||
} else {
|
||||
if (mode == 0) {
|
||||
cm.answerCPQChallenge(false);
|
||||
cm.getChar().setChallenged(false);
|
||||
cm.dispose();
|
||||
return;
|
||||
@@ -43,16 +45,16 @@ function action(mode, type, selection) {
|
||||
snd += "#bName: " + party.get(i).getName() + " / (Level: " + party.get(i).getLevel() + ") / " + GameConstants.getJobName(party.get(i).getJobId()) + "#k\r\n\r\n";
|
||||
cm.sendAcceptDecline(snd + "Would you like to fight this party at the Monster Carnival?");
|
||||
} else {
|
||||
return;
|
||||
cm.answerCPQChallenge(false);
|
||||
cm.getChar().setChallenged(false);
|
||||
cm.dispose();
|
||||
}
|
||||
} else if (status == 1) {
|
||||
var ch = cm.getChrById(party.get(0).getId());
|
||||
if (party.size() == cm.getParty().getMembers().size()) {
|
||||
cm.startCPQ(ch, ch.getMapId() + 1);
|
||||
ch.getParty().setEnemy(cm.getPlayer().getParty());
|
||||
cm.getChar().getParty().setEnemy(ch.getParty());
|
||||
cm.getChar().setChallenged(false);
|
||||
cm.answerCPQChallenge(true);
|
||||
} else {
|
||||
cm.answerCPQChallenge(false);
|
||||
cm.getChar().setChallenged(false);
|
||||
cm.sendOk("The number of players between the teams is not the same.");
|
||||
}
|
||||
cm.dispose();
|
||||
|
||||
@@ -18,11 +18,12 @@ function start(chrs) {
|
||||
|
||||
function action(mode, type, selection) {
|
||||
if (mode == -1) {
|
||||
cm.answerCPQChallenge(false);
|
||||
cm.getChar().setChallenged(false);
|
||||
cm.dispose();
|
||||
} else {
|
||||
if (mode == 0) {
|
||||
cm.sendOk("Come back once you have thought about it some more.");
|
||||
cm.answerCPQChallenge(false);
|
||||
cm.getChar().setChallenged(false);
|
||||
cm.dispose();
|
||||
return;
|
||||
@@ -44,14 +45,18 @@ function action(mode, type, selection) {
|
||||
snd += "#bName: " + party.get(i).getName() + " / (Level: " + party.get(i).getLevel() + ") / " + GameConstants.getJobName(party.get(i).getJobId()) + "#k\r\n\r\n";
|
||||
cm.sendAcceptDecline(snd + "Would you like to fight this party at the Monster Carnival?");
|
||||
} else {
|
||||
return;
|
||||
cm.answerCPQChallenge(false);
|
||||
cm.getChar().setChallenged(false);
|
||||
cm.dispose();
|
||||
}
|
||||
} else if (status == 1) {
|
||||
var ch = cm.getChrById(party.get(0).getId());
|
||||
cm.startCPQ2(ch, ch.getMapId() + 1);
|
||||
ch.getParty().setEnemy(cm.getPlayer().getParty());
|
||||
cm.getChar().getParty().setEnemy(ch.getParty());
|
||||
cm.getChar().setChallenged(false);
|
||||
if (party.size() == cm.getParty().getMembers().size()) {
|
||||
cm.answerCPQChallenge(true);
|
||||
} else {
|
||||
cm.answerCPQChallenge(false);
|
||||
cm.getChar().setChallenged(false);
|
||||
cm.sendOk("The number of players between the teams is not the same.");
|
||||
}
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user