1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-24 05:37:46 +00:00

added modifier class

- added auto attack animation (<3 showmoltti)
- added thing to send battle packet from lua
This commit is contained in:
Tahir Akhlaq 2017-08-24 05:12:30 +01:00
parent cbbfa4ed95
commit 9bb298b2f3
5 changed files with 45 additions and 9 deletions

View file

@ -103,6 +103,7 @@
<Compile Include="actors\chara\ai\TargetFind.cs" /> <Compile Include="actors\chara\ai\TargetFind.cs" />
<Compile Include="actors\chara\ai\utils\AttackUtils.cs" /> <Compile Include="actors\chara\ai\utils\AttackUtils.cs" />
<Compile Include="actors\chara\ai\utils\BattleUtils.cs" /> <Compile Include="actors\chara\ai\utils\BattleUtils.cs" />
<Compile Include="actors\chara\Modifier.cs" />
<Compile Include="actors\chara\npc\ActorClass.cs" /> <Compile Include="actors\chara\npc\ActorClass.cs" />
<Compile Include="actors\chara\npc\BattleNpc.cs" /> <Compile Include="actors\chara\npc\BattleNpc.cs" />
<Compile Include="actors\chara\npc\NpcWork.cs" /> <Compile Include="actors\chara\npc\NpcWork.cs" />

View file

@ -8,6 +8,8 @@ using FFXIVClassic_Map_Server.utils;
using FFXIVClassic_Map_Server.actors.chara.ai; using FFXIVClassic_Map_Server.actors.chara.ai;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using FFXIVClassic_Map_Server.actors.chara;
using FFXIVClassic_Map_Server.packets.send.actor.battle;
namespace FFXIVClassic_Map_Server.Actors namespace FFXIVClassic_Map_Server.Actors
{ {
@ -82,6 +84,8 @@ namespace FFXIVClassic_Map_Server.Actors
public Pet pet; public Pet pet;
public Dictionary<Modifier, Int64> modifiers = new Dictionary<Modifier, long>();
public Character(uint actorID) : base(actorID) public Character(uint actorID) : base(actorID)
{ {
//Init timer array to "notimer" //Init timer array to "notimer"
@ -185,6 +189,21 @@ namespace FFXIVClassic_Map_Server.Actors
} }
} }
public Int64 GetMod(uint modifier)
{
Int64 res;
modifiers.TryGetValue((Modifier)modifier, out res);
return res;
}
public void SetMod(uint modifier, Int64 val)
{
if (modifiers.ContainsKey((Modifier)modifier))
modifiers[(Modifier)modifier] = val;
else
modifiers.Add((Modifier)modifier, val);
}
public virtual void OnPath(Vector3 point) public virtual void OnPath(Vector3 point)
{ {
lua.LuaEngine.CallLuaBattleAction(this, "onPath", this, point); lua.LuaEngine.CallLuaBattleAction(this, "onPath", this, point);
@ -325,6 +344,9 @@ namespace FFXIVClassic_Map_Server.Actors
// todo: should this include stats too? // todo: should this include stats too?
public virtual void RecalculateHpMpTp() public virtual void RecalculateHpMpTp()
{ {
// legit fuck c#
// todo: other shit too..
meleeRange = GetMod((uint)Modifier.AttackRange);
// todo: recalculate stats and crap // todo: recalculate stats and crap
updateFlags |= ActorUpdateFlags.HpTpMp; updateFlags |= ActorUpdateFlags.HpTpMp;
} }

View file

@ -329,7 +329,13 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
// todo: why is player always zoning? // todo: why is player always zoning?
// cant target if zoning // cant target if zoning
if (/*target.isZoning || owner.isZoning || */target.zone != owner.zone || targetingPlayer && ((Player)target).playerSession.isUpdatesLocked) if (targetingPlayer && ((Player)target).playerSession.isUpdatesLocked)
{
owner.Disengage();
return false;
}
if (/*target.isZoning || owner.isZoning || */target.zone != owner.zone)
return false; return false;
if (validTarget == ValidTarget.Self && aoeType != TargetFindAOEType.None && owner != target) if (validTarget == ValidTarget.Self && aoeType != TargetFindAOEType.None && owner != target)

View file

@ -48,6 +48,10 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
{ {
return true; return true;
} }
if (owner.target.actorId != owner.currentLockedTarget)
owner.aiContainer.ChangeTarget(Server.GetWorldManager().GetActorInWorld(owner.currentLockedTarget) as Character);
if (IsAttackReady()) if (IsAttackReady())
{ {
if (CanAttack()) if (CanAttack())
@ -89,14 +93,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
{ {
foreach (var player in owner.zone.GetActorsAroundActor<Player>(owner, 50)) foreach (var player in owner.zone.GetActorsAroundActor<Player>(owner, 50))
{ {
/*var packet = BattleActionX01Packet.BuildPacket(player.actorId, owner.actorId, owner.actorId, 0, 537094006, 0, 27260, (ushort)damage, 0); var packet = BattleActionX01Packet.BuildPacket(player.actorId, owner.actorId, target.actorId, (uint)0x19001000, (uint)0x8000604, (ushort)0x765D, (ushort)BattleActionX01PacketCommand.Attack, (ushort)damage, (byte)0x1);
player.QueuePacket(packet); player.QueuePacket(packet);
Program.Log.Error("asudyaisydaisydaioysdaisydaiosdyaiosuydaisydiaosydioasydaiusdyaisduy");
packet.DebugPrintSubPacket();
*/
} }
//if (target is Player)
// ((Player)target).SendPacket("139_attack");
} }
//target.DelHP((short)damage); //target.DelHP((short)damage);
attackTime = attackTime.AddMilliseconds(owner.GetAttackDelayMs()); attackTime = attackTime.AddMilliseconds(owner.GetAttackDelayMs());
@ -147,7 +146,8 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
{ {
return false; return false;
} }
else if (Utils.Distance(owner.positionX, owner.positionY, owner.positionZ, target.positionX, target.positionY, target.positionZ) >= 7.5f) // todo: use a mod for melee range
else if (Utils.Distance(owner.positionX, owner.positionY, owner.positionZ, target.positionX, target.positionY, target.positionZ) > owner.meleeRange)
{ {
//owner.aiContainer.GetpathFind?.PreparePath(target.positionX, target.positionY, target.positionZ, 2.5f, 4); //owner.aiContainer.GetpathFind?.PreparePath(target.positionX, target.positionY, target.positionZ, 2.5f, 4);
return false; return false;

View file

@ -20,6 +20,7 @@ using FFXIVClassic_Map_Server.packets.send.group;
using FFXIVClassic_Map_Server.packets.WorldPackets.Send.Group; using FFXIVClassic_Map_Server.packets.WorldPackets.Send.Group;
using FFXIVClassic_Map_Server.actors.chara.ai; using FFXIVClassic_Map_Server.actors.chara.ai;
using FFXIVClassic_Map_Server.actors.chara.ai.controllers; using FFXIVClassic_Map_Server.actors.chara.ai.controllers;
using FFXIVClassic_Map_Server.packets.send.actor.battle;
namespace FFXIVClassic_Map_Server.Actors namespace FFXIVClassic_Map_Server.Actors
{ {
@ -1943,5 +1944,11 @@ namespace FFXIVClassic_Map_Server.Actors
return firstSlot; return firstSlot;
} }
public void SendBattleActionX01Packet(uint anim, uint effect, uint text = 0x756D, uint command = 27260, uint param = 0x01, uint idek = 0x01)
{
var packet = BattleActionX01Packet.BuildPacket(actorId, actorId, actorId, (uint)anim, (uint)effect, (ushort)text, (ushort)command, (ushort)param, (byte)idek);
QueuePacket(packet);
}
} }
} }