Example #1
0
        /// <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);
        }
Example #2
0
        /// <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;
        }