Active Coupon Buff

Added buff icons for active coupons the player has. Fixed a minor issue,
introduced on the last commit, that prevented coupons to become active
automatically.
This commit is contained in:
ronancpl
2017-05-30 23:28:31 -03:00
parent e1c95352c8
commit f30acb3b8a
40 changed files with 538 additions and 337 deletions
@@ -1,4 +1,4 @@
#Tue, 30 May 2017 01:30:51 -0300
#Tue, 30 May 2017 13:56:57 -0300
C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2\\MapleCouponInstaller=
Binary file not shown.
@@ -2,6 +2,8 @@
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group/>
<group>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/MapleCouponInstaller/src/maplecouponinstaller/MapleCouponInstaller.java</file>
</group>
</open-files>
</project-private>
@@ -124,7 +124,7 @@ public class MapleCouponInstaller {
}
private static void processDayTimeString(String time) {
String day = time.substring(0, 2);
String day = time.substring(0, 3);
int d = getDayOfWeek(day);
activeDay |= (1 << d);
+1 -1
View File
@@ -1,4 +1,4 @@
#Tue, 30 May 2017 01:30:16 -0300
#Tue, 30 May 2017 23:02:51 -0300
C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2\\MobBookUpdate=
Binary file not shown.
+1 -1
View File
@@ -1,4 +1,4 @@
#Tue, 30 May 2017 13:12:05 -0300
#Tue, 30 May 2017 23:04:14 -0300
C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2=
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
-4
View File
@@ -12,11 +12,7 @@
</editor-bookmarks>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/Server.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/CouponWorker.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleCharacter.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleClient.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/inventory/MapleInventory.java</file>
</group>
</open-files>
</project-private>
+40 -40
View File
@@ -16324,46 +16324,46 @@ CREATE TABLE IF NOT EXISTS `nxcoupons` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=41 ;
INSERT INTO `nxcoupons` (`id`, `couponid`, `rate`, `activeday`, `starthour`, `endhour`) VALUES
(1,5211000,2,1,18,20),
(2,5211004,2,1,7,11),
(3,5211005,2,1,10,14),
(4,5211006,2,1,13,17),
(5,5211007,2,1,16,20),
(6,5211008,2,1,19,23),
(7,5211009,2,1,7,11),
(8,5211010,2,1,10,14),
(9,5211011,2,1,13,17),
(10,5211012,2,1,16,20),
(11,5211013,2,1,19,23),
(12,5211014,2,1,7,11),
(13,5211015,2,1,10,14),
(14,5211016,2,1,13,17),
(15,5211017,2,1,16,20),
(16,5211018,2,1,19,23),
(17,5211037,2,1,0,4),
(18,5211038,2,1,0,4),
(19,5211039,2,1,0,4),
(20,5211040,2,1,3,7),
(21,5211041,2,1,3,7),
(22,5211042,2,1,3,7),
(23,5211043,2,1,6,10),
(24,5211044,2,1,6,10),
(25,5211045,2,1,6,10),
(26,5211046,2,1,0,24),
(27,5211048,2,1,0,24),
(28,5211049,2,1,0,24),
(29,5211052,3,1,0,24),
(30,5211060,3,1,0,24),
(31,5360000,2,1,0,24),
(32,5360001,2,1,7,11),
(33,5360002,2,1,10,14),
(34,5360003,2,1,13,17),
(35,5360004,2,1,16,20),
(36,5360005,2,1,19,23),
(37,5360006,2,1,0,4),
(38,5360007,2,1,3,7),
(39,5360008,2,1,6,10),
(40,5360042,2,1,0,24);
(1,5211000,2,254,18,20),
(2,5211004,2,124,7,11),
(3,5211005,2,124,10,14),
(4,5211006,2,124,13,17),
(5,5211007,2,124,16,20),
(6,5211008,2,124,19,23),
(7,5211009,2,130,7,11),
(8,5211010,2,130,10,14),
(9,5211011,2,130,13,17),
(10,5211012,2,130,16,20),
(11,5211013,2,130,19,23),
(12,5211014,2,254,7,11),
(13,5211015,2,254,10,14),
(14,5211016,2,254,13,17),
(15,5211017,2,254,16,20),
(16,5211018,2,254,19,23),
(17,5211037,2,124,0,4),
(18,5211038,2,130,0,4),
(19,5211039,2,254,0,4),
(20,5211040,2,124,3,7),
(21,5211041,2,130,3,7),
(22,5211042,2,254,3,7),
(23,5211043,2,124,6,10),
(24,5211044,2,130,6,10),
(25,5211045,2,254,6,10),
(26,5211046,2,254,0,24),
(27,5211048,2,254,0,24),
(28,5211049,2,254,0,24),
(29,5211052,3,255,0,24),
(30,5211060,3,255,0,24),
(31,5360000,2,254,0,24),
(32,5360001,2,254,7,11),
(33,5360002,2,254,10,14),
(34,5360003,2,254,13,17),
(35,5360004,2,254,16,20),
(36,5360005,2,254,19,23),
(37,5360006,2,254,0,4),
(38,5360007,2,254,3,7),
(39,5360008,2,254,6,10),
(40,5360042,2,254,0,24);
CREATE TABLE IF NOT EXISTS `pets` (
+47 -10
View File
@@ -3418,6 +3418,16 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
activateCouponsEffects();
}
public void resetPlayerRates() {
expRate = 1;
mesoRate = 1;
dropRate = 1;
expCoupon = 1;
mesoCoupon = 1;
dropCoupon = 1;
}
private boolean isExpCoupon(int couponId) {
return couponId / 1000 == 5211;
}
@@ -3436,6 +3446,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
}
private void revertCouponsEffects() {
dispelBuffCoupons();
this.expRate /= this.expCoupon;
this.dropRate /= this.dropCoupon;
this.mesoRate /= this.mesoCoupon;
@@ -3451,19 +3463,33 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
int couponId = coupon.getKey();
int couponQty = coupon.getValue();
commitBuffCoupon(couponId);
if(isExpCoupon(couponId)) setExpCouponRate(couponId, couponQty);
else setDropCouponRate(couponId, couponQty);
}
}
else {
int maxExpRate = 1, maxDropRate = 1;
int maxExpRate = 1, maxDropRate = 1, maxExpCouponId = -1, maxDropCouponId = -1;
for(Entry<Integer,Integer> coupon: activeCoupons.entrySet()) {
int couponId = coupon.getKey();
if(isExpCoupon(couponId)) maxExpRate = Math.max(maxExpRate, getCouponMultiplier(couponId));
else maxDropRate = Math.max(maxDropRate, getCouponMultiplier(couponId));
if(isExpCoupon(couponId)) {
if(maxExpRate < getCouponMultiplier(couponId)) {
maxExpCouponId = couponId;
maxExpRate = getCouponMultiplier(couponId);
}
}
else {
if(maxDropRate < getCouponMultiplier(couponId)) {
maxDropCouponId = couponId;
maxDropRate = getCouponMultiplier(couponId);
}
}
}
if(maxExpCouponId > -1) commitBuffCoupon(maxExpCouponId);
if(maxDropCouponId > -1) commitBuffCoupon(maxDropCouponId);
this.expCoupon = maxExpRate;
this.dropCoupon = maxDropRate;
@@ -3495,6 +3521,24 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
}
}
private void commitBuffCoupon(int couponid) {
if(!isLoggedin() || getCashShop().isOpened()) return;
MapleStatEffect mse = MapleItemInformationProvider.getInstance().getItemEffect(couponid);
mse.applyTo(this);
}
public void dispelBuffCoupons() {
LinkedList<MapleBuffStatValueHolder> allBuffs = new LinkedList<>(effects.values());
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
for (MapleBuffStatValueHolder mbsvh : allBuffs) {
if (ii.isRateCoupon(mbsvh.effect.getSourceId())) {
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
}
}
}
public static MapleCharacter loadCharFromDB(int charid, MapleClient client, boolean channelserver) throws SQLException {
try {
MapleCharacter ret = new MapleCharacter();
@@ -3817,13 +3861,6 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
ret.maplemount.setTiredness(mounttiredness);
ret.maplemount.setActive(false);
if(ServerConstants.USE_ADD_RATES_BY_LEVEL == true) {
ret.setPlayerRates();
}
ret.setWorldRates();
ret.setCouponRates();
return ret;
} catch (SQLException | RuntimeException e) {
e.printStackTrace();
-2
View File
@@ -199,7 +199,6 @@ public class MapleInventory implements Iterable<Item> {
inventory.put(slot, item);
if(MapleItemInformationProvider.getInstance().isRateCoupon(item.getItemId())) {
System.out.println("reformulating");
owner.revertCouponRates();
owner.setCouponRates();
}
@@ -209,7 +208,6 @@ public class MapleInventory implements Iterable<Item> {
Item item = inventory.remove(slot);
if(item != null && MapleItemInformationProvider.getInstance().isRateCoupon(item.getItemId())) {
System.out.println("reformulating");
owner.revertCouponRates();
owner.setCouponRates();
}
@@ -50,6 +50,7 @@ import client.inventory.MapleInventoryType;
import client.inventory.MaplePet;
import client.inventory.PetDataFactory;
import constants.GameConstants;
import constants.ServerConstants;
import java.util.concurrent.ScheduledFuture;
import server.TimerManager;
@@ -278,5 +279,12 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
mc.setHpDecreaseTask(hpDecreaseTask);
}
player.dispelBuffCoupons();
player.resetPlayerRates();
if(ServerConstants.USE_ADD_RATES_BY_LEVEL == true) player.setPlayerRates();
player.setWorldRates();
player.setCouponRates();
}
}
+1 -1
View File
@@ -297,7 +297,7 @@ public class MapleInventoryManipulator {
if (removeQuantity > 0) {
throw new RuntimeException("[HACK] Not enough items available of Item:" + itemId + ", Quantity (After Quantity/Over Current Quantity): " + (quantity - removeQuantity) + "/" + quantity);
}
}
}
public static void move(MapleClient c, MapleInventoryType type, short src, short dst) {
if (src < 0 || dst < 0) {
+120
View File
@@ -21,6 +21,10 @@
<string name="6" value="SUN:18-20"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211004">
<imgdir name="info">
@@ -41,6 +45,10 @@
<string name="4" value="FRI:07-11"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211005">
<imgdir name="info">
@@ -61,6 +69,10 @@
<string name="4" value="FRI:10-14"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211006">
<imgdir name="info">
@@ -81,6 +93,10 @@
<string name="4" value="FRI:13-17"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211007">
<imgdir name="info">
@@ -101,6 +117,10 @@
<string name="4" value="FRI:16-20"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211008">
<imgdir name="info">
@@ -121,6 +141,10 @@
<string name="4" value="FRI:19-23"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211009">
<imgdir name="info">
@@ -138,6 +162,10 @@
<string name="1" value="SUN:07-11"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211010">
<imgdir name="info">
@@ -155,6 +183,10 @@
<string name="1" value="SUN:10-14"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211011">
<imgdir name="info">
@@ -172,6 +204,10 @@
<string name="1" value="SUN:13-17"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211012">
<imgdir name="info">
@@ -189,6 +225,10 @@
<string name="1" value="SUN:16-20"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211013">
<imgdir name="info">
@@ -206,6 +246,10 @@
<string name="1" value="SUN:19-23"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211014">
<imgdir name="info">
@@ -228,6 +272,10 @@
<string name="6" value="SUN:07-11"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211015">
<imgdir name="info">
@@ -250,6 +298,10 @@
<string name="6" value="SUN:10-14"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211016">
<imgdir name="info">
@@ -272,6 +324,10 @@
<string name="6" value="SUN:13-17"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211017">
<imgdir name="info">
@@ -294,6 +350,10 @@
<string name="6" value="SUN:16-20"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211018">
<imgdir name="info">
@@ -316,6 +376,10 @@
<string name="6" value="SUN:19-23"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211037">
<imgdir name="info">
@@ -336,6 +400,10 @@
<string name="4" value="FRI:00-04"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211038">
<imgdir name="info">
@@ -353,6 +421,10 @@
<string name="1" value="SUN:00-04"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211039">
<imgdir name="info">
@@ -375,6 +447,10 @@
<string name="6" value="SUN:00-04"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211040">
<imgdir name="info">
@@ -395,6 +471,10 @@
<string name="4" value="FRI:03-07"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211041">
<imgdir name="info">
@@ -412,6 +492,10 @@
<string name="1" value="SUN:03-07"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211042">
<imgdir name="info">
@@ -434,6 +518,10 @@
<string name="6" value="SUN:03-07"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211043">
<imgdir name="info">
@@ -454,6 +542,10 @@
<string name="4" value="FRI:06-10"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211044">
<imgdir name="info">
@@ -471,6 +563,10 @@
<string name="1" value="SUN:06-10"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211045">
<imgdir name="info">
@@ -493,6 +589,10 @@
<string name="6" value="SUN:06-10"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211046">
<imgdir name="info">
@@ -515,6 +615,10 @@
<string name="6" value="SUN:00-24"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211048">
<imgdir name="info">
@@ -537,6 +641,10 @@
<string name="6" value="SUN:00-24"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211049">
<imgdir name="info">
@@ -559,6 +667,10 @@
<string name="6" value="SUN:00-24"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211052">
<imgdir name="info">
@@ -582,6 +694,10 @@
<string name="7" value="HOL:00-24"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05211060">
<imgdir name="info">
@@ -605,5 +721,9 @@
<string name="7" value="HOL:00-24"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
</imgdir>
+40
View File
@@ -21,6 +21,10 @@
<string name="6" value="SUN:00-24"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05360001">
<imgdir name="info">
@@ -43,6 +47,10 @@
<string name="6" value="SUN:07-11"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05360002">
<imgdir name="info">
@@ -65,6 +73,10 @@
<string name="6" value="SUN:10-14"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05360003">
<imgdir name="info">
@@ -87,6 +99,10 @@
<string name="6" value="SUN:13-17"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05360004">
<imgdir name="info">
@@ -109,6 +125,10 @@
<string name="6" value="SUN:16-20"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05360005">
<imgdir name="info">
@@ -131,6 +151,10 @@
<string name="6" value="SUN:19-23"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05360006">
<imgdir name="info">
@@ -153,6 +177,10 @@
<string name="6" value="SUN:00-04"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05360007">
<imgdir name="info">
@@ -175,6 +203,10 @@
<string name="6" value="SUN:03-07"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05360008">
<imgdir name="info">
@@ -197,6 +229,10 @@
<string name="6" value="SUN:06-10"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
<imgdir name="05360042">
<imgdir name="info">
@@ -219,5 +255,9 @@
<string name="6" value="SUN:00-24"/>
</imgdir>
</imgdir>
<imgdir name="spec">
<int name="pad" value="5"/>
<int name="time" value="2100000"/>
</imgdir>
</imgdir>
</imgdir>