Coupon buff fix + concurrency fixes
Fixed coupon buff icon not showing properly. Fixed some cases involving coupons and buff removal not dealing properly with concurrent access.
This commit is contained in:
@@ -19,21 +19,11 @@
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package net.server;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import constants.ServerConstants;
|
||||
import tools.DatabaseConnection;
|
||||
|
||||
import net.server.world.World;
|
||||
import client.MapleCharacter;
|
||||
import tools.FilePrinter;
|
||||
|
||||
/**
|
||||
* @author Ronan
|
||||
@@ -46,7 +36,7 @@ public class CouponWorker implements Runnable {
|
||||
Server.getInstance().updateActiveCoupons();
|
||||
Server.getInstance().commitActiveCoupons();
|
||||
} catch(SQLException sqle) {
|
||||
sqle.printStackTrace();
|
||||
FilePrinter.printError(FilePrinter.EXCEPTION_CAUGHT, "Unexpected SQL error: " + sqle.getMessage() + "\n\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,8 +167,7 @@ public class Server implements Runnable {
|
||||
for(MapleCharacter chr: world.getPlayerStorage().getAllCharacters()) {
|
||||
if(!chr.isLoggedin()) continue;
|
||||
|
||||
chr.revertCouponRates();
|
||||
chr.setCouponRates();
|
||||
chr.updateCouponRates();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,21 +32,21 @@ import client.MapleClient;
|
||||
* @author Matze
|
||||
*/
|
||||
public final class MesoDropHandler extends AbstractMaplePacketHandler {//FIX
|
||||
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
|
||||
MapleCharacter player = c.getPlayer();
|
||||
if (!player.isAlive()) {
|
||||
c.announce(MaplePacketCreator.enableActions());
|
||||
return;
|
||||
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
|
||||
MapleCharacter player = c.getPlayer();
|
||||
if (!player.isAlive()) {
|
||||
c.announce(MaplePacketCreator.enableActions());
|
||||
return;
|
||||
}
|
||||
if (!player.canDropMeso()){
|
||||
player.announce(MaplePacketCreator.serverNotice(5, "Fast meso drop has been patched, cut that out. ;)"));
|
||||
return;
|
||||
}
|
||||
slea.skip(4);
|
||||
int meso = slea.readInt();
|
||||
if (meso <= player.getMeso() && meso > 9 && meso < 50001) {
|
||||
player.gainMeso(-meso, false, true, false);
|
||||
player.getMap().spawnMesoDrop(meso, player.getPosition(), player, player, true, (byte) 2);
|
||||
}
|
||||
}
|
||||
if (!player.canDropMeso()){
|
||||
player.announce(MaplePacketCreator.serverNotice(5, "Fast meso drop has been patched, cut that out. ;)"));
|
||||
return;
|
||||
}
|
||||
slea.skip(4);
|
||||
int meso = slea.readInt();
|
||||
if (meso <= player.getMeso() && meso > 9 && meso < 50001) {
|
||||
player.gainMeso(-meso, false, true, false);
|
||||
player.getMap().spawnMesoDrop(meso, player.getPosition(), player, player, true, (byte) 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -269,11 +269,10 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
||||
|
||||
if (player.getMap().getHPDec() > 0) player.resetHpDecreaseTask();
|
||||
|
||||
player.dispelBuffCoupons();
|
||||
player.resetPlayerRates();
|
||||
|
||||
if(ServerConstants.USE_ADD_RATES_BY_LEVEL == true) player.setPlayerRates();
|
||||
player.setWorldRates();
|
||||
player.setCouponRates();
|
||||
player.updateCouponRates();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,9 +32,10 @@ import constants.ServerConstants;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.Set;
|
||||
@@ -114,12 +115,15 @@ public class World {
|
||||
}
|
||||
|
||||
public void setExpRate(int exp) {
|
||||
//System.out.println("Setting server EXP Rate to " + exp * ServerConstants.EXP_RATE + "x.");
|
||||
for(MapleCharacter chr : getPlayerStorage().getAllCharacters()) {
|
||||
List<MapleCharacter> list = new LinkedList<>(getPlayerStorage().getAllCharacters());
|
||||
|
||||
for(MapleCharacter chr : list) {
|
||||
if(!chr.isLoggedin()) continue;
|
||||
chr.revertWorldRates();
|
||||
}
|
||||
this.exprate = exp;
|
||||
for(MapleCharacter chr : getPlayerStorage().getAllCharacters()) {
|
||||
for(MapleCharacter chr : list) {
|
||||
if(!chr.isLoggedin()) continue;
|
||||
chr.setWorldRates();
|
||||
}
|
||||
}
|
||||
@@ -129,11 +133,15 @@ public class World {
|
||||
}
|
||||
|
||||
public void setDropRate(int drop) {
|
||||
for(MapleCharacter chr : getPlayerStorage().getAllCharacters()) {
|
||||
List<MapleCharacter> list = new LinkedList<>(getPlayerStorage().getAllCharacters());
|
||||
|
||||
for(MapleCharacter chr : list) {
|
||||
if(!chr.isLoggedin()) continue;
|
||||
chr.revertWorldRates();
|
||||
}
|
||||
this.droprate = drop;
|
||||
for(MapleCharacter chr : getPlayerStorage().getAllCharacters()) {
|
||||
for(MapleCharacter chr : list) {
|
||||
if(!chr.isLoggedin()) continue;
|
||||
chr.setWorldRates();
|
||||
}
|
||||
}
|
||||
@@ -143,11 +151,15 @@ public class World {
|
||||
}
|
||||
|
||||
public void setMesoRate(int meso) {
|
||||
for(MapleCharacter chr : getPlayerStorage().getAllCharacters()) {
|
||||
List<MapleCharacter> list = new LinkedList<>(getPlayerStorage().getAllCharacters());
|
||||
|
||||
for(MapleCharacter chr : list) {
|
||||
if(!chr.isLoggedin()) continue;
|
||||
chr.revertWorldRates();
|
||||
}
|
||||
this.mesorate = meso;
|
||||
for(MapleCharacter chr : getPlayerStorage().getAllCharacters()) {
|
||||
for(MapleCharacter chr : list) {
|
||||
if(!chr.isLoggedin()) continue;
|
||||
chr.setWorldRates();
|
||||
}
|
||||
}
|
||||
@@ -157,13 +169,7 @@ public class World {
|
||||
}
|
||||
|
||||
public void setBossDropRate(int bossdrop) {
|
||||
for(MapleCharacter chr : getPlayerStorage().getAllCharacters()) {
|
||||
chr.revertWorldRates();
|
||||
}
|
||||
this.bossdroprate = bossdrop;
|
||||
for(MapleCharacter chr : getPlayerStorage().getAllCharacters()) {
|
||||
chr.setWorldRates();
|
||||
}
|
||||
}
|
||||
|
||||
public PlayerStorage getPlayerStorage() {
|
||||
|
||||
Reference in New Issue
Block a user