Перейти к содержанию
Авторизация  
mrvampir

Нужна Помощ По Ядру

Рекомендуемые сообщения

 

 

package com.l2jfrozen.gameserver.ai.special;

 

import java.util.Collection;

 

import com.l2jfrozen.gameserver.ai.CtrlIntention;

import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;

import com.l2jfrozen.gameserver.model.L2Attackable;

import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;

import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;

import com.l2jfrozen.gameserver.model.actor.position.L2CharPosition;

import com.l2jfrozen.gameserver.model.quest.Quest;

import com.l2jfrozen.gameserver.model.spawn.L2Spawn;

 

/**

* Gordon AI

*

* @author TOFIZ

* @version $Revision: 1.1 $ $Date: 2008/08/21 $

*/

public class Gordon extends Quest implements Runnable

{

private static final int GORDON = 29095;

private static int _npcMoveX = 0;

private static int _npcMoveY = 0;

private static int _isWalkTo = 0;

private static int _npcBlock = 0;

private static int X = 0;

private static int Y = 0;

private static int Z = 0;

private static final int[][] WALKS =

{

{

141569, -45908, -2387

},

{

142494, -45456, -2397

},

{

142922, -44561, -2395

},

{

143672, -44130, -2398

},

{

144557, -43378, -2325

},

{

145839, -43267, -2301

},

{

147044, -43601, -2307

},

{

148140, -43206, -2303

},

{

148815, -43434, -2328

},

{

149862, -44151, -2558

},

{

151037, -44197, -2708

},

{

152555, -42756, -2836

},

{

154808, -39546, -3236

},

{

155333, -39962, -3272

},

{

156531, -41240, -3470

},

{

156863, -43232, -3707

},

{

156783, -44198, -3764

},

{

158169, -45163, -3541

},

{

158952, -45479, -3473

},

{

160039, -46514, -3634

},

{

160244, -47429, -3656

},

{

159155, -48109, -3665

},

{

159558, -51027, -3523

},

{

159396, -53362, -3244

},

{

160872, -56556, -2789

},

{

160857, -59072, -2613

},

{

160410, -59888, -2647

},

{

158770, -60173, -2673

},

{

156368, -59557, -2638

},

{

155188, -59868, -2642

},

{

154118, -60591, -2731

},

{

153571, -61567, -2821

},

{

153457, -62819, -2886

},

{

152939, -63778, -3003

},

{

151816, -64209, -3120

},

{

147655, -64826, -3433

},

{

145422, -64576, -3369

},

{

144097, -64320, -3404

},

{

140780, -61618, -3096

},

{

139688, -61450, -3062

},

{

138267, -61743, -3056

},

{

138613, -58491, -3465

},

{

138139, -57252, -3517

},

{

139555, -56044, -3310

},

{

139107, -54537, -3240

},

{

139279, -53781, -3091

},

{

139810, -52687, -2866

},

{

139657, -52041, -2793

},

{

139215, -51355, -2698

},

{

139334, -50514, -2594

},

{

139817, -49715, -2449

},

{

139824, -48976, -2263

},

{

140130, -47578, -2213

},

{

140483, -46339, -2382

},

{

141569, -45908, -2387

}

};

 

private static boolean _isAttacked = false;

private static boolean _isSpawned = false;

 

public Gordon(int id, String name, String descr)

{

super(id, name, descr);

 

addEventId(GORDON, Quest.QuestEventType.ON_KILL);

addEventId(GORDON, Quest.QuestEventType.ON_ATTACK);

addEventId(GORDON, Quest.QuestEventType.ON_SPAWN);

 

// wait 2 minutes after Start AI

startQuestTimer("check_ai", 120000, null, null,true);

 

_isSpawned = false;

_isAttacked = false;

_isWalkTo = 1;

_npcMoveX = 0;

_npcMoveY = 0;

_npcBlock = 0;

}

 

@Override

public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player)

{

X = WALKS[_isWalkTo - 1][0];

Y = WALKS[_isWalkTo - 1][1];

Z = WALKS[_isWalkTo - 1][2];

if(event.equalsIgnoreCase("time_isAttacked"))

{

_isAttacked = false;

if(npc.getNpcId() == GORDON)

{

npc.setWalking();

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(X, Y, Z, 0));

}

}

else if(event.equalsIgnoreCase("check_ai"))

{

cancelQuestTimer("check_ai", null, null);

if(!_isSpawned)

{

L2NpcInstance gordon_ai = findTemplate(GORDON);

if(gordon_ai != null)

{

_isSpawned = true;

startQuestTimer("Start", 1000, gordon_ai, null,true);

return super.onAdvEvent(event, npc, player);

}

}

}

else if(event.equalsIgnoreCase("Start"))

{

//startQuestTimer("Start", 1000, npc, null);

if(npc != null && _isSpawned)

{

// check if player have Cursed Weapon and in radius

if(npc.getNpcId() == GORDON)

{

Collection<L2PcInstance> chars = npc.getKnownList().getKnownPlayers().values();

if(chars != null && chars.size() > 0)

{

for(L2PcInstance pc : chars)

{

if(pc.isCursedWeaponEquipped() && pc.isInsideRadius(npc, 5000, false, false))

{

npc.setRunning();

((L2Attackable) npc).addDamageHate(pc, 0, 9999);

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, pc);

_isAttacked = true;

cancelQuestTimer("time_isAttacked", null, null);

startQuestTimer("time_isAttacked", 180000, npc, null);

return super.onAdvEvent(event, npc, player);

}

}

}

}

// end check

if(_isAttacked)

return super.onAdvEvent(event, npc, player);

 

if(npc.getNpcId() == GORDON && npc.getX() - 50 <= X && npc.getX() + 50 >= X && npc.getY() - 50 <= Y && npc.getY() + 50 >= Y)

{

_isWalkTo++;

if(_isWalkTo > 55)

{

_isWalkTo = 1;

}

X = WALKS[_isWalkTo - 1][0];

Y = WALKS[_isWalkTo - 1][1];

Z = WALKS[_isWalkTo - 1][2];

npc.setWalking();

//TODO: find better way to prevent teleporting to the home location

npc.getSpawn().setLocx(X);

npc.getSpawn().setLocy(Y);

npc.getSpawn().setLocz(Z);

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(X, Y, Z, 0));

}

// Test for unblock Npc

if(npc.getX() != _npcMoveX && npc.getY() != _npcMoveY)

{

_npcMoveX = npc.getX();

_npcMoveY = npc.getY();

_npcBlock = 0;

}

else if(npc.getNpcId() == GORDON)

{

_npcBlock++;

if(_npcBlock > 2)

{

npc.teleToLocation(X, Y, Z);

return super.onAdvEvent(event, npc, player);

}

if(_npcBlock > 0)

{

//TODO: find better way to prevent teleporting to the home location

npc.getSpawn().setLocx(X);

npc.getSpawn().setLocy(Y);

npc.getSpawn().setLocz(Z);

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(X, Y, Z, 0));

}

}

// End Test unblock Npc

}

}

return super.onAdvEvent(event, npc, player);

}

 

@Override

public String onSpawn(L2NpcInstance npc)

{

if(npc.getNpcId() == GORDON && _npcBlock == 0)

{

_isSpawned = true;

_isWalkTo = 1;

startQuestTimer("Start", 1000, npc, null);

}

return super.onSpawn(npc);

}

 

@Override

public String onAttack(L2NpcInstance npc, L2PcInstance player, int damage, boolean isPet)

{

if(npc.getNpcId() == GORDON)

{

_isAttacked = true;

cancelQuestTimer("time_isAttacked", null, null);

startQuestTimer("time_isAttacked", 180000, npc, null);

if(player != null)

{

npc.setRunning();

((L2Attackable) npc).addDamageHate(player, 0, 100);

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);

}

}

return super.onAttack(npc, player, damage, isPet);

}

 

@Override

public String onKill(L2NpcInstance npc, L2PcInstance killer, boolean isPet)

{

if(npc.getNpcId() == GORDON)

{

cancelQuestTimer("Start", null, null);

cancelQuestTimer("time_isAttacked", null, null);

_isSpawned = false;

}

return super.onKill(npc, killer, isPet);

}

 

public L2NpcInstance findTemplate(int npcId)

{

L2NpcInstance npc = null;

for(L2Spawn spawn : SpawnTable.getInstance().getSpawnTable().values())

{

if(spawn != null && spawn.getNpcid() == npcId)

{

npc = spawn.getLastSpawn();

break;

}

}

return npc;

}

 

@Override

public void run()

{}

}

 

 

 

Вот АИ гордона,как мну сюда добавить что б он говорил и были у него миньены?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Говорил хз!Миньенав сможешь в базе прикрутить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну тут другой прикол,я хочу сделать 3х полиморфов которые ходят и флудят и могут атаковать пкашников

загвоздка в том что если через БД делаю миньенов,ни с другой текстурой появляются,не с текстурой игрока

мну главное добавить сюда что б они были с миньенами

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну тут другой прикол,я хочу сделать 3х полиморфов которые ходят и флудят и могут атаковать пкашников

загвоздка в том что если через БД делаю миньенов,ни с другой текстурой появляются,не с текстурой игрока

мну главное добавить сюда что б они были с миньенами

АА!Так глубоко не шарю))

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

АА!Так глубоко не шарю))

спасиб что хоть написал

а то как всегда знатоки форума помогать нехотят...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на правах апа,апну

подскажите какие нид добавить строки в АИ гордона что б он агрился на ПКи агромобов,ну как и гварды 1 словом

ну и жилательно как добавить несколько фраз))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а АИ гвардов смотрел городских? Как бы может слить АИ гордона + АИ гвардов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

угу,смотрел

у мя не получается слить(((

если б у мя все получилось бы,я б не просил помощи

вот АИ гвардов

 

 

package com.l2jfrozen.gameserver.model.actor.instance;

 

import java.util.logging.Logger;

 

import com.l2jfrozen.Config;

import com.l2jfrozen.gameserver.ai.CtrlIntention;

import com.l2jfrozen.gameserver.ai.L2AttackableAI;

import com.l2jfrozen.gameserver.model.L2Attackable;

import com.l2jfrozen.gameserver.model.L2Character;

import com.l2jfrozen.gameserver.model.L2World;

import com.l2jfrozen.gameserver.model.L2WorldRegion;

import com.l2jfrozen.gameserver.model.actor.knownlist.GuardKnownList;

import com.l2jfrozen.gameserver.model.actor.position.L2CharPosition;

import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;

import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected;

import com.l2jfrozen.gameserver.network.serverpackets.SocialAction;

import com.l2jfrozen.gameserver.network.serverpackets.ValidateLocation;

import com.l2jfrozen.gameserver.templates.L2NpcTemplate;

import com.l2jfrozen.gameserver.thread.ThreadPoolManager;

import com.l2jfrozen.util.random.Rnd;

 

/**

* This class manages all Guards in the world. It inherits all methods from L2Attackable and adds some more such as

* tracking PK and aggressive L2MonsterInstance.<BR>

* <BR>

*

* @version $Revision: 1.11.2.1.2.7 $ $Date: 2005/04/06 16:13:40 $

*/

public final class L2GuardInstance extends L2Attackable

{

 

/** The _log. */

private static Logger _log = Logger.getLogger(L2GuardInstance.class.getName());

 

/** The _home x. */

private int _homeX;

 

/** The _home y. */

private int _homeY;

 

/** The _home z. */

private int _homeZ;

 

/** The Constant RETURN_INTERVAL. */

private static final int RETURN_INTERVAL = 60000;

 

/**

* The Class ReturnTask.

*/

public class ReturnTask implements Runnable

{

 

/* (non-Javadoc)

* @see java.lang.Runnable#run()

*/

@Override

public void run()

{

if(getAI().getIntention() == CtrlIntention.AI_INTENTION_IDLE)

{

returnHome();

}

}

}

 

/**

* Constructor of L2GuardInstance (use L2Character and L2NpcInstance constructor).<BR>

* <BR>

* <B><U> Actions</U> :</B><BR>

* <BR>

* <li>Call the L2Character constructor to set the _template of the L2GuardInstance (copy skills from template to

* object and link _calculators to NPC_STD_CALCULATOR)</li> <li>Set the name of the L2GuardInstance</li> <li>Create

* a RandomAnimation Task that will be launched after the calculated delay if the server allow it</li><BR>

* <BR>

*

* @param objectId Identifier of the object to initialized

* @param template the template

*/

public L2GuardInstance(int objectId, L2NpcTemplate template)

{

super(objectId, template);

getKnownList(); // init knownlist

 

ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new ReturnTask(), RETURN_INTERVAL, RETURN_INTERVAL + Rnd.nextInt(60000));

}

 

/* (non-Javadoc)

* @see com.l2jfrozen.gameserver.model.L2Attackable#getKnownList()

*/

@Override

public final GuardKnownList getKnownList()

{

if(super.getKnownList() == null || !(super.getKnownList() instanceof GuardKnownList))

{

setKnownList(new GuardKnownList(this));

}

return (GuardKnownList) super.getKnownList();

}

 

/**

* Return True if the attacker is a L2MonsterInstance.<BR>

* <BR>

*

* @param attacker the attacker

* @return true, if is auto attackable

*/

@Override

public boolean isAutoAttackable(L2Character attacker)

{

return attacker instanceof L2MonsterInstance;

}

 

/**

* Set home location of the L2GuardInstance.<BR>

* <BR>

* <B><U> Concept</U> :</B><BR>

* <BR>

* Guard will always try to return to this location after it has killed all PK's in range

*/

public void getHomeLocation()

{

_homeX = getX();

_homeY = getY();

_homeZ = getZ();

 

if(Config.DEBUG)

{

_log.finer(getObjectId() + ": Home location set to" + " X:" + _homeX + " Y:" + _homeY + " Z:" + _homeZ);

}

}

 

/**

* Gets the home x.

*

* @return the home x

*/

public int getHomeX()

{

return _homeX;

}

 

/**

* Notify the L2GuardInstance to return to its home location (AI_INTENTION_MOVE_TO) and clear its _aggroList.<BR>

* <BR>

*/

public void returnHome()

{

if(!isInsideRadius(_homeX, _homeY, 150, false))

{

if(Config.DEBUG)

{

_log.fine(getObjectId() + ": moving hometo" + " X:" + _homeX + " Y:" + _homeY + " Z:" + _homeZ);

}

 

clearAggroList();

 

getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(_homeX, _homeY, _homeZ, 0));

}

}

 

/**

* Set the home location of its L2GuardInstance.<BR>

* <BR>

*/

@Override

public void onSpawn()

{

super.onSpawn();

_homeX = getX();

_homeY = getY();

_homeZ = getZ();

 

if(Config.DEBUG)

{

_log.finer(getObjectId() + ": Home location set to" + " X:" + _homeX + " Y:" + _homeY + " Z:" + _homeZ);

}

 

// check the region where this mob is, do not activate the AI if region is inactive.

L2WorldRegion region = L2World.getInstance().getRegion(getX(), getY());

if(region != null && !region.isActive())

{

((L2AttackableAI) getAI()).stopAITask();

}

region = null;

}

 

/**

* Return the pathfile of the selected HTML file in function of the L2GuardInstance Identifier and of the page

* number.<BR>

* <BR>

* <B><U> Format of the pathfile </U> :</B><BR>

* <BR>

* <li>if page number = 0 : <B>data/html/guard/12006.htm</B> (npcId-page number)</li> <li>if page number > 0 :

* <B>data/html/guard/12006-1.htm</B> (npcId-page number)</li><BR>

* <BR>

*

* @param npcId The Identifier of the L2NpcInstance whose text must be display

* @param val The number of the page to display

* @return the html path

*/

@Override

public String getHtmlPath(int npcId, int val)

{

String pom = "";

if(val == 0)

{

pom = "" + npcId;

}

else

{

pom = npcId + "-" + val;

}

return "data/html/guard/" + pom + ".htm";

}

 

/**

* Manage actions when a player click on the L2GuardInstance.<BR>

* <BR>

* <B><U> Actions on first click on the L2GuardInstance (Select it)</U> :</B><BR>

* <BR>

* <li>Set the L2GuardInstance as target of the L2PcInstance player (if necessary)</li> <li>Send a Server->Client

* packet MyTargetSelected to the L2PcInstance player (display the select window)</li> <li>Set the L2PcInstance

* Intention to AI_INTENTION_IDLE</li> <li>Send a Server->Client packet ValidateLocation to correct the

* L2GuardInstance position and heading on the client</li><BR>

* <BR>

* <B><U> Actions on second click on the L2GuardInstance (Attack it/Interact with it)</U> :</B><BR>

* <BR>

* <li>If L2PcInstance is in the _aggroList of the L2GuardInstance, set the L2PcInstance Intention to

* AI_INTENTION_ATTACK</li> <li>If L2PcInstance is NOT in the _aggroList of the L2GuardInstance, set the

* L2PcInstance Intention to AI_INTENTION_INTERACT (after a distance verification) and show message</li><BR>

* <BR>

* <B><U> Example of use </U> :</B><BR>

* <BR>

* <li>Client packet : Action, AttackRequest</li><BR>

* <BR>

*

* @param player The L2PcInstance that start an action on the L2GuardInstance

*/

@Override

public void onAction(L2PcInstance player)

{

if(!canTarget(player))

return;

 

// Check if the L2PcInstance already target the L2GuardInstance

if(getObjectId() != player.getTargetId())

{

if(Config.DEBUG)

{

_log.fine(player.getObjectId() + ": Targetted guard " + getObjectId());

}

 

// Set the target of the L2PcInstance player

player.setTarget(this);

 

// Send a Server->Client packet MyTargetSelected to the L2PcInstance player

// The color to display in the select window is White

MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);

player.sendPacket(my);

my = null;

 

// Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client

player.sendPacket(new ValidateLocation(this));

}

else

{

// Check if the L2PcInstance is in the _aggroList of the L2GuardInstance

if(containsTarget(player))

{

if(Config.DEBUG)

{

_log.fine(player.getObjectId() + ": Attacked guard " + getObjectId());

}

 

// Set the L2PcInstance Intention to AI_INTENTION_ATTACK

player.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, this);

}

else

{

// Calculate the distance between the L2PcInstance and the L2NpcInstance

if(!canInteract(player))

{

// Set the L2PcInstance Intention to AI_INTENTION_INTERACT

player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);

}

else

{

// Send a Server->Client packet SocialAction to the all L2PcInstance on the _knownPlayer of the L2NpcInstance

// to display a social action of the L2GuardInstance on their client

SocialAction sa = new SocialAction(getObjectId(), Rnd.nextInt(8));

broadcastPacket(sa);

sa = null;

 

// Open a chat window on client with the text of the L2GuardInstance

showChatWindow(player, 0);

}

}

}

// Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet

player.sendPacket(ActionFailed.STATIC_PACKET);

}

}

 

Изменено пользователем mrvampir

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В упор не увидел намека хоть какого то, либо аналога того что плееш пк

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В упор не увидел намека хоть какого то, либо аналога того что плееш пк

 

=))

разобрался я как сделать,я прост добавил к тому что гордон агрится на людей с демоническим оружием

теперь другая загвоздка,он не бьет мобов агров,как это сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на правах апа))

ктонить поможет сделать что б моб бил агромоба?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по идее снова в то же условие что то нподобии

L2Character attacker
attacker instanceof L2MonsterInstance

Изменено пользователем BrainEater

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот смотри как я сделал

 

package com.l2jfrozen.gameserver.ai.special;

 

import java.util.Collection;

 

import com.l2jfrozen.gameserver.ai.CtrlIntention;

import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;

import com.l2jfrozen.gameserver.model.L2Attackable;

import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;

import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;

import com.l2jfrozen.gameserver.model.actor.position.L2CharPosition;

import com.l2jfrozen.gameserver.model.quest.Quest;

import com.l2jfrozen.gameserver.model.spawn.L2Spawn;

 

/**

* killers AI

*

* @author vampir

*/

 

 

public class killers extends Quest implements Runnable

{

private static final int GORDON = 666666;

private static int _npcMoveX = 0;

private static int _npcMoveY = 0;

private static int _isWalkTo = 0;

private static int _npcBlock = 0;

private static int X = 0;

private static int Y = 0;

private static int Z = 0;

private static final int[][] WALKS =

{

{

141569, -45908, -2387

},

{

142494, -45456, -2397

},

{

142922, -44561, -2395

},

{

143672, -44130, -2398

},

{

144557, -43378, -2325

},

{

145839, -43267, -2301

},

{

147044, -43601, -2307

},

{

148140, -43206, -2303

},

{

148815, -43434, -2328

},

{

149862, -44151, -2558

},

{

151037, -44197, -2708

},

{

152555, -42756, -2836

},

{

154808, -39546, -3236

},

{

155333, -39962, -3272

},

{

156531, -41240, -3470

},

{

156863, -43232, -3707

},

{

156783, -44198, -3764

},

{

158169, -45163, -3541

},

{

158952, -45479, -3473

},

{

160039, -46514, -3634

},

{

160244, -47429, -3656

},

{

159155, -48109, -3665

},

{

159558, -51027, -3523

},

{

159396, -53362, -3244

},

{

160872, -56556, -2789

},

{

160857, -59072, -2613

},

{

160410, -59888, -2647

},

{

158770, -60173, -2673

},

{

156368, -59557, -2638

},

{

155188, -59868, -2642

},

{

154118, -60591, -2731

},

{

153571, -61567, -2821

},

{

153457, -62819, -2886

},

{

152939, -63778, -3003

},

{

151816, -64209, -3120

},

{

147655, -64826, -3433

},

{

145422, -64576, -3369

},

{

144097, -64320, -3404

},

{

140780, -61618, -3096

},

{

139688, -61450, -3062

},

{

138267, -61743, -3056

},

{

138613, -58491, -3465

},

{

138139, -57252, -3517

},

{

139555, -56044, -3310

},

{

139107, -54537, -3240

},

{

139279, -53781, -3091

},

{

139810, -52687, -2866

},

{

139657, -52041, -2793

},

{

139215, -51355, -2698

},

{

139334, -50514, -2594

},

{

139817, -49715, -2449

},

{

139824, -48976, -2263

},

{

140130, -47578, -2213

},

{

140483, -46339, -2382

},

{

141569, -45908, -2387

}

};

 

private static boolean _isAttacked = false;

private static boolean _isSpawned = false;

 

public killers(int id, String name, String descr)

{

super(id, name, descr);

 

addEventId(GORDON, Quest.QuestEventType.ON_KILL);

addEventId(GORDON, Quest.QuestEventType.ON_ATTACK);

addEventId(GORDON, Quest.QuestEventType.ON_SPAWN);

 

// wait 2 minutes after Start AI

startQuestTimer("check_ai", 120, null, null,true);

 

_isSpawned = false;

_isAttacked = false;

_isWalkTo = 1;

_npcMoveX = 0;

_npcMoveY = 0;

_npcBlock = 0;

}

 

@Override

public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player)

{

X = WALKS[_isWalkTo - 1][0];

Y = WALKS[_isWalkTo - 1][1];

Z = WALKS[_isWalkTo - 1][2];

if(event.equalsIgnoreCase("time_isAttacked"))

{

_isAttacked = false;

if(npc.getNpcId() == GORDON)

{

npc.setWalking();

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(X, Y, Z, 0));

}

}

else if(event.equalsIgnoreCase("check_ai"))

{

cancelQuestTimer("check_ai", null, null);

if(!_isSpawned)

{

L2NpcInstance gordon_ai = findTemplate(GORDON);

if(gordon_ai != null)

{

_isSpawned = true;

startQuestTimer("Start", 1000, gordon_ai, null,true);

return super.onAdvEvent(event, npc, player);

}

}

}

else if(event.equalsIgnoreCase("Start"))

{

//startQuestTimer("Start", 1000, npc, null);

if(npc != null && _isSpawned)

{

// check if player have Cursed Weapon and in radius

if(npc.getNpcId() == GORDON)

{

Collection chars = npc.getKnownList().getKnownPlayers().values();

if(chars != null && chars.size() > 0)

{

for(L2PcInstance pc : chars)

{

if(pc.isCursedWeaponEquipped() || pc.getKarma() > 1 && pc.isInsideRadius(npc, 5000, false, false))

{

npc.setRunning();

((L2Attackable) npc).addDamageHate(pc, 0, 9999);

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, pc);

_isAttacked = true;

cancelQuestTimer("time_isAttacked", null, null);

startQuestTimer("time_isAttacked", 180000, npc, null);

return super.onAdvEvent(event, npc, player);

}

}

}

}

// end check

if(_isAttacked)

return super.onAdvEvent(event, npc, player);

 

if(npc.getNpcId() == GORDON && npc.getX() - 50 <= X && npc.getX() + 50 >= X && npc.getY() - 50 <= Y && npc.getY() + 50 >= Y)

{

_isWalkTo++;

if(_isWalkTo > 55)

{

_isWalkTo = 1;

}

X = WALKS[_isWalkTo - 1][0];

Y = WALKS[_isWalkTo - 1][1];

Z = WALKS[_isWalkTo - 1][2];

npc.setWalking();

//TODO: find better way to prevent teleporting to the home location

npc.getSpawn().setLocx(X);

npc.getSpawn().setLocy(Y);

npc.getSpawn().setLocz(Z);

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(X, Y, Z, 0));

}

// Test for unblock Npc

if(npc.getX() != _npcMoveX && npc.getY() != _npcMoveY)

{

_npcMoveX = npc.getX();

_npcMoveY = npc.getY();

_npcBlock = 0;

}

else if(npc.getNpcId() == GORDON)

{

_npcBlock++;

if(_npcBlock > 2)

{

npc.teleToLocation(X, Y, Z);

return super.onAdvEvent(event, npc, player);

}

if(_npcBlock > 0)

{

//TODO: find better way to prevent teleporting to the home location

npc.getSpawn().setLocx(X);

npc.getSpawn().setLocy(Y);

npc.getSpawn().setLocz(Z);

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(X, Y, Z, 0));

}

}

// End Test unblock Npc

}

}

return super.onAdvEvent(event, npc, player);

}

 

@Override

public String onSpawn(L2NpcInstance npc)

{

if(npc.getNpcId() == GORDON && _npcBlock == 0)

{

_isSpawned = true;

_isWalkTo = 1;

startQuestTimer("Start", 1000, npc, null);

}

return super.onSpawn(npc);

}

 

@Override

public String onAttack(L2NpcInstance npc, L2PcInstance player, int damage, boolean isPet)

{

if(npc.getNpcId() == GORDON)

{

_isAttacked = true;

cancelQuestTimer("time_isAttacked", null, null);

startQuestTimer("time_isAttacked", 990000, npc, null);

if(player != null)

{

npc.setRunning();

((L2Attackable) npc).addDamageHate(player, 0, 100);

npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);

}

}

return super.onAttack(npc, player, damage, isPet);

}

 

@Override

public String onKill(L2NpcInstance npc, L2PcInstance killer, boolean isPet)

{

if(npc.getNpcId() == GORDON)

{

cancelQuestTimer("Start", null, null);

cancelQuestTimer("time_isAttacked", null, null);

_isSpawned = false;

}

return super.onKill(npc, killer, isPet);

}

 

 

public L2NpcInstance findTemplate(int npcId)

{

L2NpcInstance npc = null;

for(L2Spawn spawn : SpawnTable.getInstance().getSpawnTable().values())

{

if(spawn != null && spawn.getNpcid() == npcId)

{

npc = spawn.getLastSpawn();

break;

}

}

return npc;

}

 

@Override

public void run()

{}

}

 

 

в эту строку добавил

if(pc.isCursedWeaponEquipped() || pc.getKarma() > 1 && pc.isInsideRadius(npc, 5000, false, false))

 

что нид еще вписать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тут ты добавил проверку на ПК ли персонаж. А я так понимаю ты еще хочеш чтоб он и мобов бил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тут ты добавил проверку на ПК ли персонаж. А я так понимаю ты еще хочеш чтоб он и мобов бил?

Правильн,хочу что б мобов агров лупил))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...