Jump to content

lecails

Members
  • Posts

    177
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Everything posted by lecails

  1. If know learn c++ , you can make mangos the best . work is needed before getting something
  2. The project release is not the same as debug . Use the officiel repositery instead of custom .
  3. Your query is too long and the time for executed is so long (1742 ms),try improve more precisely your query .
  4. Maybe whith SpellClic instead of GOSSIP make a better result.
  5. You can reproduce crash ? If you can you have already a way . You or core try to remove something(I think creature , .npc del ?) , its begin in Unit.cpp .
  6. You don't know everything about the client so you can't stop cheat.
  7. Use SD2 or mangos core its the same , but the SD2 is more properly , its an organisation question.But your project its not easy.
  8. Have you enable vmap.indoorCheckInterval in mangosd.conf ?
  9. I already remove previous quest and follow quest and other, its not work , I check and recheck and its not in the quest side , I have added a working quest on the npc and its not work too. So , I would know if there is a possible conflict whith npc flag and other misc ?
  10. Tame beast not work whith , he says incorrect target , I think he targets caster instead of the beast .
  11. Hi,I have a strange problem whith Highlord Tirion Fordring npc , in the normal way he must purpose some quest as "Honor Above All Else" but even with npc_flag=2 and quest attributed , he doesnt give quest ,I tested and its not the quest side so I 'm ask questions .
  12. lecails

    Spell bug

    I have two solution for you ! Buy C++ for dummie OR use search box .
  13. I have found for you the sql query, you need just insert online field in the two sql query (declined name and whithout): In characterHandler.cpp void WorldSession::HandleCharEnumOpcode( WorldPacket & /*recv_data*/ ) { /// get all the data necessary for loading all characters (along with their pets) on the account CharacterDatabase.AsyncPQuery(&chrHandler, &CharacterHandler::HandleCharEnumCallback, GetAccountId(), !sWorld.getConfig(CONFIG_BOOL_DECLINED_NAMES_USED) ? // ------- Query Without Declined Names -------- // 0 1 2 3 4 5 6 7 "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.playerBytes, characters.playerBytes2, characters.level, " // 8 9 10 11 12 13 14 "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, guild_member.guildid, characters.playerFlags, " // 15 16 17 18 19 "characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache " "FROM characters LEFT JOIN character_pet ON characters.guid=character_pet.owner AND character_pet.slot='%u' " "LEFT JOIN guild_member ON characters.guid = guild_member.guid " "WHERE characters.account = '%u' ORDER BY characters.guid" : // --------- Query With Declined Names --------- // 0 1 2 3 4 5 6 7 "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.playerBytes, characters.playerBytes2, characters.level, " // 8 9 10 11 12 13 14 "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, guild_member.guildid, characters.playerFlags, " // 15 16 17 18 19 20 "characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, character_declinedname.genitive " "FROM characters LEFT JOIN character_pet ON characters.guid = character_pet.owner AND character_pet.slot='%u' " "LEFT JOIN character_declinedname ON characters.guid = character_declinedname.guid " "LEFT JOIN guild_member ON characters.guid = guild_member.guid " "WHERE characters.account = '%u' ORDER BY characters.guid", PET_SAVE_AS_CURRENT, GetAccountId()); } After add a condition (if online = 2 set to 0) in the void bool Player::BuildEnumData( QueryResult * result, WorldPacket * p_data ) in player.cpp as i say in the reply above.
  14. I think , the loading part is in characterHandler.cpp more precisly in player.cpp: bool Player::BuildEnumData( QueryResult * result, WorldPacket * p_data ) { // 0 1 2 3 4 5 6 7 // "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.playerBytes, characters.playerBytes2, characters.level, " // 8 9 10 11 12 13 14 // "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, guild_member.guildid, characters.playerFlags, " // 15 16 17 18 19 20 // "characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, character_declinedname.genitive " Field *fields = result->Fetch(); uint32 guid = fields[0].GetUInt32(); uint8 pRace = fields[2].GetUInt8(); uint8 pClass = fields[3].GetUInt8(); PlayerInfo const *info = sObjectMgr.GetPlayerInfo(pRace, pClass); if(!info) { sLog.outError("Player %u has incorrect race/class pair. Don't build enum.", guid); return false; } *p_data << uint64(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER)); *p_data << fields[1].GetString(); // name *p_data << uint8(pRace); // race *p_data << uint8(pClass); // class *p_data << uint8(fields[4].GetUInt8()); // gender uint32 playerBytes = fields[5].GetUInt32(); *p_data << uint8(playerBytes); // skin *p_data << uint8(playerBytes >> 8); // face *p_data << uint8(playerBytes >> 16); // hair style *p_data << uint8(playerBytes >> 24); // hair color uint32 playerBytes2 = fields[6].GetUInt32(); *p_data << uint8(playerBytes2 & 0xFF); // facial hair *p_data << uint8(fields[7].GetUInt8()); // level *p_data << uint32(fields[8].GetUInt32()); // zone *p_data << uint32(fields[9].GetUInt32()); // map *p_data << fields[10].GetFloat(); // x *p_data << fields[11].GetFloat(); // y *p_data << fields[12].GetFloat(); // z *p_data << uint32(fields[13].GetUInt32()); // guild id uint32 char_flags = 0; uint32 playerFlags = fields[14].GetUInt32(); uint32 atLoginFlags = fields[15].GetUInt32(); if(playerFlags & PLAYER_FLAGS_HIDE_HELM) char_flags |= CHARACTER_FLAG_HIDE_HELM; if(playerFlags & PLAYER_FLAGS_HIDE_CLOAK) char_flags |= CHARACTER_FLAG_HIDE_CLOAK; if(playerFlags & PLAYER_FLAGS_GHOST) char_flags |= CHARACTER_FLAG_GHOST; if(atLoginFlags & AT_LOGIN_RENAME) char_flags |= CHARACTER_FLAG_RENAME; if(sWorld.getConfig(CONFIG_BOOL_DECLINED_NAMES_USED)) { if(!fields[20].GetCppString().empty()) char_flags |= CHARACTER_FLAG_DECLINED; } else char_flags |= CHARACTER_FLAG_DECLINED; *p_data << uint32(char_flags); // character flags // character customize flags *p_data << uint32(atLoginFlags & AT_LOGIN_CUSTOMIZE ? CHAR_CUSTOMIZE_FLAG_CUSTOMIZE : CHAR_CUSTOMIZE_FLAG_NONE); // First login *p_data << uint8(atLoginFlags & AT_LOGIN_FIRST ? 1 : 0); // Pets info { uint32 petDisplayId = 0; uint32 petLevel = 0; uint32 petFamily = 0; // show pet at selection character in character list only for non-ghost character if (result && !(playerFlags & PLAYER_FLAGS_GHOST) && (pClass == CLASS_WARLOCK || pClass == CLASS_HUNTER || pClass == CLASS_DEATH_KNIGHT)) { uint32 entry = fields[16].GetUInt32(); CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(entry); if(cInfo) { petDisplayId = fields[17].GetUInt32(); petLevel = fields[18].GetUInt32(); petFamily = cInfo->family; } } *p_data << uint32(petDisplayId); *p_data << uint32(petLevel); *p_data << uint32(petFamily); } Tokens data = StrSplit(fields[19].GetCppString(), " "); for (uint8 slot = 0; slot < EQUIPMENT_SLOT_END; slot++) { uint32 visualbase = slot * 2; uint32 item_id = GetUInt32ValueFromArray(data, visualbase); const ItemPrototype * proto = ObjectMgr::GetItemPrototype(item_id); if(!proto) { *p_data << uint32(0); *p_data << uint8(0); *p_data << uint32(0); continue; } SpellItemEnchantmentEntry const *enchant = NULL; uint32 enchants = GetUInt32ValueFromArray(data, visualbase + 1); for(uint8 enchantSlot = PERM_ENCHANTMENT_SLOT; enchantSlot <= TEMP_ENCHANTMENT_SLOT; ++enchantSlot) { // values stored in 2 uint16 uint32 enchantId = 0x0000FFFF & (enchants >> enchantSlot*16); if(!enchantId) continue; if ((enchant = sSpellItemEnchantmentStore.LookupEntry(enchantId))) break; } *p_data << uint32(proto->DisplayInfoID); *p_data << uint8(proto->InventoryType); *p_data << uint32(enchant ? enchant->aura_id : 0); } *p_data << uint32(0); // bag 1 display id *p_data << uint8(0); // bag 1 inventory type *p_data << uint32(0); // enchant? *p_data << uint32(0); // bag 2 display id *p_data << uint8(0); // bag 2 inventory type *p_data << uint32(0); // enchant? *p_data << uint32(0); // bag 3 display id *p_data << uint8(0); // bag 3 inventory type *p_data << uint32(0); // enchant? *p_data << uint32(0); // bag 4 display id *p_data << uint8(0); // bag 4 inventory type *p_data << uint32(0); // enchant? return true; } You need analyse the code and insert into the sql query in top, online check then a condition for characters whith online='2' to set '0' .The better spot is just after the sql SELECT query and fetch array , just check if the field online is '2' set to '0' and continue .
  15. I hav'nt test yet but its going to happen ^^ .
  16. Its a simple possibility to create couple of characters , but the goal is not the simplicity ,you need stuff your fake characters its take more time and at the end , the real player will see that couple of characters are fake because if its all the time the same characters are online and in the same zone (player say : they don't move?),the same level, i think we must choose between simplicity:basic way or difficulty but advanced way . With difficulty way , the fakeplayers are true player so they move zone change ,level change ,stuff change whithout that you lost more time . I will help you as soon as I have time , its a good project . Best regards
  17. I hav'nt test yet your patch but I test a small modification i have just put 1 in field online for 1 real character , I know that this characters will not show in who list but there is as i say a bug , when you try to login the client block on loading characters , I think online = 2 for difference between fake player and true in db and whith online = 2 you can modify properly for loading characters, create just a condition in loading characters part whith sql query for check online = 2 in this case sql query to put online = 0.
  18. Ok great I test it when I have time . And improve it
  19. Is there a solution for dual spe conflict ?
  20. I just hope that this spell have a define cast zone .
  21. test it before and if it dosnt work he just need a exeption wich jump this code .
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use