OnNpcSocialActionSee.

This commit is contained in:
MobiusDev 2015-08-03 21:22:27 +00:00
parent 82318052e2
commit cb4955bafa
5 changed files with 135 additions and 0 deletions

View File

@ -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<L2Object> 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()

View File

@ -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<AbstractEventListener> setNpcSocialActionSeeId(Consumer<OnNpcSocialActionSee> 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

View File

@ -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),

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
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;
}
}

View File

@ -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
*/