Sync with L2jServer HighFive Nov 14th 2015.

This commit is contained in:
MobiusDev
2015-11-14 16:31:37 +00:00
parent 887fbcc6b5
commit e38353e409
125 changed files with 1998 additions and 1419 deletions

View File

@ -743,7 +743,6 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
case 0xcf: // RequestProcureCrop
// msg = new RequestBuyProcure();
break;
case 0xd0:
int id2 = -1;
if (buf.remaining() >= 2)

View File

@ -19,6 +19,7 @@
package com.l2jserver.gameserver.network.clientpackets;
import com.l2jserver.Config;
import com.l2jserver.gameserver.enums.DuelState;
import com.l2jserver.gameserver.model.L2Object;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.PcCondOverride;
@ -28,6 +29,7 @@ import com.l2jserver.gameserver.model.skills.AbnormalType;
import com.l2jserver.gameserver.model.skills.BuffInfo;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
public final class Action extends L2GameClientPacket
{
@ -107,6 +109,12 @@ public final class Action extends L2GameClientPacket
return;
}
if (obj.isPlayable() && (obj.getActingPlayer().getDuelState() == DuelState.DEAD))
{
sendPacket(ActionFailed.STATIC_PACKET);
activeChar.getActingPlayer().sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_OTHER_PARTY_IS_FROZEN_PLEASE_WAIT_A_MOMENT));
return;
}
if (!obj.isTargetable() && !activeChar.canOverrideCond(PcCondOverride.TARGET_ALL))
{
sendPacket(ActionFailed.STATIC_PACKET);

View File

@ -45,6 +45,7 @@ import com.l2jserver.gameserver.model.effects.AbstractEffect;
import com.l2jserver.gameserver.model.effects.L2EffectType;
import com.l2jserver.gameserver.model.skills.AbnormalType;
import com.l2jserver.gameserver.model.skills.BuffInfo;
import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
@ -249,10 +250,10 @@ public final class RequestActionUse extends L2GameClientPacket
activeChar.tryOpenPrivateBuyStore();
break;
case 32: // Wild Hog Cannon - Wild Cannon
useSkill(4230, false);
useSkill("DDMagic", false);
break;
case 36: // Soulless - Toxic Smoke
useSkill(4259, false);
useSkill("RangeDebuff", false);
break;
case 37: // Dwarven Manufacture
if (activeChar.isAlikeDead())
@ -276,7 +277,7 @@ public final class RequestActionUse extends L2GameClientPacket
activeChar.mountPlayer(pet);
break;
case 39: // Soulless - Parasite Burst
useSkill(4138, false);
useSkill("RangeDD", false);
break;
case 41: // Wild Hog Cannon - Attack
if (validateSummon(servitor, false))
@ -292,25 +293,25 @@ public final class RequestActionUse extends L2GameClientPacket
}
break;
case 42: // Kai the Cat - Self Damage Shield
useSkill(4378, activeChar, false);
useSkill("HealMagic", false);
break;
case 43: // Unicorn Merrow - Hydro Screw
useSkill(4137, false);
case 43: // Merrow the Unicorn - Hydro Screw
useSkill("DDMagic", false);
break;
case 44: // Big Boom - Boom Attack
useSkill(4139, false);
useSkill("DDMagic", false);
break;
case 45: // Unicorn Boxer - Master Recharge
useSkill(4025, activeChar, false);
case 45: // Boxer the Unicorn - Master Recharge
useSkill("HealMagic", activeChar, false);
break;
case 46: // Mew the Cat - Mega Storm Strike
useSkill(4261, false);
useSkill("DDMagic", false);
break;
case 47: // Silhouette - Steal Blood
useSkill(4260, false);
useSkill("DDMagic", false);
break;
case 48: // Mechanic Golem - Mech. Cannon
useSkill(4068, false);
useSkill("DDMagic", false);
break;
case 51: // General Manufacture
// Player shouldn't be able to set stores if he/she is alike dead (dead or fake death)
@ -459,97 +460,91 @@ public final class RequestActionUse extends L2GameClientPacket
}
break;
case 1003: // Wind Hatchling/Strider - Wild Stun
useSkill(4710, true);
useSkill("PhysicalSpecial", true);
break;
case 1004: // Wind Hatchling/Strider - Wild Defense
useSkill(4711, activeChar, true);
useSkill("Buff", activeChar, true);
break;
case 1005: // Star Hatchling/Strider - Bright Burst
useSkill(4712, true);
useSkill("DDMagic", true);
break;
case 1006: // Star Hatchling/Strider - Bright Heal
useSkill(4713, activeChar, true);
useSkill("Heal", activeChar, true);
break;
case 1007: // Cat Queen - Blessing of Queen
useSkill(4699, activeChar, false);
case 1007: // Feline Queen - Blessing of Queen
useSkill("Buff1", activeChar, false);
break;
case 1008: // Cat Queen - Gift of Queen
useSkill(4700, activeChar, false);
case 1008: // Feline Queen - Gift of Queen
useSkill("Buff2", activeChar, false);
break;
case 1009: // Cat Queen - Cure of Queen
useSkill(4701, false);
case 1009: // Feline Queen - Cure of Queen
useSkill("DDMagic", false);
break;
case 1010: // Unicorn Seraphim - Blessing of Seraphim
useSkill(4702, activeChar, false);
useSkill("Buff1", activeChar, false);
break;
case 1011: // Unicorn Seraphim - Gift of Seraphim
useSkill(4703, activeChar, false);
useSkill("Buff2", activeChar, false);
break;
case 1012: // Unicorn Seraphim - Cure of Seraphim
useSkill(4704, false);
useSkill("DDMagic", false);
break;
case 1013: // Nightshade - Curse of Shade
useSkill(4705, false);
useSkill("DeBuff1", false);
break;
case 1014: // Nightshade - Mass Curse of Shade
useSkill(4706, false);
useSkill("DeBuff2", false);
break;
case 1015: // Nightshade - Shade Sacrifice
useSkill(4707, false);
useSkill("Heal", false);
break;
case 1016: // Cursed Man - Cursed Blow
useSkill(4709, false);
useSkill("PhysicalSpecial1", false);
break;
case 1017: // Cursed Man - Cursed Strike/Stun
useSkill(4708, false);
case 1017: // Cursed Man - Cursed Strike
useSkill("PhysicalSpecial2", false);
break;
case 1031: // Feline King - Slash
useSkill(5135, false);
useSkill("PhysicalSpecial1", false);
break;
case 1032: // Feline King - Spinning Slash
useSkill(5136, false);
useSkill("PhysicalSpecial2", false);
break;
case 1033: // Feline King - Grip of the Cat
useSkill(5137, false);
case 1033: // Feline King - Hold of King
useSkill("PhysicalSpecial3", false);
break;
case 1034: // Magnus the Unicorn - Whiplash
useSkill(5138, false);
useSkill("PhysicalSpecial1", false);
break;
case 1035: // Magnus the Unicorn - Tridal Wave
useSkill(5139, false);
useSkill("PhysicalSpecial2", false);
break;
case 1036: // Spectral Lord - Corpse Kaboom
useSkill(5142, false);
useSkill("PhysicalSpecial1", false);
break;
case 1037: // Spectral Lord - Dicing Death
useSkill(5141, false);
useSkill("PhysicalSpecial2", false);
break;
case 1038: // Spectral Lord - Force Curse
useSkill(5140, false);
case 1038: // Spectral Lord - Dark Curse
useSkill("PhysicalSpecial3", false);
break;
case 1039: // Swoop Cannon - Cannon Fodder
if ((target != null) && target.isDoor())
{
useSkill(5110, false);
}
useSkill(5110, false);
break;
case 1040: // Swoop Cannon - Big Bang
if ((target != null) && target.isDoor())
{
useSkill(5111, false);
}
useSkill(5111, false);
break;
case 1041: // Great Wolf - Bite Attack
useSkill(5442, true);
useSkill("Skill01", true);
break;
case 1042: // Great Wolf - Maul
useSkill(5444, true);
useSkill("Skill03", true);
break;
case 1043: // Great Wolf - Cry of the Wolf
useSkill(5443, true);
useSkill("Skill02", true);
break;
case 1044: // Great Wolf - Awakening
useSkill(5445, true);
useSkill("Skill04", true);
break;
case 1045: // Great Wolf - Howl
useSkill(5584, true);
@ -570,34 +565,34 @@ public final class RequestActionUse extends L2GameClientPacket
useSkill(5583, false);
break;
case 1051: // Feline Queen - Bless The Body
useSkill(5638, false);
useSkill("buff3", false);
break;
case 1052: // Feline Queen - Bless The Soul
useSkill(5639, false);
useSkill("buff4", false);
break;
case 1053: // Feline Queen - Haste
useSkill(5640, false);
useSkill("buff5", false);
break;
case 1054: // Unicorn Seraphim - Acumen
useSkill(5643, false);
useSkill("buff3", false);
break;
case 1055: // Unicorn Seraphim - Clarity
useSkill(5647, false);
useSkill("buff4", false);
break;
case 1056: // Unicorn Seraphim - Empower
useSkill(5648, false);
useSkill("buff5", false);
break;
case 1057: // Unicorn Seraphim - Wild Magic
useSkill(5646, false);
useSkill("buff6", false);
break;
case 1058: // Nightshade - Death Whisper
useSkill(5652, false);
useSkill("buff3", false);
break;
case 1059: // Nightshade - Focus
useSkill(5653, false);
useSkill("buff4", false);
break;
case 1060: // Nightshade - Guidance
useSkill(5654, false);
useSkill("buff5", false);
break;
case 1061: // Wild Beast Fighter, White Weasel - Death blow
useSkill(5745, true);
@ -630,7 +625,7 @@ public final class RequestActionUse extends L2GameClientPacket
useSkill(5771, true);
break;
case 1071: // Tigress - Power Strike
useSkill(5761, true);
useSkill("DDMagic", true);
break;
case 1072: // Toy Knight - Piercing attack
useSkill(6046, true);
@ -1046,18 +1041,8 @@ public final class RequestActionUse extends L2GameClientPacket
return;
}
if (summon instanceof L2BabyPetInstance)
if (!canControl(summon))
{
if (!((L2BabyPetInstance) summon).isInSupportMode())
{
sendPacket(SystemMessageId.A_PET_ON_AUXILIARY_MODE_CANNOT_USE_SKILLS);
return;
}
}
if ((summon.getLevel() - activeChar.getLevel()) > 20)
{
sendPacket(SystemMessageId.YOUR_PET_IS_TOO_HIGH_LEVEL_TO_CONTROL);
return;
}
@ -1092,6 +1077,69 @@ public final class RequestActionUse extends L2GameClientPacket
}
}
private void useSkill(String skillName, L2Object target, boolean pet)
{
final L2PcInstance activeChar = getActiveChar();
if (activeChar == null)
{
return;
}
final L2Summon summon = activeChar.getPet();
if (!validateSummon(summon, pet))
{
return;
}
if (!canControl(summon))
{
return;
}
if (summon instanceof L2BabyPetInstance)
{
if (!((L2BabyPetInstance) summon).isInSupportMode())
{
sendPacket(SystemMessageId.A_PET_ON_AUXILIARY_MODE_CANNOT_USE_SKILLS);
return;
}
}
final Skill skill = summon.getTemplate().getParameters().getSkillHolder(skillName).getSkill();
if (skill != null)
{
summon.setTarget(target);
summon.useMagic(skill, _ctrlPressed, _shiftPressed);
if (skill.getId() == SWITCH_STANCE_ID)
{
summon.switchMode();
}
}
}
private boolean canControl(L2Summon summon)
{
if (summon instanceof L2BabyPetInstance)
{
if (!((L2BabyPetInstance) summon).isInSupportMode())
{
sendPacket(SystemMessageId.A_PET_ON_AUXILIARY_MODE_CANNOT_USE_SKILLS);
return false;
}
}
if (summon.isPet())
{
if ((summon.getLevel() - getActiveChar().getLevel()) > 20)
{
sendPacket(SystemMessageId.YOUR_PET_IS_TOO_HIGH_LEVEL_TO_CONTROL);
return false;
}
}
return true;
}
/**
* Cast a skill for active summon.<br>
* Target is retrieved from owner's target, then validated by overloaded method useSkill(int, L2Character).
@ -1109,6 +1157,23 @@ public final class RequestActionUse extends L2GameClientPacket
useSkill(skillId, activeChar.getTarget(), pet);
}
/**
* Cast a skill for active summon.<br>
* Target is retrieved from owner's target, then validated by overloaded method useSkill(int, L2Character).
* @param skillName the skill name to use
* @param pet if {@code true} it'll validate a pet, if {@code false} it will validate a servitor
*/
private void useSkill(String skillName, boolean pet)
{
final L2PcInstance activeChar = getActiveChar();
if (activeChar == null)
{
return;
}
useSkill(skillName, activeChar.getTarget(), pet);
}
/**
* Cast a skill for all active summon.<br>
* Target is retrieved from owner's target

View File

@ -94,7 +94,7 @@ public final class RequestDuelAnswerStart extends L2GameClientPacket
player.sendPacket(msg1);
requestor.sendPacket(msg2);
DuelManager.getInstance().addDuel(requestor, player, _partyDuel);
DuelManager.getInstance().addDuel(requestor, player, _partyDuel == 1 ? true : false);
}
else if (_response == -1)
{

View File

@ -19,6 +19,7 @@
package com.l2jserver.gameserver.network.clientpackets;
import com.l2jserver.Config;
import com.l2jserver.gameserver.instancemanager.DuelManager;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.SystemMessageId;
@ -48,87 +49,65 @@ public final class RequestDuelStart extends L2GameClientPacket
{
L2PcInstance activeChar = getClient().getActiveChar();
L2PcInstance targetChar = L2World.getInstance().getPlayer(_player);
if (activeChar == null)
boolean isPartyDuel = _partyDuel == 1 ? true : false;
if ((activeChar == null) || (targetChar == null))
{
return;
}
if (targetChar == null)
{
activeChar.sendPacket(SystemMessageId.THERE_IS_NO_OPPONENT_TO_RECEIVE_YOUR_CHALLENGE_FOR_A_DUEL);
return;
}
if (activeChar == targetChar)
{
activeChar.sendPacket(SystemMessageId.THERE_IS_NO_OPPONENT_TO_RECEIVE_YOUR_CHALLENGE_FOR_A_DUEL);
if (isPartyDuel)
{
activeChar.sendPacket(SystemMessageId.THERE_IS_NO_OPPONENT_TO_RECEIVE_YOUR_CHALLENGE_FOR_A_DUEL);
}
return;
}
// Check if duel is possible
if (!activeChar.canDuel())
{
activeChar.sendPacket(SystemMessageId.YOU_ARE_UNABLE_TO_REQUEST_A_DUEL_AT_THIS_TIME);
return;
}
else if (!targetChar.canDuel())
{
activeChar.sendPacket(targetChar.getNoDuelReason());
return;
}
// Players may not be too far apart
else if (!activeChar.isInsideRadius(targetChar, 250, false, false))
if (!activeChar.isInsideRadius(targetChar, 250, false, false))
{
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_TOO_FAR_AWAY_TO_RECEIVE_A_DUEL_CHALLENGE);
msg.addString(targetChar.getName());
activeChar.sendPacket(msg);
return;
}
else if (Config.FACTION_SYSTEM_ENABLED && ((activeChar.isEvil() && targetChar.isGood()) || (activeChar.isGood() && targetChar.isEvil())))
if (Config.FACTION_SYSTEM_ENABLED && ((activeChar.isEvil() && targetChar.isGood()) || (activeChar.isGood() && targetChar.isEvil())))
{
activeChar.sendPacket(SystemMessageId.YOU_ARE_UNABLE_TO_REQUEST_A_DUEL_AT_THIS_TIME);
return;
}
// Check if duel is possible
if (!DuelManager.canDuel(activeChar, activeChar, isPartyDuel))
{
return;
}
if (!DuelManager.canDuel(activeChar, targetChar, isPartyDuel))
{
return;
}
// Duel is a party duel
if (_partyDuel == 1)
if (isPartyDuel)
{
// Player must be in a party & the party leader
if (!activeChar.isInParty() || !activeChar.getParty().isLeader(activeChar))
if (!activeChar.isInParty() || !activeChar.getParty().isLeader(activeChar) || !targetChar.isInParty() || activeChar.getParty().containsPlayer(targetChar))
{
activeChar.sendMessage("You have to be the leader of a party in order to request a party duel.");
return;
}
// Target must be in a party
else if (!targetChar.isInParty())
{
activeChar.sendPacket(SystemMessageId.SINCE_THE_PERSON_YOU_CHALLENGED_IS_NOT_CURRENTLY_IN_A_PARTY_THEY_CANNOT_DUEL_AGAINST_YOUR_PARTY);
return;
}
// Target may not be of the same party
else if (activeChar.getParty().containsPlayer(targetChar))
{
activeChar.sendMessage("This player is a member of your own party.");
activeChar.sendPacket(SystemMessageId.YOU_ARE_UNABLE_TO_REQUEST_A_DUEL_AT_THIS_TIME);
return;
}
// Check if every player is ready for a duel
for (L2PcInstance temp : activeChar.getParty().getMembers())
{
if (!temp.canDuel())
if (!DuelManager.canDuel(activeChar, temp, isPartyDuel))
{
activeChar.sendMessage("Not all the members of your party are ready for a duel.");
return;
}
}
L2PcInstance partyLeader = null; // snatch party leader of targetChar's party
L2PcInstance partyLeader = targetChar.getParty().getLeader(); // snatch party leader of targetChar's party
for (L2PcInstance temp : targetChar.getParty().getMembers())
{
if (partyLeader == null)
if (!DuelManager.canDuel(activeChar, temp, isPartyDuel))
{
partyLeader = temp;
}
if (!temp.canDuel())
{
activeChar.sendPacket(SystemMessageId.THE_OPPOSING_PARTY_IS_CURRENTLY_UNABLE_TO_ACCEPT_A_CHALLENGE_TO_A_DUEL);
return;
}
}