GuildPQ Queue system + revamped Warp mechanic

Added a queue system for waiting guilds outside the GPQ area. Changed
the way players are transported through maps on non-portal passing
cases: if not defined, a spawn point is chosen randomly for each player.
This commit is contained in:
ronancpl
2017-06-13 20:47:58 -03:00
parent 7a8bba98ca
commit 81f9226286
82 changed files with 669 additions and 375 deletions

View File

@@ -57,7 +57,7 @@ public class PlayerStorage {
public MapleCharacter getCharacterByName(String name) {
rlock.lock();
try {
for (MapleCharacter chr : storage.values()) {
for (MapleCharacter chr : storage.values()) {
if (chr.getName().toLowerCase().equals(name.toLowerCase()))
return chr;
}

View File

@@ -296,14 +296,16 @@ public final class Channel {
private static String [] getEvents(){
List<String> events = new ArrayList<String>();
for (File file : new File("scripts/event").listFiles()){
events.add(file.getName().substring(0, file.getName().length() - 3));
events.add(file.getName().substring(0, file.getName().length() - 3));
}
return events.toArray(new String[0]);
}
public int getStoredVar(int key) {
if(storedVars.containsKey(key))
public int getStoredVar(int key) {
if(storedVars.containsKey(key)) {
return storedVars.get(key);
}
return 0;
}

View File

@@ -88,7 +88,7 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler {
chr.setStance(0);
}
chr.setHp(50);
chr.changeMap(to, to.getPortal(0));
chr.changeMap(to, to.getRandomPlayerSpawnpoint());
}
} else if (targetid != -1 && chr.isGM()) {
MapleMap to = c.getChannelServer().getMapFactory().getMap(targetid);

View File

@@ -37,6 +37,8 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.Set;
import java.util.HashSet;
import net.server.PlayerStorage;
import net.server.Server;
@@ -65,6 +67,7 @@ public class World {
private Map<Integer, MapleFamily> families = new LinkedHashMap<>();
private Map<Integer, MapleGuildSummary> gsStore = new HashMap<>();
private PlayerStorage players = new PlayerStorage();
private Set<Integer> queuedGuilds = new HashSet<>();
public World(int world, int flag, String eventmsg, int exprate, int droprate, int mesorate, int bossdroprate) {
this.id = world;
@@ -300,6 +303,18 @@ public class World {
}
}
public boolean isGuildQueued(int guildId) {
return queuedGuilds.contains(guildId);
}
public void putGuildQueued(int guildId) {
queuedGuilds.add(guildId);
}
public void removeGuildQueued(int guildId) {
queuedGuilds.remove(guildId);
}
public MapleParty createParty(MaplePartyCharacter chrfor) {
int partyid = runningPartyId.getAndIncrement();
MapleParty party = new MapleParty(partyid, chrfor);
@@ -364,13 +379,14 @@ public class World {
party.updateMember(target);
break;
case CHANGE_LEADER:
if(party.getLeader().getPlayer().getEventInstance() != null) {
party.getLeader().getPlayer().getEventInstance().changedLeader(target.getPlayer());
MapleCharacter mc = party.getLeader().getPlayer();
if(mc.getEventInstance() != null && mc.getEventInstance().isEventLeader(mc)) {
mc.getEventInstance().changedLeader(target.getPlayer());
}
party.setLeader(target);
break;
default:
System.out.println("Unhandeled updateParty operation " + operation.name());
System.out.println("Unhandled updateParty operation " + operation.name());
}
updateParty(party, operation, target);
}