Poison/slow update + Map-persistent diseases + Selling zero-qty rechs.
Rebalanced CafePQ rewards. Rebalanced drop chance of some equipments and HT drops with high rates. Fixed an weird issue where a "Targa hat" would appear as a debuff effect. Added visual effect to be displayed to other players when the custom "Chair Mastery" skill is being used. Slow disease is now visible to other players. Poison damage now displays the correct damage amount to other players. Disease status are now visible for other players when changing maps. Fixed recharging price being accounted incorrectly. Fixed zero-quantity rechargeables not being able to sell at NPC shops.
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
package net.server;
|
||||
|
||||
import net.server.worker.CharacterDiseaseWorker;
|
||||
import net.server.worker.CouponWorker;
|
||||
import net.server.worker.RankingWorker;
|
||||
import java.io.FileInputStream;
|
||||
@@ -94,9 +95,12 @@ public class Server {
|
||||
private final Map<MapleClient, Long> inLoginState = new HashMap<>(100);
|
||||
private final Lock srvLock = new MonitoredReentrantLock(MonitoredLockType.SERVER);
|
||||
private final Lock lgnLock = new MonitoredReentrantLock(MonitoredLockType.SERVER);
|
||||
private final Lock disLock = new MonitoredReentrantLock(MonitoredLockType.SERVER);
|
||||
private final PlayerBuffStorage buffStorage = new PlayerBuffStorage();
|
||||
private final Map<Integer, MapleAlliance> alliances = new HashMap<>(100);
|
||||
private final Map<Integer, NewYearCardRecord> newyears = new HashMap<>();
|
||||
private final List<MapleClient> processDiseaseAnnouncePlayers = new LinkedList<>();
|
||||
private final List<MapleClient> registeredDiseaseAnnouncePlayers = new LinkedList<>();
|
||||
|
||||
private boolean online = false;
|
||||
public static long uptime = System.currentTimeMillis();
|
||||
@@ -261,7 +265,39 @@ public class Server {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void runAnnouncePlayerDiseasesSchedule() {
|
||||
disLock.lock();
|
||||
try {
|
||||
while(!processDiseaseAnnouncePlayers.isEmpty()) {
|
||||
MapleClient c = processDiseaseAnnouncePlayers.remove(0);
|
||||
MapleCharacter player = c.getPlayer();
|
||||
if(player != null && player.isLoggedinWorld()) {
|
||||
for(MapleCharacter chr : player.getMap().getCharacters()) {
|
||||
chr.announceDiseases(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// this is to force the system to wait for at least one complete tick before releasing disease info for the registered clients
|
||||
while(!registeredDiseaseAnnouncePlayers.isEmpty()) {
|
||||
MapleClient c = registeredDiseaseAnnouncePlayers.remove(0);
|
||||
processDiseaseAnnouncePlayers.add(c);
|
||||
}
|
||||
} finally {
|
||||
disLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public void registerAnnouncePlayerDiseases(MapleClient c) {
|
||||
disLock.lock();
|
||||
try {
|
||||
registeredDiseaseAnnouncePlayers.add(c);
|
||||
} finally {
|
||||
disLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public void init() {
|
||||
Properties p = new Properties();
|
||||
try {
|
||||
@@ -306,6 +342,7 @@ public class Server {
|
||||
disconnectIdlesOnLoginTask();
|
||||
|
||||
long timeLeft = getTimeLeftForNextHour();
|
||||
tMan.register(new CharacterDiseaseWorker(), 777, 777);
|
||||
tMan.register(new CouponWorker(), ServerConstants.COUPON_INTERVAL, timeLeft);
|
||||
tMan.register(new RankingWorker(), ServerConstants.RANKING_INTERVAL, timeLeft);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user