diff --git a/build/built-jar.properties b/build/built-jar.properties index 476ec762d0..5d27338bae 100644 --- a/build/built-jar.properties +++ b/build/built-jar.properties @@ -1,4 +1,4 @@ -#Fri, 30 Jun 2017 16:23:30 -0300 +#Tue, 04 Jul 2017 15:35:40 -0300 C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2= diff --git a/build/classes/client/MapleCharacter$1.class b/build/classes/client/MapleCharacter$1.class index 27b002cdbe..4535355791 100644 Binary files a/build/classes/client/MapleCharacter$1.class and b/build/classes/client/MapleCharacter$1.class differ diff --git a/build/classes/client/MapleCharacter$10.class b/build/classes/client/MapleCharacter$10.class index f59103f126..ffd8b004ce 100644 Binary files a/build/classes/client/MapleCharacter$10.class and b/build/classes/client/MapleCharacter$10.class differ diff --git a/build/classes/client/MapleCharacter$11.class b/build/classes/client/MapleCharacter$11.class index 059690954d..4abb7762ec 100644 Binary files a/build/classes/client/MapleCharacter$11.class and b/build/classes/client/MapleCharacter$11.class differ diff --git a/build/classes/client/MapleCharacter$12.class b/build/classes/client/MapleCharacter$12.class index 5af21d3e27..02b4aac66b 100644 Binary files a/build/classes/client/MapleCharacter$12.class and b/build/classes/client/MapleCharacter$12.class differ diff --git a/build/classes/client/MapleCharacter$13.class b/build/classes/client/MapleCharacter$13.class index cbac120c48..afd604347d 100644 Binary files a/build/classes/client/MapleCharacter$13.class and b/build/classes/client/MapleCharacter$13.class differ diff --git a/build/classes/client/MapleCharacter$14.class b/build/classes/client/MapleCharacter$14.class index c4f15487b5..fc47869014 100644 Binary files a/build/classes/client/MapleCharacter$14.class and b/build/classes/client/MapleCharacter$14.class differ diff --git a/build/classes/client/MapleCharacter$15.class b/build/classes/client/MapleCharacter$15.class index 307d9f7342..f3f7aa6c58 100644 Binary files a/build/classes/client/MapleCharacter$15.class and b/build/classes/client/MapleCharacter$15.class differ diff --git a/build/classes/client/MapleCharacter$16.class b/build/classes/client/MapleCharacter$16.class index 8e5df2a66e..80863db60c 100644 Binary files a/build/classes/client/MapleCharacter$16.class and b/build/classes/client/MapleCharacter$16.class differ diff --git a/build/classes/client/MapleCharacter$17.class b/build/classes/client/MapleCharacter$17.class index 637cfcb88e..abfb12040c 100644 Binary files a/build/classes/client/MapleCharacter$17.class and b/build/classes/client/MapleCharacter$17.class differ diff --git a/build/classes/client/MapleCharacter$18.class b/build/classes/client/MapleCharacter$18.class index 6ab6c2ce18..d3d2ece7e0 100644 Binary files a/build/classes/client/MapleCharacter$18.class and b/build/classes/client/MapleCharacter$18.class differ diff --git a/build/classes/client/MapleCharacter$19.class b/build/classes/client/MapleCharacter$19.class index 4d4f435391..fc87b2eca5 100644 Binary files a/build/classes/client/MapleCharacter$19.class and b/build/classes/client/MapleCharacter$19.class differ diff --git a/build/classes/client/MapleCharacter$2.class b/build/classes/client/MapleCharacter$2.class index 1d0866a585..3f87a304c2 100644 Binary files a/build/classes/client/MapleCharacter$2.class and b/build/classes/client/MapleCharacter$2.class differ diff --git a/build/classes/client/MapleCharacter$3.class b/build/classes/client/MapleCharacter$3.class index 88d3e5b9b5..3a4da799e2 100644 Binary files a/build/classes/client/MapleCharacter$3.class and b/build/classes/client/MapleCharacter$3.class differ diff --git a/build/classes/client/MapleCharacter$4.class b/build/classes/client/MapleCharacter$4.class index 41dbdd6335..d181e52e75 100644 Binary files a/build/classes/client/MapleCharacter$4.class and b/build/classes/client/MapleCharacter$4.class differ diff --git a/build/classes/client/MapleCharacter$5.class b/build/classes/client/MapleCharacter$5.class index f5b5f0d648..c850876aed 100644 Binary files a/build/classes/client/MapleCharacter$5.class and b/build/classes/client/MapleCharacter$5.class differ diff --git a/build/classes/client/MapleCharacter$6.class b/build/classes/client/MapleCharacter$6.class index 385437ae84..44c477beb9 100644 Binary files a/build/classes/client/MapleCharacter$6.class and b/build/classes/client/MapleCharacter$6.class differ diff --git a/build/classes/client/MapleCharacter$7.class b/build/classes/client/MapleCharacter$7.class index 9b94987aa0..be2953d211 100644 Binary files a/build/classes/client/MapleCharacter$7.class and b/build/classes/client/MapleCharacter$7.class differ diff --git a/build/classes/client/MapleCharacter$8.class b/build/classes/client/MapleCharacter$8.class index d5a286dbc4..3d6d03d22e 100644 Binary files a/build/classes/client/MapleCharacter$8.class and b/build/classes/client/MapleCharacter$8.class differ diff --git a/build/classes/client/MapleCharacter$9.class b/build/classes/client/MapleCharacter$9.class index 51d8848466..f8d8d32016 100644 Binary files a/build/classes/client/MapleCharacter$9.class and b/build/classes/client/MapleCharacter$9.class differ diff --git a/build/classes/client/MapleCharacter$FameStatus.class b/build/classes/client/MapleCharacter$FameStatus.class index a9eb09a2f3..d5b0a4ea20 100644 Binary files a/build/classes/client/MapleCharacter$FameStatus.class and b/build/classes/client/MapleCharacter$FameStatus.class differ diff --git a/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class b/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class index b73b446b36..adf1f963c4 100644 Binary files a/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class and b/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class differ diff --git a/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class b/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class index 914a8d61af..31146e2c68 100644 Binary files a/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class and b/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class differ diff --git a/build/classes/client/MapleCharacter$SkillEntry.class b/build/classes/client/MapleCharacter$SkillEntry.class index 04ec280812..712281b7da 100644 Binary files a/build/classes/client/MapleCharacter$SkillEntry.class and b/build/classes/client/MapleCharacter$SkillEntry.class differ diff --git a/build/classes/client/MapleCharacter.class b/build/classes/client/MapleCharacter.class index 06b5e4e85a..1b647541ea 100644 Binary files a/build/classes/client/MapleCharacter.class and b/build/classes/client/MapleCharacter.class differ diff --git a/build/classes/client/command/Commands.class b/build/classes/client/command/Commands.class index 10582a8a00..ba9c1d10f3 100644 Binary files a/build/classes/client/command/Commands.class and b/build/classes/client/command/Commands.class differ diff --git a/build/classes/net/server/channel/handlers/CloseRangeDamageHandler.class b/build/classes/net/server/channel/handlers/CloseRangeDamageHandler.class index 161a7721ba..65cb28fee0 100644 Binary files a/build/classes/net/server/channel/handlers/CloseRangeDamageHandler.class and b/build/classes/net/server/channel/handlers/CloseRangeDamageHandler.class differ diff --git a/build/classes/net/server/channel/handlers/DamageSummonHandler.class b/build/classes/net/server/channel/handlers/DamageSummonHandler.class index c2e59c5acd..7775ee8ca9 100644 Binary files a/build/classes/net/server/channel/handlers/DamageSummonHandler.class and b/build/classes/net/server/channel/handlers/DamageSummonHandler.class differ diff --git a/build/classes/net/server/channel/handlers/HealOvertimeHandler.class b/build/classes/net/server/channel/handlers/HealOvertimeHandler.class index 547953ea53..3e8cb70728 100644 Binary files a/build/classes/net/server/channel/handlers/HealOvertimeHandler.class and b/build/classes/net/server/channel/handlers/HealOvertimeHandler.class differ diff --git a/build/classes/net/server/channel/handlers/MagicDamageHandler.class b/build/classes/net/server/channel/handlers/MagicDamageHandler.class index 687c8e7d17..c3f897e924 100644 Binary files a/build/classes/net/server/channel/handlers/MagicDamageHandler.class and b/build/classes/net/server/channel/handlers/MagicDamageHandler.class differ diff --git a/build/classes/net/server/channel/handlers/PlayerLoggedinHandler.class b/build/classes/net/server/channel/handlers/PlayerLoggedinHandler.class index 85136c3038..9c56f045d6 100644 Binary files a/build/classes/net/server/channel/handlers/PlayerLoggedinHandler.class and b/build/classes/net/server/channel/handlers/PlayerLoggedinHandler.class differ diff --git a/build/classes/net/server/channel/handlers/SummonDamageHandler$SummonAttackEntry.class b/build/classes/net/server/channel/handlers/SummonDamageHandler$SummonAttackEntry.class index ea902bc032..fd581beb48 100644 Binary files a/build/classes/net/server/channel/handlers/SummonDamageHandler$SummonAttackEntry.class and b/build/classes/net/server/channel/handlers/SummonDamageHandler$SummonAttackEntry.class differ diff --git a/build/classes/net/server/channel/handlers/SummonDamageHandler.class b/build/classes/net/server/channel/handlers/SummonDamageHandler.class index 4f5cd12c7e..afe28b0523 100644 Binary files a/build/classes/net/server/channel/handlers/SummonDamageHandler.class and b/build/classes/net/server/channel/handlers/SummonDamageHandler.class differ diff --git a/build/classes/net/server/channel/handlers/TakeDamageHandler.class b/build/classes/net/server/channel/handlers/TakeDamageHandler.class index e6190e97a4..da559bf06e 100644 Binary files a/build/classes/net/server/channel/handlers/TakeDamageHandler.class and b/build/classes/net/server/channel/handlers/TakeDamageHandler.class differ diff --git a/build/classes/net/server/channel/handlers/UseItemHandler.class b/build/classes/net/server/channel/handlers/UseItemHandler.class index d4fc478e1d..b3b7c87e68 100644 Binary files a/build/classes/net/server/channel/handlers/UseItemHandler.class and b/build/classes/net/server/channel/handlers/UseItemHandler.class differ diff --git a/build/classes/server/MapleStatEffect$CancelEffectAction.class b/build/classes/server/MapleStatEffect$CancelEffectAction.class index 4aef3c90a2..605a8d50f6 100644 Binary files a/build/classes/server/MapleStatEffect$CancelEffectAction.class and b/build/classes/server/MapleStatEffect$CancelEffectAction.class differ diff --git a/build/classes/server/MapleStatEffect.class b/build/classes/server/MapleStatEffect.class index c64a0118d2..fa83540e8a 100644 Binary files a/build/classes/server/MapleStatEffect.class and b/build/classes/server/MapleStatEffect.class differ diff --git a/build/classes/server/life/MapleMonster.class b/build/classes/server/life/MapleMonster.class index 9c46b014fe..d40737f96f 100644 Binary files a/build/classes/server/life/MapleMonster.class and b/build/classes/server/life/MapleMonster.class differ diff --git a/build/classes/tools/MaplePacketCreator$2.class b/build/classes/tools/MaplePacketCreator$2.class index eab52314d5..35ce9a6a4d 100644 Binary files a/build/classes/tools/MaplePacketCreator$2.class and b/build/classes/tools/MaplePacketCreator$2.class differ diff --git a/build/classes/tools/MaplePacketCreator.class b/build/classes/tools/MaplePacketCreator.class index e5145f6834..104e790dcf 100644 Binary files a/build/classes/tools/MaplePacketCreator.class and b/build/classes/tools/MaplePacketCreator.class differ diff --git a/dist/MapleSolaxia.jar b/dist/MapleSolaxia.jar index 7255829e25..b25eb86f32 100644 Binary files a/dist/MapleSolaxia.jar and b/dist/MapleSolaxia.jar differ diff --git a/feature_list.txt b/feature_list.txt index d56d411033..72187675cf 100644 --- a/feature_list.txt +++ b/feature_list.txt @@ -50,4 +50,5 @@ Admin/GM commands: Project: * Organized project code. * Highly configurable server (see server flags at ServerConstants). +* Fixed/added some missing packets for MoveEnvironment and summons. --------------------------- \ No newline at end of file diff --git a/mychanges_ptbr.txt b/mychanges_ptbr.txt index 8edd5d64e1..5ac87b8cce 100644 --- a/mychanges_ptbr.txt +++ b/mychanges_ptbr.txt @@ -351,4 +351,8 @@ Corrigido bug no esquema de recupera 30 Junho 2017, Corrigido bug em mecânica de hpDec que permitia aos jogadores postergarem o efeito de decréscimo de HP. -Elaborada funcionalidade que permite salvar o "tempo até expirar" para quests com janela de tempo muito alta (as que usam "timeLimit2"). \ No newline at end of file +Elaborada funcionalidade que permite salvar o "tempo até expirar" para quests com janela de tempo muito alta (as que usam "timeLimit2"). + +03 Julho 2017, +Corrigido cliente não mostrando dano tomado pelo player se ele está com GM escondido para os outros GMs. +Corrigido cliente não mostrando dano dado pelo summon para outros players. \ No newline at end of file diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index 5af0ed1acc..90510e3e36 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -2,6 +2,12 @@ - + + file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/SendOpcode.java + file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleMapObjectType.java + file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleSummon.java + file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/DamageSummonHandler.java + file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/tools/MaplePacketCreator.java + diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java index e1564bc10d..be00fa74e8 100644 --- a/src/client/MapleCharacter.java +++ b/src/client/MapleCharacter.java @@ -872,6 +872,11 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { List dsstat = Collections.singletonList(MapleBuffStat.DARKSIGHT); getMap().broadcastGMMessage(this, MaplePacketCreator.cancelForeignBuff(id, dsstat), false); getMap().broadcastMessage(this, MaplePacketCreator.spawnPlayerMapobject(this), false); + + for(MapleSummon ms: this.getSummonsValues()) { + getMap().broadcastNONGMMessage(this, MaplePacketCreator.spawnSummon(ms, false), false); + } + updatePartyMemberHP(); } else { this.hidden = true; @@ -1290,7 +1295,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { this.currentType = type; } - public void checkBerserk() { + public void checkBerserk(final boolean isHidden) { if (BerserkSchedule != null) { BerserkSchedule.cancel(false); } @@ -1304,7 +1309,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { @Override public void run() { client.announce(MaplePacketCreator.showOwnBerserk(skilllevel, Berserk)); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showBerserk(getId(), skilllevel, Berserk), false); + if(!isHidden) getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showBerserk(getId(), skilllevel, Berserk), false); + else getMap().broadcastGMMessage(MapleCharacter.this, MaplePacketCreator.showBerserk(getId(), skilllevel, Berserk), false); } }, 5000, 3000); } @@ -1801,15 +1807,16 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { getMap().removeMapObject(summon); removeVisibleMapObject(summon); summons.remove(summonId); - } - if (summon.getSkill() == DarkKnight.BEHOLDER) { - if (beholderHealingSchedule != null) { - beholderHealingSchedule.cancel(false); - beholderHealingSchedule = null; - } - if (beholderBuffSchedule != null) { - beholderBuffSchedule.cancel(false); - beholderBuffSchedule = null; + + if (summon.getSkill() == DarkKnight.BEHOLDER) { + if (beholderHealingSchedule != null) { + beholderHealingSchedule.cancel(false); + beholderHealingSchedule = null; + } + if (beholderBuffSchedule != null) { + beholderBuffSchedule.cancel(false); + beholderBuffSchedule = null; + } } } } else if (stat == MapleBuffStat.DRAGONBLOOD) { @@ -4417,7 +4424,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { addHP(-bloodEffect.getX()); client.announce(MaplePacketCreator.showOwnBuffEffect(bloodEffect.getSourceId(), 5)); getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showBuffeffect(getId(), bloodEffect.getSourceId(), 5), false); - checkBerserk(); + checkBerserk(isHidden()); } }, 4000, 4000); } @@ -4564,7 +4571,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { if (effect.isDragonBlood()) { prepareDragonBlood(effect); } else if (effect.isBerserk()) { - checkBerserk(); + checkBerserk(isHidden()); } else if (effect.isBeholder()) { final int beholder = DarkKnight.BEHOLDER; if (beholderHealingSchedule != null) { diff --git a/src/client/command/Commands.java b/src/client/command/Commands.java index 9407a07a04..0e30bba85a 100644 --- a/src/client/command/Commands.java +++ b/src/client/command/Commands.java @@ -2068,6 +2068,9 @@ public class Commands { MapleMapItem mapItem = (MapleMapItem) item; if (mapItem.getMeso() > 0) { player.gainMeso(mapItem.getMeso(), true); + } else if(mapItem.getItemId() == 4031865 || mapItem.getItemId() == 4031866) { + // Add NX to account, show effect and make item disappear + player.getCashShop().gainCash(1, mapItem.getItemId() == 4031865 ? 100 : 250); } else if (mapItem.getItem().getItemId() >= 5000000 && mapItem.getItem().getItemId() <= 5000100) { int petId = MaplePet.createPet(mapItem.getItem().getItemId()); if (petId == -1) { diff --git a/src/net/server/channel/handlers/AbstractDealDamageHandler.java b/src/net/server/channel/handlers/AbstractDealDamageHandler.java index fb3777daed..d79aaac837 100644 --- a/src/net/server/channel/handlers/AbstractDealDamageHandler.java +++ b/src/net/server/channel/handlers/AbstractDealDamageHandler.java @@ -255,8 +255,8 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl if(attack.skill == DragonKnight.DRAGON_ROAR || attack.skill == SuperGM.SUPER_DRAGON_ROAR) distanceToDetect += 250000; - if(attack.skill == Shadower.BOOMERANG_STEP) - distanceToDetect += 60000; + if(attack.skill == Shadower.BOOMERANG_STEP) + distanceToDetect += 60000; if(distance > distanceToDetect) { AutobanFactory.DISTANCE_HACK.alert(player, "Distance Sq to monster: " + distance + " SID: " + attack.skill + " MID: " + monster.getId()); diff --git a/src/net/server/channel/handlers/CloseRangeDamageHandler.java b/src/net/server/channel/handlers/CloseRangeDamageHandler.java index 086ac8d991..2d11c8dec4 100644 --- a/src/net/server/channel/handlers/CloseRangeDamageHandler.java +++ b/src/net/server/channel/handlers/CloseRangeDamageHandler.java @@ -133,7 +133,7 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { player.setHp(1); } player.updateSingleStat(MapleStat.HP, player.getHp()); - player.checkBerserk(); + player.checkBerserk(player.isHidden()); } if (attack.numAttacked > 0 && attack.skill == 1211002) { boolean advcharge_prob = false; diff --git a/src/net/server/channel/handlers/DamageSummonHandler.java b/src/net/server/channel/handlers/DamageSummonHandler.java index f953bbfe40..0bee64c3de 100644 --- a/src/net/server/channel/handlers/DamageSummonHandler.java +++ b/src/net/server/channel/handlers/DamageSummonHandler.java @@ -27,25 +27,28 @@ import client.MapleClient; import client.SkillFactory; import net.AbstractMaplePacketHandler; import server.maps.MapleSummon; +import server.maps.MapleMapObject; import tools.MaplePacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class DamageSummonHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - int skillid = slea.readInt(); //Bugged? might not be skillid. - int unkByte = slea.readByte(); + int oid = slea.readInt(); + slea.skip(1); // -1 int damage = slea.readInt(); int monsterIdFrom = slea.readInt(); - if (SkillFactory.getSkill(skillid) != null) { - MapleCharacter player = c.getPlayer(); - MapleSummon summon = player.getSummonByKey(skillid); - if (summon != null) { - summon.addHP(-damage); - if (summon.getHP() <= 0) { - player.cancelEffectFromBuffStat(MapleBuffStat.PUPPET); - } + + MapleCharacter player = c.getPlayer(); + MapleMapObject mmo = player.getMap().getMapObject(oid); + + if(mmo != null && mmo instanceof MapleSummon) { + MapleSummon summon = (MapleSummon) mmo; + + summon.addHP(-damage); + if (summon.getHP() <= 0) { + player.cancelEffectFromBuffStat(MapleBuffStat.PUPPET); } - player.getMap().broadcastMessage(player, MaplePacketCreator.damageSummon(player.getId(), skillid, damage, unkByte, monsterIdFrom), summon.getPosition()); + player.getMap().broadcastMessage(player, MaplePacketCreator.damageSummon(player.getId(), oid, damage, monsterIdFrom), summon.getPosition()); } } } diff --git a/src/net/server/channel/handlers/HealOvertimeHandler.java b/src/net/server/channel/handlers/HealOvertimeHandler.java index 28e6e658a7..576f0f3315 100644 --- a/src/net/server/channel/handlers/HealOvertimeHandler.java +++ b/src/net/server/channel/handlers/HealOvertimeHandler.java @@ -50,7 +50,7 @@ public final class HealOvertimeHandler extends AbstractMaplePacketHandler { chr.addHP(healHP); chr.getMap().broadcastMessage(chr, MaplePacketCreator.showHpHealed(chr.getId(), healHP), false); - chr.checkBerserk(); + chr.checkBerserk(chr.isHidden()); abm.spam(0, timestamp); } short healMP = slea.readShort(); diff --git a/src/net/server/channel/handlers/MagicDamageHandler.java b/src/net/server/channel/handlers/MagicDamageHandler.java index 1e3052df3c..75a4993e50 100644 --- a/src/net/server/channel/handlers/MagicDamageHandler.java +++ b/src/net/server/channel/handlers/MagicDamageHandler.java @@ -58,10 +58,9 @@ public final class MagicDamageHandler extends AbstractDealDamageHandler { } } - byte[] packet = MaplePacketCreator.magicAttack(player, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, -1, attack.speed, attack.direction, attack.display); - if (attack.skill == Evan.FIRE_BREATH || attack.skill == Evan.ICE_BREATH || attack.skill == FPArchMage.BIG_BANG || attack.skill == ILArchMage.BIG_BANG || attack.skill == Bishop.BIG_BANG) { - packet = MaplePacketCreator.magicAttack(player, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, attack.charge, attack.speed, attack.direction, attack.display); - } + int charge = (attack.skill == Evan.FIRE_BREATH || attack.skill == Evan.ICE_BREATH || attack.skill == FPArchMage.BIG_BANG || attack.skill == ILArchMage.BIG_BANG || attack.skill == Bishop.BIG_BANG) ? attack.charge : -1; + byte[] packet = MaplePacketCreator.magicAttack(player, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, charge, attack.speed, attack.direction, attack.display); + player.getMap().broadcastMessage(player, packet, false, true); MapleStatEffect effect = attack.getAttackEffect(player, null); Skill skill = SkillFactory.getSkill(attack.skill); diff --git a/src/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/net/server/channel/handlers/PlayerLoggedinHandler.java index d8dc3dafa9..f798211bfe 100644 --- a/src/net/server/channel/handlers/PlayerLoggedinHandler.java +++ b/src/net/server/channel/handlers/PlayerLoggedinHandler.java @@ -250,7 +250,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { player.checkMessenger(); c.announce(MaplePacketCreator.enableReport()); player.changeSkillLevel(SkillFactory.getSkill(10000000 * player.getJobType() + 12), (byte) (player.getLinkedLevel() / 10), 20, -1); - player.checkBerserk(); + player.checkBerserk(player.isHidden()); player.expirationTask(); //player.setWorldRates(); if (GameConstants.hasSPTable(player.getJob()) && player.getJob().getId() != 2001) { diff --git a/src/net/server/channel/handlers/SummonDamageHandler.java b/src/net/server/channel/handlers/SummonDamageHandler.java index a83372d4bb..ffffa235d5 100644 --- a/src/net/server/channel/handlers/SummonDamageHandler.java +++ b/src/net/server/channel/handlers/SummonDamageHandler.java @@ -33,9 +33,10 @@ import server.MapleStatEffect; import server.life.MapleMonster; import server.maps.MapleSummon; import tools.MaplePacketCreator; +import tools.data.input.LittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor; -public final class SummonDamageHandler extends AbstractMaplePacketHandler { +public final class SummonDamageHandler extends AbstractDealDamageHandler { public final class SummonAttackEntry { private int monsterOid; @@ -84,7 +85,7 @@ public final class SummonDamageHandler extends AbstractMaplePacketHandler { int damage = slea.readInt(); allDamage.add(new SummonAttackEntry(monsterOid, damage)); } - player.getMap().broadcastMessage(player, MaplePacketCreator.summonAttack(player.getId(), summon.getSkill(), direction, allDamage), summon.getPosition()); + player.getMap().broadcastMessage(player, MaplePacketCreator.summonAttack(player.getId(), summon.getObjectId(), direction, allDamage), summon.getPosition()); for (SummonAttackEntry attackEntry : allDamage) { int damage = attackEntry.getDamage(); MapleMonster target = player.getMap().getMonsterByOid(attackEntry.getMonsterOid()); diff --git a/src/net/server/channel/handlers/TakeDamageHandler.java b/src/net/server/channel/handlers/TakeDamageHandler.java index 3284db31e6..5af0077034 100644 --- a/src/net/server/channel/handlers/TakeDamageHandler.java +++ b/src/net/server/channel/handlers/TakeDamageHandler.java @@ -224,7 +224,11 @@ public final class TakeDamageHandler extends AbstractMaplePacketHandler { } if (!player.isHidden()) { map.broadcastMessage(player, MaplePacketCreator.damagePlayer(damagefrom, monsteridfrom, player.getId(), damage, fake, direction, is_pgmr, pgmr, is_pg, oid, pos_x, pos_y), false); - player.checkBerserk(); + player.checkBerserk(true); + } + else { + map.broadcastGMMessage(player, MaplePacketCreator.damagePlayer(damagefrom, monsteridfrom, player.getId(), damage, fake, direction, is_pgmr, pgmr, is_pg, oid, pos_x, pos_y), false); + player.checkBerserk(false); } if (map.getId() >= 925020000 && map.getId() < 925030000) { player.setDojoEnergy(player.isGM() ? 300 : player.getDojoEnergy() < 300 ? player.getDojoEnergy() + 1 : 0); //Fking gm's diff --git a/src/net/server/channel/handlers/UseItemHandler.java b/src/net/server/channel/handlers/UseItemHandler.java index bcf52f18d5..3716d55cb0 100644 --- a/src/net/server/channel/handlers/UseItemHandler.java +++ b/src/net/server/channel/handlers/UseItemHandler.java @@ -75,7 +75,7 @@ public final class UseItemHandler extends AbstractMaplePacketHandler { remove(c, slot); ii.getItemEffect(toUse.getItemId()).applyTo(c.getPlayer()); - c.getPlayer().checkBerserk(); + c.getPlayer().checkBerserk(c.getPlayer().isHidden()); } } diff --git a/src/server/MapleStatEffect.java b/src/server/MapleStatEffect.java index d9c2fb77e8..3b00f79c04 100644 --- a/src/server/MapleStatEffect.java +++ b/src/server/MapleStatEffect.java @@ -810,6 +810,10 @@ public class MapleStatEffect { } SummonMovementType summonMovementType = getSummonMovementType(); if (overTime || isCygnusFA() || summonMovementType != null) { + if (summonMovementType != null && pos != null) { + applyto.cancelBuffStats(MapleBuffStat.SUMMON); // if player has a summon already, drop it + } + applyBuffEffect(applyfrom, applyto, primary); } @@ -1105,7 +1109,7 @@ public class MapleStatEffect { } if (hpR != 0) { hpchange += (int) (applyfrom.getCurrentMaxHp() * hpR) / (applyfrom.hasDisease(MapleDisease.ZOMBIFY) ? 2 : 1); - applyfrom.checkBerserk(); + applyfrom.checkBerserk(applyfrom.isHidden()); } if (primary) { if (hpCon != 0) { diff --git a/src/server/life/MapleMonster.java b/src/server/life/MapleMonster.java index 9bb32e1d9a..eeadda2200 100644 --- a/src/server/life/MapleMonster.java +++ b/src/server/life/MapleMonster.java @@ -209,7 +209,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } int trueDamage = Math.min(hp, damage); // since magic happens otherwise B^) - if(ServerConstants.USE_DEBUG == true && from != null) from.dropMessage(5, "Hitted MOB " + this.getId()); + if(ServerConstants.USE_DEBUG == true && from != null) from.dropMessage(5, "Hitted MOB " + this.getId() + ", OID " + this.getObjectId()); dispatchMonsterDamaged(from, trueDamage); hp -= damage; diff --git a/src/tools/MaplePacketCreator.java b/src/tools/MaplePacketCreator.java index dec27d6790..6a92595b19 100644 --- a/src/tools/MaplePacketCreator.java +++ b/src/tools/MaplePacketCreator.java @@ -1996,7 +1996,26 @@ public class MaplePacketCreator { serializeMovementList(mplew, moves); return mplew.getPacket(); } - + + public static byte[] summonAttack(int cid, int summonOid, byte direction, List allDamage) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + //b2 00 29 f7 00 00 9a a3 04 00 c8 04 01 94 a3 04 00 06 ff 2b 00 + mplew.writeShort(SendOpcode.SUMMON_ATTACK.getValue()); + mplew.writeInt(cid); + mplew.writeInt(summonOid); + mplew.write(direction); + mplew.write(4); + mplew.write(allDamage.size()); + for (SummonAttackEntry attackEntry : allDamage) { + mplew.writeInt(attackEntry.getMonsterOid()); // oid + mplew.write(6); // who knows + mplew.writeInt(attackEntry.getDamage()); // damage + } + + return mplew.getPacket(); + } + + /* public static byte[] summonAttack(int cid, int summonSkillId, byte direction, List allDamage) { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); //b2 00 29 f7 00 00 9a a3 04 00 c8 04 01 94 a3 04 00 06 ff 2b 00 @@ -2013,6 +2032,7 @@ public class MaplePacketCreator { } return mplew.getPacket(); } + */ public static byte[] closeRangeAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, Map> damage, int speed, int direction, int display) { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); @@ -3506,14 +3526,14 @@ public class MaplePacketCreator { mplew.writeInt(oid); return mplew.getPacket(); } - - public static byte[] damageSummon(int cid, int summonSkillId, int damage, int unkByte, int monsterIdFrom) { + + public static byte[] damageSummon(int cid, int oid, int damage, int monsterIdFrom) { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendOpcode.DAMAGE_SUMMON.getValue()); mplew.writeInt(cid); - mplew.writeInt(summonSkillId); - mplew.write(unkByte); - mplew.writeInt(damage); + mplew.writeInt(oid); + mplew.write(12); + mplew.writeInt(damage); // damage display doesn't seems to work... mplew.writeInt(monsterIdFrom); mplew.write(0); return mplew.getPacket();