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:
ronancpl
2019-05-02 11:02:07 -03:00
parent b6a91c523f
commit c2fa7883fe
90 changed files with 1454 additions and 611 deletions

View File

@@ -943,7 +943,7 @@ public class EventInstanceManager {
}
private void dropExclusiveItems(MapleCharacter chr) {
AbstractPlayerInteraction api = chr.getClient().getAbstractPlayerInteraction();
AbstractPlayerInteraction api = chr.getAbstractPlayerInteraction();
for(Integer item: exclusiveItems) {
api.removeAll(item);
@@ -1051,7 +1051,7 @@ public class EventInstanceManager {
if(!hasRewardSlot(player, eventLevel)) return false;
AbstractPlayerInteraction api = player.getClient().getAbstractPlayerInteraction();
AbstractPlayerInteraction api = player.getAbstractPlayerInteraction();
int rnd = (int)Math.floor(Math.random() * rewardsSet.size());
api.gainItem(rewardsSet.get(rnd), rewardsQty.get(rnd).shortValue());

View File

@@ -62,6 +62,7 @@ import constants.ItemConstants;
import constants.LanguageConstants;
import net.server.PlayerStorage;
import net.server.channel.Channel;
import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType;
import server.MapleSkillbookInformationProvider;
import server.MapleSkillbookInformationProvider.SkillBookEntry;
import server.TimerManager;
@@ -76,8 +77,9 @@ import tools.packets.Wedding;
import java.awt.Point;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import server.MapleMarriage;
/**
@@ -633,7 +635,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
}
public boolean sendCPQMapLists() {
String msg = LanguageConstants.Languages(getPlayer()).CPQPickRoom;
String msg = LanguageConstants.getMessage(getPlayer(), LanguageConstants.CPQPickRoom);
int msgLen = msg.length();
for (int i = 0; i < 6; i++) {
if (fieldTaken(i)) {
@@ -696,7 +698,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
mc = ps.getCharacterById(mpc.getId());
if (mc != null) {
mc.changeMap(map, map.getPortal(0));
mc.announce(MaplePacketCreator.serverNotice(6, LanguageConstants.Languages(mc).CPQEntryLobby));
mc.announce(MaplePacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby)));
TimerManager tMan = TimerManager.getInstance();
tMan.schedule(new Runnable() {
@Override
@@ -850,7 +852,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
}
public boolean sendCPQMapLists2() {
String msg = LanguageConstants.Languages(getPlayer()).CPQPickRoom;
String msg = LanguageConstants.getMessage(getPlayer(), LanguageConstants.CPQPickRoom);
int msgLen = msg.length();
for (int i = 0; i < 3; i++) {
if (fieldTaken2(i)) {
@@ -913,7 +915,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
mc = ps.getCharacterById(mpc.getId());
if (mc != null) {
mc.changeMap(map, map.getPortal(0));
mc.announce(MaplePacketCreator.serverNotice(6, LanguageConstants.Languages(mc).CPQEntryLobby));
mc.announce(MaplePacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby)));
TimerManager tMan = TimerManager.getInstance();
tMan.schedule(new Runnable() {
@Override
@@ -934,14 +936,30 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
ex.printStackTrace();
}
}
public void mapClock(int time) {
getPlayer().getMap().broadcastMessage(MaplePacketCreator.getClock(time));
}
private boolean sendCPQChallenge(String cpqType, int leaderid) {
Set<Integer> cpqLeaders = new HashSet<>();
cpqLeaders.add(leaderid);
cpqLeaders.add(getPlayer().getId());
return c.getWorldServer().getMatchCheckerCoordinator().createMatchConfirmation(MatchCheckerType.CPQ_CHALLENGE, c.getWorld(), getPlayer().getId(), cpqLeaders, cpqType);
}
public void answerCPQChallenge(boolean accept) {
c.getWorldServer().getMatchCheckerCoordinator().answerMatchConfirmation(getPlayer().getId(), accept);
}
public void challengeParty2(int field) {
MapleCharacter leader = null;
MapleMap map = c.getChannelServer().getMapFactory().getMap(980031000 + 1000 * field);
for (MapleMapObject mmo : map.getAllPlayer()) {
MapleCharacter mc = (MapleCharacter) mmo;
if (mc.getParty() == null) {
sendOk(LanguageConstants.Languages(mc).CPQFindError);
sendOk(LanguageConstants.getMessage(mc, LanguageConstants.CPQFindError));
return;
}
if (mc.getParty().getLeader().getId() == mc.getId()) {
@@ -951,23 +969,17 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
}
if (leader != null) {
if (!leader.isChallenged()) {
List<MaplePartyCharacter> members = new LinkedList<>();
for (MaplePartyCharacter fucker : c.getPlayer().getParty().getMembers()) {
members.add(fucker);
if (!sendCPQChallenge("cpq2", leader.getId())) {
sendOk(LanguageConstants.getMessage(leader, LanguageConstants.CPQChallengeRoomAnswer));
}
NPCScriptManager.getInstance().start("cpqchallenge2", leader.getClient(), npc, members);
} else {
sendOk(LanguageConstants.Languages(leader).CPQChallengeRoomAnswer);
sendOk(LanguageConstants.getMessage(leader, LanguageConstants.CPQChallengeRoomAnswer));
}
} else {
sendOk(LanguageConstants.Languages(leader).CPQLeaderNotFound);
sendOk(LanguageConstants.getMessage(leader, LanguageConstants.CPQLeaderNotFound));
}
}
public void mapClock(int time) {
getPlayer().getMap().broadcastMessage(MaplePacketCreator.getClock(time));
}
public void challengeParty(int field) {
MapleCharacter leader = null;
MapleMap map = c.getChannelServer().getMapFactory().getMap(980000100 + 100 * field);
@@ -978,7 +990,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
for (MapleMapObject mmo : map.getAllPlayer()) {
MapleCharacter mc = (MapleCharacter) mmo;
if (mc.getParty() == null) {
sendOk(LanguageConstants.Languages(mc).CPQFindError);
sendOk(LanguageConstants.getMessage(mc, LanguageConstants.CPQFindError));
return;
}
if (mc.getParty().getLeader().getId() == mc.getId()) {
@@ -988,18 +1000,14 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
}
if (leader != null) {
if (!leader.isChallenged()) {
List<MaplePartyCharacter> members = new LinkedList<>();
for (MaplePartyCharacter mpc : c.getPlayer().getParty().getMembers()) {
members.add(mpc);
if (!sendCPQChallenge("cpq1", leader.getId())) {
sendOk(LanguageConstants.getMessage(leader, LanguageConstants.CPQChallengeRoomAnswer));
}
NPCScriptManager.getInstance().start("cpqchallenge", leader.getClient(), npc, members);
sendOk(LanguageConstants.Languages(leader).CPQChallengeRoomSent);
} else {
sendOk(LanguageConstants.Languages(leader).CPQChallengeRoomAnswer);
sendOk(LanguageConstants.getMessage(leader, LanguageConstants.CPQChallengeRoomAnswer));
}
} else {
sendOk(LanguageConstants.Languages(leader).CPQLeaderNotFound);
sendOk(LanguageConstants.getMessage(leader, LanguageConstants.CPQLeaderNotFound));
}
}