Files
test/Assets/PerfectWorld/Scripts/Task/AWARD_ITEMS_CAND.cs
T
MinhHai c9cd71c3f9 Merge branch 'develop' into feature/convert-task-templ
# Conflicts:
#	Assets/PerfectWorld/Scripts/Task/ATaskTemplFixedData.cs
#	Assets/PerfectWorld/Scripts/Task/ATaskTemplFixedData.cs.meta
#	Assets/PerfectWorld/Scripts/Task/AWARD_DATA.cs
#	Assets/PerfectWorld/Scripts/Task/AWARD_DATA.cs.meta
#	Assets/PerfectWorld/Scripts/Task/AWARD_ITEMS_CAND.cs
#	Assets/PerfectWorld/Scripts/Task/AWARD_ITEMS_CAND.cs.meta
#	Assets/PerfectWorld/Scripts/Task/SizeTest.cs
#	Assets/PerfectWorld/Scripts/Task/SizeTest.cs.meta
#	Assets/PerfectWorld/Scripts/Task/TaskExpAnalyser.cs
#	Assets/PerfectWorld/Scripts/Task/TaskLog.txt
#	Assets/PerfectWorld/Scripts/Task/TaskLog.txt.meta
#	Assets/Scenes/HoangTest.unity
2025-11-03 17:30:47 +07:00

108 lines
3.3 KiB
C#

using System.Runtime.InteropServices;
namespace PerfectWorld.Scripts.Task
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct AWARD_ITEMS_CAND
{
public uint m_ulAwardItems;
public uint m_ulAwardCmnItems;
public uint m_ulAwardTskItems;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = TaskInterfaceConstants.MAX_ITEM_AWARD)]
public ITEM_WANTED[] m_AwardItems;
[MarshalAs(UnmanagedType.U1)]
public bool m_bRandChoose;
public int MarshalBasicData(byte[] pData)
{
int offset = 0;
pData[offset] = m_bRandChoose ? (byte)1 : (byte)0;
offset++;
pData[offset] = (byte)m_ulAwardItems;
offset++;
int sz = Marshal.SizeOf(typeof(ITEM_WANTED)) * (int)m_ulAwardItems;
if (sz > 0)
{
// Copy ITEM_WANTED array data
for (int i = 0; i < m_ulAwardItems; i++)
{
// Would need to implement proper marshaling here
// For now, just increase offset by appropriate size
offset += Marshal.SizeOf(typeof(ITEM_WANTED));
}
}
return offset;
}
public int UnmarshalBasicData(byte[] pData)
{
int offset = 0;
m_bRandChoose = pData[offset] != 0;
offset++;
m_ulAwardItems = pData[offset];
offset++;
if (m_ulAwardItems > 0)
{
m_AwardItems = new ITEM_WANTED[m_ulAwardItems];
// Copy ITEM_WANTED array data
for (uint i = 0; i < m_ulAwardItems; i++)
{
// Would need to implement proper unmarshaling here
// For now, just increase offset by appropriate size
offset += Marshal.SizeOf(typeof(ITEM_WANTED));
if (m_AwardItems[i].m_bCommonItem)
m_ulAwardCmnItems++;
else
m_ulAwardTskItems++;
}
}
return offset;
}
public static bool operator ==(AWARD_ITEMS_CAND a, AWARD_ITEMS_CAND b)
{
if (a.m_ulAwardItems != b.m_ulAwardItems)
return false;
for (uint i = 0; i < a.m_ulAwardItems; ++i)
{
if (!(a.m_AwardItems[i].Equals(b.m_AwardItems[i])))
return false;
}
return (a.m_ulAwardCmnItems == b.m_ulAwardCmnItems &&
a.m_ulAwardTskItems == b.m_ulAwardTskItems &&
a.m_bRandChoose == b.m_bRandChoose);
}
public static bool operator !=(AWARD_ITEMS_CAND a, AWARD_ITEMS_CAND b)
{
return !(a == b);
}
public override bool Equals(object obj)
{
if (obj is AWARD_ITEMS_CAND)
return this == (AWARD_ITEMS_CAND)obj;
return false;
}
public override int GetHashCode()
{
return m_ulAwardItems.GetHashCode() ^
m_ulAwardCmnItems.GetHashCode() ^
m_ulAwardTskItems.GetHashCode() ^
m_bRandChoose.GetHashCode();
}
}
}