// Определение класса MultiSellWnd, расширяющего базовый класс UICommonAPI
class MultiSellWnd extends UICommonAPI;
// Константа, представляющая идентификатор диалога OK для множественной продажи
const MULTISELLWND_DIALOG_OK=1122;
// Структура, представляющая необходимый предмет для множественной продажи
struct NeededItem
{
var int ID;
var string Name;
var int Count;
var string IconName;
var int Enchant;
var int CrystalType;
var int ItemType;
var int RefineryOp1;
var int RefineryOp2;
};
// Структура, представляющая список предметов для множественной продажи
struct ItemList
{
var int MultiSellType;
var int NeededItemNum;
var array< ItemInfo > ItemInfoList;
var array< NeededItem > NeededItemList;
};
// Массив, содержащий списки предметов для множественной продажи
var array< ItemList > m_itemLIst;
// Идентификатор магазина
var int m_shopID;
// Предыдущий список предметов
var int pre_itemList;
// Функция вызывается при загрузке окна
function OnLoad()
{
// Регистрация событий
registerEvent( EV_MultiSellShopID );
registerEvent( EV_MultiSellItemList );
registerEvent( EV_MultiSellNeededItemList );
registerEvent( EV_MultiSellItemListEnd );
registerEvent( EV_DialogOK );
pre_itemList = -1;
}
// Функция обработки событий
function OnEvent(int Event_ID, string param)
{
switch( Event_ID )
{
case EV_MultiSellShopID:
HandleShopID( param );
break;
case EV_MultiSellItemList:
HandleItemList( param );
break;
case EV_MultiSellNeededItemList:
HandleNeededItemList( param );
break;
case EV_MultiSellItemListEnd:
HandleItemListEnd( param );
break;
case EV_DialogOK:
HandleDialogOK();
break;
default:
break;
};
}
// Функция вызывается при отображении окна
function OnShow()
{
// Очистка элемента интерфейса
class'UIAPI_EDITBOX'.static.Clear("MultiSellWnd.ItemCountEdit");
}
// Функция вызывается при скрытии окна
function OnHide()
{
}
// Обработка нажатия кнопок
function OnClickButton( string ControlName )
{
if( ControlName == "OKButton" )
{
HandleOKButton();
}
else if( ControlName == "CancelButton" )
{
Clear();
HideWindow("MultiSellWnd");
}
}
// Обработка нажатия на предметы
function OnClickItem( String strID, int index )
{
local int i;
local string param;
class'UIAPI_MULTISELLITEMINFO'.static.Clear("MultiSellWnd.ItemInfo");
class'UIAPI_MULTISELLNEEDEDITEM'.static.Clear("MultiSellWnd.NeededItem");
if( strID == "ItemList" )
{
if( index >= 0 && index < m_itemList.Length )
{
// Обработка списка необходимых предметов
for( i=0 ; i < m_itemList[index].NeededItemList.Length ; ++i )
{
param = "";
ParamAdd( param, "Name", m_itemList[index].NeededItemList[i].Name );
ParamAdd( param, "ID", string(m_itemList[index].NeededItemList[i].ID ));
ParamAdd( param, "Num", string(m_itemList[index].NeededItemList[i].Count ));
ParamAdd( param, "Icon", m_itemList[index].NeededItemList[i].IconName );
ParamAdd( param, "Enchant", string(m_itemList[index].NeededItemList[i].Enchant) );
ParamAdd( param, "CrystalType", string(m_itemList[index].NeededItemList[i].CrystalType) );
ParamAdd( param, "ItemType", string(m_itemList[index].NeededItemList[i].ItemType) );
class'UIAPI_MULTISELLNEEDEDITEM'.static.AddData("MultiSellWnd.NeededItem", param);
}
// Обработка списка информации о предметах
for( i=0 ; i < m_itemList[index].NeededItemNum ; ++i )
{
class'UIAPI_MULTISELLITEMINFO'.static.SetItemInfo("MultiSellWnd.ItemInfo", i, m_itemList[index].ItemInfoList[i] );
}
class'UIAPI_EDITBOX'.static.Clear("MultiSellWnd.ItemCountEdit");
// Определение поведения окна в зависимости от типа множественной продажи
if( m_itemList[index].MultiSellType == 0 )
{
class'UIAPI_EDITBOX'.static.SetString("MultiSellWnd.ItemCountEdit", "1");
class'UIAPI_WINDOW'.static.DisableWindow("MultiSellWnd.ItemCountEdit");
}
else if( m_itemList[index].MultiSellType == 1 )
{
class'UIAPI_EDITBOX'.static.SetString("MultiSellWnd.ItemCountEdit", "1");
class'UIAPI_WINDOW'.static.EnableWindow("MultiSellWnd.ItemCountEdit");
}
if(pre_itemList != index)
{
if( DialogIsMine() )
{
DialogHide();
}
}
}
}
}
// Функция печати списка предметов
function Print()
{
local int i,j;
for( i = 0; i<m_ItemList.Length ; ++i)
{
for( j =0 ; j < m_ItemList[i].NeededItemList.Length ; ++j )
{
debug("Print ("$i$","$j$"), " $ m_ItemList[i].NeededItemList[j].Name);
}
}
}
// Обработка идентификатора магазина
function HandleShopID( string param )
{
Clear();
ParseInt( param, "shopID", m_shopID );
}
// Очистка данных
function Clear()
{
m_itemList.Length = 0;
class'UIAPI_MULTISELLITEMINFO'.static.Clear("MultiSellWnd.ItemInfo");
class'UIAPI_MULTISELLNEEDEDITEM'.static.Clear("MultiSellWnd.NeededItem");
class'UIAPI_ITEMWINDOW'.static.Clear("MultiSellWnd.ItemList");
}
// Обработка списка предметов
function HandleItemList( string param )
{
local ItemInfo info;
local int index, type, i, classID;
local bool bMatchFound;
ParseInt( param, "classID", classID );
class'UIDATA_ITEM'.static.GetItemInfo( classID, info );
info.ClassID = classID;
ParseInt( param, "index", index );
ParseInt( param, "type", type );
ParseInt( param, "ID", info.Reserved );
ParseInt( param, "slotBitType", info.SlotBitType );
ParseInt( param, "itemType", info.ItemType );
ParseInt( param, "itemCount", info.ItemNum );
ParseInt( param, "OutputRefineryOp1", info.RefineryOp1 );
ParseInt( param, "OutputRefineryOp2", info.RefineryOp2 );
if( 0 < info.Durability )
info.CurrentDurability = info.Durability;
if( index == 0 )
{
i = m_itemList.Length;
m_itemList.Length = i+1;
m_itemList[i].MultiSellType = type;
m_itemList[i].NeededItemNum = 1;
m_itemList[i].ItemInfoList.Length = index + 1;
m_itemList[i].ItemInfoList[index] = info;
}
else if( index > 0 )
{
bMatchFound = false;
for( i=m_itemList.Length-1; i >= 0 ; --i )
{
if( m_itemList[i].ItemInfoList[0].Reserved == info.Reserved
&& m_itemList[i].ItemInfoList[0].RefineryOp1 == info.RefineryOp1
&& m_itemList[i].ItemInfoList[0].RefineryOp2 == info.RefineryOp2 )
{
bMatchFound = true;
break;
}
}
if( bMatchFound )
{
if( m_itemList[i].ItemInfoList.Length <= index )
m_itemList[i].ItemInfoList.Length = index + 1;
m_itemList[i].MultiSellType = type;
m_itemList[i].ItemInfoList[index] = info;
++m_ItemList[i].NeededItemNum;
}
else
{
debug("MultiSellWnd Error!!");
}
}
}
// Обработка списка необходимых предметов
function HandleNeededItemList( string param )
{
local NeededItem item;
local int i, ID, index, RefineryOp1, RefineryOp2 ;
ParseInt( param, "ID", ID );
ParseInt( param, "refineryOp1", RefineryOp1 );
ParseInt( param, "refineryOp2", RefineryOp2 );
ParseInt( param, "ClassID", item.ID );
ParseInt( param, "count", item.Count );
ParseInt( param, "enchant", item.Enchant );
ParseInt( param, "inputRefineryOp1", item.RefineryOp1 );
ParseInt( param, "inputRefineryOp2", item.RefineryOp2 );
if( item.ID == -100 )
{
item.Name = GetSystemString(1277);
item.IconName = "icon.etc_i.etc_pccafe_point_i00";
item.Enchant = 0;
item.ItemType = -1;
item.ID = 0;
}
else if( item.ID == -200 )
{
item.Name = GetSystemString( 1311 );
item.IconName = "icon.etc_i.etc_bloodpledge_point_i00";
item.Enchant = 0;
item.ItemType = -1;
item.ID = 0;
}
else
{
item.Name = class'UIDATA_ITEM'.static.GetItemName( item.ID );
item.IconName = class'UIDATA_ITEM'.static.GetItemTextureName( item.ID );
}
for( i=m_itemList.Length-1; i>=0 ; --i )
{
if( m_itemList[i].ItemInfoList[0].Reserved == ID
&& m_itemList[i].ItemInfoList[0].RefineryOp1 == RefineryOp1
&& m_itemList[i].ItemInfoList[0].RefineryOp2 == RefineryOp2
)
{
index = m_itemList[i].NeededItemList.Length;
m_itemList[i].NeededItemList.Length = index + 1;
item.ItemType = class'UIDATA_ITEM'.static.GetItemDataType( item.ID );
item.CrystalType = class'UIDATA_ITEM'.static.GetItemCrystalType( item.ID );
m_itemList[i].NeededItemList[index] = item;
break;
}
}
}
// Обработка завершения списка предметов
function HandleItemListEnd( string param )
{
local WindowHandle m_inventoryWnd;
m_inventoryWnd = GetHandle( "InventoryWnd" );
if( m_inventoryWnd.IsShowWindow() )
{
m_inventoryWnd.HideWindow();
}
// Отображение окна множественной продажи и установка фокуса на него
ShowWindow("MultiSellWnd");
class'UIAPI_WINDOW'.static.SetFocus("MultiSellWnd");
ShowItemList();
}
// Отображение списка предметов
function ShowItemList()
{
local ItemInfo info;
local int i;
for( i=0 ; i < m_itemList.Length ; ++i )
{
info = m_itemList[i].ItemInfoList[0];
class'UIAPI_ITEMWINDOW'.static.AddItem( "MultiSellWnd.ItemList", info );
}
}
// Обработка нажатия кнопки OK
function HandleOKButton()
{
local int selectedIndex, itemNum;
selectedIndex = class'UIAPI_ITEMWINDOW'.static.GetSelectedNum("MultiSellWnd.ItemList");
itemNum = int(class'UIAPI_EDITBOX'.static.GetString("MultiSellWnd.ItemCountEdit"));
if( selectedIndex >= 0 )
{
DialogSetReservedInt( selectedIndex );
DialogSetReservedInt2( itemNum );
DialogSetID( MULTISELLWND_DIALOG_OK );
DialogShow(DIALOG_Warning, GetSystemMessage(1383));
pre_itemList = selectedIndex;
}
}
// Обработка нажатия кнопки OK в диалоговом окне
function HandleDialogOK()
{
local string param;
local int SelectedIndex;
if( DialogIsMine() )
{
SelectedIndex = DialogGetReservedInt();
ParamAdd( param, "ShopID", string(m_shopID) );
ParamAdd( param, "ItemID", string( m_itemList[SelectedIndex].ItemInfoList[0].Reserved ) );
ParamAdd( param, "RefineryOp1", string( m_itemList[SelectedIndex].ItemInfoList[0].RefineryOp1 ) );
ParamAdd( param, "RefineryOp2", string( m_itemList[SelectedIndex].ItemInfoList[0].RefineryOp2 ) );
ParamAdd( param, "ItemCount", string(DialogGetReservedInt2()) );
RequestMultiSellChoose( param );
}
}
// Значения по умолчанию для свойств класса
defaultproperties
{
}