Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void ProtocolGame::sendBestiaryLine(const MonsterClass_t monsterClass, bool loaded)
- {
- NetworkMessage msg;
- msg.addByte(238);
- player->m_bestiaryLoaded[monsterClass] = loaded;
- player->m_bestiaryLoad = loaded;
- BestiaryMap bestiaryMap;
- player->getBestiaryByMonsterClass(monsterClass, bestiaryMap);
- player->m_bestiaryLoaded[monsterClass] = true;
- if(!loaded)
- player->m_bestiaryLoad = true;
- msg.addByte(monsterClass);
- msg.add<uint16_t>(bestiaryMap.size());
- if (!bestiaryMap.empty())
- {
- for (BestiaryMap::const_iterator it = bestiaryMap.begin(); it != bestiaryMap.end(); it++)
- {
- MonsterType* mType = g_monsters.getMonsterType(it->first);
- if (mType)
- {
- msg.addByte(0x01);
- uint32_t kills = it->second.kills;
- if (player->hasFlag(PlayerFlag_CannotBeAttacked))
- kills = 100000;
- msg.add<uint32_t>(kills);
- msg.addString(mType->name);
- msg.addString(mType->name);
- AddOutfit(msg, mType->info.outfit);
- LootItemList lootList = it->second.lootItemList;
- msg.addByte(lootList.size());
- if (!lootList.empty())
- {
- for (LootItemList::const_iterator _it = lootList.begin(); _it != lootList.end(); ++_it)
- {
- msg.add<uint32_t>(_it->second);
- const ItemType& itemType = Item::items[_it->first];
- msg.add<uint16_t>(itemType.clientId);
- msg.addString(itemType.name);
- }
- }
- msg.add<uint32_t>(mType->info.healthMax);
- msg.add<uint32_t>(mType->info.experience);
- msg.add<uint16_t>(mType->info.reflection);
- for(uint32_t combatType = 0; combatType <= 11; ++combatType)
- {
- CombatType_t type = indexToCombatType(combatType);
- if(hasBitSet((uint32_t)type, mType->info.damageImmunities))
- msg.addByte(100);
- else
- msg.addByte(mType->info.elementMap[type]);
- }
- }
- else
- msg.addByte(0x00);
- }
- player->clearCacheBestiary(bestiaryMap);
- }
- writeToOutputBuffer(msg);
- }
Advertisement
Add Comment
Please, Sign In to add comment