Пример #1
0
        public unsafe override EntityData GetEntityDataFromByteArray(byte[] source)
        {
            fixed(byte *p = source)
            {
                EntityMemory mem = *(EntityMemory *)&p[0];

                EntityData entity = new EntityData()
                {
                    //dump '\0' string terminators
                    name     = System.Text.Encoding.UTF8.GetString(mem.Name, EntityMemory.nameBytes).Split(new[] { '\0' }, 2)[0],
                    id       = mem.id,
                    type     = mem.type,
                    distance = mem.distance,
                    pos_x    = mem.pos_x,
                    pos_y    = mem.pos_y,
                    pos_z    = mem.pos_z,
                    rotation = mem.rotation,
                };

                if (entity.type == EntityType.PC || entity.type == EntityType.Monster)
                {
                    entity.job = mem.charDetails.job;

                    entity.hp           = mem.charDetails.hp;
                    entity.max_hp       = mem.charDetails.max_hp;
                    entity.mp           = mem.charDetails.mp;
                    entity.max_mp       = mem.charDetails.max_mp;
                    entity.shield_value = mem.charDetails.shieldPercentage * entity.max_hp / 100;

                    if (IsGatherer(entity.job))
                    {
                        entity.gp     = mem.charDetails.gp;
                        entity.max_gp = mem.charDetails.max_gp;
                    }
                    if (IsCrafter(entity.job))
                    {
                        entity.cp     = mem.charDetails.cp;
                        entity.max_cp = mem.charDetails.max_cp;
                    }

                    entity.level = mem.charDetails.level;

                    byte[] job_bytes = GetRawJobSpecificDataBytes();
                    if (job_bytes != null)
                    {
                        for (var i = 0; i < job_bytes.Length; ++i)
                        {
                            if (entity.debug_job != "")
                            {
                                entity.debug_job += " ";
                            }
                            entity.debug_job += string.Format("{0:x2}", job_bytes[i]);
                        }
                    }
                }
                return(entity);
            }
        }
Пример #2
0
        public unsafe override EntityData GetEntityDataFromByteArray(byte[] source)
        {
            fixed(byte *p = source)
            {
                EntityMemory mem = *(EntityMemory *)&p[0];

                // dump '\0' string terminators
                var memoryName      = System.Text.Encoding.UTF8.GetString(mem.Name, EntityMemory.nameBytes).Split(new[] { '\0' }, 2)[0];
                var capitalizedName = FFXIV_ACT_Plugin.Common.StringHelper.ToProperCase(memoryName);

                EntityData entity = new EntityData()
                {
                    name     = capitalizedName,
                    id       = mem.id,
                    type     = mem.type,
                    distance = mem.distance,
                    pos_x    = mem.pos_x,
                    pos_y    = mem.pos_y,
                    pos_z    = mem.pos_z,
                    rotation = mem.rotation,
                };

                if (entity.type == EntityType.PC || entity.type == EntityType.Monster)
                {
                    entity.job = mem.charDetails.job;

                    entity.hp     = mem.charDetails.hp;
                    entity.max_hp = mem.charDetails.max_hp;
                    entity.mp     = mem.charDetails.mp;
                    // This doesn't exist in memory, so just send the right value.
                    // As there are other versions that still have it, don't change the event.
                    entity.max_mp = 10000;

                    entity.shield_value = mem.shieldPercentage * entity.max_hp / 100;

                    if (IsGatherer(entity.job))
                    {
                        entity.gp     = mem.charDetails.gp;
                        entity.max_gp = mem.charDetails.max_gp;
                    }
                    if (IsCrafter(entity.job))
                    {
                        entity.cp     = mem.charDetails.cp;
                        entity.max_cp = mem.charDetails.max_cp;
                    }

                    entity.level = mem.charDetails.level;

                    byte[] job_bytes = GetRawJobSpecificDataBytes();
                    if (job_bytes != null)
                    {
                        for (var i = 0; i < job_bytes.Length; ++i)
                        {
                            if (entity.debug_job != "")
                            {
                                entity.debug_job += " ";
                            }
                            entity.debug_job += string.Format("{0:x2}", job_bytes[i]);
                        }
                    }
                }
                return(entity);
            }
        }