Most visitors online was 12720 , on 2 May 2024
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature currently requires accessing the site using the built-in Safari browser.
/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation version 3 as published by
the Free Software Foundation. You may not use, modify or distribute
this program under any other version of the GNU Affero General Public
License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
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 client;
public enum MapleBuffStat {
PAD(0, 0),
PDD(1, 0),
MAD(2, 0),
MDD(3, 0),
ACC(4, 0),
EVA(5, 0),
CRAFT(6, 0),
SPEED(7, 0),
JUMP(8, 0),
MAGIC_GUARD(9, 0),
DARK_SIGHT(10, 0),
BOOSTER(11, 0),
POWER_GUARD(12, 0),
MAX_HP(13, 0),
MAX_MP(14, 0),
INVINCIBLE(15, 0),
SOUL_ARROW(16, 0),
STUN(17, 0),
POISON(18, 0),
SEAL(19, 0),
DARKNESS(20, 0),
COMBO_COUNTER(21, 0),
WEAPON_CHARGE(22, 0),
DRAGON_BLOOD(23, 0),
HOLY_SYMBOL(24, 0),
MESO_UP(25, 0),
SHADOW_PARTNER(26, 0),
PICK_POCKET(27, 0),
MESO_GUARD(28, 0),
THAW(29, 0),
WEAKNESS(30, 0),
CURSE(31, 0),
SLOW(0, 1),
MORPH(1, 1),
REGEN(2, 1),
BASIC_STAT_UP(3, 1),
STANCE(4, 1),
SHARP_EYES(5, 1),
MANA_REFLECTION(6, 1),
ATTRACT(7, 1),
SPIRIT_JAVELIN(8, 1),
INFINITY(9, 1),
HOLY_SHIELD(10, 1),
HAMSTRING(11, 1),
BLIND(12, 1),
CONCENTRATION(13, 1),
BAN_MAP(14, 1),
MAX_LEVEL_BUFF(15, 1),
MESO_UP_BY_ITEM(16, 1),
GHOST(17, 1),
BARRIER(18, 1),
REVERSE_INPUT(19, 1),
ITEM_UP_BY_ITEM(20, 1),
RESPECT_P_IMMUNE(21, 1),
RESPECT_M_IMMUNE(22, 1),
DEFENSE_ATT(23, 1),
DEFENSE_STATE(24, 1),
INC_EFFECT_HP_POTION(25, 1),
INC_EFFECT_MP_POTION(26, 1),
DOJANG_BERSERK(27, 1),
DOJANG_INVINCIBLE(28, 1),
SPARK(29, 1),
DOJANG_SHIELD(30, 1),
SOUL_MASTER_FINAL(31, 1),
WIND_BREAKER_FINAL(0, 2),
ELEMENTAL_RESET(1, 2),
WIND_WALK(2, 2),
EVENT_RATE(3, 2),
COMBO_ABILITY_BUFF(4, 2),
COMBO_DRAIN(5, 2),
COMBO_BARRIER(6, 2),
BODY_PRESSURE(7, 2),
SMART_KNOCKBACK(8, 2),
REPEAT_EFFECT(9, 2),
EXP_BUFF_RATE(10, 2),
STOP_PORTION(11, 2),
STOP_MOTION(12, 2),
FEAR(13, 2),
FROZEN(14, 2),
ASSIST_CHARGE(15, 2),
ENRAGE(16, 2),
BEHOLDER(17, 2),
ENERGY_CHARGE(18, 2),
DASH_SPEED(19, 2),
DASH_JUMP(20, 2),
RIDE_VEHICLE(21, 2),
PARTY_BOOSTER(22, 2),
GUIDED_BULLET(23, 2),
ZOMBIFY(24, 2),
PUPPET(30, 3),//fuckyou
SUMMON(30, 3),//fuckyou
;
private final int i;
private final int position;
private MapleBuffStat(int i, int position ) {
this.i = 1 << i;
this.position = position;
}
public int getValue() {
return i;
}
public int getPosition() {
return position;
}
}
private static void writeMask(final MaplePacketLittleEndianWriter mplew, List<Pair<MapleBuffStat, Integer>> statups) {
int[] mask = new int[4];
for (Pair<MapleBuffStat, Integer> statup : statups) {
mask[statup.getLeft().getPosition()] |= statup.getLeft().getValue();
}
for (int i = 3; i >= 0; i--) {
mplew.writeInt(mask[i]);
}
}
They are actually 8 integers and not longs)
for (Pair<MapleBuffStat, Integer> statup : statups) { has to be written in a specific order, so statup can't be randomly populated. The way I do it is to sort it every time, but that's a lot more costly than if you just fill it correctly beforehand.
Another tidbit is that stats like available ap, and str/dex and debuffs (like seal, weaken) are also done this way.
Everything else looks good and I know this will help people since I've gotten around 3-5 questions about this in the past.
Yes, you can make your own buffs with the Buffstats you have.Could you explain more about the sorting? I still don't quite understand why the order matters because I thought you would get the same mask either way.
Also, does this mean I can create my own custom buffs using the WATK, WDEF, etc. buffstats?
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 04 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 01 00 00
00 19 12 42
00 0F 00 00
00 68 3A A3
02 58 1B 00
00 00 00 00
00