Добавлен Unryze,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Алгоритм
Версия Warcraft:
UjAPI v1.1.8.178+
О системе
Относительно краткий пример создания системы магазина строго на CSimpleFrame/CSimpleRegion фреймах используя UjAPI и Frame API.
Главным бонусом UjAPI в данной наработке является handlelist тип, который позволяет нам хранить все созданные фреймы в "листе" и не использовать тучу переменных, без какой-либо нужды. А так же возможность получать текущую анимацию курсора через GetFrameSpriteCurrentAnimationId, чтобы убедиться, что ПКМ была нажата.
Ну и конечно же HashTable, которая решает в целом проблемы работы с MUI наработками.
Ну и конечно же HashTable, которая решает в целом проблемы работы с MUI наработками.
Собственно, почему же выбор пал на CSimpleFrame/CSimpleRegion типы фреймов? На деле, главная причина - отсутствие в целом поддержки этих фреймов как на Reforged, так и в DzAPI. Хотя этих фреймов хватает почти на все нужды, если расширить их API.
Данная система конечно же работает в онлайне и не вызывает десинха, иначе это не имело бы смысла.
Код
раскрыть
globals
hashtable FrameHT = InitHashtable( )
hashtable ItemDataHT = InitHashtable( )
framehandle ItemShopUI = null
framehandle ShopButton = null
handlelist ItemShopItemList = HandleListCreate( )
endglobals
function OnButtonPress takes nothing returns nothing
local framehandle but = GetTriggerFrame( )
local integer bid = GetHandleId( but )
local player p = GetTriggerPlayer( )
local real width = GetFrameWidth( but )
local real height = GetFrameHeight( but )
if p == GetLocalPlayer( ) then
if but != null then
if not LoadBoolean( FrameHT, bid, 'prss' ) then
call SetFrameSize( but, width - .0025, height - .0025 ) // .024, .0465
call SaveBoolean( FrameHT, bid, 'prss', true )
endif
endif
endif
set p = null
set but = null
endfunction
function OnButtonUnpressHandler takes nothing returns nothing
local integer hid = GetHandleId( GetExpiredTimer( ) )
local player p = LoadPlayerHandle( FrameHT, hid, '+ply' )
local framehandle but = LoadFrameHandle( FrameHT, hid, '+frm' )
local integer bid = GetHandleId( but )
local real width = GetFrameWidth( but )
local real height = GetFrameHeight( but )
if p == GetLocalPlayer( ) then
if but != null then
if LoadBoolean( FrameHT, bid, 'prss' ) then
call SetFrameSize( but, width + .0025, height + .0025 ) // .025, .0475
call SaveBoolean( FrameHT, bid, 'prss', false )
endif
endif
endif
set p = null
set but = null
endfunction
function OnButtonUnpress takes nothing returns nothing
local player p = GetTriggerPlayer( )
local framehandle but = GetTriggerFrame( )
local timer tmr = LoadTimerHandle( FrameHT, GetHandleId( but ), '+tmr' )
if tmr == null then
set tmr = CreateTimer( )
call SaveTimerHandle( FrameHT, GetHandleId( but ), '+tmr', tmr )
call SavePlayerHandle( FrameHT, GetHandleId( tmr ), '+ply', p )
call SaveFrameHandle( FrameHT, GetHandleId( tmr ), '+frm', but )
endif
call TimerStart( tmr, .1, false, function OnButtonUnpressHandler )
set p = null
set but = null
endfunction
function UnitAddItemConditional takes unit u, integer iid, integer goldCost returns integer
local player p = GetOwningPlayer( u )
local integer i = 0
local integer whichId = 0
local integer baseCharges = 0
local integer charges = 0
local integer newCharges = 0
local integer freeSlotId = -1
local integer playerGold = GetPlayerState( p, PLAYER_STATE_RESOURCE_GOLD )
local item it = null
if playerGold < goldCost then
set p = null
return -1
endif
set baseCharges = GetBaseItemIntegerFieldById( iid, ITEM_IF_NUMBER_OF_CHARGES )
loop
exitwhen i == GetUnitItemSlots( u )
set it = UnitItemInSlot( u, i )
if it != null then
if baseCharges > 0 then
set whichId = GetItemTypeId( it )
set charges = GetItemCharges( it )
set newCharges = baseCharges + charges
if iid == GetItemTypeId( it ) then
if newCharges <= LoadInteger( ItemDataHT, iid, 'mchr' ) then
call SetPlayerState( p, PLAYER_STATE_RESOURCE_GOLD, playerGold - goldCost )
call SetItemCharges( it, newCharges )
set p = null
set it = null
return i
endif
endif
endif
else
if freeSlotId == -1 then
set freeSlotId = i
endif
endif
set i = i + 1
endloop
if freeSlotId != -1 then
call SetPlayerState( p, PLAYER_STATE_RESOURCE_GOLD, playerGold - goldCost )
call UnitAddItemById( u, iid )
endif
set p = null
set it = null
return freeSlotId
endfunction
function OnButtonAcceptPurchase takes nothing returns nothing
local player p = GetTriggerPlayer( )
local integer pHid = GetHandleId( p )
local integer buttonId = LoadInteger( FrameHT, pHid, '+bId' )
local framehandle but = null
local integer butHid = 0
local integer itemTypeId = 0
local integer freeSlotId = 0
local item it = null
if buttonId == -1 then
return
endif
set but = HandleListGetFrameByIndex( ItemShopItemList, buttonId )
set butHid = GetHandleId( but )
set itemTypeId = LoadInteger( FrameHT, butHid, 'tpid' )
call UnitAddItemConditional( LoadUnitHandle( FrameHT, pHid, 'hero' ), itemTypeId, GetBaseItemIntegerFieldById( itemTypeId, ITEM_IF_GOLD_COST ) )
if false and p == GetLocalPlayer( ) then
call EditBlackBorders( -.02, .13 ) // -.02, .13 | to return to default
call HideOriginFrames( false )
//call SelectUnit( u, true )
endif
set p = null
set but = null
endfunction
function SetFrameShopSellButtonState takes player p, boolean state returns nothing
local framehandle sellBut = GetCSimpleFrameByName( "ItemSellButton", 0 )
local framehandle sellText = GetCSimpleFontStringByName( "ItemSellText", 0 )
if p == GetLocalPlayer( ) then
if state then
call SetFrameEnabled( sellBut, true )
call SetFrameColourEx( sellBut, 1, 0xFFFFFFFF )
call SetFrameTextColour( sellText, 0xFF806050 )
else
call SetFrameEnabled( sellBut, false )
call SetFrameColourEx( sellBut, 1, 0x50FFFFFF )
call SetFrameTextColour( sellText, 0x50806050 )
endif
endif
set sellBut = null
set sellText = null
endfunction
function OnButtonAcceptSell takes nothing returns nothing
local player p = GetTriggerPlayer( )
local integer hid = GetHandleId( p )
local integer itemSlot = LoadInteger( FrameHT, hid, 'itId' )
local integer price = 0
local integer charges = 0
local item it = null
local framehandle selector = null
if itemSlot != -1 then
set it = UnitItemInSlot( LoadUnitHandle( FrameHT, hid, 'hero' ), itemSlot )
if it != null then
set selector = GetCFrameByName( "ItemPurchaseSelector", 0 )
set charges = GetItemCharges( it )
if charges > 0 then
set price = GetItemIntegerField( it, ITEM_IF_GOLD_COST ) * charges
else
set price = GetItemIntegerField( it, ITEM_IF_GOLD_COST )
endif
set price = price / 2 // R2I( price / ( 1. + LoadReal( ItemDataHT, GetItemTypeId( it ), '+tax' ) ) )
//call ConsolePrint( "price = " + I2S( price ) + "\n" )
call SetPlayerState( p, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( p, PLAYER_STATE_RESOURCE_GOLD ) + price )
call RemoveItem( it )
call ShowFrame( selector, false )
call SetFrameShopSellButtonState( p, false )
endif
endif
set p = null
set it = null
set selector = null
endfunction
function ToggleShopVisibilityState takes player p returns nothing
local framehandle shopFrame = GetFrameByName( "ItemSelectionUI", 0 )
local boolean isShow = not IsFrameVisible( shopFrame )
if p == GetLocalPlayer( ) then
call ShowFrame( shopFrame, isShow )
call ShowFrame( GetCFrameByName( "ItemPurchaseSelector", 0 ), false )
call ShowFrame( GetFrameByName( "ItemPurchaseToolTip", 0 ), false )
endif
set shopFrame = null
endfunction
function OnCloseItemShopInfo takes nothing returns nothing
local player p = GetTriggerPlayer( )
if p == GetLocalPlayer( ) then
//call ShowFrame( GetFrameByName( "ItemSelectionUI", 0 ), false )
call ShowFrame( GetCFrameByName( "ItemPurchaseSelector", 0 ), false )
call ShowFrame( GetFrameByName( "ItemPurchaseToolTip", 0 ), false )
endif
set p = null
endfunction
function GetFrameItemShopUI takes nothing returns framehandle
local framehandle gameUI = null
local framehandle consoleUI = null
local framehandle shopUI = null
local framehandle texture = null
local framehandle textFrame = null
local framehandle selectorFrame = null
local framehandle frm = null
local framehandle simpleButton = null
local trigger tOnPress = null
local trigger tOnUnPress = null
local trigger tOnClick = null
local string s = ""
local integer i = 0
if ItemShopUI != null then
return ItemShopUI
endif
set consoleUI = GetOriginFrame( ORIGIN_FRAME_CONSOLE_UI, 0 )
set shopUI = GetCSimpleFrameByName( "ItemSelectionUI", 0 )
set ItemShopUI = CreateFrameByType( "SIMPLEFRAME", "ItemPurchaseToolTip", consoleUI, "", 0 )
call ClearFrameAllPoints( ItemShopUI )
call SetFrameSize( ItemShopUI, .1225, .45 ) // .25
call SetFrameRelativePoint( ItemShopUI, FRAMEPOINT_TOPRIGHT, shopUI, FRAMEPOINT_TOPRIGHT, .12, .0 ) // UI\\Widgets\\ToolTips\\Human\\human-tooltip-background | UI\\Widgets\\ToolTips\\Human\\human-tooltip-border
call SetFrameTextureEx( ItemShopUI, "UI\\Widgets\\EscMenu\\Orc\\orc-options-menu-background", "UI\\Widgets\\EscMenu\\Orc\\orc-options-menu-border", 0, false )
call SetFramePriority( ItemShopUI, 4 )
set texture = CreateFrameByType( "SIMPLETEXTURE", "ItemPurchaseIcon", ItemShopUI, "", 0 )
//call SetFrameTexture( texture, heroIcon, 0, false )
call ClearFrameAllPoints( texture )
call SetFrameRelativePoint( texture, FRAMEPOINT_TOPLEFT, ItemShopUI, FRAMEPOINT_TOPLEFT, .005, -.0075 )
call SetFrameSize( texture, .0175, .04 )
call SetFramePriority( texture, 2 )
call ShowFrame( texture, true )
set textFrame = CreateFrameByType( "SIMPLETEXT", "ItemPurchaseTextHeader", ItemShopUI, "", 0 )
call ClearFrameAllPoints( textFrame )
call SetFrameRelativePoint( textFrame, FRAMEPOINT_TOPLEFT, texture, FRAMEPOINT_TOPRIGHT, .0025, -.0025 )
call SetFramePriority( textFrame, 2 )
call SetFrameFont( textFrame, "Fonts\\FRIZQT__.TTF", .0125, 0 )
call SetFrameTextAlignment( textFrame, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_LEFT )
//call SetFrameWidth( textFrame, .1 )
call SetFrameText( textFrame, " " )
call ShowFrame( textFrame, true )
set textFrame = CreateFrameByType( "SIMPLETEXT", "ItemPurchaseTextBody", ItemShopUI, "", 0 )
call ClearFrameAllPoints( textFrame )
call SetFrameRelativePoint( textFrame, FRAMEPOINT_TOPLEFT, texture, FRAMEPOINT_BOTTOMLEFT, .0, -.01 )
call SetFramePriority( textFrame, 2 )
call SetFrameFont( textFrame, "Fonts\\FRIZQT__.TTF", .012, 0 )
call SetFrameTextHorizontalAlignment( textFrame, TEXT_JUSTIFY_LEFT )
call SetFrameWidth( textFrame, .110 )
call SetFrameText( textFrame, " " )
call ShowFrame( textFrame, true )
set frm = CreateFrameByType( "SIMPLETEXTURE", "ItemPurchaseGoldIcon", ItemShopUI, "", i )
call SetFrameTexture( frm, "UI\\Feedback\\Resources\\ResourceGold", 0, false )
call ClearFrameAllPoints( frm )
call SetFrameRelativePoint( frm, FRAMEPOINT_TOPLEFT, texture, FRAMEPOINT_TOPRIGHT, .0025, -.0175 )
call SetFrameSize( frm, .01, .015 )
call SetFramePriority( frm, 2 )
call ShowFrame( frm, true )
set textFrame = CreateFrameByType( "SIMPLETEXT", "ItemPurchaseGoldCostText", ItemShopUI, "", i )
call ClearFrameAllPoints( textFrame )
call SetFrameRelativePoint( textFrame, FRAMEPOINT_CENTER, frm, FRAMEPOINT_RIGHT, .01, .0 )
call SetFramePriority( textFrame, 2 )
call SetFrameFont( textFrame, "Fonts\\FRIZQT__.TTF", .011, 0 )
call SetFrameTextAlignment( textFrame, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_LEFT )
call SetFrameTextColour( textFrame, 0xFFFFA5FF )
call SetFrameText( textFrame, "" )
call ShowFrame( textFrame, true )
call ShowFrame( ItemShopUI, false )
set gameUI = GetOriginFrame( ORIGIN_FRAME_GAME_UI, 0 )
set selectorFrame = CreateFrameByType( "SPRITE", "ItemPurchaseSelector", gameUI, "", 0 )
call ClearFrameAllPoints( selectorFrame )
call SetFrameAbsolutePoint( selectorFrame, FRAMEPOINT_CENTER, .2, .2 )
call SetFrameSize( selectorFrame, .01, .01 )
call SetFrameSpriteModel( selectorFrame, "UI\\Feedback\\Autocast\\UI-ModalButtonOn.mdl" )
call SetFrameTrackState( selectorFrame, 2 )
call ShowFrame( selectorFrame, false )
set s = "CustomUI\\Selectors\\ClickableButton" // "UI\\Widgets\\EscMenu\\Human\\checkbox-check"
set simpleButton = CreateFrameByType( "SIMPLEBUTTON", "ItemPurchaseAcceptButton", ItemShopUI, "", 0 )
call ClearFrameAllPoints( simpleButton )
call SetFrameTexture( simpleButton, s, 0, true )
call SetFrameTexture( simpleButton, s, 1, true )
call SetFrameTexture( simpleButton, s, 2, true )
call SetFrameSize( simpleButton, .1, .025 )
call SetFramePriority( simpleButton, 5 )
call SetFrameParent( simpleButton, ItemShopUI )
call ShowFrame( simpleButton, true )
call SetFrameRelativePoint( simpleButton, FRAMEPOINT_CENTER, ItemShopUI, FRAMEPOINT_BOTTOM, .0, .025 )
set textFrame = CreateFrameByType( "SIMPLETEXT", "ItemPurchaseAcceptText", simpleButton, "", 0 )
call ClearFrameAllPoints( textFrame )
call SetFramePriority( textFrame, 2 )
call SetFrameFont( textFrame, "Fonts\\FRIZQT__.TTF", .015, 0 )
call SetFrameTextAlignment( textFrame, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_MIDDLE )
//call SetFrameWidth( textFrame, .1 )
call SetFrameTextColour( textFrame, 0xFF806050 ) // 0xFFFF9000
call SetFrameParent( textFrame, simpleButton )
call SetFrameText( textFrame, "PURCHASE" )
call ShowFrame( textFrame, true )
call SetFrameRelativePoint( textFrame, FRAMEPOINT_CENTER, simpleButton, FRAMEPOINT_CENTER, .0, .0 )
set tOnPress = CreateTrigger( )
set tOnUnPress = CreateTrigger( )
set tOnClick = CreateTrigger( )
call TriggerRegisterFrameEvent( tOnPress, simpleButton, FRAMEEVENT_MOUSE_DOWN )
call TriggerRegisterFrameEvent( tOnUnPress, simpleButton, FRAMEEVENT_MOUSE_UP )
call TriggerRegisterFrameEvent( tOnClick, simpleButton, FRAMEEVENT_CONTROL_CLICK )
call TriggerAddAction( tOnPress, function OnButtonPress )
call TriggerAddAction( tOnUnPress, function OnButtonUnpress )
call TriggerAddAction( tOnClick, function OnButtonAcceptPurchase )
set s = "CustomUI\\Selectors\\ClickableButton"
set simpleButton = CreateFrameByType( "SIMPLEBUTTON", "ItemClosePurchaseButton", ItemShopUI, "", 0 )
call ClearFrameAllPoints( simpleButton )
call SetFrameTexture( simpleButton, s, 0, true )
call SetFrameTexture( simpleButton, s, 1, true )
call SetFrameTexture( simpleButton, s, 2, true )
call SetFrameSize( simpleButton, .01, .015 )
call SetFramePriority( simpleButton, 6 )
call SetFrameParent( simpleButton, ItemShopUI )
call ShowFrame( simpleButton, true )
call SetFrameRelativePoint( simpleButton, FRAMEPOINT_TOPRIGHT, ItemShopUI, FRAMEPOINT_TOPRIGHT, .0, .0 )
set textFrame = CreateFrameByType( "SIMPLETEXT", "ItemClosePurchaseText", simpleButton, "", 0 )
call ClearFrameAllPoints( textFrame )
call SetFramePriority( textFrame, 2 )
call SetFrameFont( textFrame, "Fonts\\FRIZQT__.TTF", .007, 0 )
call SetFrameTextAlignment( textFrame, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_MIDDLE )
call SetFrameTextColour( textFrame, 0xFF806050 ) // 0xFF806050
call SetFrameParent( textFrame, simpleButton )
call SetFrameText( textFrame, "X" )
call ShowFrame( textFrame, true )
call SetFrameRelativePoint( textFrame, FRAMEPOINT_CENTER, simpleButton, FRAMEPOINT_CENTER, .0, .0 )
set tOnPress = CreateTrigger( )
set tOnUnPress = CreateTrigger( )
set tOnClick = CreateTrigger( )
call TriggerRegisterFrameEvent( tOnPress, simpleButton, FRAMEEVENT_MOUSE_DOWN )
call TriggerRegisterFrameEvent( tOnUnPress, simpleButton, FRAMEEVENT_MOUSE_UP )
call TriggerRegisterFrameEvent( tOnClick, simpleButton, FRAMEEVENT_CONTROL_CLICK )
call TriggerAddAction( tOnPress, function OnButtonPress )
call TriggerAddAction( tOnUnPress, function OnButtonUnpress )
call TriggerAddAction( tOnClick, function OnCloseItemShopInfo )
set gameUI = null
set consoleUI = null
set texture = null
set textFrame = null
set selectorFrame = null
set simpleButton = null
set tOnPress = null
set tOnUnPress = null
set tOnClick = null
return ItemShopUI
endfunction
function OnDisplayItemButtonData takes player p, framehandle but returns nothing
local framehandle cursor = GetOriginFrame( ORIGIN_FRAME_CURSOR_FRAME, 0 )
local framehandle tooltip = GetOriginFrame( ORIGIN_FRAME_UBERTOOLTIP, 0 )
local framehandle frm = null
local integer index = LoadInteger( FrameHT, GetHandleId( but ), 'indx' )
local integer typeId = LoadInteger( FrameHT, GetHandleId( but ), 'tpid' )
local integer goldCost = GetBaseItemIntegerFieldById( typeId, ITEM_IF_GOLD_COST )
local string texturePath = GetFrameTexture( but, 0 )
local string name = LoadStr( FrameHT, GetHandleId( but ), 'name' )
local string info_normal = LoadStr( FrameHT, GetHandleId( but ), 'ninf' )
local string info_extended = LoadStr( FrameHT, GetHandleId( but ), 'einf' )
if p == GetLocalPlayer( ) then
set tooltip = GetFrameItemShopUI( )
call ShowFrame( tooltip, true )
set frm = GetCSimpleTextureByName( "ItemPurchaseIcon", 0 )
call SetFrameTexture( frm, texturePath, 0, false )
set frm = GetCSimpleFontStringByName( "ItemPurchaseTextHeader", 0 )
call SetFrameText( frm, name )
set frm = GetCSimpleFontStringByName( "ItemPurchaseGoldCostText", 0 )
call SetFrameText( frm, I2S( goldCost ) )
set frm = GetCSimpleFontStringByName( "ItemPurchaseTextBody", 0 )
call SetFrameText( frm, info_extended )
//call ConsolePrint( "[" + GetTimeStamp( true, 0 ) + "]:================\n" )
endif
set frm = null
set cursor = null
set tooltip = null
endfunction
function OnButtonEnter takes nothing returns nothing
local player p = GetTriggerPlayer( )
local framehandle but = GetTriggerFrame( )
local framehandle cursor = GetOriginFrame( ORIGIN_FRAME_CURSOR_FRAME, 0 )
if p == GetLocalPlayer( ) then
call SetFrameSpriteColour( cursor, 0xFF00FF00 )
endif
set p = null
set but = null
set cursor = null
endfunction
function OnButtonLeave takes nothing returns nothing
local player p = GetTriggerPlayer( )
local framehandle but = GetTriggerFrame( )
local framehandle cursor = GetOriginFrame( ORIGIN_FRAME_CURSOR_FRAME, 0 )
local framehandle tooltip = GetOriginFrame( ORIGIN_FRAME_UBERTOOLTIP, 0 )
if p == GetLocalPlayer( ) then
call SetFrameSpriteColour( cursor, 0xFFFFFFFF )
endif
set p = null
set but = null
set cursor = null
set tooltip = null
endfunction
function OnButtonClick takes nothing returns nothing
local player p = GetTriggerPlayer( )
local framehandle but = GetTriggerFrame( )
local framehandle selector = GetCFrameByName( "ItemPurchaseSelector", 0 )
local integer bid = GetHandleId( but )
local integer pHid = GetHandleId( p )
local integer index = LoadInteger( FrameHT, bid, 'indx' )
local integer typeId = LoadInteger( FrameHT, bid, 'tpid' )
call SaveInteger( FrameHT, pHid, '+bId', index )
if p == GetLocalPlayer( ) then
call ClearFrameAllPoints( selector )
call SetFrameRelativePoint( selector, FRAMEPOINT_BOTTOMLEFT, but, FRAMEPOINT_BOTTOMLEFT, .0, .0 )
call SetFrameSpriteMaterialScale( selector, .5, 1., 1. )
call ShowFrame( selector, true )
if HaveSavedInteger( FrameHT, bid, 'indx' ) then
call OnDisplayItemButtonData( p, but )
endif
endif
set p = null
set but = null
set selector = null
endfunction
function InitFrameItemShop takes nothing returns nothing
local trigger tOnPress = null
local trigger tOnUnPress = null
local trigger tOnClick = null
local trigger tOnEnter = null
local trigger tOnLeave = null
local framehandle gameUI = GetOriginFrame( ORIGIN_FRAME_GAME_UI, 0 )
local framehandle consoleUI = GetOriginFrame( ORIGIN_FRAME_CONSOLE_UI, 0 )
local framehandle mainFrame = CreateFrameByType( "SIMPLEFRAME", "ItemSelectionUI", consoleUI, "", 0 )
local framehandle simpleButton = null
local framehandle textFrame = null
local integer i = 0
local integer j = 0
local integer k = 0
local integer id = 0
local integer maxCharges = 0
local integer itemCount = 16
local integer itemsPerRow = 11
local real x = 0.
local real y = 0.
local real width = .0
local real height = .0
local string s = ""
local string array ItemPurchaseData // this will be discarded at the end.
call EditBlackBorders( .0, .0 ) // -.02, .13 | to return to default
call HideOriginFrames( true )
call ClearFrameAllPoints( mainFrame )
call SetFrameSize( mainFrame, .29, .45 )
call SetFrameAbsolutePoint( mainFrame, FRAMEPOINT_CENTER, .34, .35 ) // UI\\Widgets\\ToolTips\\Human\\human-tooltip-border
call SetFrameTextureEx( mainFrame, "UI\\Widgets\\EscMenu\\Orc\\orc-options-menu-background", "UI\\Widgets\\EscMenu\\Orc\\orc-options-menu-border", 0, false )
call SetFramePriority( mainFrame, 4 )
call ShowFrame( mainFrame, true )
set ItemPurchaseData[ 0 ] = "wild"
set ItemPurchaseData[ 1 ] = "spsh"
set ItemPurchaseData[ 2 ] = "ajen"
set ItemPurchaseData[ 3 ] = "bgst"
set ItemPurchaseData[ 4 ] = "belv"
set ItemPurchaseData[ 5 ] = "bspd"
set ItemPurchaseData[ 6 ] = "cnob"
set ItemPurchaseData[ 7 ] = "ratc"
set ItemPurchaseData[ 8 ] = "clfm"
set ItemPurchaseData[ 9 ] = "clsd"
set ItemPurchaseData[ 10 ] = "crys"
set ItemPurchaseData[ 11 ] = "dsum"
set ItemPurchaseData[ 12 ] = "rst1"
set ItemPurchaseData[ 13 ] = "gcel"
set ItemPurchaseData[ 14 ] = "hval"
set ItemPurchaseData[ 15 ] = "hcun"
set ItemPurchaseData[ 0 ] = "wild"
set ItemPurchaseData[ 1 ] = "spsh"
set ItemPurchaseData[ 2 ] = "ajen"
set ItemPurchaseData[ 3 ] = "bgst"
set ItemPurchaseData[ 4 ] = "belv"
set ItemPurchaseData[ 5 ] = "bspd"
set ItemPurchaseData[ 6 ] = "cnob"
set ItemPurchaseData[ 7 ] = "ratc"
set ItemPurchaseData[ 8 ] = "clfm"
set ItemPurchaseData[ 9 ] = "clsd"
set ItemPurchaseData[ 10 ] = "crys"
set ItemPurchaseData[ 11 ] = "dsum"
set ItemPurchaseData[ 12 ] = "rst1"
set ItemPurchaseData[ 13 ] = "gcel"
set ItemPurchaseData[ 14 ] = "hval"
set ItemPurchaseData[ 15 ] = "hcun"
set ItemPurchaseData[ 1000 + 0 ] = "5"
set ItemPurchaseData[ 1000 + 1 ] = "0"
set ItemPurchaseData[ 1000 + 2 ] = "0"
set ItemPurchaseData[ 1000 + 3 ] = "0"
set ItemPurchaseData[ 1000 + 4 ] = "0"
set ItemPurchaseData[ 1000 + 5 ] = "0"
set ItemPurchaseData[ 1000 + 6 ] = "0"
set ItemPurchaseData[ 1000 + 7 ] = "0"
set ItemPurchaseData[ 1000 + 8 ] = "0"
set ItemPurchaseData[ 1000 + 9 ] = "0"
set ItemPurchaseData[ 1000 + 10 ] = "0"
set ItemPurchaseData[ 1000 + 11 ] = "0"
set ItemPurchaseData[ 1000 + 12 ] = "0"
set ItemPurchaseData[ 1000 + 13 ] = "0"
set ItemPurchaseData[ 1000 + 14 ] = "0"
set ItemPurchaseData[ 1000 + 15 ] = "0"
set tOnEnter = CreateTrigger( )
set tOnLeave = CreateTrigger( )
set tOnPress = CreateTrigger( )
set tOnUnPress = CreateTrigger( )
set tOnClick = CreateTrigger( )
set width = .020
set height = .038
loop
exitwhen i == itemCount
set id = String2Id( ItemPurchaseData[ i ] )
set maxCharges = S2I( ItemPurchaseData[ 1000 + i ] )
set simpleButton = CreateFrameByType( "SIMPLEBUTTON", "ItemListButton", consoleUI, "", i )
call ClearFrameAllPoints( simpleButton )
call SetFrameSize( simpleButton, width, height )
if ModuloInteger( i, itemsPerRow ) == .0 then
set j = 0
endif
set x = .02 + ( width * 1.25 ) * j
set y = .035 + ( height * 1.4 ) * I2R( i / itemsPerRow )
call SetFrameRelativePoint( simpleButton, FRAMEPOINT_CENTER, mainFrame, FRAMEPOINT_TOPLEFT, x, -y )
call SetFrameTexture( simpleButton, GetBaseItemStringFieldById( id, ITEM_SF_ICON ), 0, true )
call SetFrameTexture( simpleButton, GetBaseItemStringFieldById( id, ITEM_SF_ICON ), 1, true )
call SetFrameTexture( simpleButton, GetBaseItemStringFieldById( id, ITEM_SF_ICON ), 2, true )
call SaveInteger( FrameHT, GetHandleId( simpleButton ), 'indx', i )
call SaveInteger( FrameHT, GetHandleId( simpleButton ), 'tpid', id )
if maxCharges > 0 then
call SaveInteger( ItemDataHT, id, 'mchr', maxCharges )
endif
call SaveStr( FrameHT, GetHandleId( simpleButton ), 'name', GetBaseItemStringFieldById( id, ITEM_SF_NAME ) )
call SaveStr( FrameHT, GetHandleId( simpleButton ), 'ninf', GetBaseItemStringFieldById( id, ITEM_SF_TOOLTIP_NORMAL ) )
call SaveStr( FrameHT, GetHandleId( simpleButton ), 'einf', GetBaseItemStringFieldById( id, ITEM_SF_TOOLTIP_EXTENDED ) )
call SetFramePriority( simpleButton, 5 )
call ShowFrame( simpleButton, true )
call SetFrameParent( simpleButton, mainFrame )
set textFrame = CreateFrameByType( "SIMPLETEXT", "ItemListGoldCostText", simpleButton, "", i )
call ClearFrameAllPoints( textFrame )
call SetFrameRelativePoint( textFrame, FRAMEPOINT_BOTTOM, simpleButton, FRAMEPOINT_BOTTOM, .0, -.01 )
call SetFramePriority( textFrame, 2 )
call SetFrameFont( textFrame, "Fonts\\FRIZQT__.TTF", .01, 0 )
call SetFrameTextAlignment( textFrame, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_LEFT )
call SetFrameText( textFrame, I2S( GetBaseItemIntegerFieldById( id, ITEM_IF_GOLD_COST ) ) )
call SetFrameTextColour( textFrame, 0xFFFFA500 )
call ShowFrame( textFrame, true )
call TriggerRegisterFrameEvent( tOnEnter, simpleButton, FRAMEEVENT_MOUSE_ENTER )
call TriggerRegisterFrameEvent( tOnLeave, simpleButton, FRAMEEVENT_MOUSE_LEAVE )
call TriggerRegisterFrameEvent( tOnPress, simpleButton, FRAMEEVENT_MOUSE_DOWN )
call TriggerRegisterFrameEvent( tOnUnPress, simpleButton, FRAMEEVENT_MOUSE_UP )
call TriggerRegisterFrameEvent( tOnClick, simpleButton, FRAMEEVENT_CONTROL_CLICK )
call HandleListAddHandle( ItemShopItemList, simpleButton )
set i = i + 1
set j = j + 1
endloop
call TriggerAddAction( tOnEnter, function OnButtonEnter )
call TriggerAddAction( tOnLeave, function OnButtonLeave )
call TriggerAddAction( tOnPress, function OnButtonPress )
call TriggerAddAction( tOnUnPress, function OnButtonUnpress )
call TriggerAddAction( tOnClick, function OnButtonClick )
set s = "CustomUI\\Selectors\\ClickableButton"
set simpleButton = CreateFrameByType( "SIMPLEBUTTON", "ItemSellButton", mainFrame, "", 0 )
call ClearFrameAllPoints( simpleButton )
call SetFrameTexture( simpleButton, s, 0, true )
call SetFrameTexture( simpleButton, s, 1, true )
call SetFrameTexture( simpleButton, s, 2, true )
call SetFrameSize( simpleButton, .05, .025 )
call SetFramePriority( simpleButton, 5 )
call SetFrameParent( simpleButton, mainFrame )
call ShowFrame( simpleButton, true )
call SetFrameRelativePoint( simpleButton, FRAMEPOINT_CENTER, mainFrame, FRAMEPOINT_BOTTOMRIGHT, -.0325, .025 )
call SetFrameEnabled( simpleButton, false )
call SetFrameColourEx( simpleButton, 1, 0x50FFFFFF )
set textFrame = CreateFrameByType( "SIMPLETEXT", "ItemSellText", simpleButton, "", 0 )
call ClearFrameAllPoints( textFrame )
call SetFramePriority( textFrame, 2 )
call SetFrameFont( textFrame, "Fonts\\FRIZQT__.TTF", .015, 0 )
call SetFrameTextAlignment( textFrame, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_MIDDLE )
call SetFrameTextColour( textFrame, 0x50806050 ) // 0xFF806050
call SetFrameParent( textFrame, simpleButton )
call SetFrameText( textFrame, "SELL" )
call ShowFrame( textFrame, true )
call SetFrameRelativePoint( textFrame, FRAMEPOINT_CENTER, simpleButton, FRAMEPOINT_CENTER, .0, .0 )
set tOnPress = CreateTrigger( )
set tOnUnPress = CreateTrigger( )
set tOnClick = CreateTrigger( )
call TriggerRegisterFrameEvent( tOnPress, simpleButton, FRAMEEVENT_MOUSE_DOWN )
call TriggerRegisterFrameEvent( tOnUnPress, simpleButton, FRAMEEVENT_MOUSE_UP )
call TriggerRegisterFrameEvent( tOnClick, simpleButton, FRAMEEVENT_CONTROL_CLICK )
call TriggerAddAction( tOnPress, function OnButtonPress )
call TriggerAddAction( tOnUnPress, function OnButtonUnpress )
call TriggerAddAction( tOnClick, function OnButtonAcceptSell )
call GetFrameItemShopUI( )
set gameUI = null
set consoleUI = null
set mainFrame = null
set simpleButton = null
set textFrame = null
set tOnEnter = null
set tOnLeave = null
set tOnPress = null
set tOnUnPress = null
set tOnClick = null
endfunction
function OnButtonOpenShop takes nothing returns nothing
call ToggleShopVisibilityState( GetTriggerPlayer( ) )
endfunction
function GetFrameItemShopOpenButton takes nothing returns framehandle
local framehandle gameUI = null
local framehandle consoleUI = null
local framehandle shopUI = null
local framehandle texture = null
local framehandle textFrame = null
local framehandle selectorFrame = null
local framehandle frm = null
local framehandle simpleButton = null
local trigger tOnPress = null
local trigger tOnUnPress = null
local trigger tOnClick = null
local string s = ""
local integer i = 0
if ShopButton != null then
return ShopButton
endif
set gameUI = GetOriginFrame( ORIGIN_FRAME_GAME_UI, 0 )
set consoleUI = GetOriginFrame( ORIGIN_FRAME_CONSOLE_UI, 0 )
set simpleButton = CreateFrameByType( "SIMPLEBUTTON", "OpenItemShopButton", consoleUI, "", 0 )
set s = "CustomUI\\Selectors\\ClickableButton"
call ClearFrameAllPoints( simpleButton )
call SetFrameTexture( simpleButton, s, 0, true )
call SetFrameTexture( simpleButton, s, 1, true )
call SetFrameTexture( simpleButton, s, 2, true )
call SetFrameSize( simpleButton, .05, .025 )
call SetFramePriority( simpleButton, 6 )
call ShowFrame( simpleButton, true )
call SetFrameRelativePoint( simpleButton, FRAMEPOINT_CENTER, consoleUI, FRAMEPOINT_CENTER, .2425, -.15 )
set textFrame = CreateFrameByType( "SIMPLETEXT", "OpenItemShopText", simpleButton, "", 0 )
call ClearFrameAllPoints( textFrame )
call SetFramePriority( textFrame, 2 )
call SetFrameFont( textFrame, "Fonts\\FRIZQT__.TTF", .015, 0 )
call SetFrameTextAlignment( textFrame, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_MIDDLE )
call SetFrameTextColour( textFrame, 0xFF806050 ) // 0xFFFF9000
call SetFrameParent( textFrame, simpleButton )
call SetFrameText( textFrame, "SHOP" )
call ShowFrame( textFrame, true )
set tOnPress = CreateTrigger( )
set tOnUnPress = CreateTrigger( )
set tOnClick = CreateTrigger( )
call TriggerRegisterFrameEvent( tOnPress, simpleButton, FRAMEEVENT_MOUSE_DOWN )
call TriggerRegisterFrameEvent( tOnUnPress, simpleButton, FRAMEEVENT_MOUSE_UP )
call TriggerRegisterFrameEvent( tOnClick, simpleButton, FRAMEEVENT_CONTROL_CLICK )
call TriggerAddAction( tOnPress, function OnButtonPress )
call TriggerAddAction( tOnUnPress, function OnButtonUnpress )
call TriggerAddAction( tOnClick, function OnButtonOpenShop )
call SetFrameRelativePoint( textFrame, FRAMEPOINT_CENTER, simpleButton, FRAMEPOINT_CENTER, .0, .0 )
set texture = CreateFrameByType( "SIMPLETEXTURE", "ShopPlayerGoldTexture", consoleUI, "", 0 )
call SetFrameTexture( texture, "UI\\Feedback\\Resources\\ResourceGold", 0, false )
call ClearFrameAllPoints( texture )
call SetFrameRelativePoint( texture, FRAMEPOINT_CENTER, simpleButton, FRAMEPOINT_RIGHT, .01, .0 )
call SetFrameParent( texture, simpleButton )
call SetFrameSize( texture, .01, .015 )
call SetFramePriority( texture, 2 )
call ShowFrame( texture, true )
set textFrame = CreateFrameByType( "SIMPLETEXT", "ShopPlayerGoldText", consoleUI, "", i )
call ClearFrameAllPoints( textFrame )
call SetFrameRelativePoint( textFrame, FRAMEPOINT_CENTER, texture, FRAMEPOINT_RIGHT, .015, .0 )
call SetFrameParent( textFrame, simpleButton )
call SetFramePriority( textFrame, 2 )
call SetFrameFont( textFrame, "Fonts\\FRIZQT__.TTF", .011, 0 )
call SetFrameTextAlignment( textFrame, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_LEFT )
call SetFrameTextColour( textFrame, 0xFFFFA500 )
call SetFrameText( textFrame, I2S( GetPlayerState( GetLocalPlayer( ), PLAYER_STATE_RESOURCE_GOLD ) ) )
call ShowFrame( textFrame, true )
set ShopButton = simpleButton
set gameUI = null
set consoleUI = null
set simpleButton = null
set textFrame = null
set tOnPress = null
set tOnUnPress = null
set tOnClick = null
return ShopButton
endfunction
function OnPlayerGoldChange takes nothing returns nothing
local player p = GetTriggerPlayer( )
local playerstate state = GetEventPlayerState( )
local integer amount = GetPlayerState( p, state )
local framehandle goldFrame = GetCSimpleFontStringByName( "ShopPlayerGoldText", 0 )
if p == GetLocalPlayer( ) then
call SetFrameText( goldFrame, I2S( amount ) )
endif
set p = null
set state = null
set goldFrame = null
endfunction
function OnItemButtonClick takes nothing returns nothing
local player p = GetTriggerPlayer( )
local integer hid = GetHandleId( p )
local framehandle but = GetTriggerFrame( )
local framehandle tempBut = null
local framehandle selector = null
local framehandle cursor = GetOriginFrame( ORIGIN_FRAME_CURSOR_FRAME, 0 )
local mousebuttontype mtype = GetTriggerFrameMouseButton( )
local item it = null
local integer i = 0
local integer colour = 0xFF806050
if GetFrameSpriteCurrentAnimationId( cursor ) == 5 and mtype == MOUSE_BUTTON_TYPE_RIGHT then
loop
set tempBut = GetOriginFrame( ORIGIN_FRAME_ITEM_BUTTON, i )
exitwhen i == 6 or but == tempBut
set i = i + 1
endloop
if i < 6 then
set it = UnitItemInSlot( LoadUnitHandle( FrameHT, hid, 'hero' ), i )
if it == null then
set i = -1
endif
else
set i = -1
endif
else
set i = -1
endif
set selector = GetCFrameByName( "ItemPurchaseSelector", 0 )
if p == GetLocalPlayer( ) then
call SaveInteger( FrameHT, hid, 'itId', i )
call SyncSavedInteger( FrameHT, hid, 'itId' )
if i != -1 then
call SaveInteger( FrameHT, hid, '+bId', -1 )
call SetFrameShopSellButtonState( p, true )
call ShowFrame( selector, false )
call ClearFrameAllPoints( selector )
call SetFrameSpriteMaterialScale( selector, .8, .8, 1. )
call SetFrameRelativePoint( selector, FRAMEPOINT_BOTTOMLEFT, but, FRAMEPOINT_BOTTOMLEFT, .0, .0 )
call ShowFrame( selector, true )
else
call SetFrameShopSellButtonState( p, false )
call ShowFrame( selector, false )
endif
endif
set p = null
set but = null
set tempBut = null
set selector = null
set cursor = null
set it = null
set mtype = null
endfunction
function InitFrameItemShopSellSystem takes nothing returns nothing
local trigger t = CreateTrigger( )
local framehandle but = null
local integer i = 0
loop
exitwhen i == 6
set but = GetOriginFrame( ORIGIN_FRAME_ITEM_BUTTON, i )
call TriggerRegisterFrameEvent( t, but, FRAMEEVENT_CONTROL_CLICK )
set i = i + 1
endloop
call TriggerAddAction( t, function OnItemButtonClick )
set t = null
endfunction
function InitFrameItemShopForPlayer takes player p returns nothing
local trigger t = null
local integer hid = GetHandleId( p )
local unit u = LoadUnitHandle( FrameHT, hid, 'hero' )
if u == null then
call SetPlayerState( p, PLAYER_STATE_RESOURCE_GOLD, 9999999 )
set t = CreateTrigger( )
set u = CreateUnit( p, 'Hpal', -500. + 1000. * GetPlayerId( p ), .0, .0 )
if p == GetLocalPlayer( ) then
call SelectUnit( u, true )
endif
call SaveUnitHandle( FrameHT, hid, 'hero', u )
call TriggerRegisterPlayerStateEvent( t, p, PLAYER_STATE_RESOURCE_GOLD, GREATER_THAN_OR_EQUAL, 0. )
call TriggerAddAction( t, function OnPlayerGoldChange )
endif
set u = null
set t = null
endfunction
function OnInitFrameItemShopSystemDelayed takes nothing returns nothing
call InitFrameItemShopForPlayer( Player( 0 ) )
call InitFrameItemShopForPlayer( Player( 1 ) )
call InitFrameItemShop( )
call GetFrameItemShopOpenButton( )
call InitFrameItemShopSellSystem( )
endfunction
//===========================================================================
function InitTrig_FrameItemShopSystem takes nothing returns nothing
//set gg_trg_FrameItemShopSystem = CreateTrigger( )
call FogEnable( false )
call FogMaskEnable( false )
call PanCameraToTimed( 0., 0., 0. )
call EnableOperationLimit( false )
call TimerStart( CreateTimer( ), .5, false, function OnInitFrameItemShopSystemDelayed )
endfunction
Скриншоты
Превью
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
110/10
Ставлю лайк сразу за подобную годноту.