// *************************************************************************** static DECLARE_INTERFACE_USER_FCT(getOutpostBuildingDesc) { if(args.size()!=1) { nlwarning("<getOutpostBuildingDesc> requires 1 arg (int=sheet)"); return false; } // get arg uint32 nSheet = (uint32)args[0].getInteger(); if (nSheet == 0) { result.setUCString(string("")); return true; } // get sheet name ucstring name; CEntitySheet *pSheet= SheetMngr.get(CSheetId(nSheet)); COutpostBuildingSheet *pOBS = dynamic_cast<COutpostBuildingSheet*>(pSheet); if (pOBS && pOBS->OBType == COutpostBuildingSheet::OB_Empty) { // Don't display description if the building is an empty slot name = ""; } else { STRING_MANAGER::CStringManagerClient *pSMC = STRING_MANAGER::CStringManagerClient::instance(); name = pSMC->getOutpostBuildingLocalizedDescription(CSheetId(nSheet)); } result.setUCString(name); return true; }
// *************************************************************************** void CDBGroupListSheetTrade::CSheetChildTrade::updateViewText(CDBGroupListSheetText *pFather) { H_AUTO(CDBGroupListSheetTrade_updateViewText); ucstring text; Ctrl->getContextHelp(text); // Append first the type of the sheet to select switch ( Ctrl->getSheetCategory() ) { case CDBCtrlSheet::Item: break; // none for item. consider useless case CDBCtrlSheet::Pact: text= CI18N::get("uiBotChatPact") + text; break; case CDBCtrlSheet::Skill: text= CI18N::get("uiBotChatSkill") + text; break; case CDBCtrlSheet::GuildFlag: text= CI18N::get("uiBotChatSkill") + text; break; case CDBCtrlSheet::Phrase: text= CI18N::get("uiBotChatPhrase") + text; break; default: break; } // For outpost building get description from string manager if(Ctrl->getType() == CCtrlSheetInfo::SheetType_OutpostBuilding) { const COutpostBuildingSheet *pOBS = Ctrl->asOutpostBuildingSheet(); if (pOBS != NULL) { STRING_MANAGER::CStringManagerClient *pSMC = STRING_MANAGER::CStringManagerClient::instance(); text += string("\n") + pSMC->getOutpostBuildingLocalizedDescription(CSheetId(Ctrl->getSheetId())); text += "\n" + CI18N::get("uiBotChatPrice") + NLMISC::formatThousands(toString(pOBS->CostDapper)); text += CI18N::get("uiBotChatTime") + toString(pOBS->CostTime/60) + CI18N::get("uiBotChatTimeMinute"); if ((pOBS->CostTime % 60) != 0) text += toString(pOBS->CostTime%60) + CI18N::get("uiBotChatTimeSecond"); } } // For Phrase, if combat, add Weapon compatibility if(Ctrl->getSheetCategory() == CDBCtrlSheet::Phrase) { // For combat action, Append weapon restriction ucstring weaponRestriction; CSPhraseManager *pPM= CSPhraseManager::getInstance(); bool melee,range; pPM->getCombatWeaponRestriction(weaponRestriction, Ctrl->getSheetId(),melee,range); // don't add also if no combat restriction if(!weaponRestriction.empty() && weaponRestriction!=CI18N::get("uiawrSF")) { weaponRestriction= CI18N::get("uiPhraseWRHeader") + weaponRestriction; text+= "\n" + weaponRestriction; } } // Get the Text color ucstring colorTag("@{FFFF}"); if(Ctrl->getType() == CCtrlSheetInfo::SheetType_Item) { if(!Ctrl->checkItemRequirement()) colorTag= CI18N::get("uiItemCannotUseColor"); } // For item, add some information if(Ctrl->getType() == CCtrlSheetInfo::SheetType_Item) { const CItemSheet *pIS = Ctrl->asItemSheet(); if(pIS) { // Add craft info for MP if(pIS->Family==ITEMFAMILY::RAW_MATERIAL) { ucstring ipList; pIS->getItemPartListAsText(ipList); if(ipList.empty()) { if(pIS->isUsedAsCraftRequirement()) text+= "\n" + CI18N::get("uiItemMpCraftRequirement"); else text+= "\n" + CI18N::get("uiItemMpNoCraft"); } else text+= "\n" + CI18N::get("uiItemMpCanCraft") + ipList; } } } // get the price CDBGroupListSheetTrade *zeFather = safe_cast<CDBGroupListSheetTrade*>(pFather); if (zeFather->priceWanted()) { if(Ctrl->getSheetCategory() == CDBCtrlSheet::Phrase) { if (LastPrice != -1) text+= "\n" + CI18N::get("uiBotChatSkillPointCost") + toString(LastPrice); else text+= "\n" + CI18N::get("uiBotChatSkillPointCostNotReceived"); } else { bool guildOption= false; // Special case if its a guild option if (Ctrl->getType() == CCtrlSheetInfo::SheetType_Item) { const CItemSheet *pIS = Ctrl->asItemSheet(); if (pIS && pIS->Family == ITEMFAMILY::GUILD_OPTION) { text+= "\n" + CI18N::get("uiBotChatSkillPointCost") + toString(pIS->GuildOption.XPCost); text+= "\n" + CI18N::get("uiBotChatPrice") + NLMISC::formatThousands(toString(pIS->GuildOption.MoneyCost)); guildOption= true; } } // if not a guild option if(!guildOption) { if (LastPrice != -1) { const CItemSheet *pIS = Ctrl->asItemSheet(); uint factor= 1; if(zeFather->getMultiplyPriceByQuantityFlag()) factor= LastQuantity; // factor on price float priceFactor = 1.0f; // Append std price bool displayMulPrice= pIS && pIS->Stackable>1 && zeFather->getMultiplyPriceByQuantityFlag(); // If seller type wanted, don't mul price if the item comes from a NPC if(zeFather->sellerTypeWanted() && LastSellerType==BOTCHATTYPE::NPC) displayMulPrice= false; // check if we should apply fame factor if( zeFather->applyFamePriceFactor() ) { priceFactor = NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:FAME_PRICE_FACTOR")->getValue16()/10000.0f; } // display with correct format if (LastPrice > 0) { if(displayMulPrice) text+= "\n" + CI18N::get("uiBotChatPrice") + NLMISC::formatThousands(toString(sint32(LastPrice * priceFactor))) + " (" + NLMISC::formatThousands(toString( sint32(factor) * sint32(LastPrice * priceFactor) )) + ")"; else text+= "\n" + CI18N::get("uiBotChatPrice") + NLMISC::formatThousands(toString( sint32(factor * LastPrice * priceFactor) )); } if ((LastFactionPointPrice != 0) && (LastFactionType >= PVP_CLAN::BeginClans) && (LastFactionType <= PVP_CLAN::EndClans)) { if (LastPrice > 0) text += ". "; else text+= "\n"; text+= CI18N::get("uiBotChatFactionType") + PVP_CLAN::toString((PVP_CLAN::TPVPClan)LastFactionType) + CI18N::get("uiBotChatFactionPointPrice") + NLMISC::formatThousands(toString(LastFactionPointPrice)); } // some additional info for resale if(zeFather->sellerTypeWanted()) { // Append retire price if reseller type OK (only if the item belongs to the player) if(LastSellerType == BOTCHATTYPE::User || LastSellerType == BOTCHATTYPE::ResaleAndUser || LastSellerType == BOTCHATTYPE::UserRetirable || LastSellerType == BOTCHATTYPE::ResaleAndUserRetirable ) { // append price if(pIS && pIS->Stackable>1 && zeFather->getMultiplyPriceByQuantityFlag()) text+= CI18N::get("uiBotChatRetirePrice") + NLMISC::formatThousands(toString(LastPriceRetire)) + " (" + NLMISC::formatThousands(toString(factor * LastPriceRetire)) + ")"; else text+= CI18N::get("uiBotChatRetirePrice") + NLMISC::formatThousands(toString(factor * LastPriceRetire)); // set resale time left ucstring fmt= CI18N::get("uiBotChatResaleTimeLeft"); strFindReplace(fmt, "%d", toString(LastResaleTimeLeft/RYZOM_DAY_IN_HOUR)); strFindReplace(fmt, "%h", toString(LastResaleTimeLeft%RYZOM_DAY_IN_HOUR)); text+= "\n" + fmt; // force special color (according if retirable or not) if(LastSellerType == BOTCHATTYPE::UserRetirable || LastSellerType == BOTCHATTYPE::ResaleAndUserRetirable) colorTag= CI18N::get("uiItemUserSellColor"); else colorTag= CI18N::get("uiItemUserSellColorNotRetirable"); } // Append (NPC) tag if NPC item if(LastSellerType == BOTCHATTYPE::NPC) { text+= "\n" + CI18N::get("uiBotChatNPCTag"); } // else display the name of the vendor (not if this is the player himself, to avoid flood) else if (LastSellerType == BOTCHATTYPE::Resale) { text+= "\n" + CI18N::get("uiBotChatVendorTag") + VendorNameString; } } } else { // If comes from User List, -1 means "Already Sold" if(zeFather->sellerTypeWanted() && (LastSellerType == BOTCHATTYPE::User || LastSellerType == BOTCHATTYPE::UserRetirable) ) { text+= "\n" + CI18N::get("uiItemSold"); // force special color colorTag= CI18N::get("uiItemSoldColor"); } // error case else { text+= "\n" + CI18N::get("uiPriceNotReceived"); } } } } } // setup color and text text= colorTag + text; Text->setTextFormatTaged(text); }