Sync with L2jServer HighFive Dec 21st 2015.

This commit is contained in:
MobiusDev
2015-12-21 11:05:04 +00:00
parent 130fa65bbd
commit 4bfbad7c46
74 changed files with 2194 additions and 307 deletions

View File

@@ -53,6 +53,7 @@ import com.l2jserver.gameserver.data.xml.impl.CategoryData;
import com.l2jserver.gameserver.data.xml.impl.DoorData;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.enums.CategoryType;
import com.l2jserver.gameserver.enums.ChatType;
import com.l2jserver.gameserver.enums.InstanceType;
import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.enums.ShotType;
@@ -134,6 +135,7 @@ import com.l2jserver.gameserver.model.stats.Formulas;
import com.l2jserver.gameserver.model.stats.Stats;
import com.l2jserver.gameserver.model.stats.functions.AbstractFunction;
import com.l2jserver.gameserver.model.zone.ZoneId;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
import com.l2jserver.gameserver.network.serverpackets.Attack;
@@ -149,6 +151,7 @@ import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched;
import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jserver.gameserver.network.serverpackets.MoveToLocation;
import com.l2jserver.gameserver.network.serverpackets.NpcInfo;
import com.l2jserver.gameserver.network.serverpackets.NpcSay;
import com.l2jserver.gameserver.network.serverpackets.Revive;
import com.l2jserver.gameserver.network.serverpackets.ServerObjectInfo;
import com.l2jserver.gameserver.network.serverpackets.SetupGauge;
@@ -1404,12 +1407,12 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
for (L2Object obj : objs)
{
if (obj == target)
if ((obj == target) || (obj == null))
{
continue; // do not hit twice
}
// Check if the L2Object is a L2Character
if (obj instanceof L2Character)
if (obj.isCharacter())
{
if (obj.isPet() && isPlayer() && (((L2PetInstance) obj).getOwner() == getActingPlayer()))
{
@@ -5386,7 +5389,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
if (cancelEffect || oldSkill.isToggle() || oldSkill.isPassive())
{
removeStatsOwner(oldSkill);
stopSkillEffects(true, oldSkill.getId());
stopSkillEffects(false, oldSkill.getId());
}
}
@@ -7059,6 +7062,42 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
return 0;
}
/**
* Send a normal message to all L2PcInstance in the known list.<br>
* @param msg String with message
*/
public void say(String msg)
{
broadcastPacket(new NpcSay(getObjectId(), ChatType.NPC_GENERAL, getId(), msg));
}
/**
* Send a client message to all L2PcInstance in the known list.<br>
* @param msg NpcString from client
*/
public void say(NpcStringId msg)
{
broadcastPacket(new NpcSay(getObjectId(), ChatType.NPC_GENERAL, getId(), msg));
}
/**
* Send a shout message (orange chat) to all L2PcInstance in the known list.<br>
* @param msg String with message
*/
public void shout(String msg)
{
broadcastPacket(new NpcSay(getObjectId(), ChatType.NPC_SHOUT, getId(), msg));
}
/**
* Send a shout message (orange chat) to all L2PcInstance in the known list.<br>
* @param msg NpcString from client
*/
public void shout(NpcStringId msg)
{
broadcastPacket(new NpcSay(getObjectId(), ChatType.NPC_SHOUT, getId(), msg));
}
public int getMinShopDistance()
{
return 0;

View File

@@ -1471,17 +1471,21 @@ public final class L2PcInstance extends L2Playable
}
/**
* @return a table containing all Quest in progress from the table _quests.
* Gets all the active quests.
* @return a list of active quests
*/
public List<Quest> getAllActiveQuests()
{
List<Quest> quests = new ArrayList<>();
final List<Quest> quests = new LinkedList<>();
for (QuestState qs : _quests.values())
{
if ((qs == null) || (qs.getQuest() == null) || (!qs.isStarted() && !Config.DEVELOPER))
{
continue;
}
// Ignore other scripts.
final int questId = qs.getQuest().getId();
if ((questId > 19999) || (questId < 1))
{
@@ -1494,13 +1498,15 @@ public final class L2PcInstance extends L2Playable
public List<Quest> getAllCompletedQuests()
{
List<Quest> quests = new ArrayList<>();
final List<Quest> quests = new LinkedList<>();
for (QuestState qs : _quests.values())
{
if ((qs == null) || (qs.getQuest() == null) || (!qs.isCompleted()))
{
continue;
}
// Ignore other scripts.
final int questId = qs.getQuest().getId();
if ((questId > 19999) || (questId < 1))
{

View File

@@ -510,6 +510,12 @@ public class L2ServitorInstance extends L2Summon implements Runnable
return (int) (super.getMaxHp() + (getActingPlayer().getMaxHp() * (getActingPlayer().getServitorShareBonus(Stats.MAX_HP) - 1.0)));
}
@Override
public int getMaxMp()
{
return (int) (super.getMaxMp() + (getActingPlayer().getMaxMp() * (getActingPlayer().getServitorShareBonus(Stats.MAX_MP) - 1.0)));
}
@Override
public int getCriticalHit(L2Character target, Skill skill)
{
@@ -521,4 +527,16 @@ public class L2ServitorInstance extends L2Summon implements Runnable
{
return super.getPAtkSpd() + (getActingPlayer().getPAtkSpd() * (getActingPlayer().getServitorShareBonus(Stats.POWER_ATTACK_SPEED) - 1.0));
}
@Override
public int getMaxRecoverableHp()
{
return (int) calcStat(Stats.MAX_RECOVERABLE_HP, getMaxHp());
}
@Override
public int getMaxRecoverableMp()
{
return (int) calcStat(Stats.MAX_RECOVERABLE_MP, getMaxMp());
}
}

View File

@@ -28,7 +28,6 @@ import com.l2jserver.Config;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.actor.stat.CharStat;
import com.l2jserver.gameserver.model.stats.Formulas;
import com.l2jserver.util.Rnd;
@@ -270,7 +269,7 @@ public class CharStatus
{
// Get the Max HP of the L2Character
int currentHp = (int) getCurrentHp();
final double maxHp = getActiveChar().getStat().getMaxHp();
final double maxHp = getActiveChar().getMaxHp();
synchronized (this)
{
@@ -343,7 +342,7 @@ public class CharStatus
{
// Get the Max MP of the L2Character
int currentMp = (int) getCurrentMp();
final int maxMp = getActiveChar().getStat().getMaxMp();
final int maxMp = getActiveChar().getMaxMp();
synchronized (this)
{
@@ -388,32 +387,26 @@ public class CharStatus
protected void doRegeneration()
{
final CharStat charstat = getActiveChar().getStat();
// Modify the current HP of the L2Character and broadcast Server->Client packet StatusUpdate
if (getCurrentHp() < charstat.getMaxRecoverableHp())
if (getCurrentHp() < getActiveChar().getMaxRecoverableHp())
{
setCurrentHp(getCurrentHp() + Formulas.calcHpRegen(getActiveChar()), false);
}
// Modify the current MP of the L2Character and broadcast Server->Client packet StatusUpdate
if (getCurrentMp() < charstat.getMaxRecoverableMp())
if (getCurrentMp() < getActiveChar().getMaxRecoverableMp())
{
setCurrentMp(getCurrentMp() + Formulas.calcMpRegen(getActiveChar()), false);
}
if (!getActiveChar().isInActiveRegion())
if ((getCurrentHp() >= getActiveChar().getMaxRecoverableHp()) && (getCurrentMp() >= getActiveChar().getMaxMp()))
{
// no broadcast necessary for characters that are in inactive regions.
// stop regeneration for characters who are filled up and in an inactive region.
if ((getCurrentHp() == charstat.getMaxRecoverableHp()) && (getCurrentMp() == charstat.getMaxMp()))
{
stopHpMpRegeneration();
}
stopHpMpRegeneration();
}
else
if (getActiveChar().isInActiveRegion())
{
getActiveChar().broadcastStatusUpdate(); // send the StatusUpdate packet
getActiveChar().broadcastStatusUpdate();
}
}