mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-02 19:42:05 -04:00
Added formulas for base EXP gain and chain experience Added basic scripts for most player abilities and effects Added stat gains for some abilities Changed status flags Fixed bug with player death Fixed bug where auto attacks didnt work when not locked on Added traits
128 lines
4.9 KiB
C#
128 lines
4.9 KiB
C#
using FFXIVClassic.Common;
|
|
using System;
|
|
using System.IO;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
namespace FFXIVClassic_Map_Server.packets.send.actor.battle
|
|
{
|
|
class BattleActionX10Packet
|
|
{
|
|
public const ushort OPCODE = 0x013A;
|
|
public const uint PACKET_SIZE = 0xD8;
|
|
|
|
public static SubPacket BuildPacket(uint sourceActorId, uint animationId, ushort commandId, BattleAction[] actionList, ref int listOffset)
|
|
{
|
|
byte[] data = new byte[PACKET_SIZE - 0x20];
|
|
|
|
using (MemoryStream mem = new MemoryStream(data))
|
|
{
|
|
using (BinaryWriter binWriter = new BinaryWriter(mem))
|
|
{
|
|
int max;
|
|
if (actionList.Length - listOffset <= 10)
|
|
max = actionList.Length - listOffset;
|
|
else
|
|
max = 10;
|
|
|
|
binWriter.Write((UInt32)sourceActorId);
|
|
binWriter.Write((UInt32)animationId);
|
|
|
|
//Missing... last value is float, string in here as well?
|
|
|
|
binWriter.Seek(0x20, SeekOrigin.Begin);
|
|
binWriter.Write((UInt32)max); //Num actions
|
|
binWriter.Write((UInt16)commandId);
|
|
binWriter.Write((UInt16)0x810); //?
|
|
|
|
//binWriter.Seek(0x20, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((UInt32)actionList[listOffset + i].targetId);
|
|
|
|
binWriter.Seek(0x50, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((UInt16)actionList[listOffset + i].amount);
|
|
|
|
binWriter.Seek(0x64, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((UInt16)actionList[listOffset + i].worldMasterTextId);
|
|
|
|
binWriter.Seek(0x78, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((UInt32)actionList[listOffset + i].effectId);
|
|
|
|
binWriter.Seek(0xA0, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((Byte)actionList[listOffset + i].param);
|
|
|
|
binWriter.Seek(0xAA, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((Byte)actionList[listOffset + i].hitNum);
|
|
|
|
listOffset += max;
|
|
}
|
|
}
|
|
|
|
return new SubPacket(OPCODE, sourceActorId, data);
|
|
}
|
|
|
|
public static SubPacket BuildPacket(uint sourceActorId, uint animationId, ushort commandId, List<BattleAction> actionList, ref int listOffset)
|
|
{
|
|
byte[] data = new byte[PACKET_SIZE - 0x20];
|
|
|
|
using (MemoryStream mem = new MemoryStream(data))
|
|
{
|
|
using (BinaryWriter binWriter = new BinaryWriter(mem))
|
|
{
|
|
int max;
|
|
if (actionList.Count - listOffset <= 10)
|
|
max = actionList.Count - listOffset;
|
|
else
|
|
max = 10;
|
|
|
|
binWriter.Write((UInt32)sourceActorId);
|
|
binWriter.Write((UInt32)animationId);
|
|
|
|
//Missing... last value is float, string in here as well?
|
|
|
|
binWriter.Seek(0x20, SeekOrigin.Begin);
|
|
binWriter.Write((UInt32)max); //Num actions
|
|
binWriter.Write((UInt16)commandId);
|
|
binWriter.Write((UInt16)0x810); //?
|
|
|
|
//binWriter.Seek(0x20, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((UInt32)actionList[listOffset + i].targetId);
|
|
|
|
binWriter.Seek(0x50, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((UInt16)actionList[listOffset + i].amount);
|
|
|
|
binWriter.Seek(0x64, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((UInt16)actionList[listOffset + i].worldMasterTextId);
|
|
|
|
binWriter.Seek(0x78, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
{
|
|
binWriter.Write((UInt32)actionList[listOffset + i].effectId);
|
|
}
|
|
|
|
binWriter.Seek(0xA0, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((Byte)actionList[listOffset + i].param);
|
|
|
|
binWriter.Seek(0xAA, SeekOrigin.Begin);
|
|
for (int i = 0; i < max; i++)
|
|
binWriter.Write((Byte)actionList[listOffset + i].hitNum);
|
|
|
|
listOffset += max;
|
|
}
|
|
}
|
|
|
|
return new SubPacket(OPCODE, sourceActorId, data);
|
|
}
|
|
|
|
}
|
|
}
|