void Player::_InitialReputation() { // Generate Initial Reputation Values FactionReputation * rep; FactionDBC * f; int32 BaseRep = 0; uint32 j; uint32 RaceMask = getRaceMask(); for(uint32 i = 0; i < dbcFaction.GetNumRows(); ++i) { f = dbcFaction.LookupRow(i); if(f == 0) continue; // Get Base Reputation for(j = 0; j < 4; ++j) { if(f->baseRepMask[j] & RaceMask) { BaseRep = f->baseRepValue[j]; break; } } if(j != 4 && f->RepListId >= 0) { // This is one we can add. rep = new FactionReputation; rep->standing = BaseRep; rep->flag = 0; rep->baseStanding = BaseRep; if(GetReputationRankFromStanding(BaseRep) <= STANDING_HOSTILE) SetFlagAtWar(rep->flag); // Visible-ness shit. if((f->parentFaction == 469 && GetTeam() == 0) || // Alliance own faction. (f->parentFaction == 67 && GetTeam() == 1) ) // Horde own faction. { SetFlagVisible(rep->flag); SetFlagPeaceForced(rep->flag); } if((f->parentFaction == 469 && GetTeam() == 1) || // Alliance own faction. (f->parentFaction == 67 && GetTeam() == 0) ) // Horde own faction. { SetForcedInvisible(rep->flag); } reputationByListId[f->RepListId] = rep; } else { // No default standing. continue; } m_reputation[f->ID] = rep; } }
bool Player::AddNewFaction( FactionDBC * dbc, int32 standing, bool base ) // if ( base ) standing = baseRepValue { if ( dbc == NULL || dbc->RepListId < 0 ) return false; uint32 RaceMask = getRaceMask(); uint32 ClassMask = getClassMask(); for ( uint32 i = 0; i < 4; i++ ) { if ( dbc->RaceMask[i] & RaceMask && ( dbc->ClassMask[i] & ClassMask || dbc->ClassMask[i] == 0 ) ) { FactionReputation * rep = new FactionReputation; rep->flag = dbc->repFlags[i]; rep->baseStanding = dbc->baseRepValue[i]; rep->standing = ( base ) ? dbc->baseRepValue[i] : standing; m_reputation[dbc->ID] = rep; reputationByListId[dbc->RepListId] = rep; return true; } } return false; }
bool Player::AddNewFaction(DBC::Structures::FactionEntry const* dbc, int32 standing, bool base) // if (base) standing = baseRepValue { if (dbc == NULL || dbc->RepListId < 0) return false; uint32 RaceMask = getRaceMask(); uint32 ClassMask = getClassMask(); for (uint8 i = 0; i < 4; i++) { if ((dbc->RaceMask[i] & RaceMask || (dbc->RaceMask[i] == 0 && dbc->ClassMask[i] != 0)) && (dbc->ClassMask[i] & ClassMask || dbc->ClassMask[i] == 0)) { FactionReputation* rep = new FactionReputation; rep->flag = static_cast<uint8>(dbc->repFlags[i]); rep->baseStanding = dbc->baseRepValue[i]; rep->standing = (base) ? dbc->baseRepValue[i] : standing; m_reputation[dbc->ID] = rep; reputationByListId[dbc->RepListId] = rep; return true; } } return false; }
void CPlayer::SendMultiVendorInventory(uint32 cEntry, ObjectGuid guid) { DEBUG_LOG("WORLD: Sent SMSG_LIST_INVENTORY"); CreatureInfo const *cinfo = sObjectMgr.GetCreatureTemplate(cEntry); if (!cinfo) { BoxChat << MSG_COLOR_WHITE << "This vendor seems to be removed from the database. Please report that creature " << cEntry << " is missing." << std::endl; return; } Creature* pCreature = GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_NONE); if (!pCreature) { DEBUG_LOG("WORLD: SendMultiVendorInventory - %s not found or you can't interact with him.", guid.GetString().c_str()); SendSellError(SELL_ERR_CANT_FIND_VENDOR, NULL, guid, 0); return; } VendorItemData const* vItems = sObjectMgr.GetNpcVendorItemList(cEntry); VendorItemData const* tItems = cinfo->VendorTemplateId ? sObjectMgr.GetNpcVendorTemplateItemList(cinfo->VendorTemplateId) : NULL; if (!vItems && !tItems) { WorldPacket data(SMSG_LIST_INVENTORY, (8 + 1 + 1)); data << GetObjectGuid(); data << uint8(0); // count==0, next will be error code data << uint8(0); // "Vendor has no inventory" GetSession()->SendPacket(&data); return; } uint8 customitems = vItems ? vItems->GetItemCount() : 0; uint8 numitems = customitems + (tItems ? tItems->GetItemCount() : 0); uint8 count = 0; WorldPacket data(SMSG_LIST_INVENTORY, (8 + 1 + numitems * 8 * 4)); data << GetObjectGuid(); SetMultiVendor(cEntry, guid); size_t count_pos = data.wpos(); data << uint8(count); for (auto i = 0; i < numitems; ++i) { VendorItem const* crItem = i < customitems ? vItems->GetItem(i) : tItems->GetItem(i - customitems); if (crItem) { uint32 itemId = crItem->item; ItemPrototype const* pProto = ObjectMgr::GetItemPrototype(itemId); if (pProto) { if (!isGameMaster()) { // class wrong item skip only for bindable case if ((pProto->AllowableClass & getClassMask()) == 0 && pProto->Bonding == BIND_WHEN_PICKED_UP) continue; // race wrong item skip always if ((pProto->AllowableRace & getRaceMask()) == 0) continue; } ++count; data << uint32(count); data << uint32(itemId); data << uint32(pProto->DisplayInfoID); data << uint32(~0); data << uint32(pProto->BuyPrice); data << uint32(pProto->MaxDurability); data << uint32(pProto->BuyCount); data << uint32(crItem->ExtendedCost); } } } if (count == 0) { data << uint8(0); // "Vendor has no inventory" GetSession()->SendPacket(&data); return; } data.put<uint8>(count_pos, count); GetSession()->SendPacket(&data); }