add ion's fix for BattleActionX10Packet crashing client

- add blizzara spell lua
This commit is contained in:
Tahir Akhlaq 2017-08-26 06:47:07 +01:00
parent 9024f3fad6
commit 1ae15df64c
9 changed files with 33 additions and 27 deletions

View File

@ -78,7 +78,7 @@ namespace FFXIVClassic.Common
public static float GetAngle(float x, float z, float x2, float z2) public static float GetAngle(float x, float z, float x2, float z2)
{ {
var angle = (float)Math.Atan((z2 - z) / (x2 - x)); var angle = (float)(Math.Atan((z2 - z) / (x2 - x)) * - Math.PI);
return x > x2 ? angle + (float)Math.PI : angle; return x > x2 ? angle + (float)Math.PI : angle;
} }

View File

@ -354,7 +354,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
return false; return false;
// hit everything within zone or within aoe region // hit everything within zone or within aoe region
if (extents == 255.0f || aoeType == TargetFindAOEType.Circle && target.GetPosAsVector3().IsWithinCircle(targetPosition, extents)) if (extents == 255.0f || aoeType == TargetFindAOEType.Circle && target.GetPosAsVector3().IsWithinCircle(targetPosition ?? target.GetPosAsVector3(), extents))
return true; return true;
if (aoeType == TargetFindAOEType.Cone && IsWithinCone(target, withPet)) if (aoeType == TargetFindAOEType.Cone && IsWithinCone(target, withPet))

View File

@ -25,18 +25,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
// todo: handle raise etc // todo: handle raise etc
if (tick >= despawnTime) if (tick >= despawnTime)
{ {
if (owner.currentSubState == SetActorStatePacket.SUB_STATE_PLAYER) owner.Spawn(Program.Tick);
{
// todo: mark for zoning and remove after main loop
owner.Spawn(Program.Tick);
//Server.GetWorldManager().DoZoneChange(((Player)owner), 244, null, 0, 15, -160.048f, 0, -165.737f, 0.0f);
}
else
{
owner.ChangeState(SetActorStatePacket.MAIN_STATE_PASSIVE);
// todo: fadeout animation and crap
//owner.zone.DespawnActor(owner);
}
return true; return true;
} }
return false; return false;

View File

@ -32,8 +32,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
// todo: Azia can fix, check the recast time and send error // todo: Azia can fix, check the recast time and send error
OnStart(); OnStart();
} }
else if (interrupt || errorPacket != null)
if (interrupt || errorPacket != null)
{ {
if (owner is Player && errorPacket != null) if (owner is Player && errorPacket != null)
((Player)owner).QueuePacket(errorPacket); ((Player)owner).QueuePacket(errorPacket);
@ -50,7 +49,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
if (returnCode != 0) if (returnCode != 0)
{ {
interrupt = true; interrupt = true;
errorPacket = BattleActionX01Packet.BuildPacket(owner.actorId, owner.actorId, owner.actorId, 0, 0, (ushort)(returnCode == -1 ? 32539 : returnCode), spell.id, 0, 1); errorPacket = BattleActionX01Packet.BuildPacket(owner.actorId, owner.actorId, owner.actorId, 0, 0, (ushort)(returnCode == -1 ? 32558 : returnCode), spell.id, 0, 1);
} }
else else
{ {
@ -120,9 +119,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
action.amount = (ushort)lua.LuaEngine.CallLuaAbilityFunction(owner, spell, "spells", "onSpellFinish", owner, chara, spell, action); action.amount = (ushort)lua.LuaEngine.CallLuaAbilityFunction(owner, spell, "spells", "onSpellFinish", owner, chara, spell, action);
actions[i++] = action; actions[i++] = action;
packets.Add(BattleActionX01Packet.BuildPacket(chara.actorId, owner.actorId, action.targetId, spell.battleAnimation, action.effectId, action.worldMasterTextId, spell.id, action.amount, action.param)); //packets.Add(BattleActionX01Packet.BuildPacket(chara.actorId, owner.actorId, action.targetId, spell.battleAnimation, action.effectId, action.worldMasterTextId, spell.id, action.amount, action.param));
} }
//packets.Add(BattleActionX10Packet.BuildPacket(player.actorId, owner.actorId, spell.battleAnimation, spell.id, actions)); packets.Add(BattleActionX10Packet.BuildPacket(owner.target.actorId, owner.actorId, spell.battleAnimation, spell.id, actions));
owner.zone.BroadcastPacketsAroundActor(owner, packets); owner.zone.BroadcastPacketsAroundActor(owner, packets);
} }

View File

@ -14,7 +14,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
protected Character target; protected Character target;
protected bool canInterrupt; protected bool canInterrupt;
protected bool interrupt; protected bool interrupt = false;
protected DateTime startTime; protected DateTime startTime;

View File

@ -30,8 +30,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
// todo: Azia can fix, check the recast time and send error // todo: Azia can fix, check the recast time and send error
OnStart(); OnStart();
} }
else if (interrupt || errorPacket != null)
if (interrupt || errorPacket != null)
{ {
if (owner is Player && errorPacket != null) if (owner is Player && errorPacket != null)
((Player)owner).QueuePacket(errorPacket); ((Player)owner).QueuePacket(errorPacket);
@ -48,7 +47,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
if (returnCode != 0) if (returnCode != 0)
{ {
interrupt = true; interrupt = true;
errorPacket = BattleActionX01Packet.BuildPacket(owner.actorId, owner.actorId, owner.actorId, 0, 0, (ushort)returnCode, skill.id, 0, 1); errorPacket = BattleActionX01Packet.BuildPacket(owner.actorId, owner.actorId, owner.actorId, 0, 0, (ushort)(returnCode == -1 ? 32558 : returnCode), skill.id, 0, 1);
} }
else else
{ {
@ -112,9 +111,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
action.amount = (ushort)lua.LuaEngine.CallLuaAbilityFunction(owner, skill, "skills", "onSkillFinish", owner, target, skill, action); action.amount = (ushort)lua.LuaEngine.CallLuaAbilityFunction(owner, skill, "skills", "onSkillFinish", owner, target, skill, action);
actions[i++] = action; actions[i++] = action;
packets.Add(BattleActionX01Packet.BuildPacket(chara.actorId, owner.actorId, action.targetId, skill.battleAnimation, action.effectId, action.worldMasterTextId, skill.id, action.amount, action.param)); //packets.Add(BattleActionX01Packet.BuildPacket(chara.actorId, owner.actorId, action.targetId, skill.battleAnimation, action.effectId, action.worldMasterTextId, skill.id, action.amount, action.param));
} }
//packets.Add(BattleActionX10Packet.BuildPacket(player.actorId, owner.actorId, spell.battleAnimation, spell.id, actions)); packets.Add(BattleActionX10Packet.BuildPacket(owner.target.actorId, owner.actorId, skill.battleAnimation, skill.id, actions));
owner.zone.BroadcastPacketsAroundActor(owner, packets); owner.zone.BroadcastPacketsAroundActor(owner, packets);
} }

View File

@ -29,7 +29,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor.battle
binWriter.Write((UInt16)commandId); binWriter.Write((UInt16)commandId);
binWriter.Write((UInt16)0x810); //? binWriter.Write((UInt16)0x810); //?
binWriter.Seek(0x20, SeekOrigin.Begin); //binWriter.Seek(0x20, SeekOrigin.Begin);
foreach (BattleAction action in actionList) foreach (BattleAction action in actionList)
binWriter.Write((UInt32)action.targetId); binWriter.Write((UInt32)action.targetId);

View File

@ -8,7 +8,7 @@ require ("global")
function onEventStarted(player, equipAbilityWidget, triggername, slot, ability, unkown, arg1, arg2, arg3, arg4, arg5, arg6) function onEventStarted(player, equipAbilityWidget, triggername, slot, ability, unkown, arg1, arg2, arg3, arg4, arg5, arg6)
if ability then if ability then
player:EquipAbility(slot, ability); player:EquipAbility(slot, ability, 1);
end end
player:endEvent(); player:endEvent();
end end

View File

@ -0,0 +1,19 @@
function onSpellPrepare(caster, target, spell)
return 0;
end;
function onSpellStart(caster, target, spell)
return 0;
end;
function onSpellFinish(caster, target, spell, action)
local damage = math.random(10, 100);
print("fuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuckkk")
action.param = damage;
if target.hateContainer then
target.hateContainer.AddBaseHate(caster);
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
end;