mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-05-20 08:26:59 -04:00
stubbed item use state (needs to actually look up the item and get its reuse stuff)
- added tables to load mobs from (probably dont import besides server_battlenpc_genus.sql) - added field to server_battle_commands for commands usable by both monsters and players (probably arent any really)
This commit is contained in:
@@ -26,21 +26,41 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
None = 0x00,
|
||||
Sight = 0x01,
|
||||
Scent = 0x02,
|
||||
LowHp = 0x04,
|
||||
IgnoreLevelDifference = 0x08
|
||||
Sound = 0x04,
|
||||
LowHp = 0x08,
|
||||
IgnoreLevelDifference = 0x10
|
||||
}
|
||||
|
||||
enum KindredType
|
||||
{
|
||||
Unknown = 0,
|
||||
Beast = 1,
|
||||
Plantoid = 2,
|
||||
Aquan = 3,
|
||||
Spoken = 4,
|
||||
Reptilian = 5,
|
||||
Insect = 6,
|
||||
Avian = 7,
|
||||
Undead = 8,
|
||||
Cursed = 9,
|
||||
Voidsent = 10,
|
||||
}
|
||||
|
||||
class BattleNpc : Npc
|
||||
{
|
||||
public HateContainer hateContainer;
|
||||
public AggroType aggroType;
|
||||
public KindredType kindredType;
|
||||
public bool neutral;
|
||||
private uint despawnTime;
|
||||
private uint respawnTime;
|
||||
private uint spawnDistance;
|
||||
|
||||
|
||||
public Character lastAttacker;
|
||||
|
||||
public Dictionary<uint, BattleCommand> skillList = new Dictionary<uint, BattleCommand>();
|
||||
public Dictionary<uint, BattleCommand> spellList = new Dictionary<uint, BattleCommand>();
|
||||
|
||||
public BattleNpc(int actorNumber, ActorClass actorClass, string uniqueId, Area spawnedArea, float posX, float posY, float posZ, float rot,
|
||||
ushort actorState, uint animationId, string customDisplayName)
|
||||
: base(actorNumber, actorClass, uniqueId, spawnedArea, posX, posY, posZ, rot, actorState, animationId, customDisplayName)
|
||||
@@ -193,6 +213,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
charaWork.parameterSave.mp = charaWork.parameterSave.mpMax;
|
||||
RecalculateStats();
|
||||
|
||||
OnSpawn();
|
||||
updateFlags |= ActorUpdateFlags.AllNpc;
|
||||
}
|
||||
}
|
||||
@@ -201,9 +222,10 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
if (IsAlive())
|
||||
{
|
||||
if (lastAttacker is Pet && ((Pet)lastAttacker).master is Player)
|
||||
// todo: does retail
|
||||
if (lastAttacker is Pet && lastAttacker.aiContainer.GetController<PetController>()?.GetPetMaster() is Player)
|
||||
{
|
||||
lastAttacker = ((Pet)lastAttacker).master;
|
||||
lastAttacker = lastAttacker.aiContainer.GetController<PetController>().GetPetMaster();
|
||||
}
|
||||
|
||||
if (lastAttacker is Player)
|
||||
@@ -226,8 +248,8 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
((Player)lastAttacker).QueuePacket(BattleActionX01Packet.BuildPacket(lastAttacker.actorId, 0, 0, new BattleAction(actorId, 30108, 0)));
|
||||
}
|
||||
}
|
||||
positionUpdates?.Clear();
|
||||
aiContainer.InternalDie(tick, despawnTime);
|
||||
aiContainer.pathFind.Clear();
|
||||
this.ResetMoveSpeeds();
|
||||
|
||||
// todo: reset cooldowns
|
||||
@@ -289,6 +311,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
public override void OnSpawn()
|
||||
{
|
||||
base.OnSpawn();
|
||||
lua.LuaEngine.CallLuaBattleFunction(this, "onSpawn", this);
|
||||
}
|
||||
|
||||
public override void OnDeath()
|
||||
|
@@ -21,6 +21,17 @@ using FFXIVClassic_Map_Server.actors.chara.ai;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
[Flags]
|
||||
enum NpcSpawnType : ushort
|
||||
{
|
||||
Normal = 0x00,
|
||||
Scripted = 0x01,
|
||||
Nighttime = 0x02,
|
||||
Evening = 0x04,
|
||||
Daytime = 0x08,
|
||||
Weather = 0x10,
|
||||
}
|
||||
|
||||
class Npc : Character
|
||||
{
|
||||
private uint actorClassId;
|
||||
@@ -30,6 +41,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
private uint layout, instance;
|
||||
|
||||
public NpcWork npcWork = new NpcWork();
|
||||
public NpcSpawnType npcSpawnType;
|
||||
|
||||
public Npc(int actorNumber, ActorClass actorClass, string uniqueId, Area spawnedArea, float posX, float posY, float posZ, float rot, ushort actorState, uint animationId, string customDisplayName)
|
||||
: base((4 << 28 | spawnedArea.actorId << 19 | (uint)actorNumber))
|
||||
@@ -414,7 +426,6 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
|
||||
public override void OnDespawn()
|
||||
{
|
||||
zone.BroadcastPacketAroundActor(this, RemoveActorPacket.BuildPacket(this.actorId));
|
||||
zone.BroadcastPacketAroundActor(this, RemoveActorPacket.BuildPacket(this.actorId));
|
||||
QueuePositionUpdate(spawnX, spawnY, spawnZ);
|
||||
LuaEngine.CallLuaBattleFunction(this, "onDespawn", this);
|
||||
|
@@ -13,7 +13,6 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class Pet : BattleNpc
|
||||
{
|
||||
public Character master;
|
||||
public Pet(int actorNumber, ActorClass actorClass, string uniqueId, Area spawnedArea, float posX, float posY, float posZ, float rot,
|
||||
ushort actorState, uint animationId, string customDisplayName)
|
||||
: base(actorNumber, actorClass, uniqueId, spawnedArea, posX, posY, posZ, rot, actorState, animationId, customDisplayName)
|
||||
|
Reference in New Issue
Block a user