ad03911fe3
--HG-- branch : gui-refactoring
3072 lines
125 KiB
C++
3072 lines
125 KiB
C++
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
// Copyright (C) 2010 Winch Gate Property Limited
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as
|
|
// published by the Free Software Foundation, either version 3 of the
|
|
// License, or (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
#include "stdpch.h"
|
|
|
|
#include "game_share/trade_slot_type.h"
|
|
#include "game_share/skills.h"
|
|
#include "game_share/bot_chat_types.h"
|
|
#include "game_share/msg_ais_egs_gen.h"
|
|
#include "../client_sheets/item_sheet.h"
|
|
#include "../client_sheets/outpost_building_sheet.h"
|
|
//
|
|
#include "bot_chat_page_trade.h"
|
|
#include "interface_manager.h"
|
|
#include "interface_group.h"
|
|
#include "inventory_manager.h"
|
|
#include "../net_manager.h"
|
|
#include "action_handler.h"
|
|
#include "bot_chat_page_all.h"
|
|
#include "bot_chat_manager.h"
|
|
#include "dbctrl_sheet.h"
|
|
#include "group_editbox.h"
|
|
#include "group_tab.h"
|
|
#include "group_container.h"
|
|
#include "action_handler_help.h"
|
|
#include "../string_manager_client.h"
|
|
#include "group_container.h"
|
|
#include "dbgroup_list_sheet_text.h"
|
|
#include "ctrl_text_button.h"
|
|
#include "../client_cfg.h"
|
|
#include "../init_main_loop.h"
|
|
#include "guild_manager.h"
|
|
#include "../sheet_manager.h"
|
|
#include "../user_entity.h"
|
|
#include "view_bitmap.h"
|
|
#include "nel/misc/common.h"
|
|
|
|
using namespace std::rel_ops;
|
|
|
|
|
|
using namespace std;
|
|
using namespace NLMISC;
|
|
|
|
static const char *WIN_BOT_CHAT_PAGE_TRADE = "ui:interface:bot_chat_trade";
|
|
static const char *WIN_BOT_CHAT_PAGE_BUY = "ui:interface:bot_chat_buy";
|
|
static const char *WIN_BOT_CHAT_SELL_BUY_ITEM = "ui:interface:bot_chat_buy_sell_item";
|
|
static const char *WIN_BOT_CHAT_CHANGE_BUY_FILTER = "ui:interface:bot_chat_change_buy_filter";
|
|
static const char *WIN_BOT_CHAT_CHANGE_BUY_FILTER_MP = "ui:interface:bot_chat_change_buy_filter_mp";
|
|
static const char *WIN_BOT_CHAT_CHANGE_BUY_FILTER_CLASS = "ui:interface:bot_chat_change_buy_filter_class";
|
|
static const char *WIN_BOT_CHAT_CHANGE_BUY_FILTER_ITEM_TYPE = "ui:interface:bot_chat_change_buy_filter_item_type";
|
|
static const char *WIN_BOT_CHAT_DESTROY_ITEM = "ui:interface:bot_chat_destroy_confirm_modal";
|
|
|
|
|
|
#define DB_BOT_CHAT_BASE_BUY_FILTER "UI:SAVE:BOTCHAT_FILTER"
|
|
|
|
|
|
// fill the help setup infos for the trade modal
|
|
static void fillHelpSetupInfosForTrade(CSheetHelpSetup &dest, CDBCtrlSheet *sheet, CInterfaceGroup *helpGroup)
|
|
{
|
|
dest.HelpWindow = helpGroup;
|
|
dest.SrcSheet = sheet;
|
|
dest.DestSheet = dynamic_cast<CDBCtrlSheet *>(helpGroup->getCtrl("buy_sell_slot"));
|
|
dest.ViewText = "help_text";
|
|
dest.ScrollTextGroup = "scroll_text";
|
|
dest.PrefixForExtra= ":header_opened:scroll_text:text_list:";
|
|
dest.FromBotChat= true;
|
|
|
|
// hide some interface elements by default
|
|
resetSheetHelp(dest);
|
|
}
|
|
|
|
|
|
/** Listener to update items infos in the buy / sell dlg
|
|
*/
|
|
class CInfoWindow : public IItemInfoWaiter
|
|
{
|
|
public:
|
|
// the sheet for which help must be updated
|
|
CDBCtrlSheet *Sheet;
|
|
public:
|
|
virtual void infoReceived()
|
|
{
|
|
CSheetHelpSetup helpSetup;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
CGroupContainer *ig = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
fillHelpSetupInfosForTrade(helpSetup, Sheet, ig);
|
|
refreshItemHelp(helpSetup);
|
|
}
|
|
};
|
|
static CInfoWindow InfoWindowUpdater;
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::CItemCheck::reset()
|
|
{
|
|
_SheetId= 0;
|
|
_Quality= 0;
|
|
_Quantity= 0;
|
|
_Price= 0;
|
|
_ResaleFlag= 0;
|
|
}
|
|
void CBotChatPageTrade::CItemCheck::init(CDBCtrlSheet *ctrl)
|
|
{
|
|
nlassert(ctrl);
|
|
_SheetId= ctrl->getSheetId();
|
|
_Quality= ctrl->getQuality();
|
|
_Quantity= ctrl->getQuantity();
|
|
_Price= ctrl->getItemPrice();
|
|
_ResaleFlag= ctrl->getItemResaleFlag();
|
|
}
|
|
bool CBotChatPageTrade::CItemCheck::test(CDBCtrlSheet *ctrl) const
|
|
{
|
|
nlassert(ctrl);
|
|
return
|
|
_SheetId== ctrl->getSheetId() &&
|
|
_Quality== ctrl->getQuality() &&
|
|
_Quantity== ctrl->getQuantity() &&
|
|
_Price== ctrl->getItemPrice() &&
|
|
_ResaleFlag== ctrl->getItemResaleFlag();
|
|
}
|
|
|
|
|
|
// *******************************************************************************************
|
|
CBotChatPageTrade::CBotChatPageTrade()
|
|
{
|
|
_TradePagesObs.setListType(CHugeListObs::Trading);
|
|
_BuyDlgOn = false;
|
|
_SellDlgOn = false;
|
|
_ResaleEdit = false;
|
|
_QuantityEdit = false;
|
|
_UsePriceRetire = false;
|
|
_CannotValidateBecauseRetireNotAvailable = false;
|
|
_QuantityCheck = 0;
|
|
_CurrItemIndex = 0;
|
|
_BuyOnly = false;
|
|
_CurrItemSheet = NULL;
|
|
_BuyMean = Money;
|
|
_FamePriceFactorLeaf = NULL;
|
|
_FilterBuyDlgMaxValue= 0;
|
|
_DownloadComplete = false;
|
|
}
|
|
|
|
// *******************************************************************************************
|
|
void CBotChatPageTrade::init()
|
|
{
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
if (NLGUI::CDBManager::getInstance()->getDbBranch("SERVER:TRADING"))
|
|
{
|
|
NLGUI::CDBManager::getInstance()->addBranchObserver( "SERVER:TRADING", &_TradePagesObs);
|
|
}
|
|
|
|
_FamePriceFactorLeaf = NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:FAME_PRICE_FACTOR");
|
|
}
|
|
|
|
// *******************************************************************************************
|
|
void CBotChatPageTrade::invalidateCoords()
|
|
{
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
CGroupContainer *gc = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(_BuyOnly ? WIN_BOT_CHAT_PAGE_BUY : WIN_BOT_CHAT_PAGE_TRADE));
|
|
if (!gc) return;
|
|
// invalidate buy group
|
|
gc->invalidateCoords();
|
|
}
|
|
|
|
// *******************************************************************************************
|
|
void CBotChatPageTrade::begin()
|
|
{
|
|
CBotChatPage::begin();
|
|
if (!_BuyOnly)
|
|
{
|
|
activateWindow(WIN_BOT_CHAT_PAGE_TRADE, true);
|
|
}
|
|
else
|
|
{
|
|
activateWindow(WIN_BOT_CHAT_PAGE_BUY, true);
|
|
}
|
|
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
NLGUI::CDBManager::getInstance()->getDbProp(BOT_CHAT_BASE_DB_PATH ":TRADE")->setValue32(0);
|
|
|
|
// at each new bot chat trade, we must reset filter for ItemPart and ItemType (NB: server should do the same)
|
|
resetItemPartAndTypeFilters();
|
|
|
|
// reset also the filters at each open if user wants to
|
|
CCDBNodeLeaf *dbResetFilterOnOpen= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":RESET_ON_OPEN" , false);
|
|
if(dbResetFilterOnOpen && dbResetFilterOnOpen->getValueBool() && (_BuyMean == Money) )
|
|
{
|
|
// temporary value for conversions
|
|
sint32 value;
|
|
|
|
// Reset Price
|
|
CCDBNodeLeaf *dbPriceMin= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_PRICE") , false);
|
|
CCDBNodeLeaf *dbPriceMax= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_PRICE") , false);
|
|
if(dbPriceMin) dbPriceMin->setValue32(0);
|
|
if(dbPriceMax)
|
|
{
|
|
fromString(pIM->getDefine("bot_chat_filter_max_price"), value);
|
|
dbPriceMax->setValue32(value);
|
|
}
|
|
|
|
// Reset Quality
|
|
CCDBNodeLeaf *dbQualityMin= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_QUALITY") , false);
|
|
CCDBNodeLeaf *dbQualityMax= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_QUALITY") , false);
|
|
if(dbQualityMin) dbQualityMin->setValue32(0);
|
|
if(dbQualityMax)
|
|
{
|
|
fromString(pIM->getDefine("bot_chat_filter_max_quality"), value);
|
|
dbQualityMax->setValue32(value);
|
|
}
|
|
|
|
// Reset Class
|
|
CCDBNodeLeaf *dbClassMin= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_CLASS" , false);
|
|
CCDBNodeLeaf *dbClassMax= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_CLASS" , false);
|
|
if(dbClassMin) dbClassMin->setValue32(0);
|
|
if(dbClassMax) dbClassMax->setValue32(RM_CLASS_TYPE::NumTRMClassType-1);
|
|
|
|
// send the filter, but don't reset the list, since will do just after :)
|
|
sendCurrentBuyFilterToServer(false);
|
|
}
|
|
|
|
|
|
// Start the HugeList
|
|
_TradePagesObs.start();
|
|
// If BuyMean is skillpoints, means its phrase selling => allow phrase price update (and possible client fill)
|
|
_TradePagesObs.allowPhrasePriceUpdateAndClientFill(_BuyMean == SkillPoints);
|
|
notifyDownloadComplete(false);
|
|
_DownloadComplete = false;
|
|
|
|
// update interface
|
|
CGroupContainer *gc = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(_BuyOnly ? WIN_BOT_CHAT_PAGE_BUY : WIN_BOT_CHAT_PAGE_TRADE));
|
|
if (gc)
|
|
{
|
|
// set the title
|
|
gc->setUCTitle(_Title);
|
|
// show the buy mean
|
|
CInterfaceGroup *money = dynamic_cast<CInterfaceGroup *>(gc->getGroup("money"));
|
|
if (money) money->setActive((_BuyMean == Money) || (_BuyMean == MoneyFactionPoints));
|
|
CInterfaceGroup *factionPoints = dynamic_cast<CInterfaceGroup *>(gc->getGroup("fp"));
|
|
if (factionPoints) factionPoints->setActive(_BuyMean == MoneyFactionPoints);
|
|
CInterfaceGroup *skillPoints = dynamic_cast<CInterfaceGroup *>(gc->getGroup("sp"));
|
|
if (skillPoints) skillPoints->setActive(_BuyMean == SkillPoints);
|
|
CInterfaceGroup *pMoneyGuildXP = dynamic_cast<CInterfaceGroup *>(gc->getGroup("money_guild_xp"));
|
|
if (pMoneyGuildXP) pMoneyGuildXP->setActive((_BuyMean == MoneyGuildXP)||(_BuyMean == GuildXP));
|
|
CInterfaceGroup *pMoney = dynamic_cast<CInterfaceGroup *>(gc->getGroup("money_guild_xp:money"));
|
|
if (pMoney) pMoney->setActive(_BuyMean == MoneyGuildXP);
|
|
|
|
CInterfaceGroup *pGuildMoneyGuildXP = dynamic_cast<CInterfaceGroup *>(gc->getGroup("guild_money_guild_xp"));
|
|
if (pGuildMoneyGuildXP) pGuildMoneyGuildXP->setActive((_BuyMean == GuildMoneyGuildXP) || (_BuyMean == GuildMoney));
|
|
CViewText *pGuildXPText = dynamic_cast<CViewText*>(gc->getView("guild_money_guild_xp:xp_text"));
|
|
if (pGuildXPText) pGuildXPText->setActive(_BuyMean == GuildMoneyGuildXP);
|
|
CViewText *pGuildXPValue = dynamic_cast<CViewText*>(gc->getView("guild_money_guild_xp:xp_value"));
|
|
if (pGuildXPValue) pGuildXPValue->setActive(_BuyMean == GuildMoneyGuildXP);
|
|
|
|
CViewText *pBuyTitle = dynamic_cast<CViewText*>(gc->getView("buy_title"));
|
|
if (pBuyTitle)
|
|
{
|
|
if(_BuyMean == Money)
|
|
pBuyTitle->setHardText("uiBuyFrom");
|
|
else if(_BuyMean == SkillPoints)
|
|
pBuyTitle->setHardText("uiLearnFrom");
|
|
// MoneyAndFactionPoints, MoneyGuildXP or GuildXP
|
|
else
|
|
pBuyTitle->setHardText("uiBuyFrom");
|
|
}
|
|
|
|
// show/hide skill Tabs
|
|
CGroupTab *pTab = dynamic_cast<CGroupTab*>(gc->getGroup("buy_filter:tab"));
|
|
if ( pTab )
|
|
{
|
|
bool activeSkillTabs = (_BuyMean == SkillPoints);
|
|
pTab->setActive(activeSkillTabs);
|
|
}
|
|
|
|
// unselect any list
|
|
unselectBuyList(gc);
|
|
if (!_BuyOnly)
|
|
unselectSellList(gc);
|
|
}
|
|
|
|
}
|
|
|
|
// *****************************************************************************************
|
|
void CBotChatPageTrade::end()
|
|
{
|
|
activateWindow(WIN_BOT_CHAT_PAGE_TRADE, false);
|
|
activateWindow(WIN_BOT_CHAT_PAGE_BUY, false);
|
|
endTradeModal();
|
|
|
|
// Important to avoid update of the remaining phrase in the DB.
|
|
_TradePagesObs.allowPhrasePriceUpdateAndClientFill(false);
|
|
}
|
|
|
|
// *****************************************************************************************
|
|
void CBotChatPageTrade::update()
|
|
{
|
|
updateTradeModal();
|
|
}
|
|
|
|
|
|
// ***************************************************************************************
|
|
uint32 CBotChatPageTrade::getCurrItemQuantity() const
|
|
{
|
|
if (!_CurrItemSheet) return std::numeric_limits<uint32>::max();
|
|
if(!_QuantityEdit) return 1;
|
|
if (_CurrItemSheet->getType() == CCtrlSheetInfo::SheetType_Item)
|
|
{
|
|
const CItemSheet *itemSheet = _CurrItemSheet->asItemSheet();
|
|
if (itemSheet && itemSheet->Family != ITEMFAMILY::TELEPORT &&
|
|
itemSheet->Family != ITEMFAMILY::GUILD_OPTION)
|
|
{
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
CInterfaceGroup *ig = dynamic_cast<CInterfaceGroup *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
if (!ig) return std::numeric_limits<uint32>::max();
|
|
// TODO: edit box in faction points?
|
|
CGroupEditBox *ed = dynamic_cast<CGroupEditBox *>(ig->getGroup("header_opened:standard_price:quantity:edit:eb"));
|
|
if (!ed) return std::numeric_limits<uint32>::max();
|
|
uint32 intQuantity;
|
|
if (fromString(ed->getInputString().toString(), intQuantity))
|
|
{
|
|
return intQuantity;
|
|
}
|
|
else
|
|
{
|
|
return std::numeric_limits<uint32>::max();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return 1;
|
|
}
|
|
return std::numeric_limits<uint32>::max();
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
uint32 CBotChatPageTrade::getCurrItemPriceResale() const
|
|
{
|
|
if (!_CurrItemSheet) return 0;
|
|
if (!_ResaleEdit) return 0;
|
|
if (_CurrItemSheet->getType() == CCtrlSheetInfo::SheetType_Item)
|
|
{
|
|
// const CItemSheet *itemSheet = _CurrItemSheet->asItemSheet();
|
|
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
// get the edited resale price
|
|
CInterfaceGroup *ig = dynamic_cast<CInterfaceGroup *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
if (!ig) return 0;
|
|
CGroupEditBox *resaleMarginBox = dynamic_cast<CGroupEditBox *>(ig->getGroup("header_opened:resell_group:can_resell:choose_resell:edit:eb"));
|
|
if (!resaleMarginBox) return 0;
|
|
|
|
// Calculate the resale price from the resale margin
|
|
uint32 margin = (uint32)resaleMarginBox->getInputStringAsInt();
|
|
// temp uint64 because we add case where basePrice= 50000, and margin= 99999% => 50000*99999 > 4gig
|
|
uint64 basePrice = getCurrItemPrice(false); // base Price without fame margin
|
|
return uint32(basePrice + basePrice * margin / 100);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
// ***************************************************************************************
|
|
uint64 CBotChatPageTrade::getCurrItemPrice(bool mulByFame) const
|
|
{
|
|
if (!_CurrItemSheet) return std::numeric_limits<uint64>::max();
|
|
if (_BuyDlgOn && (_BuyMean == MoneyGuildXP || _BuyMean == GuildMoneyGuildXP || _BuyMean == GuildMoney) )
|
|
{
|
|
if (_BuyMean == MoneyGuildXP)
|
|
{
|
|
// get the price from the sheet
|
|
const CItemSheet *pIS = _CurrItemSheet->asItemSheet();
|
|
if (pIS != NULL)
|
|
{
|
|
if (pIS->Family == ITEMFAMILY::GUILD_OPTION)
|
|
return pIS->GuildOption.MoneyCost;
|
|
}
|
|
}
|
|
if ((_BuyMean == GuildMoneyGuildXP) || (_BuyMean == GuildMoney))
|
|
{
|
|
// This is perhaps an outpost building
|
|
const COutpostBuildingSheet *pOB = _CurrItemSheet->asOutpostBuildingSheet();
|
|
if (pOB != NULL)
|
|
return pOB->CostDapper;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// for item to buy/sell, price has been received in the db
|
|
if (_CurrItemSheet->getRootBranch())
|
|
{
|
|
// for item to buy/sell, price has already been stored in the database
|
|
ICDBNode *node;
|
|
// take the PRICE_RETIRE if buying an item which actually belongs to the user
|
|
if(_UsePriceRetire)
|
|
node= _CurrItemSheet->getRootBranch()->getNode(ICDBNode::CTextId("PRICE_RETIRE"), false);
|
|
else
|
|
node= _CurrItemSheet->getRootBranch()->getNode(ICDBNode::CTextId("PRICE"), false);
|
|
CCDBNodeLeaf *priceLeaf = dynamic_cast<CCDBNodeLeaf *>(node);
|
|
if (priceLeaf)
|
|
{
|
|
uint64 price = (uint64) priceLeaf->getValue32();
|
|
if (_BuyDlgOn || !mulByFame)
|
|
return price;
|
|
else
|
|
return (uint64)(price * _FamePriceFactorLeaf->getValue16()/10000.0f);
|
|
}
|
|
}
|
|
}
|
|
return std::numeric_limits<uint64>::max();
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
uint64 CBotChatPageTrade::getCurrItemXP() const
|
|
{
|
|
if (_BuyMean == MoneyGuildXP)
|
|
{
|
|
// get the cp from the sheet
|
|
const CItemSheet *pIS = _CurrItemSheet->asItemSheet();
|
|
if (pIS != NULL)
|
|
{
|
|
if (pIS->Family == ITEMFAMILY::GUILD_OPTION)
|
|
return pIS->GuildOption.XPCost;
|
|
}
|
|
}
|
|
if ((_BuyMean == GuildMoneyGuildXP) || (_BuyMean == GuildMoney))
|
|
{
|
|
return 0; // By now no need for XP even if xp guild required
|
|
}
|
|
|
|
return std::numeric_limits<uint64>::max();
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::getItemFactionTypePoints(CDBCtrlSheet *sheet, PVP_CLAN::TPVPClan &pvpClan, uint32 &points) const
|
|
{
|
|
pvpClan= PVP_CLAN::None;
|
|
points= 0;
|
|
|
|
// Bad setup => abort
|
|
if ((_BuyMean != MoneyFactionPoints) || (sheet == NULL))
|
|
return;
|
|
|
|
//CCDBNodeLeaf *currencyLeaf = dynamic_cast<CCDBNodeLeaf *>(sheet->getRootBranch()->getNode(ICDBNode::CTextId("CURRENCY"), false));
|
|
//if (currencyLeaf == NULL)
|
|
// return;
|
|
|
|
//RYMSG::TTradeCurrency currency((RYMSG::TTradeCurrency::TValues) currencyLeaf->getValue32());
|
|
//if (currency != RYMSG::TTradeCurrency::tc_faction_points)
|
|
// return;
|
|
|
|
// bad DB => abort
|
|
CCDBNodeLeaf *ftLeaf = dynamic_cast<CCDBNodeLeaf *>(sheet->getRootBranch()->getNode(ICDBNode::CTextId("FACTION_TYPE"), false));
|
|
CCDBNodeLeaf *fppLeaf = dynamic_cast<CCDBNodeLeaf *>(sheet->getRootBranch()->getNode(ICDBNode::CTextId("PRICE"), false));
|
|
if (ftLeaf == NULL || fppLeaf == NULL)
|
|
return;
|
|
|
|
// else copy
|
|
pvpClan= (PVP_CLAN::TPVPClan)ftLeaf->getValue32();
|
|
points= fppLeaf->getValue32();
|
|
|
|
// if only one is disabled, consider full disabled
|
|
if(pvpClan==PVP_CLAN::None || points==0)
|
|
{
|
|
pvpClan= PVP_CLAN::None;
|
|
points= 0;
|
|
}
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::getCurrItemFactionTypePoints(PVP_CLAN::TPVPClan &pvpClan, uint32 &points) const
|
|
{
|
|
getItemFactionTypePoints(_CurrItemSheet, pvpClan, points);
|
|
}
|
|
|
|
// ***************************************************************************
|
|
uint32 CBotChatPageTrade::getUserFactionPoints(PVP_CLAN::TPVPClan clan) const
|
|
{
|
|
if ((clan < PVP_CLAN::BeginClans) || (clan > PVP_CLAN::EndClans))
|
|
return 0;
|
|
|
|
uint32 nClan = clan - PVP_CLAN::BeginClans;
|
|
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
CCDBNodeLeaf *pLeaf = NLGUI::CDBManager::getInstance()->getDbProp(toString("LOCAL:USER:FACTION_POINTS_%d:VALUE", nClan), false);
|
|
if (pLeaf == NULL)
|
|
return 0;
|
|
|
|
return pLeaf->getValue32();
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
void CBotChatPageTrade::notifyDownloadComplete(bool completed)
|
|
{
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
CGroupContainer *gc = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(_BuyOnly ? WIN_BOT_CHAT_PAGE_BUY : WIN_BOT_CHAT_PAGE_TRADE));
|
|
if (!gc) return;
|
|
class CDBListVisitor : public CInterfaceElementVisitor
|
|
{
|
|
public:
|
|
bool DownloadComplete;
|
|
virtual void visitGroup(CInterfaceGroup *group)
|
|
{
|
|
CDBGroupListSheetText *dbGroup = dynamic_cast<CDBGroupListSheetText *>(group);
|
|
if (dbGroup)
|
|
{
|
|
dbGroup->notifyDownloadComplete(DownloadComplete);
|
|
}
|
|
}
|
|
};
|
|
CDBListVisitor visitor;
|
|
visitor.DownloadComplete = completed;
|
|
gc->visit(&visitor);
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
void CBotChatPageTrade::updateTradeModal()
|
|
{
|
|
// if loading is finished, then signal it to all sheet list, so they can display an help message if they
|
|
// are empty
|
|
if (_DownloadComplete != _TradePagesObs.isDownloadComplete())
|
|
{
|
|
notifyDownloadComplete(true);
|
|
_DownloadComplete = _TradePagesObs.isDownloadComplete();
|
|
}
|
|
|
|
if(_CurrItemSheet)
|
|
{
|
|
// update buy dialog if it is currently shown
|
|
if (_BuyDlgOn || _SellDlgOn)
|
|
{
|
|
// check that curr item hasn't been modified (so that the index remains valid)
|
|
// this could happen if there was a db correction from the server
|
|
// in this case, the dialog is closed
|
|
if ( !_CurrItemCheck.test(_CurrItemSheet) )
|
|
{
|
|
endTradeModal();
|
|
return;
|
|
}
|
|
// get pointers on interface elements
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
CGroupContainer *ig = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
CInterfaceGroup *confirmTradeGroup = ig->getGroup("confirm_trade");
|
|
CCtrlBase *confirmResellGroup = ig->getCtrl("confirm_trade_resell");
|
|
CInterfaceGroup *cantTradeGroup = ig->getGroup("cant_trade");
|
|
CInterfaceGroup *destroyTradeGroup = ig->getGroup("destroy_trade");
|
|
|
|
CCtrlTextButton *cantTradeButton = dynamic_cast<CCtrlTextButton*>(ig->getCtrl("cant_trade_button"));
|
|
|
|
// **** update destroy options
|
|
// if the item belongs to the user, can always destroy it from the resale
|
|
destroyTradeGroup->setActive(_UsePriceRetire);
|
|
|
|
// **** update confirmation
|
|
// update price from quantity is the object is an item and not a teleport
|
|
uint32 quantity = getCurrItemQuantity();
|
|
// get price (without fame)
|
|
uint64 priceWithoutFame = getCurrItemPrice(false);
|
|
// get price (with fame)
|
|
uint64 priceWithFame = getCurrItemPrice(true);
|
|
// update resale price from quantity
|
|
uint32 resalePrice = getCurrItemPriceResale();
|
|
|
|
// get faction points and type from current item
|
|
PVP_CLAN::TPVPClan fpType;
|
|
uint32 fpCost;
|
|
getCurrItemFactionTypePoints(fpType, fpCost);
|
|
uint32 userFactionPoints = getUserFactionPoints(fpType);
|
|
|
|
// Special case for guild options
|
|
if ((_BuyMean == MoneyGuildXP) || (_BuyMean == GuildMoney) || (_BuyMean == GuildMoneyGuildXP))
|
|
{
|
|
uint64 totalPrice = (uint64) priceWithoutFame * (uint64) quantity;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:PRICE")->setValue64(totalPrice);
|
|
uint64 totalXP = (uint64) getCurrItemXP() * (uint64) quantity;
|
|
CGuildManager *pGM = CGuildManager::getInstance();
|
|
|
|
uint64 moneyOwned = (_BuyMean == MoneyGuildXP)?getInventory().getMoney():pGM->getMoney();
|
|
if (totalPrice > moneyOwned)
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(false);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(true);
|
|
if (_BuyMean == MoneyGuildXP)
|
|
{
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiNotEnoughMoney"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittNotEnoughMoney"));
|
|
}
|
|
else
|
|
{
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiNotEnoughGuildMoney"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittNotEnoughGuildMoney"));
|
|
}
|
|
return;
|
|
}
|
|
if ((_BuyMean == MoneyGuildXP) || (_BuyMean == GuildMoneyGuildXP))
|
|
{
|
|
if (totalXP > pGM->getXP())
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(false);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(true);
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiNotEnoughGuildXP"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittNotEnoughGuildXP"));
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(true);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(false);
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
// if price/quantity is valid
|
|
bool validSetup= priceWithoutFame != std::numeric_limits<uint64>::max() && quantity != std::numeric_limits<uint32>::max() && quantity != 0;
|
|
if(validSetup && _BuyMean==MoneyFactionPoints)
|
|
{
|
|
// valid if at least one price type is not 0
|
|
validSetup= priceWithoutFame!=0 || fpCost!=0;
|
|
}
|
|
else if(validSetup && _BuyMean==SkillPoints)
|
|
{
|
|
// (nb: skillpoint==0 is a valid buy)
|
|
validSetup= true;
|
|
}
|
|
else if(validSetup)
|
|
{
|
|
// valid if price is not 0
|
|
validSetup= priceWithoutFame != 0;
|
|
}
|
|
|
|
// if the setup is finaly valid
|
|
if( validSetup )
|
|
{
|
|
// basic price
|
|
uint64 totalPriceWithoutFame = (uint64) priceWithoutFame * (uint64) quantity;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:UNIT_PRICE")->setValue64(priceWithoutFame);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:PRICE")->setValue64(totalPriceWithoutFame);
|
|
// price with fame
|
|
uint64 totalPriceWithFame = (uint64) priceWithFame * (uint64) quantity;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:UNIT_PRICE_WITH_FAME")->setValue64(priceWithFame);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:PRICE_WITH_FAME")->setValue64(totalPriceWithFame);
|
|
// resale price
|
|
uint64 totalResalePrice = (uint64) resalePrice * (uint64) quantity;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:UNIT_PRICE_RESALE")->setValue64(resalePrice);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:PRICE_RESALE")->setValue64(totalResalePrice);
|
|
// quantity edit box
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:EDIT_QUANTITY")->setValue64(quantity);
|
|
// Faction Points
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:UNIT_PRICE_FACTION")->setValue64(fpCost);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:PRICE_FACTION")->setValue64(fpCost*quantity);
|
|
|
|
|
|
// Special retire Check
|
|
bool ok= true;
|
|
if(_CannotValidateBecauseRetireNotAvailable)
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(false);
|
|
if (confirmResellGroup) confirmResellGroup->setActive(false);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(true);
|
|
// can't sell more than what is in inventory
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiBCNotAvailable"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittBCNotAvailable"));
|
|
ok= false;
|
|
}
|
|
|
|
// Quantity Check (only if previous check passed)
|
|
if(ok && _QuantityCheck)
|
|
{
|
|
// check if not bad quantity edited
|
|
if ((sint32)quantity > _QuantityCheck)
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(false);
|
|
if (confirmResellGroup) confirmResellGroup->setActive(false);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(true);
|
|
// can't sell more than what is in inventory
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiBadQuantity"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittBadQuantity"));
|
|
ok= false;
|
|
}
|
|
}
|
|
|
|
// test only if quantity check passed
|
|
if(ok)
|
|
{
|
|
// see if player has enough money
|
|
if (_BuyDlgOn)
|
|
{
|
|
if ((_BuyMean == Money) || (_BuyMean == MoneyFactionPoints))
|
|
{
|
|
if (totalPriceWithoutFame > getInventory().getMoney())
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(false);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(true);
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiNotEnoughMoney"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittNotEnoughMoney"));
|
|
}
|
|
else if (_BuyMean == MoneyFactionPoints)
|
|
{
|
|
// Check if the player has enough faction point for the object selected
|
|
if ((confirmTradeGroup != NULL) && (cantTradeButton != NULL) && (cantTradeGroup != NULL))
|
|
{
|
|
if ((fpCost*quantity) > userFactionPoints)
|
|
{
|
|
confirmTradeGroup->setActive(false);
|
|
cantTradeGroup->setActive(true);
|
|
cantTradeButton->setText(CI18N::get("uiNotEnoughFP_"+PVP_CLAN::toString(fpType)));
|
|
cantTradeButton->setDefaultContextHelp(CI18N::get("uittNotEnoughFP_"+PVP_CLAN::toString(fpType)));
|
|
}
|
|
else
|
|
{
|
|
confirmTradeGroup->setActive(true);
|
|
cantTradeGroup->setActive(false);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(true);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(false);
|
|
}
|
|
}
|
|
else if (_BuyMean == SkillPoints)
|
|
{
|
|
uint32 numSkillPoints = getSkillPointUsedForCurrentRoleMaster();
|
|
if (totalPriceWithoutFame > numSkillPoints)
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(false);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(true);
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiNotEnoughSkillPoints"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittNotEnoughSkillPoints"));
|
|
}
|
|
else
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(true);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(false);
|
|
}
|
|
}
|
|
else if (_BuyMean == GuildXP)
|
|
{
|
|
CGuildManager *pGM = CGuildManager::getInstance();
|
|
if (totalPriceWithoutFame > pGM->getXP())
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(false);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(true);
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiNotEnoughGuildXP"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittNotEnoughGuildXP"));
|
|
}
|
|
else
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(true);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(false);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// check ResalePrice
|
|
if(_ResaleEdit && resalePrice<priceWithoutFame)
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(false);
|
|
if (confirmResellGroup) confirmResellGroup->setActive(false);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(true);
|
|
// can't sell less than the basic price
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiBadResalePrice"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittBadResalePrice"));
|
|
}
|
|
// else ok, can resell
|
|
else
|
|
{
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(true);
|
|
if (_ResaleEdit && confirmResellGroup) confirmResellGroup->setActive(true);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// else price is not valid
|
|
else
|
|
{
|
|
// set value in database
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:UNIT_PRICE")->setValue64(-1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:UNIT_PRICE_WITH_FAME")->setValue64(-1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:PRICE")->setValue64(-1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:PRICE_WITH_FAME")->setValue64(-1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:UNIT_PRICE_RESALE")->setValue64(-1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:PRICE_RESALE")->setValue64(-1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:EDIT_QUANTITY")->setValue64(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:UNIT_PRICE_FACTION")->setValue64(-1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:PRICE_FACTION")->setValue64(-1);
|
|
// and update ok/cancel groups
|
|
if (confirmTradeGroup) confirmTradeGroup->setActive(false);
|
|
if (confirmResellGroup) confirmResellGroup->setActive(false);
|
|
if (cantTradeGroup) cantTradeGroup->setActive(true);
|
|
if (_SellDlgOn && priceWithoutFame == 0)
|
|
{
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiWontBuyThis"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittWontBuyThis"));
|
|
}
|
|
else if (_SellDlgOn && priceWithoutFame == std::numeric_limits<uint64>::max())
|
|
{
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiPriceNotReceived"));
|
|
}
|
|
else if (quantity == 0 || quantity == std::numeric_limits<uint32>::max())
|
|
{
|
|
if (cantTradeButton) cantTradeButton->setText(CI18N::get("uiBadQuantity"));
|
|
if (cantTradeButton) cantTradeButton->setDefaultContextHelp(CI18N::get("uittBadQuantity"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
void CBotChatPageTrade::setupBuyMeanInModal(CInterfaceGroup *modal)
|
|
{
|
|
if (!modal) return;
|
|
CViewBase *equal = modal->getView("standard_price:total_price:equal");
|
|
CInterfaceGroup *money = modal->getGroup("standard_price:total_price:item_price");
|
|
CInterfaceGroup *skillPoints = modal->getGroup("standard_price:total_price:sp");
|
|
if (equal) equal->setActive(_BuyMean == Money);
|
|
if (money) money->setActive(_BuyMean == Money);
|
|
if (skillPoints) skillPoints->setActive(_BuyMean == SkillPoints);
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
void CBotChatPageTrade::startBuyDialog(CDBCtrlSheet *sheet, CCtrlBase * /* pCaller */)
|
|
{
|
|
if (!sheet) return;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
CGroupContainer *ig = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
if (!ig) return;
|
|
|
|
// don't know why but in some case, the sheetId is 0
|
|
if(sheet->getSheetId()==0)
|
|
return;
|
|
|
|
bool isSPhrase = sheet->isSPhrase();
|
|
bool isItem = !isSPhrase;
|
|
|
|
// If this item is a User Item already sold (-1), cancel the RETIRE (in list only for information)
|
|
if( sheet->getType()==CCtrlSheetInfo::SheetType_Item &&
|
|
(sheet->getItemSellerType()==BOTCHATTYPE::User || sheet->getItemSellerType()==BOTCHATTYPE::UserRetirable ) &&
|
|
sheet->getItemPrice()==-1 )
|
|
return;
|
|
|
|
// Set price label
|
|
CViewText *priceLabel = dynamic_cast<CViewText*>(ig->getView( "standard_price:total_price_header" ));
|
|
if ( _BuyMean == Money && priceLabel )
|
|
{
|
|
priceLabel->setText( CI18N::get( "uiPrice" ) );
|
|
priceLabel->setActive(true);
|
|
}
|
|
else
|
|
priceLabel->setActive( false );
|
|
|
|
// show quantity dialog if a correct item (only stackable items etc....)
|
|
uint defaultQuantity= initQuantityMode(false, sheet);
|
|
setupPriceGroupQuantity(ig->getGroup("standard_price"), defaultQuantity);
|
|
|
|
// hide resell group, (cause its a buy)
|
|
setupResellGroup(false, defaultQuantity, ig, sheet);
|
|
|
|
// setup edit focus
|
|
setupEditFocus(ig);
|
|
|
|
// setup which price to use
|
|
setupPriceOrPriceRetire(false, sheet);
|
|
|
|
// setup faction point price group
|
|
setupFactionPointPrice(false, defaultQuantity, ig, sheet);
|
|
|
|
// set confirm button text
|
|
CCtrlTextButton *confirmButton = dynamic_cast<CCtrlTextButton*>(ig->getCtrl("ok"));
|
|
if (confirmButton)
|
|
{
|
|
confirmButton->setActive( true );
|
|
// no need any context help because too simple
|
|
confirmButton->setDefaultContextHelp(ucstring());
|
|
if(isItem)
|
|
{
|
|
CItemSheet * itemSheet = dynamic_cast<CItemSheet*> ( SheetMngr.get( CSheetId( sheet->getSheetId() ) ) );
|
|
if ( itemSheet && itemSheet->Family == ITEMFAMILY::COSMETIC )
|
|
{
|
|
EGSPD::CPeople::TPeople people = ITEM_ORIGIN::itemOriginStringToPeopleEnum( ITEM_ORIGIN::enumToString( itemSheet->ItemOrigin ) );
|
|
if ( UserEntity->getGender() != itemSheet->Cosmetic.Gender || UserEntity->people() != people )
|
|
confirmButton->setActive( false );
|
|
else
|
|
confirmButton->setText(CI18N::get(_UsePriceRetire?"uiRetire":"uiBuy"));
|
|
}
|
|
else
|
|
confirmButton->setText(CI18N::get(_UsePriceRetire?"uiRetire":"uiBuy"));
|
|
}
|
|
else
|
|
confirmButton->setText(CI18N::get("uiLearn"));
|
|
}
|
|
|
|
// Hide direct sell button
|
|
CCtrlBase *resellButton = ig->getCtrl("confirm_trade_resell");
|
|
if ( resellButton )
|
|
resellButton->setActive(false);
|
|
|
|
// set help for item
|
|
CSheetHelpSetup helpSetup;
|
|
fillHelpSetupInfosForTrade(helpSetup, sheet, ig);
|
|
setupSheetHelp(helpSetup);
|
|
//
|
|
ig->setActive(true);
|
|
ig->updateCoords();
|
|
ig->center();
|
|
ig->setModalParentList(_BuyOnly ? WIN_BOT_CHAT_PAGE_BUY : WIN_BOT_CHAT_PAGE_TRADE);
|
|
CWidgetManager::getInstance()->setTopWindow(ig);
|
|
//
|
|
_CurrItemSheet = sheet;
|
|
_CurrItemIndex = sheet->getIndexInDB();
|
|
_CurrItemCheck.init(_CurrItemSheet);
|
|
_BuyDlgOn = true;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:IS_SELL_DLG")->setValueBool( false );
|
|
// setup trade mean
|
|
setupBuyMeanInModal(ig);
|
|
// Add waiter to refresh items infos
|
|
InfoWindowUpdater.ItemSheet= _CurrItemSheet->getSheetId();
|
|
InfoWindowUpdater.ItemSlotId= getInventory().getItemSlotId(_CurrItemSheet);
|
|
InfoWindowUpdater.Sheet = _CurrItemSheet;
|
|
// Add the waiter only if really needed (not for raw materials)
|
|
const CItemSheet *itemSheet= _CurrItemSheet->asItemSheet();
|
|
if(itemSheet && itemSheet->Family != ITEMFAMILY::RAW_MATERIAL )
|
|
getInventory().addItemInfoWaiter(&InfoWindowUpdater);
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::updateSPhraseBuyDialog()
|
|
{
|
|
if(!_CurrItemSheet)
|
|
return;
|
|
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
CGroupContainer *ig = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
if (!ig) return;
|
|
|
|
CSheetHelpSetup helpSetup;
|
|
fillHelpSetupInfosForTrade(helpSetup, _CurrItemSheet, ig);
|
|
setupSheetHelp(helpSetup);
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
void CBotChatPageTrade::startSellDialog(CDBCtrlSheet *sheet, CCtrlBase * /* pCaller */)
|
|
{
|
|
nlassert(!_BuyOnly);
|
|
if (!sheet) return;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
CGroupContainer *ig = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
if (!ig) return;
|
|
|
|
// If this sheet is grayed cause of an "Animal Inventory unavailable" flag, quit
|
|
if (sheet->getItemBeastGrayed()) return;
|
|
|
|
// Set price label
|
|
CViewText *priceLabel = dynamic_cast<CViewText*>(ig->getView( "standard_price:total_price_header" ));
|
|
if ( priceLabel )
|
|
{
|
|
priceLabel->setText( CI18N::get( "uiImmediatePrice" ) );
|
|
priceLabel->setActive(true);
|
|
}
|
|
|
|
// show quantity dialog if a correct item (only stackable items etc....)
|
|
uint defaultQuantity= initQuantityMode(true, sheet);
|
|
setupPriceGroupQuantity(ig->getGroup("standard_price"), defaultQuantity);
|
|
|
|
// Setup resell group, only if item (cause its a sell)
|
|
setupResellGroup(true, defaultQuantity, ig, sheet);
|
|
|
|
// setup edit focus
|
|
setupEditFocus(ig);
|
|
|
|
// setup which price to use
|
|
setupPriceOrPriceRetire(true, sheet);
|
|
|
|
// setup faction point price
|
|
setupFactionPointPrice(true, defaultQuantity, ig, sheet);
|
|
|
|
// set confirm button text
|
|
CCtrlTextButton *confirmButton = dynamic_cast<CCtrlTextButton*>(ig->getCtrl("ok"));
|
|
if (confirmButton)
|
|
{
|
|
confirmButton->setActive( !sheet->getLockedByOwner() );
|
|
confirmButton->setText(CI18N::get("uiSellImmediately"));
|
|
confirmButton->setDefaultContextHelp(CI18N::get("uittDirectSellButton"));
|
|
}
|
|
|
|
// set item or skill name
|
|
CViewText *itemNameView = dynamic_cast<CViewText *>(ig->getView("object_name"));
|
|
if (itemNameView)
|
|
{
|
|
ucstring itemName;
|
|
itemName = sheet->getItemActualName();
|
|
itemNameView->setText(itemName);
|
|
}
|
|
|
|
// set help for item
|
|
CSheetHelpSetup helpSetup;
|
|
fillHelpSetupInfosForTrade(helpSetup, sheet, ig);
|
|
setupSheetHelp(helpSetup);
|
|
//
|
|
ig->setActive(true);
|
|
ig->updateCoords();
|
|
ig->center();
|
|
ig->setModalParentList(WIN_BOT_CHAT_PAGE_TRADE);
|
|
CWidgetManager::getInstance()->setTopWindow(ig);
|
|
//
|
|
_CurrItemSheet = sheet;
|
|
_CurrItemIndex = sheet->getIndexInDB();
|
|
_CurrItemInventory = sheet->getInventoryIndex();
|
|
_CurrItemCheck.init(_CurrItemSheet);
|
|
_SellDlgOn = true;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:IS_SELL_DLG")->setValueBool( true );
|
|
updateTradeModal();
|
|
setupBuyMeanInModal(ig);
|
|
// Add waiter to refresh items infos
|
|
InfoWindowUpdater.ItemSheet= _CurrItemSheet->getSheetId();
|
|
InfoWindowUpdater.ItemSlotId= getInventory().getItemSlotId(_CurrItemSheet);
|
|
InfoWindowUpdater.Sheet = _CurrItemSheet;
|
|
// Add the waiter only if really needed (not for raw materials)
|
|
const CItemSheet *itemSheet= _CurrItemSheet->asItemSheet();
|
|
if(itemSheet && itemSheet->Family != ITEMFAMILY::RAW_MATERIAL )
|
|
getInventory().addItemInfoWaiter(&InfoWindowUpdater);
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
void CBotChatPageTrade::endTradeModal()
|
|
{
|
|
// do the cancel now (NB: will be recalled at close of the window....)
|
|
cancelTrade();
|
|
|
|
// hide the dialog
|
|
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
CGroupContainer *ig = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
if (ig) ig->setActive(false);
|
|
|
|
// Hide any confirmation dialog related to trade (important for building MessageBox confirmation)
|
|
std::string vmbOnOk;
|
|
if(pIM->getCurrentValidMessageBoxOnOk(vmbOnOk))
|
|
{
|
|
if(vmbOnOk=="confirm_trade")
|
|
CWidgetManager::getInstance()->disableModalWindow();
|
|
}
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
void CBotChatPageTrade::setFocusOnEditBox(CInterfaceGroup *ebi)
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
CGroupEditBox *eb = dynamic_cast<CGroupEditBox *>(ebi);
|
|
if (eb)
|
|
{
|
|
CWidgetManager::getInstance()->setCaptureKeyboard(eb);
|
|
eb->setSelectionAll();
|
|
}
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
bool CBotChatPageTrade::isTradeValid( bool enableResale ) const
|
|
{
|
|
// If the Current Item has been canceled (eg: move out), then not valid!
|
|
if(!_CurrItemSheet)
|
|
return false;
|
|
|
|
uint32 quantity= getCurrItemQuantity();
|
|
uint64 priceWithoutFame = getCurrItemPrice(false);
|
|
sint32 resalePrice = getCurrItemPriceResale();
|
|
|
|
// Special case for guild options
|
|
if ((_BuyMean == MoneyGuildXP) || (_BuyMean == GuildMoney) || (_BuyMean == GuildMoneyGuildXP))
|
|
{
|
|
uint64 totalPrice = (uint64) priceWithoutFame * (uint64) quantity;
|
|
uint64 totalXP = (uint64) getCurrItemXP() * (uint64) quantity;
|
|
CGuildManager *pGM = CGuildManager::getInstance();
|
|
uint64 moneyOwned = (_BuyMean == MoneyGuildXP)?getInventory().getMoney():pGM->getMoney();
|
|
if ((_BuyMean == MoneyGuildXP) || (_BuyMean == GuildMoneyGuildXP))
|
|
return (totalPrice <= moneyOwned) && (totalXP <= pGM->getXP());
|
|
return (totalPrice <= moneyOwned);
|
|
}
|
|
|
|
// retrieve faction points
|
|
PVP_CLAN::TPVPClan fpType;
|
|
uint32 fpCost;
|
|
getCurrItemFactionTypePoints(fpType, fpCost);
|
|
|
|
// if price/quantity is valid
|
|
bool validSetup= priceWithoutFame != std::numeric_limits<uint64>::max() && quantity != std::numeric_limits<uint32>::max() && quantity != 0;
|
|
if(validSetup && _BuyMean==MoneyFactionPoints)
|
|
{
|
|
// valid if at least one price type is not 0
|
|
validSetup= priceWithoutFame!=0 || fpCost!=0;
|
|
}
|
|
else if(validSetup && _BuyMean==SkillPoints)
|
|
{
|
|
// (nb: skillpoint==0 is a valid buy)
|
|
validSetup= true;
|
|
}
|
|
else if(validSetup)
|
|
{
|
|
// valid if price is not 0
|
|
validSetup= priceWithoutFame != 0;
|
|
}
|
|
|
|
// if the setup is finaly valid
|
|
if( validSetup )
|
|
{
|
|
// special retire check
|
|
if(_CannotValidateBecauseRetireNotAvailable)
|
|
return false;
|
|
|
|
// quantity check
|
|
if(_QuantityCheck)
|
|
{
|
|
if( (sint32)quantity > _QuantityCheck )
|
|
return false;
|
|
}
|
|
|
|
// Buy dlg
|
|
if (_BuyDlgOn)
|
|
{
|
|
uint64 totalPrice = (uint64) priceWithoutFame * (uint64) quantity;
|
|
if (_BuyMean == Money)
|
|
{
|
|
return totalPrice <= getInventory().getMoney();
|
|
}
|
|
if (_BuyMean == MoneyFactionPoints)
|
|
{
|
|
return ((totalPrice <= getInventory().getMoney()) &&
|
|
(quantity*fpCost <= getUserFactionPoints(fpType)));
|
|
}
|
|
else if (_BuyMean == SkillPoints)
|
|
{
|
|
uint32 numSkillPoints = getSkillPointUsedForCurrentRoleMaster();
|
|
return totalPrice <= numSkillPoints;
|
|
}
|
|
else if (_BuyMean == GuildXP)
|
|
{
|
|
CGuildManager *pGM = CGuildManager::getInstance();
|
|
return totalPrice <= pGM->getXP();
|
|
}
|
|
}
|
|
// Sell dlg
|
|
else
|
|
{
|
|
return (!_ResaleEdit || !enableResale || (sint32)priceWithoutFame <= resalePrice);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
// ***************************************************************************************
|
|
void CBotChatPageTrade::confirmTrade( bool enableResale )
|
|
{
|
|
bool resaleEnabled = _SellDlgOn && enableResale;
|
|
|
|
if (!_CurrItemSheet)
|
|
{
|
|
endTradeModal();
|
|
return;
|
|
}
|
|
if (_BuyDlgOn || _SellDlgOn)
|
|
{
|
|
uint32 quantity = getCurrItemQuantity();
|
|
sint32 resalePrice = resaleEnabled ? getCurrItemPriceResale() : 0; // getCurrItemPriceResale() returns 0 is !_ResaleEdit
|
|
if (quantity != std::numeric_limits<uint32>::max())
|
|
{
|
|
uint16 u16Quantity = (uint16) quantity;
|
|
// The Item bought is a SPhrase ?
|
|
if(_CurrItemSheet->isSPhrase())
|
|
{
|
|
// cant sell phrase
|
|
if ( _SellDlgOn )
|
|
return;
|
|
|
|
// code in action_handler_phrase.cpp
|
|
extern void phraseBuyBotChat(CDBCtrlSheet *ctrl, uint8 index, bool useBuySheetMsg);
|
|
// client Side fill Mode? => use PHRASE:BUY_SHEET
|
|
phraseBuyBotChat(_CurrItemSheet, (uint8) _CurrItemIndex, _TradePagesObs.isPhraseClientFill());
|
|
|
|
// lower the SkillPoints available.
|
|
sint32 price = (sint32)getCurrItemPrice(false);
|
|
sint32 totalPrice= quantity * price;
|
|
addSkillPointForCurrentRoleMaster(-totalPrice);
|
|
|
|
// hide the phrase
|
|
_CurrItemSheet->setSheetId(0);
|
|
}
|
|
// Else standard buy.
|
|
else
|
|
{
|
|
if (_BuyDlgOn)
|
|
{
|
|
NLMISC::CBitMemStream out;
|
|
|
|
if ((_BuyMean == MoneyGuildXP) || (_BuyMean == GuildMoney) || ((_BuyMean == GuildMoneyGuildXP)))
|
|
{
|
|
const char *msg="BOTCHAT:BUY_GUILD_OPTION";
|
|
if(GenericMsgHeaderMngr.pushNameToStream(msg, out))
|
|
{
|
|
uint8 u8Index = (uint) _CurrItemIndex;
|
|
out.serial(u8Index);
|
|
NetMngr.push(out);
|
|
//nlinfo("impulseCallBack sent: %s %d", msg, u8Index);
|
|
}
|
|
else
|
|
nlwarning(" unknown message name '%s'", msg);
|
|
}
|
|
else
|
|
{
|
|
// bug #212: Server should check if player has enough room in his inventory
|
|
// before removing items in trade window
|
|
// Temp fix on client side : check room in player's bag before removing items
|
|
|
|
// Get inventory manager instance
|
|
CInventoryManager *pInv = CInventoryManager::getInstance();
|
|
|
|
// Check if player has enough space in his bag
|
|
bool isSpaceInBag = pInv->isSpaceInBagForItem(_CurrItemSheet, quantity, 0);
|
|
|
|
const char *msg="BOTCHAT:BUY";
|
|
if(GenericMsgHeaderMngr.pushNameToStream(msg, out))
|
|
{
|
|
uint16 u16Index = (uint16) _CurrItemIndex;
|
|
out.serial(u16Index);
|
|
out.serial(u16Quantity);
|
|
NetMngr.push(out);
|
|
//nlinfo("impulseCallBack sent: %s %d %d", msg, u16Index, u16Quantity);
|
|
}
|
|
else
|
|
nlwarning(" unknown message name '%s'", msg);
|
|
|
|
// If player has enough space in his bag...
|
|
if (isSpaceInBag)
|
|
{
|
|
// If the Buy is from a Player item or User item (retire) localy delete it
|
|
if (_BuyMean == Money && _CurrItemSheet->getItemSellerType()!=BOTCHATTYPE::NPC)
|
|
{
|
|
// if item stackable, the player was allowed to buy only a subset
|
|
if(_QuantityEdit)
|
|
{
|
|
sint32 curQuantity= _CurrItemSheet->getQuantity();
|
|
if(u16Quantity<curQuantity)
|
|
// lower the quantity
|
|
_CurrItemSheet->setQuantity(curQuantity-u16Quantity);
|
|
else
|
|
// hide the item
|
|
_CurrItemSheet->setSheetId(0);
|
|
}
|
|
else
|
|
{
|
|
// hide the item
|
|
_CurrItemSheet->setSheetId(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
const char *msg="BOTCHAT:SELL";
|
|
NLMISC::CBitMemStream out;
|
|
if(GenericMsgHeaderMngr.pushNameToStream(msg, out))
|
|
{
|
|
uint8 u8Inv = (uint8) _CurrItemInventory;
|
|
uint8 u8Index = (uint8) _CurrItemIndex;
|
|
uint32 u32resalePrice = (uint32)max((sint32)0, resalePrice);
|
|
out.serial(u8Inv);
|
|
out.serial(u8Index);
|
|
out.serial(u16Quantity);
|
|
out.serial(u32resalePrice);
|
|
NetMngr.push(out);
|
|
//nlinfo("impulseCallBack sent: %s %d %d %d %d", msg, u8Inv, u8Index, u16Quantity, u32resalePrice);
|
|
}
|
|
else
|
|
nlwarning(" unknown message name '%s'", msg);
|
|
|
|
// Write the value of the resale margin to the persistant database
|
|
if ( _ResaleEdit )
|
|
{
|
|
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
CInterfaceGroup *ig = dynamic_cast<CInterfaceGroup *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
if (ig)
|
|
{
|
|
CGroupEditBox *eb = dynamic_cast<CGroupEditBox *>(ig->getGroup("header_opened:resell_group:can_resell:choose_resell:edit:eb"));
|
|
if (eb)
|
|
{
|
|
NLGUI::CDBManager::getInstance()->getDbProp( "UI:SAVE:TRADE_ITEM:RESALE_MARGIN" )->setValue32( eb->getInputStringAsInt() );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// get itemSheet before _CurrItemSheet set to NULL in endTradeModal()
|
|
const CItemSheet *itemSheet = _CurrItemSheet->asItemSheet();
|
|
|
|
// close modal dialog
|
|
endTradeModal();
|
|
|
|
// Close all if its a guild option
|
|
if (itemSheet && itemSheet->Family == ITEMFAMILY::GUILD_OPTION)
|
|
CBotChatManager::getInstance()->endDialog();
|
|
|
|
}
|
|
|
|
// ***************************************************************************************
|
|
void CBotChatPageTrade::cancelTrade()
|
|
{
|
|
// remove infos waiter (if not already canceled)
|
|
if (_CurrItemSheet)
|
|
{
|
|
// Add the waiter only if really needed (not for raw materials)
|
|
const CItemSheet *itemSheet= _CurrItemSheet->asItemSheet();
|
|
if(itemSheet && itemSheet->Family != ITEMFAMILY::RAW_MATERIAL )
|
|
getInventory().removeItemInfoWaiter(&InfoWindowUpdater);
|
|
}
|
|
//
|
|
_BuyDlgOn = false;
|
|
_SellDlgOn = false;
|
|
_ResaleEdit = false;
|
|
_QuantityEdit = false;
|
|
_UsePriceRetire = false;
|
|
_CannotValidateBecauseRetireNotAvailable = false;
|
|
_QuantityCheck = 0;
|
|
_CurrItemSheet = NULL;
|
|
_CurrItemCheck.reset();
|
|
}
|
|
|
|
// ***************************************************************************
|
|
sint32 CBotChatPageTrade::getSkillPointUsedForCurrentRoleMaster() const
|
|
{
|
|
// get the current phrase rolemaster type
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
uint rmt= NLGUI::CDBManager::getInstance()->getDbProp("SERVER:BOTCHAT:ROLEMASTER_TYPE")->getValue32();
|
|
// get the prop (use local for less lag)
|
|
CCDBNodeLeaf *node= NLGUI::CDBManager::getInstance()->getDbProp(toString("LOCAL:USER:SKILL_POINTS_%d:VALUE", rmt), false);
|
|
if(node)
|
|
return node->getValue32();
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::addSkillPointForCurrentRoleMaster(sint32 addValue) const
|
|
{
|
|
// get the current phrase rolemaster type
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
uint rmt= NLGUI::CDBManager::getInstance()->getDbProp("SERVER:BOTCHAT:ROLEMASTER_TYPE")->getValue32();
|
|
// add the local prop !!
|
|
CCDBNodeLeaf *node= NLGUI::CDBManager::getInstance()->getDbProp(toString("LOCAL:USER:SKILL_POINTS_%d:VALUE", rmt), false);
|
|
if(node)
|
|
{
|
|
node->setValue32(node->getValue32() + addValue);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
uint CBotChatPageTrade::initQuantityMode(bool sellMode, CDBCtrlSheet *sheet)
|
|
{
|
|
nlassert(sheet);
|
|
|
|
// default
|
|
_QuantityEdit= false;
|
|
_QuantityCheck = 0;
|
|
uint defaultQuantity= 0;
|
|
|
|
// Quantity only for some items
|
|
const CItemSheet *pIS= sheet->asItemSheet();
|
|
if( pIS && (pIS->Stackable>1 || pIS->Family == ITEMFAMILY::ITEM_SAP_RECHARGE) && pIS->Family!=ITEMFAMILY::TELEPORT )
|
|
{
|
|
// if sell, init quantity with the whole inventory stack
|
|
if(sellMode)
|
|
{
|
|
defaultQuantity= std::max((sint32) 1, sheet->getQuantity());
|
|
_QuantityCheck= defaultQuantity;
|
|
}
|
|
// else
|
|
else
|
|
{
|
|
// Depends on SellerType: If NPC, set 1 by default
|
|
if(sheet->getItemSellerType() == BOTCHATTYPE::NPC)
|
|
{
|
|
defaultQuantity= 1;
|
|
// no quantity check cause infinite
|
|
_QuantityCheck= 0;
|
|
}
|
|
// else set the whole stack (player or user resale)
|
|
else
|
|
{
|
|
defaultQuantity= std::max((sint32) 1, sheet->getQuantity());
|
|
_QuantityCheck= defaultQuantity;
|
|
}
|
|
}
|
|
|
|
// edit ok!
|
|
_QuantityEdit= true;
|
|
}
|
|
|
|
return defaultQuantity;
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::setupPriceGroupQuantity(CInterfaceGroup *priceGroup, sint32 defaultQuantity)
|
|
{
|
|
// if window not found, quit
|
|
if(!priceGroup)
|
|
return;
|
|
|
|
// If don't want to enable quantity
|
|
if(!_QuantityEdit)
|
|
{
|
|
// hide elements and headers
|
|
CInterfaceGroup *quantityGroup = priceGroup->getGroup("quantity");
|
|
if (quantityGroup) quantityGroup->setActive(false);
|
|
CViewBase *elt = priceGroup->getView("quantity_header");
|
|
if ( elt ) elt->setActive(false);
|
|
elt = priceGroup->getGroup("unit_price");
|
|
if ( elt ) elt->setActive(false);
|
|
elt = priceGroup->getView("unit_price_header");
|
|
if ( elt ) elt->setActive(false);
|
|
}
|
|
else
|
|
{
|
|
// show elements and header
|
|
CInterfaceGroup *quantityGroup = priceGroup->getGroup("quantity");
|
|
if (quantityGroup) quantityGroup->setActive(true);
|
|
CViewBase *elt = priceGroup->getView("quantity_header");
|
|
if ( elt ) elt->setActive(true);
|
|
elt = priceGroup->getGroup("unit_price");
|
|
if ( elt ) elt->setActive(true);
|
|
elt = priceGroup->getView("unit_price_header");
|
|
if ( elt ) elt->setActive(true);
|
|
|
|
// setup the quantity in the edit box
|
|
if(quantityGroup)
|
|
{
|
|
// NB: some group don't have an edit box (just a replication of quantity)
|
|
CGroupEditBox *eb = dynamic_cast<CGroupEditBox *>(quantityGroup->getGroup("edit:eb"));
|
|
if (eb)
|
|
{
|
|
eb->setInputString(toString(defaultQuantity));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::setupResellGroup(bool sellMode, uint defaultQuantity, CInterfaceGroup *parentGroup, CDBCtrlSheet *sheet)
|
|
{
|
|
nlassert(sheet);
|
|
|
|
// default
|
|
_ResaleEdit= false;
|
|
|
|
// if window not found, quit
|
|
if(!parentGroup)
|
|
return;
|
|
|
|
// must be a sell, must be an item, and must be in a standard BuyMean, also must be a ressellable item
|
|
CInterfaceGroup *resellGroup = parentGroup->getGroup("resell_group");
|
|
if ( ! resellGroup )
|
|
return;
|
|
|
|
// Yoyo: can resell only on a "money only" reseler
|
|
const CItemSheet *pIS= sheet->asItemSheet();
|
|
bool resellable= sellMode && pIS && _BuyMean == Money && ITEMFAMILY::isResellable(pIS->Family) ;
|
|
// also cannot resell Raw Material that don't have any item part (formula materials, because cannot filter them)
|
|
if(pIS && pIS->Family==ITEMFAMILY::RAW_MATERIAL && !pIS->canBuildSomeItemPart())
|
|
resellable= false;
|
|
|
|
// cannot resell?
|
|
if( !resellable )
|
|
{
|
|
// hide
|
|
if ( resellGroup ) resellGroup->setActive(false);
|
|
CCtrlBase *confirmResellGroup = parentGroup->getCtrl("confirm_trade_resell");
|
|
if ( confirmResellGroup ) confirmResellGroup->setActive(false);
|
|
_ResaleEdit = false;
|
|
}
|
|
else
|
|
{
|
|
// show
|
|
if ( resellGroup ) resellGroup->setActive(true);
|
|
|
|
// get sub elements
|
|
CInterfaceGroup *canResellGroup= resellGroup->getGroup("can_resell");
|
|
CInterfaceGroup *cantResellGroup= resellGroup->getGroup("cant_resell");
|
|
CInterfaceGroup *chooseResellGroup= resellGroup->getGroup("can_resell:choose_resell");
|
|
CCtrlBase *confirmResellGroup = parentGroup->getCtrl("confirm_trade_resell");
|
|
if(!canResellGroup || !cantResellGroup || !chooseResellGroup || !confirmResellGroup)
|
|
{
|
|
nlwarning("XML error, cannot setup resale");
|
|
resellGroup->setActive(false);
|
|
_ResaleEdit = false;
|
|
return;
|
|
}
|
|
|
|
// Get item state
|
|
string baseDB= sheet->getSheet();
|
|
BOTCHATTYPE::TBotChatResaleFlag resaleFlag= (BOTCHATTYPE::TBotChatResaleFlag)sheet->getItemResaleFlag();
|
|
// sint basePrice = sint(sheet->getItemPrice() * _FamePriceFactorLeaf->getValue16()/10000.0f);
|
|
|
|
// if cannot resell this item, setup "cant_resell group"
|
|
if(resaleFlag!=BOTCHATTYPE::ResaleOk)
|
|
{
|
|
canResellGroup->setActive(false);
|
|
confirmResellGroup->setActive(false);
|
|
cantResellGroup->setActive(true);
|
|
// resale is not possible!
|
|
_ResaleEdit = false;
|
|
|
|
// setup the reason
|
|
CViewText *vt= dynamic_cast<CViewText*>(cantResellGroup->getView("reason"));
|
|
if(vt)
|
|
{
|
|
if(resaleFlag == BOTCHATTYPE::ResaleKOBroken)
|
|
vt->setHardText("uiCantResaleCauseDamaged");
|
|
else if (resaleFlag == BOTCHATTYPE::ResaleKONoTimeLeft)
|
|
vt->setHardText("uiCantResaleCauseTooLate");
|
|
else
|
|
vt->setHardText("uiCantResaleLockedByOwner");
|
|
}
|
|
}
|
|
// else setup "can_resell:choose_resell group"
|
|
else
|
|
{
|
|
canResellGroup->setActive(true);
|
|
confirmResellGroup->setActive(true);
|
|
cantResellGroup->setActive(false);
|
|
// resale is possible!
|
|
_ResaleEdit = true;
|
|
|
|
// setup the quantity of the "choose resell" group
|
|
setupPriceGroupQuantity(chooseResellGroup, defaultQuantity);
|
|
|
|
// setup resale margin using value stored in database
|
|
CGroupEditBox *eb = dynamic_cast<CGroupEditBox *>(chooseResellGroup->getGroup("edit:eb"));
|
|
if (eb)
|
|
{
|
|
sint32 resaleMargin= NLGUI::CDBManager::getInstance()->getDbProp( "UI:SAVE:TRADE_ITEM:RESALE_MARGIN" )->getValue32();
|
|
clamp(resaleMargin, 0, (sint32)MaxResaleMargin);
|
|
eb->setInputString( toString( resaleMargin ) );
|
|
eb->setPositiveIntegerMaxValue(MaxResaleMargin);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::setupEditFocus(CInterfaceGroup *parentGroup)
|
|
{
|
|
// TODODO: edit box in faction points?
|
|
// if Quantity edited, always start focus in quantity edit box
|
|
if(_QuantityEdit)
|
|
{
|
|
nlassert(parentGroup);
|
|
|
|
CGroupEditBox *eb= dynamic_cast<CGroupEditBox*>(parentGroup->getGroup("standard_price:quantity:edit:eb"));
|
|
if(eb)
|
|
{
|
|
// set focus
|
|
setFocusOnEditBox(eb);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::setupPriceOrPriceRetire(bool sellMode, CDBCtrlSheet *sheet)
|
|
{
|
|
nlassert(sheet);
|
|
|
|
// default
|
|
_UsePriceRetire= false;
|
|
_CannotValidateBecauseRetireNotAvailable= false;
|
|
|
|
// must be a buy, must be an item, and must be in a standard BuyMean
|
|
const CItemSheet *pIS= sheet->asItemSheet();
|
|
if( !sellMode && pIS && _BuyMean == Money )
|
|
{
|
|
// test SELLER_TYPE. if User or ResaleAndUser, then this item belongs to us
|
|
// => just pay the PRICE_RETIRE, not the Full Price
|
|
sint32 st= sheet->getItemSellerType();
|
|
if( st==BOTCHATTYPE::UserRetirable || st==BOTCHATTYPE::ResaleAndUserRetirable ||
|
|
st==BOTCHATTYPE::User || st==BOTCHATTYPE::ResaleAndUser )
|
|
{
|
|
_UsePriceRetire= true;
|
|
// if not retirable, can't validate
|
|
if(st==BOTCHATTYPE::User || st==BOTCHATTYPE::ResaleAndUser)
|
|
_CannotValidateBecauseRetireNotAvailable= true;
|
|
}
|
|
|
|
// Check that we can take cosmetic that cannot be applied to the player
|
|
if (pIS->Family == ITEMFAMILY::COSMETIC)
|
|
{
|
|
EGSPD::CPeople::TPeople people = ITEM_ORIGIN::itemOriginStringToPeopleEnum( ITEM_ORIGIN::enumToString( pIS->ItemOrigin ) );
|
|
if (UserEntity->getGender() != pIS->Cosmetic.Gender || UserEntity->people() != people )
|
|
_CannotValidateBecauseRetireNotAvailable= true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::setupFactionPointPrice(bool /* sellMode */, uint defaultQuantity, CInterfaceGroup *parentGroup, CDBCtrlSheet *sheet)
|
|
{
|
|
nlassert(sheet);
|
|
|
|
// if window not found, quit
|
|
if(!parentGroup)
|
|
return;
|
|
|
|
// get the faction point cost and type
|
|
CInterfaceGroup *fpGroup= parentGroup->getGroup("faction_price");
|
|
CViewBase *upView= parentGroup->getView("standard_price:unit_price_header");
|
|
CInterfaceGroup *upGroup= parentGroup->getGroup("standard_price:unit_price");
|
|
|
|
if(!fpGroup || !upView || !upGroup)
|
|
return;
|
|
|
|
// get the current faction point cost and type
|
|
PVP_CLAN::TPVPClan fpType;
|
|
uint32 fpCost;
|
|
getItemFactionTypePoints(sheet, fpType, fpCost);
|
|
if(fpCost==0 || fpType==PVP_CLAN::None)
|
|
{
|
|
// disable faction price group
|
|
fpGroup->setActive(false);
|
|
upView->setActive(true);
|
|
upGroup->setActive(true);
|
|
}
|
|
else
|
|
{
|
|
|
|
//Disable Price
|
|
upView->setActive(false);
|
|
upGroup->setActive(false);
|
|
|
|
// enable faction price gropu
|
|
fpGroup->setActive(true);
|
|
|
|
// Setup quantity view in this group
|
|
setupPriceGroupQuantity(fpGroup, defaultQuantity);
|
|
|
|
// setup faction name according to pvp clan
|
|
string factionName= PVP_CLAN::toString(fpType);
|
|
CViewText *vt= dynamic_cast<CViewText*>(fpGroup->getView("unit_price_header"));
|
|
if(vt)
|
|
{
|
|
ucstring fmt= CI18N::get("uiUnitFPPrice");
|
|
strFindReplace(fmt, "%fac", factionName);
|
|
vt->setText(fmt);
|
|
}
|
|
vt= dynamic_cast<CViewText*>(fpGroup->getView("total_price_header"));
|
|
if(vt)
|
|
{
|
|
ucstring fmt= CI18N::get("uiTotalFPPrice");
|
|
strFindReplace(fmt, "%fac", factionName);
|
|
vt->setText(fmt);
|
|
}
|
|
|
|
// setup icon according to pvp clan
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
factionName = NLMISC::toLower(factionName);
|
|
string factionIcon= pIM->getDefine(toString("faction_icon_%s", factionName.c_str()));
|
|
CViewBitmap *vBmp= dynamic_cast<CViewBitmap*>(fpGroup->getView("unit_price:item_price:icone"));
|
|
if(vBmp) vBmp->setTexture(factionIcon);
|
|
vBmp= dynamic_cast<CViewBitmap*>(fpGroup->getView("total_price:item_price:icone"));
|
|
if(vBmp) vBmp->setTexture(factionIcon);
|
|
}
|
|
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::startChangeBuyFilterDialog(const std::string &dbext, const std::string &title, uint32 maxValue)
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
_FilterBuyDlgDBExt= dbext;
|
|
_FilterBuyDlgMaxValue= maxValue;
|
|
|
|
// change the title
|
|
CInterfaceGroup *ig= dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_CHANGE_BUY_FILTER));
|
|
if(!ig) return;
|
|
CViewText *vtitle= dynamic_cast<CViewText*>(ig->getView("title"));
|
|
if(vtitle)
|
|
vtitle->setHardText(title);
|
|
|
|
// init min and max edit box
|
|
CGroupEditBox *edMin = dynamic_cast<CGroupEditBox *>(ig->getGroup("edit_min:eb"));
|
|
CGroupEditBox *edMax = dynamic_cast<CGroupEditBox *>(ig->getGroup("edit_max:eb"));
|
|
CCDBNodeLeaf *dbRangeMin= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_") + _FilterBuyDlgDBExt, false);
|
|
CCDBNodeLeaf *dbRangeMax= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_") + _FilterBuyDlgDBExt, false);
|
|
sint rangeMin= 0;
|
|
sint rangeMax= 0;
|
|
if(dbRangeMin) rangeMin= dbRangeMin->getValue32();
|
|
if(dbRangeMax) rangeMax= dbRangeMax->getValue32();
|
|
if(edMin) edMin->setInputString(toString(rangeMin));
|
|
if(edMax) edMax->setInputString(toString(rangeMax));
|
|
if(edMin) edMin->setPositiveIntegerMaxValue(maxValue);
|
|
if(edMax) edMax->setPositiveIntegerMaxValue(maxValue);
|
|
|
|
// set focus on MIN edit box
|
|
setFocusOnEditBox(ig->getGroup("edit_min:eb"));
|
|
|
|
// go
|
|
CWidgetManager::getInstance()->enableModalWindow(NULL, ig);
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::resetBuyFilterDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// get the modal window
|
|
CInterfaceGroup *ig= dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_CHANGE_BUY_FILTER));
|
|
if(!ig) return;
|
|
|
|
// reset the edited values
|
|
CGroupEditBox *edMin = dynamic_cast<CGroupEditBox *>(ig->getGroup("edit_min:eb"));
|
|
CGroupEditBox *edMax = dynamic_cast<CGroupEditBox *>(ig->getGroup("edit_max:eb"));
|
|
CCDBNodeLeaf *dbRangeMin= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_") + _FilterBuyDlgDBExt, false);
|
|
CCDBNodeLeaf *dbRangeMax= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_") + _FilterBuyDlgDBExt, false);
|
|
sint rangeMin= 0;
|
|
sint rangeMax= _FilterBuyDlgMaxValue;
|
|
// write result in EditBox, and in db
|
|
if(edMin) edMin->setInputString(toString(rangeMin));
|
|
if(edMax) edMax->setInputString(toString(rangeMax));
|
|
if(dbRangeMin) dbRangeMin->setValue32(rangeMin);
|
|
if(dbRangeMax) dbRangeMax->setValue32(rangeMax);
|
|
|
|
// reset validate also the filter (as in confirm)
|
|
sendCurrentBuyFilterToServer(true);
|
|
|
|
// and leave modal
|
|
CWidgetManager::getInstance()->disableModalWindow();
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::confirmChangeBuyFilterDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// get the modal window
|
|
CInterfaceGroup *ig= dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_CHANGE_BUY_FILTER));
|
|
if(!ig) return;
|
|
|
|
// retrieve the edited values
|
|
CGroupEditBox *edMin = dynamic_cast<CGroupEditBox *>(ig->getGroup("edit_min:eb"));
|
|
CGroupEditBox *edMax = dynamic_cast<CGroupEditBox *>(ig->getGroup("edit_max:eb"));
|
|
CCDBNodeLeaf *dbRangeMin= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_") + _FilterBuyDlgDBExt, false);
|
|
CCDBNodeLeaf *dbRangeMax= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_") + _FilterBuyDlgDBExt, false);
|
|
sint rangeMin= 0;
|
|
sint rangeMax= 0;
|
|
if(edMin) rangeMin= edMin->getInputStringAsInt();
|
|
if(edMax) rangeMax= edMax->getInputStringAsInt();
|
|
// only positive values are posssible here
|
|
rangeMin= max(0, rangeMin);
|
|
rangeMax= max(rangeMin, rangeMax);
|
|
|
|
// write result in DB
|
|
if(dbRangeMin) dbRangeMin->setValue32(rangeMin);
|
|
if(dbRangeMax) dbRangeMax->setValue32(rangeMax);
|
|
|
|
// Then send new filter to Server, and reset item list
|
|
sendCurrentBuyFilterToServer(true);
|
|
|
|
// and leave modal
|
|
CWidgetManager::getInstance()->disableModalWindow();
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::giveFocusToMaxEBChangeBuyFilterDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// get the modal window
|
|
CInterfaceGroup *ig= dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_CHANGE_BUY_FILTER));
|
|
if(!ig) return;
|
|
|
|
// set focus on max
|
|
setFocusOnEditBox(ig->getGroup("edit_max:eb"));
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::startChangeBuyFilterMPDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// show the modal
|
|
CInterfaceGroup *ig= dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_CHANGE_BUY_FILTER_MP));
|
|
if(!ig) return;
|
|
|
|
// go
|
|
CWidgetManager::getInstance()->enableModalWindow(NULL, ig);
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::confirmChangeBuyFilterMPDialog(uint ft)
|
|
{
|
|
ft= min(ft, (uint)RM_FABER_TYPE::Unknown);
|
|
|
|
// set ItemPart DB
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
CCDBNodeLeaf *dbItemPart= NLGUI::CDBManager::getInstance()->getDbProp(string(DB_BOT_CHAT_BASE_BUY_FILTER":MP_ITEM_PART"), false);
|
|
if(dbItemPart) dbItemPart->setValue32(ft);
|
|
|
|
// Then send new filter to Server, and reset item list
|
|
sendCurrentBuyFilterToServer(true);
|
|
|
|
// and leave modal
|
|
CWidgetManager::getInstance()->disableModalWindow();
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::resetItemPartAndTypeFilters()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
CCDBNodeLeaf *dbItemPart= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MP_ITEM_PART" , false);
|
|
CCDBNodeLeaf *dbItemType= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":ITEM_TYPE" , false);
|
|
|
|
if(dbItemPart) dbItemPart->setValue32(RM_FABER_TYPE::Unknown);
|
|
if(dbItemType) dbItemType->setValue32(ITEM_TYPE::UNDEFINED);
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::sendCurrentBuyFilterToServer(bool resetBuyList)
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// **** retrieve current DB values
|
|
CCDBNodeLeaf *dbQualityMin= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_QUALITY" , false);
|
|
CCDBNodeLeaf *dbQualityMax= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_QUALITY" , false);
|
|
CCDBNodeLeaf *dbPriceMin= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_PRICE" , false);
|
|
CCDBNodeLeaf *dbPriceMax= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_PRICE" , false);
|
|
CCDBNodeLeaf *dbClassMin= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_CLASS" , false);
|
|
CCDBNodeLeaf *dbClassMax= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_CLASS" , false);
|
|
CCDBNodeLeaf *dbItemPart= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MP_ITEM_PART" , false);
|
|
CCDBNodeLeaf *dbItemType= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":ITEM_TYPE" , false);
|
|
|
|
uint32 qualityMin=0, qualityMax=0;
|
|
uint32 priceMin=0, priceMax=0;
|
|
uint8 classMin= 0, classMax= RM_CLASS_TYPE::NumTRMClassType-1; // max class is 4
|
|
// Yoyo: XML is hardcoded for max_class==4. (config.xml and bot_chat_v4.xml)
|
|
nlctassert(RM_CLASS_TYPE::NumTRMClassType-1==4);
|
|
uint8 itemPart= RM_FABER_TYPE::Unknown;
|
|
uint8 itemType= ITEM_TYPE::UNDEFINED;
|
|
if(dbQualityMin) qualityMin= dbQualityMin->getValue32();
|
|
if(dbQualityMax) qualityMax= dbQualityMax->getValue32();
|
|
if(dbPriceMin) priceMin= dbPriceMin->getValue32();
|
|
if(dbPriceMax) priceMax= dbPriceMax->getValue32();
|
|
if(dbClassMin) classMin= (uint8)dbClassMin->getValue32();
|
|
if(dbClassMax) classMax= (uint8)dbClassMax->getValue32();
|
|
if(dbItemPart) itemPart= (uint8)dbItemPart->getValue32();
|
|
if(dbItemType) itemType= (uint8)dbItemType->getValue32();
|
|
|
|
// **** send msg
|
|
const char *msg="BOTCHAT:SET_FILTERS";
|
|
NLMISC::CBitMemStream out;
|
|
if(GenericMsgHeaderMngr.pushNameToStream(msg, out))
|
|
{
|
|
out.serial(qualityMin);
|
|
out.serial(qualityMax);
|
|
out.serial(priceMin);
|
|
out.serial(priceMax);
|
|
out.serial(classMin);
|
|
out.serial(classMax);
|
|
out.serial(itemPart);
|
|
out.serial(itemType);
|
|
NetMngr.push(out);
|
|
//nlinfo("impulseCallBack sent: %s %d %d %d %d %d %d %d %d", msg, qualityMin, qualityMax, priceMin, priceMax, classMin, classMax, itemPart, itemType);
|
|
}
|
|
else
|
|
nlwarning(" unknown message name '%s'", msg);
|
|
|
|
|
|
// **** Server has incremented SessionId, do it on our side
|
|
// increment session id on our side
|
|
CBotChatManager::getInstance()->incrementSessionID();
|
|
|
|
// and reset hugeListObs
|
|
if(resetBuyList)
|
|
{
|
|
// Start the HugeList
|
|
_TradePagesObs.start();
|
|
|
|
// update interface
|
|
CGroupContainer *gc = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(_BuyOnly ? WIN_BOT_CHAT_PAGE_BUY : WIN_BOT_CHAT_PAGE_TRADE));
|
|
if (gc)
|
|
{
|
|
// unselect just buy list (don't need for sell)
|
|
unselectBuyList(gc);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::unselectBuyList(CGroupContainer *gc)
|
|
{
|
|
CInterfaceGroup *buyGroup = gc->getGroup("buy");
|
|
if (buyGroup)
|
|
{
|
|
// unselect NPC/Player group
|
|
CDBGroupListSheetText *buyListSheet = dynamic_cast<CDBGroupListSheetText *>(buyGroup->getGroup("general_buy"));
|
|
if (buyListSheet)
|
|
buyListSheet->unselect();
|
|
// unselect Player group
|
|
buyListSheet = dynamic_cast<CDBGroupListSheetText *>(buyGroup->getGroup("player_buy"));
|
|
if (buyListSheet)
|
|
buyListSheet->unselect();
|
|
}
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::unselectSellList(CGroupContainer *gc)
|
|
{
|
|
CInterfaceGroup *sellGroup = gc->getGroup("sell");
|
|
if (sellGroup)
|
|
{
|
|
// unselect the bag
|
|
CDBGroupListSheetText *sellListSheet = dynamic_cast<CDBGroupListSheetText *>(sellGroup->getGroup("bag_sell"));
|
|
if (sellListSheet)
|
|
sellListSheet->unselect();
|
|
// unselect all pack animals
|
|
for(uint i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
|
{
|
|
sellListSheet = dynamic_cast<CDBGroupListSheetText *>(sellGroup->getGroup(toString("beast%d_sell", i)));
|
|
if (sellListSheet)
|
|
sellListSheet->unselect();
|
|
}
|
|
}
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::refreshResale()
|
|
{
|
|
// **** send msg
|
|
const char *msg="BOTCHAT:REFRESH_TRADE_LIST";
|
|
NLMISC::CBitMemStream out;
|
|
if(GenericMsgHeaderMngr.pushNameToStream(msg, out))
|
|
{
|
|
NetMngr.push(out);
|
|
//nlinfo("impulseCallBack sent: %s", msg);
|
|
}
|
|
else
|
|
nlwarning(" unknown message name '%s'", msg);
|
|
|
|
|
|
// **** Server has incremented SessionId, do it on our side
|
|
// increment session id on our side
|
|
CBotChatManager::getInstance()->incrementSessionID();
|
|
|
|
// and reset hugeListObs
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// Start the HugeList
|
|
_TradePagesObs.start();
|
|
|
|
// update interface
|
|
CGroupContainer *gc = dynamic_cast<CGroupContainer *>(CWidgetManager::getInstance()->getElementFromId(_BuyOnly ? WIN_BOT_CHAT_PAGE_BUY : WIN_BOT_CHAT_PAGE_TRADE));
|
|
if (gc)
|
|
{
|
|
// unselect just buy list (don't need for sell)
|
|
unselectBuyList(gc);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::startChangeBuyFilterClassDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// Copy from save to Temp edition
|
|
CCDBNodeLeaf *dbClassMin= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_CLASS" , false);
|
|
CCDBNodeLeaf *dbClassMax= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_CLASS" , false);
|
|
CCDBNodeLeaf *tempClassMin= NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:BOTCHAT:TEMP_FILTER_MIN_CLASS");
|
|
CCDBNodeLeaf *tempClassMax= NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:BOTCHAT:TEMP_FILTER_MAX_CLASS");
|
|
if(dbClassMin) tempClassMin->setValue32(dbClassMin->getValue32());
|
|
if(dbClassMax) tempClassMax->setValue32(dbClassMax->getValue32());
|
|
|
|
// show the modal
|
|
CInterfaceGroup *ig= dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_CHANGE_BUY_FILTER_CLASS));
|
|
if(!ig) return;
|
|
|
|
// go
|
|
CWidgetManager::getInstance()->enableModalWindow(NULL, ig);
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::resetBuyFilterClassDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// Copy from save to Temp edition
|
|
CCDBNodeLeaf *dbClassMin= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_CLASS" , false);
|
|
CCDBNodeLeaf *dbClassMax= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_CLASS" , false);
|
|
CCDBNodeLeaf *tempClassMin= NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:BOTCHAT:TEMP_FILTER_MIN_CLASS");
|
|
CCDBNodeLeaf *tempClassMax= NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:BOTCHAT:TEMP_FILTER_MAX_CLASS");
|
|
// write in both DB
|
|
tempClassMin->setValue32(0);
|
|
tempClassMax->setValue32(RM_CLASS_TYPE::NumTRMClassType-1);
|
|
if(dbClassMin) dbClassMin->setValue32(0);
|
|
if(dbClassMax) dbClassMax->setValue32(RM_CLASS_TYPE::NumTRMClassType-1);
|
|
|
|
// Reset also validate the filter, commit
|
|
sendCurrentBuyFilterToServer(true);
|
|
|
|
// and leave modal
|
|
CWidgetManager::getInstance()->disableModalWindow();
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::confirmChangeBuyFilterClassDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// Copy from temp edit to final
|
|
CCDBNodeLeaf *dbClassMin= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MIN_CLASS" , false);
|
|
CCDBNodeLeaf *dbClassMax= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":MAX_CLASS" , false);
|
|
CCDBNodeLeaf *tempClassMin= NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:BOTCHAT:TEMP_FILTER_MIN_CLASS");
|
|
CCDBNodeLeaf *tempClassMax= NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:BOTCHAT:TEMP_FILTER_MAX_CLASS");
|
|
sint minClass= tempClassMin->getValue32();
|
|
sint maxClass= tempClassMax->getValue32();
|
|
// min must be => 0 and max must be >= min
|
|
minClass= max(minClass, 0);
|
|
maxClass= max(minClass, maxClass);
|
|
if(dbClassMin) dbClassMin->setValue32(minClass);
|
|
if(dbClassMax) dbClassMax->setValue32(maxClass);
|
|
|
|
// Then send new filter to Server, and reset item list
|
|
sendCurrentBuyFilterToServer(true);
|
|
|
|
// and leave modal
|
|
CWidgetManager::getInstance()->disableModalWindow();
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
std::string CBotChatPageTrade::getItemSheetNameForItemType(ITEM_TYPE::TItemType it)
|
|
{
|
|
// The definition is in .xml
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
string itemTypeDef= "item_type_to_item_sheet_";
|
|
itemTypeDef+= ITEM_TYPE::toString(it);
|
|
|
|
// return empty string if not found
|
|
return pIM->getDefine(itemTypeDef);
|
|
}
|
|
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::startChangeBuyFilterItemTypeDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// the list of possible item type to select is filled when the DB of bitfield change
|
|
|
|
// show the modal
|
|
CInterfaceGroup *ig= dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_CHANGE_BUY_FILTER_ITEM_TYPE));
|
|
if(!ig) return;
|
|
|
|
// go
|
|
CWidgetManager::getInstance()->enableModalWindow(NULL, ig);
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::confirmChangeBuyFilterItemTypeDialog(ITEM_TYPE::TItemType itemType)
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// Copy result to final DB
|
|
CCDBNodeLeaf *dbItemType= NLGUI::CDBManager::getInstance()->getDbProp(DB_BOT_CHAT_BASE_BUY_FILTER":ITEM_TYPE" , false);
|
|
if(dbItemType) dbItemType->setValue32(itemType);
|
|
|
|
// Then send new filter to Server, and reset item list
|
|
sendCurrentBuyFilterToServer(true);
|
|
|
|
// and leave modal
|
|
CWidgetManager::getInstance()->disableModalWindow();
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::startDestroyItemDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
if(!_CurrItemSheet)
|
|
return;
|
|
|
|
// setup the quantity to destroy (if edited correctly)
|
|
uint32 quantity= getCurrItemQuantity();
|
|
if(quantity==0 || quantity==std::numeric_limits<uint32>::max())
|
|
return;
|
|
// if quantity check, maximize with it (if user entered to big value...)
|
|
if(_QuantityCheck)
|
|
quantity= min(quantity, (uint32)_QuantityCheck);
|
|
// set view
|
|
NLGUI::CDBManager::getInstance()->getDbProp("UI:TEMP:TRADE_ITEM:DESTROY_QUANTITY")->setValue32(quantity);
|
|
|
|
// show the modal
|
|
CInterfaceGroup *ig= dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_DESTROY_ITEM));
|
|
if(!ig) return;
|
|
CWidgetManager::getInstance()->enableModalWindow(NULL, ig);
|
|
}
|
|
|
|
// ***************************************************************************
|
|
void CBotChatPageTrade::confirmDestroyItemDialog()
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
if(!_CurrItemSheet)
|
|
return;
|
|
|
|
// get the quantity destroyed
|
|
uint32 quantity= getCurrItemQuantity();
|
|
// if correct quantity
|
|
if(quantity!=0 && quantity!=std::numeric_limits<uint32>::max())
|
|
{
|
|
// if quantity check, maximize with it (if user entered too big value...)
|
|
if(_QuantityCheck)
|
|
quantity= min(quantity, (uint32)_QuantityCheck);
|
|
|
|
// **** then send msg to server
|
|
uint16 u16Index = (uint16) _CurrItemIndex;
|
|
uint16 u16Quantity = (uint16) quantity;
|
|
|
|
const char *msg="BOTCHAT:DESTROY_ITEM";
|
|
NLMISC::CBitMemStream out;
|
|
if(GenericMsgHeaderMngr.pushNameToStream(msg, out))
|
|
{
|
|
out.serial(u16Index);
|
|
out.serial(u16Quantity);
|
|
NetMngr.push(out);
|
|
//nlinfo("impulseCallBack sent: %s %d %d", msg, u16Index, u16Quantity);
|
|
}
|
|
else
|
|
nlwarning(" unknown message name '%s'", msg);
|
|
|
|
|
|
// **** destroy localy
|
|
// if item stackable, the player was allowed to destroy only a subset
|
|
if(_QuantityEdit)
|
|
{
|
|
sint32 curQuantity= _CurrItemSheet->getQuantity();
|
|
if(u16Quantity<curQuantity)
|
|
// lower the quantity
|
|
_CurrItemSheet->setQuantity(curQuantity-u16Quantity);
|
|
else
|
|
// hide the item
|
|
_CurrItemSheet->setSheetId(0);
|
|
}
|
|
else
|
|
{
|
|
// hide the item
|
|
_CurrItemSheet->setSheetId(0);
|
|
}
|
|
}
|
|
|
|
// in all cases, close the modal
|
|
CWidgetManager::getInstance()->disableModalWindow();
|
|
|
|
// if the quantity entered was correct
|
|
if(quantity!=0 && quantity!=std::numeric_limits<uint32>::max())
|
|
{
|
|
// close also the container modal
|
|
endTradeModal();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/////////////////////
|
|
// ACTION HANDLERS //
|
|
/////////////////////
|
|
|
|
// ***************************************************************************************
|
|
// the player has clicked on an item to buy it
|
|
class CAHBuyItem : public IActionHandler
|
|
{
|
|
virtual void execute (CCtrlBase *pCaller, const string &/* params */)
|
|
{
|
|
CDBCtrlSheet *sheet = dynamic_cast<CDBCtrlSheet *>(pCaller);
|
|
BotChatPageAll->Trade->startBuyDialog(sheet, pCaller);
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHBuyItem, "buy_item");
|
|
|
|
// ***************************************************************************************
|
|
// the player has clicked on an item to sell it
|
|
class CAHSellItem : public IActionHandler
|
|
{
|
|
virtual void execute (CCtrlBase *pCaller, const string &/* params */)
|
|
{
|
|
CDBCtrlSheet *sheet = dynamic_cast<CDBCtrlSheet *>(pCaller);
|
|
BotChatPageAll->Trade->startSellDialog(sheet, pCaller);
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHSellItem, "sell_item");
|
|
|
|
|
|
// ***************************************************************************************
|
|
// confirm sell or buy item
|
|
class CAHConfirmTrade : public IActionHandler
|
|
{
|
|
virtual void execute (CCtrlBase * /* pCaller */, const string ¶ms)
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// parse resale param
|
|
bool enableResale;
|
|
uint resaleParam;
|
|
fromString(getParam(params, "resale"), resaleParam);
|
|
switch ( resaleParam )
|
|
{
|
|
case 0: enableResale = false; break;
|
|
case 1: enableResale = true; break;
|
|
default: // 2: comes only from Enter of Shift+Enter key from an edit box or in the modal window
|
|
{
|
|
const NLGUI::CEventDescriptorKey& keyEvent = CInterfaceManager::getInstance()->getLastEventKeyDesc();
|
|
enableResale = ! keyEvent.getKeyShift();
|
|
}
|
|
}
|
|
|
|
// test if we need to confirm the buy?
|
|
bool canTestConfirmation;
|
|
fromString(getParam(params, "noconfirm"), canTestConfirmation);
|
|
canTestConfirmation = !canTestConfirmation;
|
|
bool mustConfirm= false;
|
|
if(canTestConfirmation)
|
|
{
|
|
// Building:
|
|
if(NLGUI::CDBManager::getInstance()->getDbValue32("SERVER:TRADING:BUILDING_LOSS_WARNING") == 1)
|
|
mustConfirm= true;
|
|
}
|
|
|
|
// don't confirm?
|
|
if(!mustConfirm)
|
|
{
|
|
if (BotChatPageAll->Trade->isTradeValid( enableResale ))
|
|
BotChatPageAll->Trade->confirmTrade( enableResale );
|
|
}
|
|
else
|
|
{
|
|
// need to ask user first. Important unexecpected consequence, so use a warning icon
|
|
pIM->validMessageBox(CInterfaceManager::WarningIconMsg, CI18N::get("uiQReplaceAppartment"),
|
|
"confirm_trade", toString("resale=%d|noconfirm=1", (uint)enableResale));
|
|
}
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHConfirmTrade, "confirm_trade");
|
|
|
|
|
|
// ***************************************************************************************
|
|
// Trade has been canceled
|
|
class CAHCancelTrade : public IActionHandler
|
|
{
|
|
virtual void execute (CCtrlBase * /* pCaller */, const string &/* params */)
|
|
{
|
|
BotChatPageAll->Trade->cancelTrade();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHCancelTrade, "cancel_trade");
|
|
|
|
|
|
// ***************************************************************************
|
|
// Request to Change the Min/Max of Price or quantity
|
|
class CAHEnterChangeBotChatBuyFilter : public IActionHandler
|
|
{
|
|
virtual void execute (CCtrlBase * /* pCaller */, const string ¶ms)
|
|
{
|
|
string dbext= getParam(params, "dbext");
|
|
string title= getParam(params, "title");
|
|
uint32 maxvalue;
|
|
fromString(getParam(params, "maxvalue"), maxvalue);
|
|
BotChatPageAll->Trade->startChangeBuyFilterDialog(dbext, title, maxvalue);
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHEnterChangeBotChatBuyFilter, "enter_change_botchat_buy_filter");
|
|
|
|
|
|
// ***************************************************************************
|
|
// Validate Change the Min/Max of Price or quantity
|
|
class CAHConfirmChangeBotChatBuyFilter : public IActionHandler
|
|
{
|
|
virtual void execute(CCtrlBase * /* pCaller */, const string &/* params */)
|
|
{
|
|
BotChatPageAll->Trade->confirmChangeBuyFilterDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHConfirmChangeBotChatBuyFilter ,"confirm_change_botchat_buy_filter");
|
|
|
|
|
|
// ***************************************************************************
|
|
// Reset the Min/Max of Price or quantity
|
|
class CAHResetBotChatBuyFilter : public IActionHandler
|
|
{
|
|
virtual void execute(CCtrlBase * /* pCaller */, const string &/* params */)
|
|
{
|
|
BotChatPageAll->Trade->resetBuyFilterDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHResetBotChatBuyFilter, "reset_botchat_buy_filter");
|
|
|
|
|
|
// ***************************************************************************
|
|
// Min EditBox validated, give focus to max EditBox.
|
|
class CAHChangeBotChatBuyFilterGiveFocusToMax : public IActionHandler
|
|
{
|
|
virtual void execute(CCtrlBase * /* pCaller */, const string &/* params */)
|
|
{
|
|
BotChatPageAll->Trade->giveFocusToMaxEBChangeBuyFilterDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHChangeBotChatBuyFilterGiveFocusToMax ,"change_botchat_buy_filter_give_focus_to_max");
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
// Request to Change the Min/Max of Price or quantity
|
|
class CAHEnterChangeBotChatBuyFilterMP : public IActionHandler
|
|
{
|
|
virtual void execute (CCtrlBase * /* pCaller */, const string &/* params */)
|
|
{
|
|
BotChatPageAll->Trade->startChangeBuyFilterMPDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHEnterChangeBotChatBuyFilterMP, "enter_change_botchat_buy_filter_mp");
|
|
|
|
|
|
// ***************************************************************************
|
|
// Validate Change the Min/Max of Price or quantity
|
|
class CAHConfirmChangeBotChatBuyFilterMP : public IActionHandler
|
|
{
|
|
virtual void execute(CCtrlBase * /* pCaller */, const string ¶ms)
|
|
{
|
|
BotChatPageAll->Trade->confirmChangeBuyFilterMPDialog(RM_FABER_TYPE::toFaberType(params));
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHConfirmChangeBotChatBuyFilterMP, "confirm_change_botchat_buy_filter_mp");
|
|
|
|
|
|
// ***************************************************************************
|
|
// Ask for Refresh of the User list
|
|
class CAHBotChatRefreshResale : public IActionHandler
|
|
{
|
|
virtual void execute(CCtrlBase * /* pCaller */, const string &/* params */)
|
|
{
|
|
BotChatPageAll->Trade->refreshResale();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHBotChatRefreshResale, "botchat_refresh_resale");
|
|
|
|
|
|
// ***************************************************************************
|
|
// client requires change of Item Class bounds
|
|
class CAHEnterChangeBotChatBuyFilterClass : public IActionHandler
|
|
{
|
|
virtual void execute (CCtrlBase * /* pCaller */, const string &/* params */)
|
|
{
|
|
BotChatPageAll->Trade->startChangeBuyFilterClassDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHEnterChangeBotChatBuyFilterClass, "enter_change_botchat_buy_filter_class");
|
|
|
|
|
|
// ***************************************************************************
|
|
// client confirms change of Item Class bounds
|
|
class CAHConfirmChangeBotChatBuyFilterClass : public IActionHandler
|
|
{
|
|
virtual void execute (CCtrlBase * /* pCaller */, const string &/* params */)
|
|
{
|
|
BotChatPageAll->Trade->confirmChangeBuyFilterClassDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHConfirmChangeBotChatBuyFilterClass, "confirm_change_botchat_buy_filter_class");
|
|
|
|
|
|
// ***************************************************************************
|
|
// client confirms change of Item Class bounds
|
|
class CAHResetBotChatBuyFilterClass : public IActionHandler
|
|
{
|
|
virtual void execute (CCtrlBase * /* pCaller */, const string &/* params */)
|
|
{
|
|
BotChatPageAll->Trade->resetBuyFilterClassDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHResetBotChatBuyFilterClass, "reset_botchat_buy_filter_class");
|
|
|
|
|
|
// ***************************************************************************
|
|
class CHandlerBotChatTTItemType : public IActionHandler
|
|
{
|
|
public:
|
|
void execute (CCtrlBase * /* pCaller */, const std::string &/* sParams */)
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
// \todo yoyo: for now disable tooltip
|
|
pIM->setContextHelpText(ucstring());
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CHandlerBotChatTTItemType, "botchat_tt_item_type");
|
|
|
|
|
|
// ***************************************************************************
|
|
class CAHEnterChangeBotchatBuyFilterItemType : public IActionHandler
|
|
{
|
|
void execute (CCtrlBase * /* pCaller */, const std::string &/* sParams */)
|
|
{
|
|
BotChatPageAll->Trade->startChangeBuyFilterItemTypeDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHEnterChangeBotchatBuyFilterItemType, "enter_change_botchat_buy_filter_item_type");
|
|
|
|
|
|
// ***************************************************************************
|
|
class CAHConfirmChangeBotchatBuyFilterItemType : public IActionHandler
|
|
{
|
|
void execute (CCtrlBase *pCaller, const std::string &/* sParams */)
|
|
{
|
|
ITEM_TYPE::TItemType itemType= ITEM_TYPE::UNDEFINED;
|
|
|
|
// From the index of the ctrl sheet in DB, we can now the item type setuped
|
|
CDBCtrlSheet *ctrlSheet= dynamic_cast<CDBCtrlSheet*>(pCaller);
|
|
if(ctrlSheet)
|
|
{
|
|
// if it is not the empty sheet (detect empty sheetId)
|
|
if(ctrlSheet->getSheetId())
|
|
{
|
|
sint index= ctrlSheet->getIndexInDB();
|
|
if(index>=0 && index<ITEM_TYPE::UNDEFINED)
|
|
itemType= (ITEM_TYPE::TItemType)index;
|
|
}
|
|
}
|
|
|
|
// then change the filter
|
|
BotChatPageAll->Trade->confirmChangeBuyFilterItemTypeDialog(itemType);
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHConfirmChangeBotchatBuyFilterItemType, "confirm_change_botchat_buy_filter_item_type");
|
|
|
|
// ***************************************************************************
|
|
class CAHBotChatRefilItemTypeChoiceList : public IActionHandler
|
|
{
|
|
void execute (CCtrlBase * /* pCaller */, const std::string &sParams)
|
|
{
|
|
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
|
|
string destDB= getParam(sParams, "dest");
|
|
string srcDB= getParam(sParams, "src");
|
|
uint offset;
|
|
fromString(getParam(sParams, "offset"), offset);
|
|
|
|
/* If ItemType grows too big, must change SERVER and CLIENT!!! because of ItemType bitfield system:
|
|
use SERVER:TRADING:ITEM_TYPE_SELLER_BITFILED_0_63 which is a 64 bits
|
|
SERVER:TRADING:ITEM_TYPE_SELLER_BITFILED_64_127 which is a 64 bits
|
|
(param offset gives which part of enum to use)
|
|
*/
|
|
nlctassert(ITEM_TYPE::UNDEFINED<=128);
|
|
|
|
// get the src bitfield
|
|
CCDBNodeLeaf *nodeSrc= NLGUI::CDBManager::getInstance()->getDbProp(srcDB, false);
|
|
if(!nodeSrc)
|
|
return;
|
|
uint64 bfItemType= nodeSrc->getValue64();
|
|
|
|
// For all item type possible
|
|
for(uint i=0;i<64;i++)
|
|
{
|
|
bool present= ((bfItemType>>i)&1)!=0;
|
|
// get the dest node
|
|
CCDBNodeLeaf *nodeDst= NLGUI::CDBManager::getInstance()->getDbProp(destDB+toString(":%d:SHEET", i+offset), false);
|
|
if(nodeDst)
|
|
{
|
|
if(present)
|
|
{
|
|
// get the item sheet id associated to this item type
|
|
CSheetId sheetId;
|
|
sheetId.buildSheetId(CBotChatPageTrade::getItemSheetNameForItemType((ITEM_TYPE::TItemType)(i+offset)));
|
|
// and set it
|
|
nodeDst->setValue32(sheetId.asInt());
|
|
}
|
|
else
|
|
{
|
|
// reset (cannot select this item type)
|
|
nodeDst->setValue32(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHBotChatRefilItemTypeChoiceList, "botchat_refill_item_type_choice_list");
|
|
|
|
|
|
// ***************************************************************************
|
|
class CAHBotChatEnterDestroy : public IActionHandler
|
|
{
|
|
virtual void execute(CCtrlBase * /* pCaller */, const std::string &/* sParams */)
|
|
{
|
|
BotChatPageAll->Trade->startDestroyItemDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHBotChatEnterDestroy, "botchat_enter_destroy");
|
|
|
|
// ***************************************************************************
|
|
class CAHBotChatConfirmDestroy : public IActionHandler
|
|
{
|
|
virtual void execute(CCtrlBase * /* pCaller */, const std::string &/* sParams */)
|
|
{
|
|
BotChatPageAll->Trade->confirmDestroyItemDialog();
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHBotChatConfirmDestroy, "botchat_confirm_destroy");
|
|
|
|
// ***************************************************************************
|
|
class CAHBotChatChangeResaleMargin : public IActionHandler
|
|
{
|
|
virtual void execute(CCtrlBase * /* pCaller */, const std::string &sParams)
|
|
{
|
|
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
CInterfaceGroup *ig = dynamic_cast<CInterfaceGroup *>(CWidgetManager::getInstance()->getElementFromId(WIN_BOT_CHAT_SELL_BUY_ITEM));
|
|
if (!ig) return;
|
|
CGroupEditBox *resaleMarginBox = dynamic_cast<CGroupEditBox *>(ig->getGroup("header_opened:resell_group:can_resell:choose_resell:edit:eb"));
|
|
if (resaleMarginBox)
|
|
{
|
|
sint32 delta;
|
|
fromString(sParams, delta);
|
|
sint32 newValue = resaleMarginBox->getInputStringAsInt() + delta;
|
|
clamp(newValue, 0, (sint32)CBotChatPageTrade::MaxResaleMargin);
|
|
resaleMarginBox->setInputStringAsInt( newValue );
|
|
}
|
|
}
|
|
};
|
|
REGISTER_ACTION_HANDLER(CAHBotChatChangeResaleMargin, "change_resale_margin");
|
|
|
|
// ***************************************************************************
|
|
static DECLARE_INTERFACE_USER_FCT(getPriceWithFame)
|
|
{
|
|
if (args.size() != 2) return false;
|
|
if (!args[0].toInteger()) return false;
|
|
if (!args[1].toInteger()) return false;
|
|
|
|
sint value= (sint)args[0].getInteger();
|
|
sint valueFame= (sint)args[1].getInteger();
|
|
if(value==-1)
|
|
result.setUCString(CI18N::get("uiBadPrice"));
|
|
else if(value==valueFame)
|
|
result.setUCString(NLMISC::formatThousands(toString(value)));
|
|
else
|
|
result.setUCString(NLMISC::formatThousands(toString(valueFame)) + " (" + NLMISC::formatThousands(toString(value)) + ")");
|
|
|
|
return true;
|
|
}
|
|
REGISTER_INTERFACE_USER_FCT("getPriceWithFame", getPriceWithFame)
|
|
|
|
// ***************************************************************************
|
|
static DECLARE_INTERFACE_USER_FCT(getBonusOnResale)
|
|
{
|
|
if (args.size() != 2) return false;
|
|
if (!args[0].toInteger()) return false;
|
|
if (!args[1].toInteger()) return false;
|
|
|
|
sint valueHigh= (sint)args[0].getInteger();
|
|
sint valueLow= (sint)args[1].getInteger();
|
|
sint diff = valueHigh - valueLow;
|
|
result.setUCString("+" + NLMISC::formatThousands(toString(diff)));
|
|
|
|
return true;
|
|
}
|
|
REGISTER_INTERFACE_USER_FCT("getBonusOnResale", getBonusOnResale)
|
|
|
|
//////////////
|
|
// COMMANDS //
|
|
//////////////
|
|
|
|
#if !FINAL_VERSION
|
|
// TEMP TEMP TEMP
|
|
|
|
NLMISC_COMMAND( testColorItems, "Temp : test some items to trade", "" )
|
|
{
|
|
if (args.size() < 1) return false;
|
|
if (args.size() > 2) return false;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
std::string itemName = "icfahv.sitem";
|
|
if (args.size() > 1)
|
|
{
|
|
itemName = args[1];
|
|
}
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SHEET")->setValue32(CSheetId(itemName).asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:PRICE")->setValue32(100);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:USER_COLOR")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SHEET")->setValue32(CSheetId(itemName).asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:USER_COLOR")->setValue32(1);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SHEET")->setValue32(CSheetId(itemName).asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:PRICE")->setValue32(10);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:USER_COLOR")->setValue32(2);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SHEET")->setValue32(CSheetId(itemName).asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:PRICE")->setValue32(10);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SLOT_TYPE")->setValue32(0);//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:USER_COLOR")->setValue32(3);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SHEET")->setValue32(CSheetId(itemName).asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:PRICE")->setValue32(100);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:USER_COLOR")->setValue32(4);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SHEET")->setValue32(CSheetId(itemName).asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:USER_COLOR")->setValue32(5);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SHEET")->setValue32(CSheetId(itemName).asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:PRICE")->setValue32(10);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:USER_COLOR")->setValue32(6);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SHEET")->setValue32(CSheetId(itemName).asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:PRICE")->setValue32(10);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:USER_COLOR")->setValue32(7);
|
|
//
|
|
sint32 value;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:SESSION")->setValue32(CBotChatManager::getInstance()->getSessionID());
|
|
fromString(args[0], value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:PAGE_ID")->setValue32(value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:HAS_NEXT")->setValue32(1);
|
|
//
|
|
return true;
|
|
}
|
|
|
|
|
|
NLMISC_COMMAND( testTradeItems, "Temp : test some items to trade", "" )
|
|
{
|
|
if (args.size() != 1) return false;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
//
|
|
//NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SHEET")->setValue32(CSheetId("icfm1bm.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SHEET")->setValue32(CSheetId("guild_main_building.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:PRICE")->setValue32(100);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
//NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SHEET")->setValue32(CSheetId("icfm1bs.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SHEET")->setValue32(CSheetId("guild_rm_craft.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
//NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SHEET")->setValue32(CSheetId("icfm1pd.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SHEET")->setValue32(CSheetId("guild_rm_fight.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:PRICE")->setValue32(10);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:NAMEID")->setValue32(8);
|
|
//
|
|
//NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SHEET")->setValue32(CSheetId("icfr2l.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SHEET")->setValue32(CSheetId("guild_rm_harvest.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:PRICE")->setValue32(10);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SLOT_TYPE")->setValue32(0);//
|
|
//
|
|
//NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SHEET")->setValue32(CSheetId("ictr2b.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SHEET")->setValue32(CSheetId("guild_rm_magic.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:PRICE")->setValue32(100);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SHEET")->setValue32(CSheetId("icfp1pb.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SHEET")->setValue32(CSheetId("icragt.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:PRICE")->setValue32(10);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SHEET")->setValue32(CSheetId("icmss.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:PRICE")->setValue32(10);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
sint32 value;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:SESSION")->setValue32(CBotChatManager::getInstance()->getSessionID());
|
|
fromString(args[0], value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:PAGE_ID")->setValue32(value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:HAS_NEXT")->setValue32(1);
|
|
//
|
|
return true;
|
|
}
|
|
|
|
|
|
NLMISC_COMMAND( testTradeItems2, "Temp : test some items to trade (2)", "" )
|
|
{
|
|
// item with faction points
|
|
if (args.size() != 1) return false;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SHEET")->setValue32(CSheetId("icfm1bm.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:PRICE")->setValue32(100);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:FACTION_TYPE")->setValue32(0);
|
|
// NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:PRICE")->setValue32(130); // should result to none
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SHEET")->setValue32(CSheetId("icfm1bs.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:FACTION_TYPE")->setValue32(PVP_CLAN::Kami);
|
|
// NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:FACTION_POINT_PRICE")->setValue32(0); // should result to none
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SHEET")->setValue32(CSheetId("icfm1pd.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:PRICE")->setValue32(10);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:NAMEID")->setValue32(8);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:FACTION_TYPE")->setValue32(PVP_CLAN::Kami);
|
|
// NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:FACTION_POINT_PRICE")->setValue32(13);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SHEET")->setValue32(CSheetId("icfr2l.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SLOT_TYPE")->setValue32(0);//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:FACTION_TYPE")->setValue32(PVP_CLAN::Tryker);
|
|
// NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:FACTION_POINT_PRICE")->setValue32(10);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SHEET")->setValue32(CSheetId("ictr2b.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:FACTION_TYPE")->setValue32(PVP_CLAN::Fyros);
|
|
// NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:FACTION_POINT_PRICE")->setValue32(8);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SHEET")->setValue32(CSheetId("icfp1pb.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:FACTION_TYPE")->setValue32(PVP_CLAN::Tryker);
|
|
// NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:FACTION_POINT_PRICE")->setValue32(7);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SHEET")->setValue32(CSheetId("icragt.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:FACTION_TYPE")->setValue32(PVP_CLAN::Karavan);
|
|
// NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:FACTION_POINT_PRICE")->setValue32(1);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SHEET")->setValue32(CSheetId("icmss.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SLOT_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:FACTION_TYPE")->setValue32(PVP_CLAN::Kami);
|
|
// NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:FACTION_POINT_PRICE")->setValue32(1350);
|
|
//
|
|
sint32 value;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:SESSION")->setValue32(CBotChatManager::getInstance()->getSessionID());
|
|
fromString(args[0], value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:PAGE_ID")->setValue32(value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:HAS_NEXT")->setValue32(1);
|
|
//
|
|
return true;
|
|
}
|
|
|
|
NLMISC_COMMAND( testTradeItems3, "Temp : test some items to trade (3)", "" )
|
|
{
|
|
// items
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:0:SHEET")->setValue32(CSheetId("fyros_buckler_lvl_01_05.item").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:0:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:0:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:0:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:1:SHEET")->setValue32(CSheetId("fyros_buckler_lvl_01_05.item").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:1:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:1:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:1:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:2:SHEET")->setValue32(CSheetId("fyros_buckler_lvl_01_05.item").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:2:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:2:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:2:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:3:SHEET")->setValue32(CSheetId("fyros_buckler_lvl_01_05.item").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:3:PRICE")->setValue32(200);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:3:QUALITY")->setValue32(25);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:3:SLOT_TYPE")->setValue32(0);
|
|
|
|
return true;
|
|
}
|
|
|
|
NLMISC_COMMAND( testTradeItems4, "Temp : test some items to trade (4)", "" )
|
|
{
|
|
// pacts
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:0:SHEET")->setValue32(CSheetId("pacts.death_impact").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:0:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:0:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:1:SHEET")->setValue32(CSheetId("kami_pactes.death_impact").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:1:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:1:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:2:SHEET")->setValue32(CSheetId("karavan_pactes.death_impact").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:2:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:2:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:3:SHEET")->setValue32(CSheetId("kami_pactes.death_impact").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:3:QUALITY")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:TRADING:3:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
return true;
|
|
}
|
|
|
|
|
|
NLMISC_COMMAND( testPhrases, "Temp : test some items to trade", "" )
|
|
{
|
|
if (args.size() != 1) return false;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SHEET")->setValue32(CSheetId("abfaimhame09.sphrase").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:PRICE")->setValue32(11);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SHEET")->setValue32(CSheetId("abfaimhcme07.sphrase").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:PRICE")->setValue32(22);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SHEET")->setValue32(CSheetId("abfaimhfme04.sphrase").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:PRICE")->setValue32(33);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SHEET")->setValue32(CSheetId("abfaimhfme08.sphrase").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:PRICE")->setValue32(44);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SHEET")->setValue32(CSheetId("abfma05.sphrase").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:PRICE")->setValue32(55);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SLOT_TYPE")->setValue32(0);
|
|
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SHEET")->setValue32(CSheetId("abm_mt_ae_acid_00055.sphrase").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:PRICE")->setValue32(66);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SHEET")->setValue32(CSheetId("abm_mt_heal_00140.sphrase").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:PRICE")->setValue32(77);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SHEET")->setValue32(CSheetId("abm_mt_cannibalism_00020.sphrase").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:PRICE")->setValue32(88);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
|
|
sint32 value;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:SESSION")->setValue32(CBotChatManager::getInstance()->getSessionID());
|
|
fromString(args[0], value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:PAGE_ID")->setValue32(value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:HAS_NEXT")->setValue32(1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:ROLEMASTER_FLAGS")->setValue32(0);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
NLMISC_COMMAND( testResaleItems, "Temp : test resale", "" )
|
|
{
|
|
if (args.size() < 1) return false;
|
|
uint pageId;
|
|
fromString(args[0], pageId);
|
|
uint pf= pageId+1;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SHEET")->setValue32(CSheetId("m0006dxajf01.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:QUALITY")->setValue32(1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SELLER_TYPE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:PRICE_RETIRE")->setValue32(111);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:QUANTITY")->setValue32(62);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SHEET")->setValue32(CSheetId("icfm1bs.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:PRICE")->setValue32(1*pf);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:QUALITY")->setValue32(11);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SELLER_TYPE")->setValue32(1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:PRICE_RETIRE")->setValue32(222);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:QUANTITY")->setValue32(1);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SHEET")->setValue32(CSheetId("icfm1pd.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:PRICE")->setValue32(-1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:QUALITY")->setValue32(22);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:NAMEID")->setValue32(8);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SELLER_TYPE")->setValue32(2);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:PRICE_RETIRE")->setValue32(333);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:QUANTITY")->setValue32(1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:RESALE_TIME_LEFT")->setValue32(10);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SHEET")->setValue32(CSheetId("icfr2l.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:PRICE")->setValue32(3*pf);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:QUALITY")->setValue32(33);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SELLER_TYPE")->setValue32(3);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:PRICE_RETIRE")->setValue32(444);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:QUANTITY")->setValue32(1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:RESALE_TIME_LEFT")->setValue32(100);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SHEET")->setValue32(CSheetId("m0006dxajf01.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:PRICE")->setValue32(4*pf);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:QUALITY")->setValue32(44);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SELLER_TYPE")->setValue32(4);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:PRICE_RETIRE")->setValue32(555);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:QUANTITY")->setValue32(1);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SHEET")->setValue32(CSheetId("icfp1pb.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:PRICE")->setValue32(5*pf);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:QUALITY")->setValue32(55);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SELLER_TYPE")->setValue32(5);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:PRICE_RETIRE")->setValue32(666);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:QUANTITY")->setValue32(23);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SHEET")->setValue32(CSheetId("m0119dxajd01.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:PRICE")->setValue32(6*pf);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:QUALITY")->setValue32(66);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SELLER_TYPE")->setValue32(2);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:PRICE_RETIRE")->setValue32(777);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:QUANTITY")->setValue32(19);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:RESALE_TIME_LEFT")->setValue32(48);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SHEET")->setValue32(CSheetId("icmss.sitem").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:PRICE")->setValue32(7*pf);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:QUALITY")->setValue32(77);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SELLER_TYPE")->setValue32(5);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:PRICE_RETIRE")->setValue32(888);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:QUANTITY")->setValue32(1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:RESALE_TIME_LEFT")->setValue32(10);
|
|
|
|
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:SESSION")->setValue32(CBotChatManager::getInstance()->getSessionID());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:PAGE_ID")->setValue32(pageId);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:HAS_NEXT")->setValue32(1);
|
|
//
|
|
|
|
// Force for next page
|
|
IngameDbMngr.flushObserverCalls();
|
|
NLGUI::CDBManager::getInstance()->flushObserverCalls();
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
NLMISC_COMMAND( testClientPhrases, "", "" )
|
|
{
|
|
if (args.size() != 3) return false;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
|
|
sint32 value;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:SESSION")->setValue32(CBotChatManager::getInstance()->getSessionID());
|
|
fromString(args[0], value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:PAGE_ID")->setValue32(value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:HAS_NEXT")->setValue32(1);
|
|
fromString(args[1], value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:ROLEMASTER_FLAGS")->setValue32(value);
|
|
fromString(args[2], value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:ROLEMASTER_RACE")->setValue32(value);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
NLMISC_COMMAND( testOutpostBuildings, "Temp : test some items to trade", "" )
|
|
{
|
|
if (args.size() != 1) return false;
|
|
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SHEET")->setValue32(CSheetId("driller_bountybeaches_kami_u1_100a.outpost_building").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:0:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SHEET")->setValue32(CSheetId("driller_citiesofintuition_kami_u2_50a.outpost_building").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:1:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SHEET")->setValue32(CSheetId("driller_couloirbrule_kami_u2_150b.outpost_building").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:2:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SHEET")->setValue32(CSheetId("driller_bountybeaches_karavan_u1_100a.outpost_building").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:3:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SHEET")->setValue32(CSheetId("driller_bountybeaches_karavan_u1_150a.outpost_building").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:4:SLOT_TYPE")->setValue32(0);
|
|
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SHEET")->setValue32(CSheetId("driller_bountybeaches_karavan_u1_200a.outpost_building").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:5:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SHEET")->setValue32(CSheetId("driller_bountybeaches_karavan_u2_100a.outpost_building").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:6:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SHEET")->setValue32(CSheetId("driller_bountybeaches_karavan_u2_150a.outpost_building").asInt());
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:PRICE")->setValue32(0);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:7:SLOT_TYPE")->setValue32(0);
|
|
//
|
|
|
|
sint32 value;
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:SESSION")->setValue32(CBotChatManager::getInstance()->getSessionID());
|
|
fromString(args[0], value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:PAGE_ID")->setValue32(value);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:HAS_NEXT")->setValue32(1);
|
|
NLGUI::CDBManager::getInstance()->getDbProp("SERVER:TRADING:ROLEMASTER_FLAGS")->setValue32(0);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|