From cb4955bafae77bd16709f7312bd7b489d943eeae Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Mon, 3 Aug 2015 21:22:27 +0000 Subject: [PATCH] OnNpcSocialActionSee. --- .../gameserver/model/actor/L2Character.java | 17 +++++ .../model/events/AbstractScript.java | 14 +++++ .../gameserver/model/events/EventType.java | 2 + .../character/npc/OnNpcSocialActionSee.java | 62 +++++++++++++++++++ .../gameserver/model/quest/Quest.java | 40 ++++++++++++ 5 files changed, 135 insertions(+) create mode 100644 trunk/java/com/l2jserver/gameserver/model/events/impl/character/npc/OnNpcSocialActionSee.java diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/L2Character.java b/trunk/java/com/l2jserver/gameserver/model/actor/L2Character.java index 075160b2b2..8a47765761 100644 --- a/trunk/java/com/l2jserver/gameserver/model/actor/L2Character.java +++ b/trunk/java/com/l2jserver/gameserver/model/actor/L2Character.java @@ -102,6 +102,7 @@ import com.l2jserver.gameserver.model.events.impl.character.OnCreatureKill; import com.l2jserver.gameserver.model.events.impl.character.OnCreatureSkillUse; import com.l2jserver.gameserver.model.events.impl.character.OnCreatureTeleported; import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSkillSee; +import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSocialActionSee; import com.l2jserver.gameserver.model.events.listeners.AbstractEventListener; import com.l2jserver.gameserver.model.events.returns.TerminateReturn; import com.l2jserver.gameserver.model.holders.InvulSkillHolder; @@ -6653,6 +6654,22 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe public void broadcastSocialAction(int id) { broadcastPacket(new SocialAction(getObjectId(), id)); + if (!isPlayer()) + { + return; + } + Collection objs = getKnownList().getKnownObjects().values(); + for (L2Object npc : objs) + { + if ((npc != null) && npc.isNpc()) + { + final L2Npc npcMob = (L2Npc) npc; + if ((npcMob.isInsideRadius(this, 150, true, true))) // 150 radius? + { + EventDispatcher.getInstance().notifyEventAsync(new OnNpcSocialActionSee(npcMob, getActingPlayer(), id), npcMob); + } + } + } } public Team getTeam() diff --git a/trunk/java/com/l2jserver/gameserver/model/events/AbstractScript.java b/trunk/java/com/l2jserver/gameserver/model/events/AbstractScript.java index b97544c86e..7a3daa16d3 100644 --- a/trunk/java/com/l2jserver/gameserver/model/events/AbstractScript.java +++ b/trunk/java/com/l2jserver/gameserver/model/events/AbstractScript.java @@ -91,6 +91,7 @@ import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcMoveNodeArr import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcMoveRouteFinished; import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSkillFinished; import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSkillSee; +import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSocialActionSee; import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSpawn; import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcTeleport; import com.l2jserver.gameserver.model.events.impl.character.npc.attackable.OnAttackableAggroRangeEnter; @@ -530,6 +531,19 @@ public abstract class AbstractScript implements INamable // --------------------------------------------------------------------------------------------------------------------------- + /** + * Provides instant callback operation when L2Npc sees skill from a player. + * @param callback + * @param npcIds + * @return + */ + protected final List setNpcSocialActionSeeId(Consumer callback, int... npcIds) + { + return registerConsumer(callback, EventType.ON_NPC_SOCIAL_ACTION_SEE, ListenerRegisterType.NPC, npcIds); + } + + // --------------------------------------------------------------------------------------------------------------------------- + /** * Provides instant callback operation when L2Npc casts skill on a player. * @param callback diff --git a/trunk/java/com/l2jserver/gameserver/model/events/EventType.java b/trunk/java/com/l2jserver/gameserver/model/events/EventType.java index 2ad48baf5c..36b12569ec 100644 --- a/trunk/java/com/l2jserver/gameserver/model/events/EventType.java +++ b/trunk/java/com/l2jserver/gameserver/model/events/EventType.java @@ -40,6 +40,7 @@ import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcMoveNodeArr import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcMoveRouteFinished; import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSkillFinished; import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSkillSee; +import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSocialActionSee; import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSpawn; import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcTeleport; import com.l2jserver.gameserver.model.events.impl.character.npc.attackable.OnAttackableAggroRangeEnter; @@ -167,6 +168,7 @@ public enum EventType ON_NPC_QUEST_START(null, void.class), ON_NPC_SKILL_FINISHED(OnNpcSkillFinished.class, void.class), ON_NPC_SKILL_SEE(OnNpcSkillSee.class, void.class), + ON_NPC_SOCIAL_ACTION_SEE(OnNpcSocialActionSee.class, void.class), ON_NPC_SPAWN(OnNpcSpawn.class, void.class), ON_NPC_TALK(null, void.class), ON_NPC_TELEPORT(OnNpcTeleport.class, void.class), diff --git a/trunk/java/com/l2jserver/gameserver/model/events/impl/character/npc/OnNpcSocialActionSee.java b/trunk/java/com/l2jserver/gameserver/model/events/impl/character/npc/OnNpcSocialActionSee.java new file mode 100644 index 0000000000..e12550d582 --- /dev/null +++ b/trunk/java/com/l2jserver/gameserver/model/events/impl/character/npc/OnNpcSocialActionSee.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2004-2015 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * L2J Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jserver.gameserver.model.events.impl.character.npc; + +import com.l2jserver.gameserver.model.actor.L2Npc; +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.events.EventType; +import com.l2jserver.gameserver.model.events.impl.IBaseEvent; + +/** + * @author Mobius + */ +public class OnNpcSocialActionSee implements IBaseEvent +{ + private final L2Npc _npc; + private final L2PcInstance _caster; + private final int _actionId; + + public OnNpcSocialActionSee(L2Npc npc, L2PcInstance caster, int actionId) + { + _npc = npc; + _caster = caster; + _actionId = actionId; + } + + public L2Npc getTarget() + { + return _npc; + } + + public L2PcInstance getCaster() + { + return _caster; + } + + public int getActionId() + { + return _actionId; + } + + @Override + public EventType getType() + { + return EventType.ON_NPC_SOCIAL_ACTION_SEE; + } +} diff --git a/trunk/java/com/l2jserver/gameserver/model/quest/Quest.java b/trunk/java/com/l2jserver/gameserver/model/quest/Quest.java index 0320f75be2..ad1a9dc4b3 100644 --- a/trunk/java/com/l2jserver/gameserver/model/quest/Quest.java +++ b/trunk/java/com/l2jserver/gameserver/model/quest/Quest.java @@ -760,6 +760,26 @@ public class Quest extends AbstractScript implements IIdentifiable showResult(caster, res); } + /** + * @param npc + * @param caster + * @param actionId + */ + public final void notifySocialActionSee(L2Npc npc, L2PcInstance caster, int actionId) + { + String res = null; + try + { + res = onSocialActionSee(npc, caster, actionId); + } + catch (Exception e) + { + showError(caster, e); + return; + } + showResult(caster, res); + } + /** * @param npc * @param caller @@ -1206,6 +1226,17 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } + /** + * @param npc the NPC that saw the social action + * @param caster the player who used the social action + * @param actionId the actual action id that was used + * @return + */ + public String onSocialActionSee(L2Npc npc, L2PcInstance caster, int actionId) + { + return null; + } + /** * This function is called whenever an NPC finishes casting a skill. * @param npc the NPC that casted the skill. @@ -2022,6 +2053,15 @@ public class Quest extends AbstractScript implements IIdentifiable setNpcSkillSeeId(event -> notifySkillSee(event.getTarget(), event.getCaster(), event.getSkill(), event.getTargets(), event.isSummon()), npcIds); } + /** + * Add this quest to the list of quests that the passed npc will respond to for social action see events. + * @param npcIds the IDs of the NPCs to register + */ + public void addSocialActionSeeId(int... npcIds) + { + setNpcSocialActionSeeId(event -> notifySocialActionSee(event.getTarget(), event.getCaster(), event.getActionId()), npcIds); + } + /** * @param npcIds the IDs of the NPCs to register */