Skip to content
Snippets Groups Projects
Commit 3a4a9a19 authored by Adry_85's avatar Adry_85
Browse files

BETA: Reworking '''Sow''' effect.

	Reviewed by: Nos, !UnAfraid
parent 82dcf6a5
No related branches found
No related tags found
No related merge requests found
......@@ -157,6 +157,7 @@ public final class EffectMasterHandler
Sleep.class,
SoulBlow.class,
SoulEating.class,
Sow.class,
Spoil.class,
StaticDamage.class,
StealAbnormal.class,
......
......@@ -206,7 +206,6 @@ import handlers.punishmenthandlers.ChatBanHandler;
import handlers.punishmenthandlers.JailHandler;
import handlers.skillhandlers.DeluxeKey;
import handlers.skillhandlers.Dummy;
import handlers.skillhandlers.Sow;
import handlers.skillhandlers.Unlock;
import handlers.targethandlers.Area;
import handlers.targethandlers.AreaCorpseMob;
......@@ -492,7 +491,6 @@ public class MasterHandler
// Skill Handlers
DeluxeKey.class,
Dummy.class,
Sow.class,
Unlock.class,
},
{
......
......@@ -16,110 +16,90 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.skillhandlers;
package handlers.effecthandlers;
import java.util.logging.Logger;
import com.l2jserver.Config;
import com.l2jserver.gameserver.ai.CtrlIntention;
import com.l2jserver.gameserver.datatables.ManorData;
import com.l2jserver.gameserver.enums.QuestSound;
import com.l2jserver.gameserver.handler.ISkillHandler;
import com.l2jserver.gameserver.model.L2Object;
import com.l2jserver.gameserver.model.StatsSet;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jserver.gameserver.model.skills.L2Skill;
import com.l2jserver.gameserver.model.skills.L2SkillType;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.conditions.Condition;
import com.l2jserver.gameserver.model.effects.AbstractEffect;
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;
import com.l2jserver.util.Rnd;
/**
* @author l3x
* Sow effect implementation.
* @author Adry_85, l3x
*/
public class Sow implements ISkillHandler
public class Sow extends AbstractEffect
{
private static Logger _log = Logger.getLogger(Sow.class.getName());
public Sow(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params)
{
super(attachCond, applyCond, set, params);
}
private static final L2SkillType[] SKILL_IDS =
@Override
public boolean isInstant()
{
L2SkillType.SOW
};
return true;
}
@Override
public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
public void onStart(BuffInfo info)
{
if (!activeChar.isPlayer())
if (!info.getEffector().isPlayer() || !info.getEffected().isMonster())
{
return;
}
final L2Object[] targetList = skill.getTargetList(activeChar);
if ((targetList == null) || (targetList.length == 0))
final L2PcInstance player = info.getEffector().getActingPlayer();
final L2MonsterInstance target = (L2MonsterInstance) info.getEffected();
if (target.isDead() || (!target.getTemplate().canBeSown()) || target.isSeeded() || (target.getSeederId() != player.getObjectId()))
{
return;
}
if (Config.DEBUG)
final int seedId = target.getSeedType();
if (seedId == 0)
{
_log.info("Casting sow");
return;
}
L2MonsterInstance target;
// Consuming used seed
if (!player.destroyItemByItemId("Consume", seedId, 1, target, false))
{
return;
}
for (L2Object tgt : targetList)
final SystemMessage sm;
if (calcSuccess(player, target, seedId))
{
if (!tgt.isMonster())
{
continue;
}
target = (L2MonsterInstance) tgt;
if (target.isDead() || target.isSeeded() || (target.getSeederId() != activeChar.getObjectId()))
{
activeChar.sendPacket(ActionFailed.STATIC_PACKET);
continue;
}
final int seedId = target.getSeedType();
if (seedId == 0)
{
activeChar.sendPacket(ActionFailed.STATIC_PACKET);
continue;
}
// Consuming used seed
if (!activeChar.destroyItemByItemId("Consume", seedId, 1, target, false))
{
activeChar.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
SystemMessage sm;
if (calcSuccess(activeChar, target, seedId))
{
activeChar.sendPacket(QuestSound.ITEMSOUND_QUEST_ITEMGET.getPacket());
target.setSeeded(activeChar.getActingPlayer());
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_SEED_WAS_SUCCESSFULLY_SOWN);
}
else
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_SEED_WAS_NOT_SOWN);
}
if (activeChar.getParty() == null)
{
activeChar.sendPacket(sm);
}
else
{
activeChar.getParty().broadcastPacket(sm);
}
// TODO: Mob should not aggro on player, this way doesn't work really nice
target.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
player.sendPacket(QuestSound.ITEMSOUND_QUEST_ITEMGET.getPacket());
target.setSeeded(player.getActingPlayer());
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_SEED_WAS_SUCCESSFULLY_SOWN);
}
else
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_SEED_WAS_NOT_SOWN);
}
if (player.getParty() == null)
{
player.sendPacket(sm);
}
else
{
player.getParty().broadcastPacket(sm);
}
// TODO: Mob should not aggro on player, this way doesn't work really nice
target.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
}
private boolean calcSuccess(L2Character activeChar, L2Character target, int seedId)
......@@ -154,17 +134,7 @@ public class Sow implements ISkillHandler
}
// chance can't be less than 1%
if (basicSuccess < 1)
{
basicSuccess = 1;
}
Math.max(basicSuccess, 1);
return Rnd.nextInt(99) < basicSuccess;
}
@Override
public L2SkillType[] getSkillIds()
{
return SKILL_IDS;
}
}
......@@ -1274,8 +1274,10 @@
<set name="nextActionAttack" val="true" />
<set name="operateType" val="A1" />
<set name="reuseDelay" val="10000" />
<set name="skillType" val="SOW" />
<set name="targetType" val="ONE" />
<for>
<effect name="Sow" />
</for>
</skill>
<skill id="2098" levels="1" name="Harvesting">
<!-- Confirmed CT2.5 -->
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment