Support for randomWalk and randomAnimation NPC template parameters.

This commit is contained in:
MobiusDev
2018-06-02 00:37:30 +00:00
parent 24bea65710
commit 194a0518bc
34 changed files with 126 additions and 106 deletions

View File

@@ -706,7 +706,7 @@ public class L2AttackableAI extends L2CharacterAI
}
}
// Order to the L2MonsterInstance to random walk (1/100)
else if ((npc.getSpawn() != null) && (Rnd.nextInt(RANDOM_WALK_RATE) == 0) && !npc.isNoRndWalk())
else if ((npc.getSpawn() != null) && (Rnd.nextInt(RANDOM_WALK_RATE) == 0) && npc.isRandomWalkingEnabled())
{
int x1 = 0;
int y1 = 0;

View File

@@ -328,6 +328,8 @@ public class NpcData implements IGameXmlReader
set.set("talkable", parseBoolean(attrs, "talkable"));
set.set("undying", parseBoolean(attrs, "undying"));
set.set("showName", parseBoolean(attrs, "showName"));
set.set("randomWalk", parseBoolean(attrs, "randomWalk"));
set.set("randomAnimation", parseBoolean(attrs, "randomAnimation"));
set.set("flying", parseBoolean(attrs, "flying"));
set.set("canMove", parseBoolean(attrs, "canMove"));
set.set("noSleepMode", parseBoolean(attrs, "noSleepMode"));

View File

@@ -105,8 +105,8 @@ public class NpcPersonalAIData
}
case "disableRandomWalk":
{
npc.setIsNoRndWalk((map.get(key) == 1));
spawn.setIsNoRndWalk((map.get(key) == 1));
npc.setRandomWalking((map.get(key) == 0));
spawn.setRandomWalking((map.get(key) == 0));
break;
}
}

View File

@@ -78,7 +78,7 @@ public class L2Spawn implements IPositionable, IIdentifiable, INamable
private boolean _doRespawn = true;
private static List<SpawnListener> _spawnListeners = new CopyOnWriteArrayList<>();
private final Deque<L2Npc> _spawnedNpcs = new ConcurrentLinkedDeque<>();
private boolean _isNoRndWalk = false; // Is no random walk
private boolean _randomWalk = false; // Is random walk
private int _spawnTemplateId = 0;
/** The task launching the function doSpawn() */
@@ -479,12 +479,6 @@ public class L2Spawn implements IPositionable, IIdentifiable, INamable
npc.setShowSummonAnimation(isSummonSpawn);
}
// Check for certain AI data, overriden in spawnlist
if (_name != null)
{
NpcPersonalAIData.getInstance().initializeNpcParameters(npc, this, _name);
}
return initializeNpcInstance(npc);
}
catch (Exception e)
@@ -553,7 +547,7 @@ public class L2Spawn implements IPositionable, IIdentifiable, INamable
npc.getVariables().getSet().clear();
}
// Set is not random walk default value
npc.setIsNoRndWalk(isNoRndWalk());
npc.setRandomWalking(getRandomWalking());
// Set the heading of the L2NpcInstance (random heading if not defined)
if (getHeading() == -1)
@@ -594,6 +588,12 @@ public class L2Spawn implements IPositionable, IIdentifiable, INamable
notifyNpcSpawned(npc);
// Check for overriden by spawnlist AIData
if (_name != null)
{
NpcPersonalAIData.getInstance().initializeNpcParameters(npc, this, _name);
}
_spawnedNpcs.add(npc);
// Increase the current number of L2NpcInstance managed by this L2Spawn
@@ -710,14 +710,14 @@ public class L2Spawn implements IPositionable, IIdentifiable, INamable
_location.setInstanceId(instanceId);
}
public final boolean isNoRndWalk()
public final boolean getRandomWalking()
{
return _isNoRndWalk;
return _randomWalk;
}
public final void setIsNoRndWalk(boolean value)
public final void setRandomWalking(boolean value)
{
_isNoRndWalk = value;
_randomWalk = value;
}
public void setSpawnTemplateId(int npcSpawnTemplateId)

View File

@@ -192,7 +192,6 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
private boolean _isParalyzed = false;
private boolean _isPendingRevive = false;
private boolean _isRunning = false;
private boolean _isNoRndWalk = false; // Is no random walk
protected boolean _showSummonAnimation = false;
protected boolean _isTeleporting = false;
private boolean _isInvul = false;
@@ -2634,16 +2633,6 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
_lastSkillCast = skill;
}
public final boolean isNoRndWalk()
{
return _isNoRndWalk;
}
public final void setIsNoRndWalk(boolean value)
{
_isNoRndWalk = value;
}
public final boolean isAfraid()
{
return isAffected(EffectFlag.FEAR);

View File

@@ -134,6 +134,7 @@ public class L2Npc extends L2Character
private static final int MINIMUM_SOCIAL_INTERVAL = 6000;
/** Support for random animation switching */
private boolean _isRandomAnimationEnabled = true;
private boolean _isRandomWalkingEnabled = true;
private boolean _isTalkable = getTemplate().isTalkable();
private final boolean _isFakePlayer = getTemplate().isFakePlayer();
@@ -311,6 +312,16 @@ public class L2Npc extends L2Character
return !isFakePlayer() && _isRandomAnimationEnabled;
}
public void setRandomWalking(boolean enabled)
{
_isRandomWalkingEnabled = enabled;
}
public boolean isRandomWalkingEnabled()
{
return _isRandomWalkingEnabled;
}
@Override
public NpcStat getStat()
{
@@ -1303,6 +1314,8 @@ public class L2Npc extends L2Character
_soulshotamount = getTemplate().getSoulShot();
_spiritshotamount = getTemplate().getSpiritShot();
_killingBlowWeaponId = 0;
_isRandomAnimationEnabled = getTemplate().isRandomAnimationEnabled();
_isRandomWalkingEnabled = getTemplate().isRandomWalkEnabled();
if (isTeleporting())
{

View File

@@ -37,7 +37,7 @@ public final class L2ChestInstance extends L2MonsterInstance
{
super(template);
setInstanceType(InstanceType.L2ChestInstance);
setIsNoRndWalk(true);
setRandomWalking(false);
_specialDrop = false;
}

View File

@@ -56,7 +56,7 @@ public final class L2GrandBossInstance extends L2MonsterInstance
@Override
public void onSpawn()
{
setIsNoRndWalk(true);
setRandomWalking(false);
super.onSpawn();
}

View File

@@ -73,7 +73,7 @@ public class L2GuardInstance extends L2Attackable
@Override
public void onSpawn()
{
setIsNoRndWalk(true);
setRandomWalking(false);
super.onSpawn();
getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);

View File

@@ -104,7 +104,7 @@ public class L2MonsterInstance extends L2Attackable
{
if (getLeader() != null)
{
setIsNoRndWalk(true);
setRandomWalking(false);
setIsRaidMinion(getLeader().isRaid());
getLeader().getMinionList().onMinionSpawn(this);
}

View File

@@ -55,7 +55,7 @@ public class L2RaidBossInstance extends L2MonsterInstance
@Override
public void onSpawn()
{
setIsNoRndWalk(true);
setRandomWalking(false);
super.onSpawn();
}

View File

@@ -73,6 +73,8 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
private boolean _talkable;
private boolean _undying;
private boolean _showName;
private boolean _randomWalk;
private boolean _randomAnimation;
private boolean _flying;
private boolean _fakePlayer;
private boolean _fakePlayerTalkable;
@@ -144,6 +146,8 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
_talkable = set.getBoolean("talkable", true);
_undying = set.getBoolean("undying", true);
_showName = set.getBoolean("showName", true);
_randomWalk = set.getBoolean("randomWalk", !_type.equals("L2Guard"));
_randomAnimation = set.getBoolean("randomAnimation", true);
_flying = set.getBoolean("flying", false);
_fakePlayer = set.getBoolean("fakePlayer", false);
_fakePlayerTalkable = set.getBoolean("fakePlayerTalkable", true);
@@ -367,6 +371,16 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
return _showName;
}
public boolean isRandomWalkEnabled()
{
return _randomWalk;
}
public boolean isRandomAnimationEnabled()
{
return _randomAnimation;
}
public boolean isFlying()
{
return _flying;

View File

@@ -436,7 +436,7 @@ public final class Instance
spawnDat.setHeading(set.getInt("heading"));
spawnDat.setRespawnDelay(set.getInt("respawn"), set.getInt("respawnRandom"));
spawnDat.setInstanceId(getId());
spawnDat.setIsNoRndWalk(set.getBoolean("allowRandomWalk"));
spawnDat.setRandomWalking(set.getBoolean("allowRandomWalk"));
final L2Npc spawned = spawnDat.doSpawn();
if ((set.getInt("delay") >= 0) && (spawned instanceof L2Attackable))
{