Fixed guards not moving.
This commit is contained in:
parent
b201ce15e3
commit
5ab60b4287
74
L2J_Mobius_Classic/dist/game/data/scripts/ai/others/RandomWalkingGuards.java
vendored
Normal file
74
L2J_Mobius_Classic/dist/game/data/scripts/ai/others/RandomWalkingGuards.java
vendored
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the L2J Mobius project.
|
||||||
|
*
|
||||||
|
* This program 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.
|
||||||
|
*
|
||||||
|
* This program 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 ai.others;
|
||||||
|
|
||||||
|
import com.l2jmobius.Config;
|
||||||
|
import com.l2jmobius.gameserver.geodata.GeoData;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
|
import com.l2jmobius.gameserver.util.Util;
|
||||||
|
|
||||||
|
import ai.AbstractNpcAI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Mobius
|
||||||
|
*/
|
||||||
|
public class RandomWalkingGuards extends AbstractNpcAI
|
||||||
|
{
|
||||||
|
private static final int[] GUARDS =
|
||||||
|
{
|
||||||
|
31032, // talking island
|
||||||
|
31033, // elf village
|
||||||
|
31034, // dark elf village
|
||||||
|
31036, // orc village
|
||||||
|
31035, // dwarf village
|
||||||
|
};
|
||||||
|
// Others
|
||||||
|
private static final int MIN_WALK_DELAY = 15000;
|
||||||
|
private static final int MAX_WALK_DELAY = 45000;
|
||||||
|
|
||||||
|
private RandomWalkingGuards()
|
||||||
|
{
|
||||||
|
addSpawnId(GUARDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||||
|
{
|
||||||
|
if (event.equals("RANDOM_WALK") && (npc != null))
|
||||||
|
{
|
||||||
|
if (!npc.isInCombat())
|
||||||
|
{
|
||||||
|
addMoveToDesire(npc, GeoData.getInstance().moveCheck(npc.getLocation(), Util.getRandomPosition(npc.getSpawn().getLocation(), 0, Config.MAX_DRIFT_RANGE), npc.getInstanceWorld()), 23);
|
||||||
|
}
|
||||||
|
startQuestTimer("RANDOM_WALK", getRandom(MIN_WALK_DELAY, MAX_WALK_DELAY), npc, null);
|
||||||
|
}
|
||||||
|
return super.onAdvEvent(event, npc, player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String onSpawn(L2Npc npc)
|
||||||
|
{
|
||||||
|
startQuestTimer("RANDOM_WALK", getRandom(MIN_WALK_DELAY, MAX_WALK_DELAY), npc, null);
|
||||||
|
return super.onSpawn(npc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
new RandomWalkingGuards();
|
||||||
|
}
|
||||||
|
}
|
@ -1097,7 +1097,7 @@
|
|||||||
</speed>
|
</speed>
|
||||||
<abnormalResist physical="10" magical="10" />
|
<abnormalResist physical="10" magical="10" />
|
||||||
</stats>
|
</stats>
|
||||||
<status attackable="false" undying="false" talkable="false" />
|
<status attackable="false" undying="false" talkable="false" randomWalk="true" />
|
||||||
<skill_list>
|
<skill_list>
|
||||||
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
||||||
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
||||||
@ -1137,7 +1137,7 @@
|
|||||||
</speed>
|
</speed>
|
||||||
<abnormalResist physical="10" magical="10" />
|
<abnormalResist physical="10" magical="10" />
|
||||||
</stats>
|
</stats>
|
||||||
<status attackable="false" undying="false" talkable="false" />
|
<status attackable="false" undying="false" talkable="false" randomWalk="true" />
|
||||||
<skill_list>
|
<skill_list>
|
||||||
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
||||||
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
||||||
@ -1177,7 +1177,7 @@
|
|||||||
</speed>
|
</speed>
|
||||||
<abnormalResist physical="10" magical="10" />
|
<abnormalResist physical="10" magical="10" />
|
||||||
</stats>
|
</stats>
|
||||||
<status attackable="false" undying="false" talkable="false" />
|
<status attackable="false" undying="false" talkable="false" randomWalk="true" />
|
||||||
<skill_list>
|
<skill_list>
|
||||||
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
||||||
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
||||||
@ -1217,7 +1217,7 @@
|
|||||||
</speed>
|
</speed>
|
||||||
<abnormalResist physical="10" magical="10" />
|
<abnormalResist physical="10" magical="10" />
|
||||||
</stats>
|
</stats>
|
||||||
<status attackable="false" undying="false" talkable="false" />
|
<status attackable="false" undying="false" talkable="false" randomWalk="true" />
|
||||||
<skill_list>
|
<skill_list>
|
||||||
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
||||||
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
||||||
@ -1257,7 +1257,7 @@
|
|||||||
</speed>
|
</speed>
|
||||||
<abnormalResist physical="10" magical="10" />
|
<abnormalResist physical="10" magical="10" />
|
||||||
</stats>
|
</stats>
|
||||||
<status attackable="false" undying="false" talkable="false" />
|
<status attackable="false" undying="false" talkable="false" randomWalk="true" />
|
||||||
<skill_list>
|
<skill_list>
|
||||||
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
||||||
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
<skill id="4408" level="1" /> <!-- HP Increase (1x) -->
|
||||||
|
@ -158,6 +158,22 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (me instanceof L2GuardInstance)
|
||||||
|
{
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(me, L2GuardInstance.class, 500, guard ->
|
||||||
|
{
|
||||||
|
if (guard.isAttackingNow() && (guard.getTarget() == player))
|
||||||
|
{
|
||||||
|
me.getAI().startFollow(player);
|
||||||
|
me.addDamageHate(player, 0, 10);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (player.getReputation() < 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (me.isMonster())
|
else if (me.isMonster())
|
||||||
{
|
{
|
||||||
@ -334,7 +350,6 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
_globalAggro--;
|
_globalAggro--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add all autoAttackable L2Character in L2Attackable Aggro Range to its _aggroList with 0 damage and 1 hate
|
// Add all autoAttackable L2Character in L2Attackable Aggro Range to its _aggroList with 0 damage and 1 hate
|
||||||
// A L2Attackable isn't aggressive during 10s after its spawn because _globalAggro is set to -10
|
// A L2Attackable isn't aggressive during 10s after its spawn because _globalAggro is set to -10
|
||||||
if (_globalAggro >= 0)
|
if (_globalAggro >= 0)
|
||||||
@ -354,15 +369,22 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Get the hate level of the L2Attackable against this L2Character target contained in _aggroList
|
// Get the hate level of the L2Attackable against this L2Character target contained in _aggroList
|
||||||
final int hating = npc.getHating(t);
|
final int hating = npc.getHating(t);
|
||||||
|
|
||||||
// Add the attacker to the L2Attackable _aggroList with 0 damage and 1 hate
|
// Add the attacker to the L2Attackable _aggroList with 0 damage and 1 hate
|
||||||
if (hating == 0)
|
if (hating == 0)
|
||||||
{
|
{
|
||||||
npc.addDamageHate(t, 0, 1);
|
npc.addDamageHate(t, 0, 1);
|
||||||
|
}
|
||||||
|
if (npc instanceof L2GuardInstance)
|
||||||
|
{
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(npc, L2GuardInstance.class, 500, guard ->
|
||||||
|
{
|
||||||
|
guard.addDamageHate(t, 0, 10);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -422,7 +444,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if the actor is a L2GuardInstance
|
// Check if the actor is a L2GuardInstance
|
||||||
if ((npc instanceof L2GuardInstance) && !npc.isWalker())
|
if ((npc instanceof L2GuardInstance) && !npc.isWalker() && !npc.isRandomWalkingEnabled())
|
||||||
{
|
{
|
||||||
// Order to the L2GuardInstance to return to its home location because there's no target to attack
|
// Order to the L2GuardInstance to return to its home location because there's no target to attack
|
||||||
npc.returnHome();
|
npc.returnHome();
|
||||||
|
@ -259,7 +259,7 @@ public class L2CharacterAI extends AbstractAI
|
|||||||
// Set the AI attack target (change target)
|
// Set the AI attack target (change target)
|
||||||
setTarget(target);
|
setTarget(target);
|
||||||
|
|
||||||
stopFollow();
|
// stopFollow();
|
||||||
|
|
||||||
// Launch the Think Event
|
// Launch the Think Event
|
||||||
notifyEvent(CtrlEvent.EVT_THINK, null);
|
notifyEvent(CtrlEvent.EVT_THINK, null);
|
||||||
@ -278,7 +278,7 @@ public class L2CharacterAI extends AbstractAI
|
|||||||
// Set the AI attack target
|
// Set the AI attack target
|
||||||
setTarget(target);
|
setTarget(target);
|
||||||
|
|
||||||
stopFollow();
|
// stopFollow();
|
||||||
|
|
||||||
// Launch the Think Event
|
// Launch the Think Event
|
||||||
notifyEvent(CtrlEvent.EVT_THINK, null);
|
notifyEvent(CtrlEvent.EVT_THINK, null);
|
||||||
|
@ -1386,13 +1386,13 @@ public class L2Attackable extends L2Npc
|
|||||||
setWalking();
|
setWalking();
|
||||||
|
|
||||||
// check the region where this mob is, do not activate the AI if region is inactive.
|
// check the region where this mob is, do not activate the AI if region is inactive.
|
||||||
if (!isInActiveRegion())
|
// if (!isInActiveRegion())
|
||||||
{
|
// {
|
||||||
if (hasAI())
|
// if (hasAI())
|
||||||
{
|
// {
|
||||||
getAI().stopAITask();
|
// getAI().stopAITask();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -24,12 +24,14 @@ import com.l2jmobius.gameserver.ai.L2SpecialSiegeGuardAI;
|
|||||||
import com.l2jmobius.gameserver.enums.InstanceType;
|
import com.l2jmobius.gameserver.enums.InstanceType;
|
||||||
import com.l2jmobius.gameserver.instancemanager.CastleManager;
|
import com.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||||
|
import com.l2jmobius.gameserver.model.L2World;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Playable;
|
import com.l2jmobius.gameserver.model.actor.L2Playable;
|
||||||
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
||||||
import com.l2jmobius.gameserver.model.entity.Castle;
|
import com.l2jmobius.gameserver.model.entity.Castle;
|
||||||
import com.l2jmobius.gameserver.model.entity.Fort;
|
import com.l2jmobius.gameserver.model.entity.Fort;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||||
|
|
||||||
public class L2DefenderInstance extends L2Attackable
|
public class L2DefenderInstance extends L2Attackable
|
||||||
@ -53,6 +55,16 @@ public class L2DefenderInstance extends L2Attackable
|
|||||||
return new L2SpecialSiegeGuardAI(this);
|
return new L2SpecialSiegeGuardAI(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addDamage(L2Character attacker, int damage, Skill skill)
|
||||||
|
{
|
||||||
|
super.addDamage(attacker, damage, skill);
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(this, L2DefenderInstance.class, 500, defender ->
|
||||||
|
{
|
||||||
|
defender.addDamageHate(attacker, 0, 10);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return True if a siege is in progress and the L2Character attacker isn't a Defender.
|
* Return True if a siege is in progress and the L2Character attacker isn't a Defender.
|
||||||
* @param attacker The L2Character that the L2SiegeGuardInstance try to attack
|
* @param attacker The L2Character that the L2SiegeGuardInstance try to attack
|
||||||
|
@ -23,13 +23,13 @@ import com.l2jmobius.commons.util.Rnd;
|
|||||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import com.l2jmobius.gameserver.enums.InstanceType;
|
import com.l2jmobius.gameserver.enums.InstanceType;
|
||||||
import com.l2jmobius.gameserver.model.L2World;
|
import com.l2jmobius.gameserver.model.L2World;
|
||||||
import com.l2jmobius.gameserver.model.L2WorldRegion;
|
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
||||||
import com.l2jmobius.gameserver.model.events.EventDispatcher;
|
import com.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||||
import com.l2jmobius.gameserver.model.events.EventType;
|
import com.l2jmobius.gameserver.model.events.EventType;
|
||||||
import com.l2jmobius.gameserver.model.events.impl.character.npc.OnNpcFirstTalk;
|
import com.l2jmobius.gameserver.model.events.impl.character.npc.OnNpcFirstTalk;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
||||||
|
|
||||||
@ -66,21 +66,34 @@ public class L2GuardInstance extends L2Attackable
|
|||||||
return super.isAutoAttackable(attacker);
|
return super.isAutoAttackable(attacker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addDamage(L2Character attacker, int damage, Skill skill)
|
||||||
|
{
|
||||||
|
super.addDamage(attacker, damage, skill);
|
||||||
|
getAI().startFollow(attacker);
|
||||||
|
addDamageHate(attacker, 0, 10);
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(this, L2GuardInstance.class, 500, guard ->
|
||||||
|
{
|
||||||
|
guard.getAI().startFollow(attacker);
|
||||||
|
guard.addDamageHate(attacker, 0, 10);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the home location of its L2GuardInstance.
|
* Set the home location of its L2GuardInstance.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onSpawn()
|
public void onSpawn()
|
||||||
{
|
{
|
||||||
setRandomWalking(false);
|
|
||||||
super.onSpawn();
|
super.onSpawn();
|
||||||
|
setRandomWalking(getTemplate().isRandomWalkEnabled());
|
||||||
|
getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
|
||||||
// check the region where this mob is, do not activate the AI if region is inactive.
|
// check the region where this mob is, do not activate the AI if region is inactive.
|
||||||
final L2WorldRegion region = L2World.getInstance().getRegion(this);
|
// final L2WorldRegion region = L2World.getInstance().getRegion(this);
|
||||||
if ((region != null) && (!region.isActive()))
|
// if ((region != null) && (!region.isActive()))
|
||||||
{
|
// {
|
||||||
getAI().stopAITask();
|
// getAI().stopAITask();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -147,7 +147,7 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|||||||
_talkable = set.getBoolean("talkable", true);
|
_talkable = set.getBoolean("talkable", true);
|
||||||
_undying = set.getBoolean("undying", true);
|
_undying = set.getBoolean("undying", true);
|
||||||
_showName = set.getBoolean("showName", true);
|
_showName = set.getBoolean("showName", true);
|
||||||
_randomWalk = set.getBoolean("randomWalk", true);
|
_randomWalk = set.getBoolean("randomWalk", !_type.equals("L2Guard"));
|
||||||
_randomAnimation = set.getBoolean("randomAnimation", true);
|
_randomAnimation = set.getBoolean("randomAnimation", true);
|
||||||
_flying = set.getBoolean("flying", false);
|
_flying = set.getBoolean("flying", false);
|
||||||
_canMove = set.getBoolean("canMove", true);
|
_canMove = set.getBoolean("canMove", true);
|
||||||
|
@ -158,6 +158,22 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (me instanceof L2GuardInstance)
|
||||||
|
{
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(me, L2GuardInstance.class, 500, guard ->
|
||||||
|
{
|
||||||
|
if (guard.isAttackingNow() && (guard.getTarget() == player))
|
||||||
|
{
|
||||||
|
me.getAI().startFollow(player);
|
||||||
|
me.addDamageHate(player, 0, 10);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (player.getReputation() < 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (me.isMonster())
|
else if (me.isMonster())
|
||||||
{
|
{
|
||||||
@ -334,7 +350,6 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
_globalAggro--;
|
_globalAggro--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add all autoAttackable L2Character in L2Attackable Aggro Range to its _aggroList with 0 damage and 1 hate
|
// Add all autoAttackable L2Character in L2Attackable Aggro Range to its _aggroList with 0 damage and 1 hate
|
||||||
// A L2Attackable isn't aggressive during 10s after its spawn because _globalAggro is set to -10
|
// A L2Attackable isn't aggressive during 10s after its spawn because _globalAggro is set to -10
|
||||||
if (_globalAggro >= 0)
|
if (_globalAggro >= 0)
|
||||||
@ -354,15 +369,22 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Get the hate level of the L2Attackable against this L2Character target contained in _aggroList
|
// Get the hate level of the L2Attackable against this L2Character target contained in _aggroList
|
||||||
final int hating = npc.getHating(t);
|
final int hating = npc.getHating(t);
|
||||||
|
|
||||||
// Add the attacker to the L2Attackable _aggroList with 0 damage and 1 hate
|
// Add the attacker to the L2Attackable _aggroList with 0 damage and 1 hate
|
||||||
if (hating == 0)
|
if (hating == 0)
|
||||||
{
|
{
|
||||||
npc.addDamageHate(t, 0, 1);
|
npc.addDamageHate(t, 0, 1);
|
||||||
|
}
|
||||||
|
if (npc instanceof L2GuardInstance)
|
||||||
|
{
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(npc, L2GuardInstance.class, 500, guard ->
|
||||||
|
{
|
||||||
|
guard.addDamageHate(t, 0, 10);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -422,7 +444,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if the actor is a L2GuardInstance
|
// Check if the actor is a L2GuardInstance
|
||||||
if ((npc instanceof L2GuardInstance) && !npc.isWalker())
|
if ((npc instanceof L2GuardInstance) && !npc.isWalker() && !npc.isRandomWalkingEnabled())
|
||||||
{
|
{
|
||||||
// Order to the L2GuardInstance to return to its home location because there's no target to attack
|
// Order to the L2GuardInstance to return to its home location because there's no target to attack
|
||||||
npc.returnHome();
|
npc.returnHome();
|
||||||
|
@ -259,7 +259,7 @@ public class L2CharacterAI extends AbstractAI
|
|||||||
// Set the AI attack target (change target)
|
// Set the AI attack target (change target)
|
||||||
setTarget(target);
|
setTarget(target);
|
||||||
|
|
||||||
stopFollow();
|
// stopFollow();
|
||||||
|
|
||||||
// Launch the Think Event
|
// Launch the Think Event
|
||||||
notifyEvent(CtrlEvent.EVT_THINK, null);
|
notifyEvent(CtrlEvent.EVT_THINK, null);
|
||||||
@ -278,7 +278,7 @@ public class L2CharacterAI extends AbstractAI
|
|||||||
// Set the AI attack target
|
// Set the AI attack target
|
||||||
setTarget(target);
|
setTarget(target);
|
||||||
|
|
||||||
stopFollow();
|
// stopFollow();
|
||||||
|
|
||||||
// Launch the Think Event
|
// Launch the Think Event
|
||||||
notifyEvent(CtrlEvent.EVT_THINK, null);
|
notifyEvent(CtrlEvent.EVT_THINK, null);
|
||||||
|
@ -1386,13 +1386,13 @@ public class L2Attackable extends L2Npc
|
|||||||
setWalking();
|
setWalking();
|
||||||
|
|
||||||
// check the region where this mob is, do not activate the AI if region is inactive.
|
// check the region where this mob is, do not activate the AI if region is inactive.
|
||||||
if (!isInActiveRegion())
|
// if (!isInActiveRegion())
|
||||||
{
|
// {
|
||||||
if (hasAI())
|
// if (hasAI())
|
||||||
{
|
// {
|
||||||
getAI().stopAITask();
|
// getAI().stopAITask();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -24,12 +24,14 @@ import com.l2jmobius.gameserver.ai.L2SpecialSiegeGuardAI;
|
|||||||
import com.l2jmobius.gameserver.enums.InstanceType;
|
import com.l2jmobius.gameserver.enums.InstanceType;
|
||||||
import com.l2jmobius.gameserver.instancemanager.CastleManager;
|
import com.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||||
|
import com.l2jmobius.gameserver.model.L2World;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Playable;
|
import com.l2jmobius.gameserver.model.actor.L2Playable;
|
||||||
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
||||||
import com.l2jmobius.gameserver.model.entity.Castle;
|
import com.l2jmobius.gameserver.model.entity.Castle;
|
||||||
import com.l2jmobius.gameserver.model.entity.Fort;
|
import com.l2jmobius.gameserver.model.entity.Fort;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||||
|
|
||||||
public class L2DefenderInstance extends L2Attackable
|
public class L2DefenderInstance extends L2Attackable
|
||||||
@ -53,6 +55,16 @@ public class L2DefenderInstance extends L2Attackable
|
|||||||
return new L2SpecialSiegeGuardAI(this);
|
return new L2SpecialSiegeGuardAI(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addDamage(L2Character attacker, int damage, Skill skill)
|
||||||
|
{
|
||||||
|
super.addDamage(attacker, damage, skill);
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(this, L2DefenderInstance.class, 500, defender ->
|
||||||
|
{
|
||||||
|
defender.addDamageHate(attacker, 0, 10);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return True if a siege is in progress and the L2Character attacker isn't a Defender.
|
* Return True if a siege is in progress and the L2Character attacker isn't a Defender.
|
||||||
* @param attacker The L2Character that the L2SiegeGuardInstance try to attack
|
* @param attacker The L2Character that the L2SiegeGuardInstance try to attack
|
||||||
|
@ -23,13 +23,13 @@ import com.l2jmobius.commons.util.Rnd;
|
|||||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import com.l2jmobius.gameserver.enums.InstanceType;
|
import com.l2jmobius.gameserver.enums.InstanceType;
|
||||||
import com.l2jmobius.gameserver.model.L2World;
|
import com.l2jmobius.gameserver.model.L2World;
|
||||||
import com.l2jmobius.gameserver.model.L2WorldRegion;
|
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
||||||
import com.l2jmobius.gameserver.model.events.EventDispatcher;
|
import com.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||||
import com.l2jmobius.gameserver.model.events.EventType;
|
import com.l2jmobius.gameserver.model.events.EventType;
|
||||||
import com.l2jmobius.gameserver.model.events.impl.character.npc.OnNpcFirstTalk;
|
import com.l2jmobius.gameserver.model.events.impl.character.npc.OnNpcFirstTalk;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
||||||
|
|
||||||
@ -66,21 +66,34 @@ public class L2GuardInstance extends L2Attackable
|
|||||||
return super.isAutoAttackable(attacker);
|
return super.isAutoAttackable(attacker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addDamage(L2Character attacker, int damage, Skill skill)
|
||||||
|
{
|
||||||
|
super.addDamage(attacker, damage, skill);
|
||||||
|
getAI().startFollow(attacker);
|
||||||
|
addDamageHate(attacker, 0, 10);
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(this, L2GuardInstance.class, 500, guard ->
|
||||||
|
{
|
||||||
|
guard.getAI().startFollow(attacker);
|
||||||
|
guard.addDamageHate(attacker, 0, 10);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the home location of its L2GuardInstance.
|
* Set the home location of its L2GuardInstance.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onSpawn()
|
public void onSpawn()
|
||||||
{
|
{
|
||||||
setRandomWalking(false);
|
|
||||||
super.onSpawn();
|
super.onSpawn();
|
||||||
|
setRandomWalking(getTemplate().isRandomWalkEnabled());
|
||||||
|
getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
|
||||||
// check the region where this mob is, do not activate the AI if region is inactive.
|
// check the region where this mob is, do not activate the AI if region is inactive.
|
||||||
final L2WorldRegion region = L2World.getInstance().getRegion(this);
|
// final L2WorldRegion region = L2World.getInstance().getRegion(this);
|
||||||
if ((region != null) && (!region.isActive()))
|
// if ((region != null) && (!region.isActive()))
|
||||||
{
|
// {
|
||||||
getAI().stopAITask();
|
// getAI().stopAITask();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -147,7 +147,7 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|||||||
_talkable = set.getBoolean("talkable", true);
|
_talkable = set.getBoolean("talkable", true);
|
||||||
_undying = set.getBoolean("undying", true);
|
_undying = set.getBoolean("undying", true);
|
||||||
_showName = set.getBoolean("showName", true);
|
_showName = set.getBoolean("showName", true);
|
||||||
_randomWalk = set.getBoolean("randomWalk", true);
|
_randomWalk = set.getBoolean("randomWalk", !_type.equals("L2Guard"));
|
||||||
_randomAnimation = set.getBoolean("randomAnimation", true);
|
_randomAnimation = set.getBoolean("randomAnimation", true);
|
||||||
_flying = set.getBoolean("flying", false);
|
_flying = set.getBoolean("flying", false);
|
||||||
_canMove = set.getBoolean("canMove", true);
|
_canMove = set.getBoolean("canMove", true);
|
||||||
|
@ -158,6 +158,22 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (me instanceof L2GuardInstance)
|
||||||
|
{
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(me, L2GuardInstance.class, 500, guard ->
|
||||||
|
{
|
||||||
|
if (guard.isAttackingNow() && (guard.getTarget() == player))
|
||||||
|
{
|
||||||
|
me.getAI().startFollow(player);
|
||||||
|
me.addDamageHate(player, 0, 10);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (player.getReputation() < 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (me.isMonster())
|
else if (me.isMonster())
|
||||||
{
|
{
|
||||||
@ -334,7 +350,6 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
_globalAggro--;
|
_globalAggro--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add all autoAttackable L2Character in L2Attackable Aggro Range to its _aggroList with 0 damage and 1 hate
|
// Add all autoAttackable L2Character in L2Attackable Aggro Range to its _aggroList with 0 damage and 1 hate
|
||||||
// A L2Attackable isn't aggressive during 10s after its spawn because _globalAggro is set to -10
|
// A L2Attackable isn't aggressive during 10s after its spawn because _globalAggro is set to -10
|
||||||
if (_globalAggro >= 0)
|
if (_globalAggro >= 0)
|
||||||
@ -354,15 +369,22 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Get the hate level of the L2Attackable against this L2Character target contained in _aggroList
|
// Get the hate level of the L2Attackable against this L2Character target contained in _aggroList
|
||||||
final int hating = npc.getHating(t);
|
final int hating = npc.getHating(t);
|
||||||
|
|
||||||
// Add the attacker to the L2Attackable _aggroList with 0 damage and 1 hate
|
// Add the attacker to the L2Attackable _aggroList with 0 damage and 1 hate
|
||||||
if (hating == 0)
|
if (hating == 0)
|
||||||
{
|
{
|
||||||
npc.addDamageHate(t, 0, 1);
|
npc.addDamageHate(t, 0, 1);
|
||||||
|
}
|
||||||
|
if (npc instanceof L2GuardInstance)
|
||||||
|
{
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(npc, L2GuardInstance.class, 500, guard ->
|
||||||
|
{
|
||||||
|
guard.addDamageHate(t, 0, 10);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -422,7 +444,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if the actor is a L2GuardInstance
|
// Check if the actor is a L2GuardInstance
|
||||||
if ((npc instanceof L2GuardInstance) && !npc.isWalker())
|
if ((npc instanceof L2GuardInstance) && !npc.isWalker() && !npc.isRandomWalkingEnabled())
|
||||||
{
|
{
|
||||||
// Order to the L2GuardInstance to return to its home location because there's no target to attack
|
// Order to the L2GuardInstance to return to its home location because there's no target to attack
|
||||||
npc.returnHome();
|
npc.returnHome();
|
||||||
|
@ -259,7 +259,7 @@ public class L2CharacterAI extends AbstractAI
|
|||||||
// Set the AI attack target (change target)
|
// Set the AI attack target (change target)
|
||||||
setTarget(target);
|
setTarget(target);
|
||||||
|
|
||||||
stopFollow();
|
// stopFollow();
|
||||||
|
|
||||||
// Launch the Think Event
|
// Launch the Think Event
|
||||||
notifyEvent(CtrlEvent.EVT_THINK, null);
|
notifyEvent(CtrlEvent.EVT_THINK, null);
|
||||||
@ -278,7 +278,7 @@ public class L2CharacterAI extends AbstractAI
|
|||||||
// Set the AI attack target
|
// Set the AI attack target
|
||||||
setTarget(target);
|
setTarget(target);
|
||||||
|
|
||||||
stopFollow();
|
// stopFollow();
|
||||||
|
|
||||||
// Launch the Think Event
|
// Launch the Think Event
|
||||||
notifyEvent(CtrlEvent.EVT_THINK, null);
|
notifyEvent(CtrlEvent.EVT_THINK, null);
|
||||||
|
@ -1386,13 +1386,13 @@ public class L2Attackable extends L2Npc
|
|||||||
setWalking();
|
setWalking();
|
||||||
|
|
||||||
// check the region where this mob is, do not activate the AI if region is inactive.
|
// check the region where this mob is, do not activate the AI if region is inactive.
|
||||||
if (!isInActiveRegion())
|
// if (!isInActiveRegion())
|
||||||
{
|
// {
|
||||||
if (hasAI())
|
// if (hasAI())
|
||||||
{
|
// {
|
||||||
getAI().stopAITask();
|
// getAI().stopAITask();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -24,12 +24,14 @@ import com.l2jmobius.gameserver.ai.L2SpecialSiegeGuardAI;
|
|||||||
import com.l2jmobius.gameserver.enums.InstanceType;
|
import com.l2jmobius.gameserver.enums.InstanceType;
|
||||||
import com.l2jmobius.gameserver.instancemanager.CastleManager;
|
import com.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||||
|
import com.l2jmobius.gameserver.model.L2World;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Playable;
|
import com.l2jmobius.gameserver.model.actor.L2Playable;
|
||||||
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
||||||
import com.l2jmobius.gameserver.model.entity.Castle;
|
import com.l2jmobius.gameserver.model.entity.Castle;
|
||||||
import com.l2jmobius.gameserver.model.entity.Fort;
|
import com.l2jmobius.gameserver.model.entity.Fort;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||||
|
|
||||||
public class L2DefenderInstance extends L2Attackable
|
public class L2DefenderInstance extends L2Attackable
|
||||||
@ -53,6 +55,16 @@ public class L2DefenderInstance extends L2Attackable
|
|||||||
return new L2SpecialSiegeGuardAI(this);
|
return new L2SpecialSiegeGuardAI(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addDamage(L2Character attacker, int damage, Skill skill)
|
||||||
|
{
|
||||||
|
super.addDamage(attacker, damage, skill);
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(this, L2DefenderInstance.class, 500, defender ->
|
||||||
|
{
|
||||||
|
defender.addDamageHate(attacker, 0, 10);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return True if a siege is in progress and the L2Character attacker isn't a Defender.
|
* Return True if a siege is in progress and the L2Character attacker isn't a Defender.
|
||||||
* @param attacker The L2Character that the L2SiegeGuardInstance try to attack
|
* @param attacker The L2Character that the L2SiegeGuardInstance try to attack
|
||||||
|
@ -23,13 +23,13 @@ import com.l2jmobius.commons.util.Rnd;
|
|||||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import com.l2jmobius.gameserver.enums.InstanceType;
|
import com.l2jmobius.gameserver.enums.InstanceType;
|
||||||
import com.l2jmobius.gameserver.model.L2World;
|
import com.l2jmobius.gameserver.model.L2World;
|
||||||
import com.l2jmobius.gameserver.model.L2WorldRegion;
|
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
||||||
import com.l2jmobius.gameserver.model.events.EventDispatcher;
|
import com.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||||
import com.l2jmobius.gameserver.model.events.EventType;
|
import com.l2jmobius.gameserver.model.events.EventType;
|
||||||
import com.l2jmobius.gameserver.model.events.impl.character.npc.OnNpcFirstTalk;
|
import com.l2jmobius.gameserver.model.events.impl.character.npc.OnNpcFirstTalk;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
||||||
|
|
||||||
@ -66,21 +66,34 @@ public class L2GuardInstance extends L2Attackable
|
|||||||
return super.isAutoAttackable(attacker);
|
return super.isAutoAttackable(attacker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addDamage(L2Character attacker, int damage, Skill skill)
|
||||||
|
{
|
||||||
|
super.addDamage(attacker, damage, skill);
|
||||||
|
getAI().startFollow(attacker);
|
||||||
|
addDamageHate(attacker, 0, 10);
|
||||||
|
L2World.getInstance().forEachVisibleObjectInRange(this, L2GuardInstance.class, 500, guard ->
|
||||||
|
{
|
||||||
|
guard.getAI().startFollow(attacker);
|
||||||
|
guard.addDamageHate(attacker, 0, 10);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the home location of its L2GuardInstance.
|
* Set the home location of its L2GuardInstance.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onSpawn()
|
public void onSpawn()
|
||||||
{
|
{
|
||||||
setRandomWalking(false);
|
|
||||||
super.onSpawn();
|
super.onSpawn();
|
||||||
|
setRandomWalking(getTemplate().isRandomWalkEnabled());
|
||||||
|
getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
|
||||||
// check the region where this mob is, do not activate the AI if region is inactive.
|
// check the region where this mob is, do not activate the AI if region is inactive.
|
||||||
final L2WorldRegion region = L2World.getInstance().getRegion(this);
|
// final L2WorldRegion region = L2World.getInstance().getRegion(this);
|
||||||
if ((region != null) && (!region.isActive()))
|
// if ((region != null) && (!region.isActive()))
|
||||||
{
|
// {
|
||||||
getAI().stopAITask();
|
// getAI().stopAITask();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -147,7 +147,7 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|||||||
_talkable = set.getBoolean("talkable", true);
|
_talkable = set.getBoolean("talkable", true);
|
||||||
_undying = set.getBoolean("undying", true);
|
_undying = set.getBoolean("undying", true);
|
||||||
_showName = set.getBoolean("showName", true);
|
_showName = set.getBoolean("showName", true);
|
||||||
_randomWalk = set.getBoolean("randomWalk", true);
|
_randomWalk = set.getBoolean("randomWalk", !_type.equals("L2Guard"));
|
||||||
_randomAnimation = set.getBoolean("randomAnimation", true);
|
_randomAnimation = set.getBoolean("randomAnimation", true);
|
||||||
_flying = set.getBoolean("flying", false);
|
_flying = set.getBoolean("flying", false);
|
||||||
_canMove = set.getBoolean("canMove", true);
|
_canMove = set.getBoolean("canMove", true);
|
||||||
|
Loading…
Reference in New Issue
Block a user