diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-06-21 22:40:03 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-06-21 22:40:26 +0200 |
commit | ff9cd652e0350a809a012cddbfb01d0ba8575b5a (patch) | |
tree | c4752921768f0fdab0db39edfbe99b147bcd8589 /src | |
parent | b9d288e2ada0094c4054986c8665632a0e8cbe8a (diff) |
Core/Creature:
- Addet support for female creature name
- Fix some name_loc for deDE
- Added some female name loc for deDe
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 2 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 153 | ||||
-rw-r--r-- | src/server/game/Handlers/QueryHandler.cpp | 91 |
3 files changed, 136 insertions, 110 deletions
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 574c10d14f4..617fdbb204e 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -82,6 +82,7 @@ struct CreatureTemplate uint32 Modelid3; uint32 Modelid4; std::string Name; + std::string FemaleName; std::string SubName; std::string IconName; uint32 GossipMenuId; @@ -225,6 +226,7 @@ typedef std::unordered_map<uint16, CreatureBaseStats> CreatureBaseStatsContainer struct CreatureLocale { StringVector Name; + StringVector FemaleName; StringVector SubName; }; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index fae3683a140..2ccaef0456b 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -324,9 +324,18 @@ void ObjectMgr::LoadCreatureLocales() { uint32 oldMSTime = getMSTime(); - _creatureLocaleStore.clear(); // need for reload case + _creatureLocaleStore.clear(); // need for reload case - QueryResult result = WorldDatabase.Query("SELECT entry, name_loc1, subname_loc1, name_loc2, subname_loc2, name_loc3, subname_loc3, name_loc4, subname_loc4, name_loc5, subname_loc5, name_loc6, subname_loc6, name_loc7, subname_loc7, name_loc8, subname_loc8 FROM locales_creature"); + QueryResult result = WorldDatabase.Query("SELECT entry, " + "name_loc1, femaleName_loc1, subname_loc1, " + "name_loc2, femaleName_loc2, subname_loc2, " + "name_loc3, femaleName_loc3, subname_loc3, " + "name_loc4, femaleName_loc4, subname_loc4, " + "name_loc5, femaleName_loc5, subname_loc5, " + "name_loc6, femaleName_loc6, subname_loc6, " + "name_loc7, femaleName_loc7, subname_loc7, " + "name_loc8, femaleName_loc8, subname_loc8 " + "FROM locales_creature"); if (!result) return; @@ -342,8 +351,9 @@ void ObjectMgr::LoadCreatureLocales() for (uint8 i = 1; i < TOTAL_LOCALES; ++i) { LocaleConstant locale = (LocaleConstant) i; - AddLocaleString(fields[1 + 2 * (i - 1)].GetString(), locale, data.Name); - AddLocaleString(fields[1 + 2 * (i - 1) + 1].GetString(), locale, data.SubName); + AddLocaleString(fields[1 + 3 * (i - 1)].GetString(), locale, data.Name); + AddLocaleString(fields[1 + 3 * (i - 1) + 1].GetString(), locale, data.FemaleName); + AddLocaleString(fields[1 + 3 * (i - 1) + 2].GetString(), locale, data.SubName); } } while (result->NextRow()); @@ -419,19 +429,19 @@ void ObjectMgr::LoadCreatureTemplates() // 0 1 2 3 4 5 6 7 8 QueryResult result = WorldDatabase.Query("SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, " - // 9 10 11 12 13 14 15 16 17 18 19 20 21 - "modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, exp_unk, faction, npcflag, speed_walk, speed_run, " - // 22 23 24 25 26 27 28 29 30 31 32 33 + // 9 10 11 12 13 14 15 16 17 18 19 20 21 22 + "modelid4, name, femaleName, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, exp_unk, faction, npcflag, speed_walk, speed_run, " + // 23 24 25 26 27 28 29 30 31 32 33 34 "scale, rank, mindmg, maxdmg, dmgschool, attackpower, dmg_multiplier, baseattacktime, rangeattacktime, unit_class, unit_flags, unit_flags2, " - // 34 35 36 37 38 39 40 41 42 + // 35 36 37 38 39 40 41 42 43 "dynamicflags, family, trainer_type, trainer_class, trainer_race, minrangedmg, maxrangedmg, rangedattackpower, type, " - // 43 44 45 46 47 48 49 50 51 52 53 + // 44 45 46 47 48 49 50 51 52 53 54 "type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, " - // 54 55 56 57 58 59 60 61 62 63 64 65 66 67 + // 55 56 57 58 59 60 61 62 63 64 65 66 67 68 "spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, " - // 68 69 70 71 72 73 74 75 76 77 78 79 + // 69 70 71 72 73 74 75 76 77 78 79 80 "InhabitType, HoverHeight, Health_mod, Mana_mod, Mana_mod_extra, Armor_mod, RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, " - // 80 81 82 83 84 85 + // 81 82 83 84 85 86 " questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName " "FROM creature_template;"); @@ -465,72 +475,73 @@ void ObjectMgr::LoadCreatureTemplates() creatureTemplate.Modelid3 = fields[8].GetUInt32(); creatureTemplate.Modelid4 = fields[9].GetUInt32(); creatureTemplate.Name = fields[10].GetString(); - creatureTemplate.SubName = fields[11].GetString(); - creatureTemplate.IconName = fields[12].GetString(); - creatureTemplate.GossipMenuId = fields[13].GetUInt32(); - creatureTemplate.minlevel = fields[14].GetUInt8(); - creatureTemplate.maxlevel = fields[15].GetUInt8(); - creatureTemplate.expansion = uint32(fields[16].GetInt16()); - creatureTemplate.expansionUnknown = uint32(fields[17].GetUInt16()); - creatureTemplate.faction = uint32(fields[18].GetUInt16()); - creatureTemplate.npcflag = fields[19].GetUInt32(); - creatureTemplate.speed_walk = fields[20].GetFloat(); - creatureTemplate.speed_run = fields[21].GetFloat(); - creatureTemplate.scale = fields[22].GetFloat(); - creatureTemplate.rank = uint32(fields[23].GetUInt8()); - creatureTemplate.mindmg = fields[24].GetFloat(); - creatureTemplate.maxdmg = fields[25].GetFloat(); - creatureTemplate.dmgschool = uint32(fields[26].GetInt8()); - creatureTemplate.attackpower = fields[27].GetUInt32(); - creatureTemplate.dmg_multiplier = fields[28].GetFloat(); - creatureTemplate.baseattacktime = fields[29].GetUInt32(); - creatureTemplate.rangeattacktime = fields[30].GetUInt32(); - creatureTemplate.unit_class = uint32(fields[31].GetUInt8()); - creatureTemplate.unit_flags = fields[32].GetUInt32(); - creatureTemplate.unit_flags2 = fields[33].GetUInt32(); - creatureTemplate.dynamicflags = fields[34].GetUInt32(); - creatureTemplate.family = uint32(fields[35].GetUInt8()); - creatureTemplate.trainer_type = uint32(fields[36].GetUInt8()); - creatureTemplate.trainer_class = uint32(fields[37].GetUInt8()); - creatureTemplate.trainer_race = uint32(fields[38].GetUInt8()); - creatureTemplate.minrangedmg = fields[39].GetFloat(); - creatureTemplate.maxrangedmg = fields[40].GetFloat(); - creatureTemplate.rangedattackpower = uint32(fields[41].GetUInt16()); - creatureTemplate.type = uint32(fields[42].GetUInt8()); - creatureTemplate.type_flags = fields[43].GetUInt32(); - creatureTemplate.type_flags2 = fields[44].GetUInt32(); - creatureTemplate.lootid = fields[45].GetUInt32(); - creatureTemplate.pickpocketLootId = fields[46].GetUInt32(); - creatureTemplate.SkinLootId = fields[47].GetUInt32(); + creatureTemplate.FemaleName = fields[11].GetString(); + creatureTemplate.SubName = fields[12].GetString(); + creatureTemplate.IconName = fields[13].GetString(); + creatureTemplate.GossipMenuId = fields[14].GetUInt32(); + creatureTemplate.minlevel = fields[15].GetUInt8(); + creatureTemplate.maxlevel = fields[16].GetUInt8(); + creatureTemplate.expansion = uint32(fields[17].GetInt16()); + creatureTemplate.expansionUnknown = uint32(fields[18].GetUInt16()); + creatureTemplate.faction = uint32(fields[19].GetUInt16()); + creatureTemplate.npcflag = fields[20].GetUInt32(); + creatureTemplate.speed_walk = fields[21].GetFloat(); + creatureTemplate.speed_run = fields[22].GetFloat(); + creatureTemplate.scale = fields[23].GetFloat(); + creatureTemplate.rank = uint32(fields[24].GetUInt8()); + creatureTemplate.mindmg = fields[25].GetFloat(); + creatureTemplate.maxdmg = fields[26].GetFloat(); + creatureTemplate.dmgschool = uint32(fields[27].GetInt8()); + creatureTemplate.attackpower = fields[28].GetUInt32(); + creatureTemplate.dmg_multiplier = fields[29].GetFloat(); + creatureTemplate.baseattacktime = fields[30].GetUInt32(); + creatureTemplate.rangeattacktime = fields[31].GetUInt32(); + creatureTemplate.unit_class = uint32(fields[32].GetUInt8()); + creatureTemplate.unit_flags = fields[33].GetUInt32(); + creatureTemplate.unit_flags2 = fields[34].GetUInt32(); + creatureTemplate.dynamicflags = fields[35].GetUInt32(); + creatureTemplate.family = uint32(fields[36].GetUInt8()); + creatureTemplate.trainer_type = uint32(fields[37].GetUInt8()); + creatureTemplate.trainer_class = uint32(fields[38].GetUInt8()); + creatureTemplate.trainer_race = uint32(fields[39].GetUInt8()); + creatureTemplate.minrangedmg = fields[40].GetFloat(); + creatureTemplate.maxrangedmg = fields[41].GetFloat(); + creatureTemplate.rangedattackpower = uint32(fields[42].GetUInt16()); + creatureTemplate.type = uint32(fields[43].GetUInt8()); + creatureTemplate.type_flags = fields[44].GetUInt32(); + creatureTemplate.type_flags2 = fields[45].GetUInt32(); + creatureTemplate.lootid = fields[46].GetUInt32(); + creatureTemplate.pickpocketLootId = fields[47].GetUInt32(); + creatureTemplate.SkinLootId = fields[48].GetUInt32(); for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) - creatureTemplate.resistance[i] = fields[48 + i - 1].GetInt16(); + creatureTemplate.resistance[i] = fields[49 + i - 1].GetInt16(); for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i) - creatureTemplate.spells[i] = fields[54 + i].GetUInt32(); - - creatureTemplate.PetSpellDataId = fields[62].GetUInt32(); - creatureTemplate.VehicleId = fields[63].GetUInt32(); - creatureTemplate.mingold = fields[64].GetUInt32(); - creatureTemplate.maxgold = fields[65].GetUInt32(); - creatureTemplate.AIName = fields[66].GetString(); - creatureTemplate.MovementType = uint32(fields[67].GetUInt8()); - creatureTemplate.InhabitType = uint32(fields[68].GetUInt8()); - creatureTemplate.HoverHeight = fields[69].GetFloat(); - creatureTemplate.ModHealth = fields[70].GetFloat(); - creatureTemplate.ModMana = fields[71].GetFloat(); - creatureTemplate.ModManaExtra = fields[72].GetFloat(); - creatureTemplate.ModArmor = fields[73].GetFloat(); - creatureTemplate.RacialLeader = fields[74].GetBool(); + creatureTemplate.spells[i] = fields[55 + i].GetUInt32(); + + creatureTemplate.PetSpellDataId = fields[63].GetUInt32(); + creatureTemplate.VehicleId = fields[64].GetUInt32(); + creatureTemplate.mingold = fields[65].GetUInt32(); + creatureTemplate.maxgold = fields[66].GetUInt32(); + creatureTemplate.AIName = fields[67].GetString(); + creatureTemplate.MovementType = uint32(fields[68].GetUInt8()); + creatureTemplate.InhabitType = uint32(fields[69].GetUInt8()); + creatureTemplate.HoverHeight = fields[70].GetFloat(); + creatureTemplate.ModHealth = fields[71].GetFloat(); + creatureTemplate.ModMana = fields[72].GetFloat(); + creatureTemplate.ModManaExtra = fields[73].GetFloat(); + creatureTemplate.ModArmor = fields[74].GetFloat(); + creatureTemplate.RacialLeader = fields[75].GetBool(); for (uint8 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i) - creatureTemplate.questItems[i] = fields[75 + i].GetUInt32(); + creatureTemplate.questItems[i] = fields[76 + i].GetUInt32(); - creatureTemplate.movementId = fields[81].GetUInt32(); - creatureTemplate.RegenHealth = fields[82].GetBool(); - creatureTemplate.MechanicImmuneMask = fields[83].GetUInt32(); - creatureTemplate.flags_extra = fields[84].GetUInt32(); - creatureTemplate.ScriptID = GetScriptId(fields[85].GetCString()); + creatureTemplate.movementId = fields[82].GetUInt32(); + creatureTemplate.RegenHealth = fields[83].GetBool(); + creatureTemplate.MechanicImmuneMask = fields[84].GetUInt32(); + creatureTemplate.flags_extra = fields[85].GetUInt32(); + creatureTemplate.ScriptID = GetScriptId(fields[86].GetCString()); ++count; } diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index ea30bcbab9b..95c130e59dd 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -96,62 +96,75 @@ void WorldSession::HandleCreatureQueryOpcode(WorldPacket& recvData) uint64 guid; recvData >> guid; - CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(entry); - if (ci) + CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(entry); + if (creatureInfo) { + std::string Name, FemaleName, SubName; + Name = creatureInfo->Name; + FemaleName = creatureInfo->FemaleName; + SubName = creatureInfo->SubName; - std::string Name, SubName; - Name = ci->Name; - SubName = ci->SubName; - - int loc_idx = GetSessionDbLocaleIndex(); - if (loc_idx >= 0) + LocaleConstant locale = GetSessionDbLocaleIndex(); + if (locale >= 0) { - if (CreatureLocale const* cl = sObjectMgr->GetCreatureLocale(entry)) + if (CreatureLocale const* creatureLocale = sObjectMgr->GetCreatureLocale(entry)) { - ObjectMgr::GetLocaleString(cl->Name, loc_idx, Name); - ObjectMgr::GetLocaleString(cl->SubName, loc_idx, SubName); + ObjectMgr::GetLocaleString(creatureLocale->Name, locale, Name); + ObjectMgr::GetLocaleString(creatureLocale->FemaleName, locale, FemaleName); + ObjectMgr::GetLocaleString(creatureLocale->SubName, locale, SubName); } } - TC_LOG_DEBUG("network", "WORLD: CMSG_CREATURE_QUERY '%s' - Entry: %u.", ci->Name.c_str(), entry); - // guess size - WorldPacket data(SMSG_CREATURE_QUERY_RESPONSE, 100); - data << uint32(entry); // creature entry - data << Name; - for (int i = 0; i < 7; i++) - data << uint8(0); // name2, ..., name8 - - data << SubName; - data << ci->IconName; // "Directions" for guard, string for Icons 2.3.0 - data << uint32(ci->type_flags); // flags - data << uint32(ci->type_flags2); // unknown meaning - data << uint32(ci->type); // CreatureType.dbc - data << uint32(ci->family); // CreatureFamily.dbc - data << uint32(ci->rank); // Creature Rank (elite, boss, etc) - data << uint32(ci->KillCredit[0]); // new in 3.1, kill credit - data << uint32(ci->KillCredit[1]); // new in 3.1, kill credit - data << uint32(ci->Modelid1); // Modelid1 - data << uint32(ci->Modelid2); // Modelid2 - data << uint32(ci->Modelid3); // Modelid3 - data << uint32(ci->Modelid4); // Modelid4 - data << float(ci->ModHealth); // dmg/hp modifier - data << float(ci->ModMana); // dmg/mana modifier - data << uint8(ci->RacialLeader); - for (uint32 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i) - data << uint32(ci->questItems[i]); // itemId[6], quest drop - data << uint32(ci->movementId); // CreatureMovementInfo.dbc - data << uint32(ci->expansionUnknown); // unknown meaning + TC_LOG_DEBUG("network", "WORLD: CMSG_CREATURE_QUERY '%s' - Entry: %u.", creatureInfo->Name.c_str(), entry); + + WorldPacket data(SMSG_CREATURE_QUERY_RESPONSE, 100); // guess size + data << uint32(entry); // creature entry + data << Name; // Name + + for (uint8 i = 0; i < 3; i++) + data << uint8(0); // name2, ..., name3 + + data << FemaleName; // FemaleName + + for (uint8 i = 0; i < 3; i++) + data << uint8(0); // name5, ..., name8 + + data << SubName; // SubName + data << creatureInfo->IconName; // "Directions" for guard, string for Icons 2.3.0 + data << uint32(creatureInfo->type_flags); // flags + data << uint32(creatureInfo->type_flags2); // unknown meaning + data << uint32(creatureInfo->type); // CreatureType.dbc + data << uint32(creatureInfo->family); // CreatureFamily.dbc + data << uint32(creatureInfo->rank); // Creature Rank (elite, boss, etc) + data << uint32(creatureInfo->KillCredit[0]); // new in 3.1, kill credit + data << uint32(creatureInfo->KillCredit[1]); // new in 3.1, kill credit + data << uint32(creatureInfo->Modelid1); // Modelid1 + data << uint32(creatureInfo->Modelid2); // Modelid2 + data << uint32(creatureInfo->Modelid3); // Modelid3 + data << uint32(creatureInfo->Modelid4); // Modelid4 + data << float(creatureInfo->ModHealth); // dmg/hp modifier + data << float(creatureInfo->ModMana); // dmg/mana modifier + data << uint8(creatureInfo->RacialLeader); // RacialLeader + + for (uint8 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i) + data << uint32(creatureInfo->questItems[i]); // itemId[6], quest drop + + data << uint32(creatureInfo->movementId); // CreatureMovementInfo.dbc + data << uint32(creatureInfo->expansionUnknown); // unknown meaning + SendPacket(&data); + TC_LOG_DEBUG("network", "WORLD: Sent SMSG_CREATURE_QUERY_RESPONSE"); } else { TC_LOG_DEBUG("network", "WORLD: CMSG_CREATURE_QUERY - NO CREATURE INFO! (GUID: %u, ENTRY: %u)", GUID_LOPART(guid), entry); + WorldPacket data(SMSG_CREATURE_QUERY_RESPONSE, 4); data << uint32(entry | 0x80000000); SendPacket(&data); + TC_LOG_DEBUG("network", "WORLD: Sent SMSG_CREATURE_QUERY_RESPONSE"); } } |