/// <summary> /// カレントターゲットの敵視情報を取得 /// </summary> public unsafe List <EnmityEntry> GetEnmityEntryList() { short num = 0; uint topEnmity = 0; List <EnmityEntry> result = new List <EnmityEntry>(); List <Combatant> combatantList = Combatants; Combatant mychar = GetSelfCombatant(); /// 一度に全部読む byte[] buffer = GetByteArray(enmityAddress, 0x900 + 2); fixed(byte *p = buffer) num = (short)p[2296]; if (num <= 0) { return(result); } if (num > 31) { num = 31; // changed??? 32->31 } for (short i = 0; i < num; i++) { int p = i * 72; uint _id; uint _enmity; fixed(byte *bp = buffer) { _id = *(uint *)&bp[p + 56]; _enmity = *(uint *)&bp[p + 60]; } var entry = new EnmityEntry() { ID = _id, Enmity = _enmity, isMe = false, Name = "Unknown", Job = 0x00 }; if (entry.ID > 0) { Combatant c = combatantList.Find(x => x.ID == entry.ID); if (c != null) { entry.Name = c.Name; entry.Job = c.Job; entry.OwnerID = c.OwnerID; } if (entry.ID == mychar.ID) { entry.isMe = true; } if (topEnmity <= entry.Enmity) { topEnmity = entry.Enmity; } entry.HateRate = (int)(((double)entry.Enmity / (double)topEnmity) * 100); result.Add(entry); } } return(result); }
/// <summary> /// カレントターゲットの敵視情報を取得 /// </summary> public unsafe List<EnmityEntry> GetEnmityEntryList() { short num = 0; uint topEnmity = 0; List<EnmityEntry> result = new List<EnmityEntry>(); List<Combatant> combatantList = Combatants; Combatant mychar = GetSelfCombatant(); /// 一度に全部読む byte[] buffer = GetByteArray(enmityAddress, 0x900 + 2); fixed (byte* p = buffer) num = (short)p[0x900]; if (num <= 0) { return result; } if (num > 32) num = 32; for (short i = 0; i < num; i++) { int p = i * 72; uint _id; uint _enmity; fixed (byte* bp = buffer) { _id = *(uint*)&bp[p + 0x40]; _enmity = *(uint*)&bp[p + 0x44]; } var entry = new EnmityEntry() { ID = _id, Enmity = _enmity, isMe = false, Name = "Unknown", Job = 0x00 }; if (entry.ID > 0) { Combatant c = combatantList.Find(x => x.ID == entry.ID); if (c != null) { entry.Name = c.Name; entry.Job = c.Job; entry.OwnerID = c.OwnerID; } if (entry.ID == mychar.ID) { entry.isMe = true; } if (topEnmity <= entry.Enmity) { topEnmity = entry.Enmity; } entry.HateRate = (int)(((double)entry.Enmity / (double)topEnmity) * 100); result.Add(entry); } } return result; }