Sync with L2jServer HighFive Jun 14th 2015.

This commit is contained in:
MobiusDev
2015-06-14 11:51:57 +00:00
parent a3707acaaa
commit 166d6ff9d4
48 changed files with 675 additions and 356 deletions

View File

@ -336,9 +336,9 @@ public class CursedWeapon implements INamable
// Void Burst, Void Flow
_player.addSkill(CommonSkill.VOID_BURST.getSkill(), false);
_player.addTransformSkill(CommonSkill.VOID_BURST.getId());
_player.addTransformSkill(CommonSkill.VOID_BURST.getSkill());
_player.addSkill(CommonSkill.VOID_FLOW.getSkill(), false);
_player.addTransformSkill(CommonSkill.VOID_FLOW.getId());
_player.addTransformSkill(CommonSkill.VOID_FLOW.getSkill());
_player.sendSkillList();
}

View File

@ -6071,14 +6071,18 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
}
}
// Notify AI
if (skill.isBad() && !skill.hasEffectType(L2EffectType.HATE))
if (skill.isBad() && (skill.getTargetType() != L2TargetType.SELF) && !skill.hasEffectType(L2EffectType.HATE))
{
for (L2Object target : targets)
{
if ((target instanceof L2Character) && ((L2Character) target).hasAI())
if (target instanceof L2Character)
{
// notify target AI about the attack
((L2Character) target).getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, this);
final L2Character creature = (L2Character) target;
if (creature.hasAI())
{
// notify target AI about the attack
creature.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, this);
}
}
}
}

View File

@ -29,7 +29,6 @@ import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
@ -37,6 +36,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.Set;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ConcurrentSkipListMap;
@ -215,6 +215,7 @@ import com.l2jserver.gameserver.model.events.impl.character.player.mentoring.OnP
import com.l2jserver.gameserver.model.events.impl.character.player.mentoring.OnPlayerMentorStatus;
import com.l2jserver.gameserver.model.fishing.L2Fish;
import com.l2jserver.gameserver.model.fishing.L2Fishing;
import com.l2jserver.gameserver.model.holders.AdditionalSkillHolder;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.holders.PlayerEventHolder;
import com.l2jserver.gameserver.model.holders.SkillHolder;
@ -521,6 +522,7 @@ public final class L2PcInstance extends L2Playable
private long _offlineShopStart = 0;
private Transform _transformation;
private volatile Map<Integer, Skill> _transformSkills;
/** The table containing all L2RecipeList of the L2PcInstance */
private final Map<Integer, L2RecipeList> _dwarvenRecipeBook = new ConcurrentHashMap<>();
@ -754,7 +756,6 @@ public final class L2PcInstance extends L2Playable
private int _fishz = 0;
private final static SkillHolder FISHING_SKILL = new SkillHolder(1312, 1);
private volatile Set<Integer> _transformAllowedSkills;
private ScheduledFuture<?> _taskRentPet;
private ScheduledFuture<?> _taskWater;
@ -7727,7 +7728,7 @@ public final class L2PcInstance extends L2Playable
final TimeStamp t = getSkillReuseTimeStamp(skill.getReuseHashCode());
statement.setLong(5, (t != null) && t.hasNotPassed() ? t.getReuse() : 0);
statement.setDouble(6, (t != null) && t.hasNotPassed() ? t.getStamp() : 0);
statement.setLong(6, (t != null) && t.hasNotPassed() ? t.getStamp() : 0);
statement.setInt(7, 0); // Store type 0, active buffs/debuffs.
statement.setInt(8, getClassIndex());
@ -7758,7 +7759,7 @@ public final class L2PcInstance extends L2Playable
statement.setInt(3, t.getSkillLvl());
statement.setInt(4, -1);
statement.setLong(5, t.getReuse());
statement.setDouble(6, t.getStamp());
statement.setLong(6, t.getStamp());
statement.setInt(7, 1); // Restore type 1, skill reuse.
statement.setInt(8, getClassIndex());
statement.setInt(9, ++buff_index);
@ -7793,7 +7794,7 @@ public final class L2PcInstance extends L2Playable
ps2.setInt(2, ts.getItemId());
ps2.setInt(3, ts.getItemObjectId());
ps2.setLong(4, ts.getReuse());
ps2.setDouble(5, ts.getStamp());
ps2.setLong(5, ts.getStamp());
ps2.execute();
}
}
@ -10228,7 +10229,7 @@ public final class L2PcInstance extends L2Playable
continue;
}
if ((_transformation != null) && (!hasTransformSkill(s.getId()) && !s.allowOnTransform()))
if ((_transformation != null) && !s.isPassive())
{
continue;
}
@ -10258,7 +10259,48 @@ public final class L2PcInstance extends L2Playable
sl.addSkill(s.getDisplayId(), s.getDisplayLevel(), s.isPassive(), isDisabled, isEnchantable);
}
if (_transformation != null)
{
Map<Integer, Integer> ts = new TreeMap<>();
for (SkillHolder holder : _transformation.getTemplate(this).getSkills())
{
ts.putIfAbsent(holder.getSkillId(), holder.getSkillLvl());
if (ts.get(holder.getSkillId()) < holder.getSkillLvl())
{
ts.put(holder.getSkillId(), holder.getSkillLvl());
}
addTransformSkill(holder.getSkill());
}
for (AdditionalSkillHolder holder : _transformation.getTemplate(this).getAdditionalSkills())
{
if (getLevel() >= holder.getMinLevel())
{
ts.putIfAbsent(holder.getSkillId(), holder.getSkillLvl());
if (ts.get(holder.getSkillId()) < holder.getSkillLvl())
{
ts.put(holder.getSkillId(), holder.getSkillLvl());
}
addTransformSkill(holder.getSkill());
}
}
// Add collection skills.
for (L2SkillLearn skill : SkillTreesData.getInstance().getCollectSkillTree().values())
{
if (getKnownSkill(skill.getSkillId()) != null)
{
addTransformSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()));
}
}
for (Entry<Integer, Integer> transformSkill : ts.entrySet())
{
sl.addSkill(transformSkill.getKey(), transformSkill.getValue(), false, false, false);
}
}
sendPacket(sl);
}
@ -12857,29 +12899,34 @@ public final class L2PcInstance extends L2Playable
}
}
public void addTransformSkill(int id)
public void addTransformSkill(Skill sk)
{
if (_transformAllowedSkills == null)
if (_transformSkills == null)
{
synchronized (this)
{
if (_transformAllowedSkills == null)
if (_transformSkills == null)
{
_transformAllowedSkills = new HashSet<>();
_transformSkills = new HashMap<>();
}
}
}
_transformAllowedSkills.add(id);
_transformSkills.put(sk.getId(), sk);
}
public Skill getTransformSkill(int id)
{
return _transformSkills.get(id);
}
public boolean hasTransformSkill(int id)
{
return (_transformAllowedSkills != null) && _transformAllowedSkills.contains(id);
return _transformSkills.containsKey(id);
}
public synchronized void removeAllTransformSkills()
{
_transformAllowedSkills = null;
_transformSkills = null;
}
protected void startFeed(int npcId)

View File

@ -293,7 +293,7 @@ public class PcStatus extends PlayableStatus
setCurrentHp(value);
}
if (getActiveChar().getCurrentHp() < 0.5)
if ((getActiveChar().getCurrentHp() < 0.5) && !isHPConsumption)
{
getActiveChar().abortAttack();
getActiveChar().abortCast();

View File

@ -41,7 +41,7 @@ public final class NotifyAITask implements Runnable
{
if (_character != null)
{
_character.getAI().notifyEvent(_event, null);
_character.getAI().notifyEvent(_event);
}
}
}

View File

@ -22,7 +22,6 @@ import java.util.ArrayList;
import java.util.List;
import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
import com.l2jserver.gameserver.model.L2SkillLearn;
import com.l2jserver.gameserver.model.StatsSet;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.AdditionalItemHolder;
@ -224,38 +223,6 @@ public final class Transform implements IIdentifiable
player.getAppearance().setVisibleTitle(getTitle());
}
// Add common skills.
for (SkillHolder holder : template.getSkills())
{
if (player.getSkillLevel(holder.getSkillId()) < holder.getSkillLvl())
{
player.addSkill(holder.getSkill(), false);
}
player.addTransformSkill(holder.getSkillId());
}
// Add skills depending on level.
for (AdditionalSkillHolder holder : template.getAdditionalSkills())
{
if (player.getLevel() >= holder.getMinLevel())
{
if (player.getSkillLevel(holder.getSkillId()) < holder.getSkillLvl())
{
player.addSkill(holder.getSkill(), false);
}
player.addTransformSkill(holder.getSkillId());
}
}
// Add collection skills.
for (L2SkillLearn skill : SkillTreesData.getInstance().getCollectSkillTree().values())
{
if (player.getKnownSkill(skill.getSkillId()) != null)
{
player.addTransformSkill(skill.getSkillId());
}
}
// Set inventory blocks if needed.
if (!template.getAdditionalItems().isEmpty())
{
@ -376,7 +343,7 @@ public final class Transform implements IIdentifiable
if (player.getSkillLevel(holder.getSkillId()) < holder.getSkillLvl())
{
player.addSkill(holder.getSkill(), false);
player.addTransformSkill(holder.getSkillId());
player.addTransformSkill(holder.getSkill());
}
}
}

View File

@ -40,6 +40,7 @@ import com.l2jserver.gameserver.instancemanager.ClanHallManager;
import com.l2jserver.gameserver.model.L2Clan;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.itemcontainer.ItemContainer;
import com.l2jserver.gameserver.network.SystemMessageId;
public class Auction
@ -288,23 +289,37 @@ public class Auction
}
/**
* Return Item in WHC
* @param Clan
* @param quantity
* @param penalty
* Returns the item to the clan warehouse.
* @param clanName the clan name
* @param quantity the Adena value
* @param penalty if {@code true} fees are applied
*/
private void returnItem(String Clan, long quantity, boolean penalty)
private void returnItem(String clanName, long quantity, boolean penalty)
{
if (penalty)
{
quantity *= 0.9; // take 10% tax fee if needed
}
final L2Clan clan = ClanTable.getInstance().getClanByName(clanName);
if (clan == null)
{
_log.warning("Clan " + clanName + " doesn't exist!");
return;
}
final ItemContainer cwh = clan.getWarehouse();
if (cwh == null)
{
_log.warning("There has been a problem with " + clanName + "'s clan warehouse!");
return;
}
// avoid overflow on return
final long limit = MAX_ADENA - ClanTable.getInstance().getClanByName(Clan).getWarehouse().getAdena();
final long limit = MAX_ADENA - cwh.getAdena();
quantity = Math.min(quantity, limit);
ClanTable.getInstance().getClanByName(Clan).getWarehouse().addItem("Outbidded", ADENA_ID, quantity, null, null);
cwh.addItem("Outbidded", ADENA_ID, quantity, null, null);
}
/**

View File

@ -92,6 +92,12 @@ public final class SiegableHall extends ClanHall
{
_nextSiege.setTimeInMillis(nextSiege);
}
if (getOwnerId() != 0)
{
_isFree = false;
loadFunctions();
}
}
public void spawnDoor()

View File

@ -459,11 +459,6 @@ public final class Skill implements IIdentifiable
return _isSuicideAttack;
}
public boolean allowOnTransform()
{
return isPassive();
}
/**
* Return the power of the skill.
* @param activeChar

View File

@ -21,7 +21,6 @@ package com.l2jserver.gameserver.model.skills;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.l2jserver.gameserver.GeoData;
@ -74,7 +73,7 @@ public class SkillChannelizer implements Runnable
// Verify for same status.
if (isChanneling())
{
_log.log(Level.WARNING, "Character: " + toString() + " is attempting to channel skill but he already does!");
_log.warning("Character: " + _channelizer + " is attempting to channel skill but he already does!");
return;
}
@ -88,7 +87,7 @@ public class SkillChannelizer implements Runnable
// Verify for same status.
if (!isChanneling())
{
_log.log(Level.WARNING, "Character: " + toString() + " is attempting to stop channel skill but he does not!");
_log.warning("Character: " + _channelizer + " is attempting to stop channel skill but he does not!");
return;
}
@ -153,7 +152,7 @@ public class SkillChannelizer implements Runnable
final Skill baseSkill = SkillData.getInstance().getSkill(_skill.getChannelingSkillId(), 1);
if (baseSkill == null)
{
_log.log(Level.WARNING, getClass().getSimpleName() + ": skill " + _skill + " couldn't find effect id skill: " + _skill.getChannelingSkillId() + " !");
_log.warning(getClass().getSimpleName() + ": skill " + _skill + " couldn't find effect id skill: " + _skill.getChannelingSkillId() + " !");
_channelizer.abortCast();
return;
}
@ -196,7 +195,7 @@ public class SkillChannelizer implements Runnable
final Skill skill = SkillData.getInstance().getSkill(_skill.getChannelingSkillId(), skillLevel);
if (skill == null)
{
_log.log(Level.WARNING, getClass().getSimpleName() + ": Non existent channeling skill requested: " + _skill);
_log.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + _skill);
_channelizer.abortCast();
return;
}
@ -229,7 +228,7 @@ public class SkillChannelizer implements Runnable
}
catch (Exception e)
{
_log.log(Level.WARNING, "Error while channelizing skill: " + _skill + " channelizer: " + _channelizer + " channelized: " + _channelized, e);
_log.warning("Error while channelizing skill: " + _skill + " channelizer: " + _channelizer + " channelized: " + _channelized + "; " + e.getMessage());
}
}
}