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); } }
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); } }