- Joined
- Nov 13, 2006
- Messages
- 1,814
JASS:
//-------------------------------------------------------------------------
// CONSTANTS
//-------------------------------------------------------------------------
//special effect paths, example for potion
constant function EFFECT takes integer i returns string
if i == 1 then
return "Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPeasant.mdl"
elseif i == 26 then
return "Abilities\\Spells\\Human\\Heal\\HealTarget.mdl"
elseif i == 30 then
return "Abilities\\Spells\\Undead\\ReplenishMana\\SpiritTouchTarget.mdl"
else
return ""
endif
endfunction
//where we want attach the effect on unit
constant function EFFECT_POINT takes integer i returns string
if i == 1 then
return "chest"
elseif i == 26 then
return "origin"
elseif i == 30 then
return "origin"
else
return ""
endif
endfunction
//stat point per level what u can share between str/agi and int
constant function STAT_PER_LV takes nothing returns integer
return 5
endfunction
//start stat points what get hero after it was created
constant function START_POINT takes nothing returns integer
return 500
endfunction
//max stack/charge for stackable items
constant function CHARGE_MAX takes nothing returns integer
return 99
endfunction
//max bag zise
constant function BAG_SIZE_MAX takes nothing returns integer
return 24
endfunction
//max droped item amount on map
constant function MAX_ITEM takes nothing returns integer
return 4
endfunction
//melee villager gero unit type id or raw code
constant function HERO_MELEE takes nothing returns integer
return 'H000'
endfunction
//ranged villager hero unit type id or raw code
constant function HERO_RANGED takes nothing returns integer
return 'H001'
endfunction
//bag item level
constant function BAG_LEVEL takes nothing returns integer
return 199
endfunction
//Surprise box item level
constant function BOX_LEVEL takes nothing returns integer
return 198
endfunction
//dummy unit rawcode what we use for decoration in inventory
constant function DUMMY_ID takes nothing returns integer
return 'h002'
endfunction
//Harvest ability, it is used for harvesting, channel based ability,what let u go to item even ur inventory is full
constant function HARVEST_ID takes nothing returns integer
return 'A00H'
endfunction
//Melee2Ranged ability raw code
constant function MELEE2RANGED_ID takes nothing returns integer
return 'A00D'
endfunction
//Bear form ability for instant special effect destroy
constant function BEARFORM_ID takes nothing returns integer
return 'A00C'
endfunction
//Bear form ability for Dummy Villager for instant special effect destroy
constant function DBEARFORM_ID takes nothing returns integer
return 'A00A'
endfunction
// Add hp ability raw code
constant function ADDHP_ID takes nothing returns integer
return 'A003'
endfunction
// Add mp ability raw code
constant function ADDMP_ID takes nothing returns integer
return 'A004'
endfunction
// Minimum range
constant function MIN_RANGE takes nothing returns integer
return 90000 //300 range
endfunction
//dummy caster unit unit type id
constant function DUMMY_CASTER_ID takes nothing returns integer
return 'e000'
endfunction
constant function WeaponDamageModifier takes integer subtype returns integer
if subtype == 1 then
return 12
elseif subtype == 2 then
return 12
elseif subtype == 3 then
return 20
elseif subtype == 4 then
return 15
elseif subtype == 5 then
return 15
elseif subtype == 6 then
return 14
elseif subtype == 7 then
return 10
elseif subtype == 8 then
return 14
elseif subtype == 9 then
return 16
else
return 0
endif
endfunction
//-------------------------------------------------------------------------
// BAG and FLOATING TEXT FUNCTION
//-------------------------------------------------------------------------
function AddItemToBag takes unit u, item bag, item itm returns boolean
local integer bagid = GetHandleId(bag)
local integer count = LoadInteger(udg_CItem_Table, bagid, 0)
local integer id = GetHandleId(itm)
local integer pl
local integer i
local destructable d
local real x
local real y
if count < BAG_SIZE_MAX() then
// if IsItemVisible(whichItem)
if UnitHasItem(u, itm) or not IsItemVisible(itm) then
if UnitHasItem(u, itm) then
call UnitRemoveItem(u, itm)
call SetItemVisible(itm, false)
endif
set i = 1
loop
exitwhen LoadItemHandle(udg_CItem_Table, bagid, i) == null
set i = i + 1
endloop
call SaveInteger(udg_CItem_Table, bagid, 0, count + 1)
call SaveItemHandle(udg_CItem_Table, bagid, i, itm)
set pl = GetPlayerId(GetOwningPlayer(u)) + 1
if udg_Camera_Lock[pl] == 3 and udg_Inv_Bag[pl] == bagid then
set x = LoadReal(udg_FSS, i + 2200, 1)
set y = LoadReal(udg_FSS, i + 2200, 2)
set d = CreateDestructableZ(LoadInteger(udg_FSS, 600, GetItemTypeId(itm)), x, y, 5, 0, 0.6, 0)
call SaveDestructableHandle(udg_FSS, 2409 + pl, i + 2200, d)
call ShowDestructable(d, false)
if GetLocalPlayer() == Player(pl - 1) then
call ShowDestructable(d, true)
endif
set d = null
endif
return true
else
return false
endif
else
call DisplayTextToPlayer (GetOwningPlayer(u), 0, 0, "|cffffff00Bag already full, can add more item|r")
return false
endif
endfunction
function RemoveBagContent takes integer bagid returns nothing
local integer max = LoadInteger(udg_CItem_Table, bagid, 0)
local integer i = 1
local integer a
local item itm
loop
exitwhen i > max
set itm = LoadItemHandle(udg_CItem_Table, bagid, i)
if itm != null then
set a = GetHandleId(itm)
call FlushChildHashtable(udg_CItem_Table, a)
endif
set i = i + 1
endloop
set itm = null
endfunction
function FT takes player p1, player p2, string txt, real fsize, unit u, integer speed, integer red, integer green, integer blue, integer alpha returns nothing
local real x
local real y
local real diff
local texttag tt
if IsUnitVisible(u, GetLocalPlayer()) and (GetLocalPlayer() == p1 or GetLocalPlayer() == p2) and udg_Camera_Lock[GetPlayerId(GetLocalPlayer()) + 1] == 0 then
set x = GetUnitX( u )
set y = GetUnitY( u )
set diff = StringLength( txt ) * fsize / 2.00 + 1
set tt = CreateTextTag( )
call SetTextTagText( tt, txt, fsize * 0.023 )
call SetTextTagPos( tt, x - diff, y, 100.00 )
call SetTextTagColor( tt, red, green, blue, alpha )
call SetTextTagPermanent( tt, false )
call SetTextTagLifespan( tt, 4.50 )
call SetTextTagFadepoint( tt, 2.50 )
call SetTextTagVelocity( tt, speed * 0.71 / 128 * Cos( 3.14159 / 2 ), speed * 0.71 / 128 * Sin( 3.14159 / 2 ) )
set tt = null
endif
endfunction
function FT_Ex takes player p1, player p2, string txt, real fsize, unit u, integer speed, integer red, integer green, integer blue, integer alpha, integer dir returns nothing
local real x
local real y
local real diff
local texttag tt
if IsUnitVisible(u, GetLocalPlayer()) and (GetLocalPlayer() == p1 or GetLocalPlayer() == p2) and udg_Camera_Lock[GetPlayerId(GetLocalPlayer()) + 1] == 0 then
set x = GetUnitX( u )
set y = GetUnitY( u )
set diff = StringLength( txt ) * fsize / 2.00 + 1
set tt = CreateTextTag( )
call SetTextTagText( tt, txt, fsize * 0.023 )
call SetTextTagPos( tt, x - diff, y, 100.00 )
call SetTextTagColor( tt, red, green, blue, alpha )
call SetTextTagPermanent( tt, false )
call SetTextTagLifespan( tt, 4.50 )
call SetTextTagFadepoint( tt, 2.50 )
set x = speed * 0.71 / 128
call SetTextTagVelocity( tt, x * Cos( dir * bj_DEGTORAD ), x * Sin( dir * bj_DEGTORAD ) )
set tt = null
endif
endfunction
//-------------------------------------------------------------------------
// OTHER ITEM RELATED FUNCTIONS
//-------------------------------------------------------------------------
function itype2TOitemId takes integer itype, integer subtype, integer quality returns integer
local integer i = 0
if itype == 1 then
set i = 'ckng'
elseif itype == 2 then
set i = 'rin1'
elseif itype == 3 then
if subtype == 1 then //short sword
set i = 'rat9'
elseif subtype == 2 then // mace
set i = 'rde3'
elseif subtype == 3 then // axe / hammer
set i = 'rde1'
elseif subtype == 4 then // polearm
set i = 'evtl'
elseif subtype == 5 then // long sword
set i = 'ajen'
elseif subtype == 6 then // bow
set i = 'lgdh'
elseif subtype == 7 then // dagger
set i = 'desc'
elseif subtype == 8 then // wand
set i = 'ward'
elseif subtype == 9 then // staff
set i = 'brac'
endif
elseif itype == 4 then //shoes or boot
set i = 'rag1'
elseif itype == 5 then //shield
set i = 'sbch'
elseif itype == 6 then //ring
set i = 'rlif'
elseif itype == 8 then //amulet
set i = 'spsh'
elseif itype == 9 then // wing
set i = 'ccmd'
elseif itype == 10 then //tome
set i = 'hval'
elseif itype == 11 then //charm
set i = 'cnob'
endif
return i
endfunction
function RemoveItemData takes integer id returns nothing
if LoadInteger(udg_CItem_Table, id, 0) > 0 then
call RemoveBagContent(id)
endif
call FlushChildHashtable(udg_CItem_Table, id)
endfunction
function StackingItemType takes integer ilv returns boolean
if ilv == 0 then
return false
else
if ilv < 100 or (ilv > 200 and (ilv < 1902 or ilv > 1905)) then
return true
else
return false
endif
endif
endfunction
function ClearSlot takes integer cv, integer slot returns nothing
call SaveInteger(udg_Stat_Table, cv, - slot, 0)
call SaveBoolean(udg_Stat_Table, - cv, - slot, false)
call SaveInteger(udg_Stat_Table, 9000 + cv, slot, 0)
call SaveInteger(udg_Stat_Table, 9000 + cv, - slot, 0)
call SaveInteger(udg_Stat_Table, - 9000 - cv, - slot, 0)
call SaveInteger(udg_Stat_Table, 18000 + cv, slot, 0)
call SaveInteger(udg_Stat_Table, 18000 + cv, - slot, 0)
call RemoveSavedHandle(udg_Stat_Table, cv, slot)
endfunction
function RemoveItemRot takes item itm, boolean remove returns nothing
local integer i = LoadInteger(udg_CItem_Table, GetHandleId(itm), 101)
if i > 0 then
if (remove and IsItemVisible(udg_Item_Item[i]) and not IsItemOwned(udg_Item_Item[i])) or udg_Item_Item[i] == null then
if udg_Item_Item[i] != null then
call RemoveItemData(GetHandleId(itm))
call RemoveItem(udg_Item_Item[i])
else
call FlushChildHashtable(udg_CItem_Table, udg_Item_Id[i])
endif
else
call SaveInteger(udg_CItem_Table, udg_Item_Id[i], 102, 0)
call SaveInteger(udg_CItem_Table, udg_Item_Id[i], 101, 0)
endif
if i != udg_Item_Max then
loop
exitwhen i > udg_Item_Max
set udg_Item_Item[i] = udg_Item_Item[i + 1]
set udg_Item_Id[i] = udg_Item_Id[i + 1]
call SaveInteger(udg_CItem_Table, udg_Item_Id[i], 101, i)
set i = i + 1
endloop
endif
set udg_Item_Item[udg_Item_Max] = null
set udg_Item_Max = udg_Item_Max - 1
endif
endfunction
function AddItemRot takes item itm, integer owner returns nothing
if IsItemVisible(itm) and not IsItemOwned(itm) then //LoadInteger (udg_CItem_Table, GetHandleId(itm), 101) == 0
if udg_Item_Max > MAX_ITEM() then
//call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "|cffffff00Warning: Too much item on map|r")
call RemoveItemRot (udg_Item_Item[1], true)
endif
set udg_Item_Max = udg_Item_Max + 1
set udg_Item_Item[udg_Item_Max] = itm
set udg_Item_Id[udg_Item_Max] = GetHandleId(itm)
call SaveInteger(udg_CItem_Table, udg_Item_Id[udg_Item_Max], 101, udg_Item_Max)
call SaveInteger(udg_CItem_Table, udg_Item_Id[udg_Item_Max], 102, owner)
if GetItemTypeId(itm) != 'gold' then
call SetItemUserData(itm, owner)
endif
endif
endfunction
function SetItemBaseData takes item itm, integer itype, integer subtype, integer quality, integer grade, integer lvreq, integer ethernal, real dur, real maxdur, integer maxsocket, integer setid returns nothing
local integer id = GetHandleId(itm)
local integer str = 0
local integer agi = 0
local integer int = 0
local integer price = grade * 10
local integer class = 0
local real r = 0
if itype == 5 and subtype == 0 then
set subtype = 1
endif
if lvreq > 0 then
if itype < 5 and itype != 3 then
if subtype == 1 then
set class = 1
set str = lvreq * 3 + 5
set agi = lvreq * 1 + 5
elseif subtype == 2 then
set class = 3
set str = lvreq * 1 + 5
set agi = lvreq * 3 + 5
elseif subtype == 3 then
set class = 5
set str = lvreq * 1 + 5
set int = lvreq * 3 + 5
endif
elseif itype == 3 or itype == 5 then
if subtype < 3 or itype == 5 then
set class = 2
set str = lvreq * 2 + 5
set agi = lvreq * 2 + 5
elseif subtype == 3 then
set class = 1
set str = lvreq * 4 + 5
set agi = lvreq + 5
elseif subtype < 6 then
set class = 2
set str = lvreq * 4 + 5
set agi = lvreq + 5
elseif subtype < 8 then
set str = lvreq + 5
set agi = lvreq * 4 + 5
if subtype == 6 then
set class = 3
else
set class = 4
endif
elseif subtype == 8 then
set class = 5
set str = lvreq * 2 + 5
set int = lvreq * 3 + 5
elseif subtype == 9 then
set class = 5
set str = lvreq + 5
set int = lvreq * 4 + 5
endif
endif
endif
if maxdur == 0 then
if itype == 1 then
set r = 1.5
elseif itype == 2 then
set r = 2
elseif itype == 3 then
set r = 2.8
elseif itype == 4 then
set r = 1.2
elseif itype == 5 then
set r = 2.4
elseif itype == 6 then
set r = 1.7
elseif itype == 8 then
set r = 1.9
elseif itype == 9 then
set r = 2.3
endif
set maxdur = (grade * 5.00 + 33) * r
set dur = maxdur
if quality == 0 then
set dur = dur / 3.00 + 10
set maxdur = dur * 2.00
set price = price / 2
elseif quality == 1 then
set dur = dur / 3.00 + 10
set maxdur = dur * 2.00
set price = price / 2
elseif quality == 6 then
set dur = dur * 1.2
set maxdur = dur
set price = R2I(price * 1.2)
elseif quality == 7 then
set dur = dur * 1.5
set maxdur = dur
set price = R2I(price * 1.5)
endif
endif
if maxsocket == - 1 then
set maxsocket = GetRandomInt(quality, quality * 2 + 1)
endif
if itype == 10 or itype == 11 then
set price = price * 2
set maxsocket = 0
set lvreq = 0
elseif itype == 6 or itype == 8 or itype == 5 then
set maxsocket = 0
endif
call SaveInteger(udg_CItem_Table, id, 1, GetItemTypeId(itm))
call SaveInteger(udg_CItem_Table, id, 2, itype)
call SaveInteger(udg_CItem_Table, id, 3, subtype)
call SaveInteger(udg_CItem_Table, id, 4, quality)
call SaveInteger(udg_CItem_Table, id, 6, class)
call SaveInteger(udg_CItem_Table, id, 7, grade)
call SaveInteger(udg_CItem_Table, id, 8, lvreq)
call SaveInteger(udg_CItem_Table, id, 12, price)
if itype != 11 then
call SaveInteger(udg_CItem_Table, id, 9, str)
call SaveInteger(udg_CItem_Table, id, 10, agi)
call SaveInteger(udg_CItem_Table, id, 11, int)
call SaveInteger(udg_CItem_Table, id, 13, ethernal)
call SaveReal(udg_CItem_Table, id, 14, dur)
call SaveReal(udg_CItem_Table, id, 15, maxdur)
call SaveInteger(udg_CItem_Table, id, 20, maxsocket)
if setid > 0 then
call SaveInteger(udg_CItem_Table, id, 5, setid)
endif
endif
endfunction
function AddCustomItem takes real x, real y, integer itype, integer subtype, integer quality returns item
local integer i = itype2TOitemId(itype, subtype, quality)
if itype > 0 and itype < 12 and i != 0 then
return CreateItem(i, x, y)
else
return null
endif
endfunction
function AddItem2Slot takes integer cv, item itm, integer slot returns nothing
local unit u = udg_UDexUnits[cv]
local integer i = 0
local item it = null
local integer dummy = 'tfar'
set udg_Stop_Stack[cv] = true
loop
exitwhen i > 5 or i > slot
set it = UnitItemInSlot(u, i)
if it == itm then
call UnitRemoveItem(u, itm)
set it = null
endif
if it == null and i != slot then
call UnitAddItemToSlotById (u, dummy, i)
endif
set i = i + 1
endloop
if not IsItemVisible(itm) then
call SetItemVisible(itm, true)
endif
call UnitAddItem(u, itm)
call RemoveItemRot (itm, false)
set i = 0
loop
exitwhen i > 5 or i > slot
set it = UnitItemInSlot(u, i)
if it != null then
if GetItemTypeId(it) == dummy then
call RemoveItem(it)
endif
endif
set i = i + 1
endloop
set udg_Stop_Stack[cv] = false
set it = null
set u = null
endfunction
// item name functions
function GetClassName takes integer class, integer ilv returns string
if class == 1 then
if ilv < 105 and ilv > 100 and ilv !=103 then
return "Paladin, Warrior"
else
return "Paladin"
endif
elseif class == 2 then
return "Warrior"
elseif class == 3 then
if ilv < 105 and ilv > 100 and ilv !=103 then
return "Archer, Assassin"
else
return "Archer"
endif
elseif class == 4 then
return "Assassin"
elseif class == 5 then
return "Mage"
else
return ""
endif
endfunction
function GetArmorType takes integer itype, integer subtype returns string
if itype == 1 or itype == 2 or itype == 4 then
if subtype == 1 then
return "Heavy "
elseif subtype == 2 then
return "Light "
elseif subtype == 3 then
return "Mage "
else
return ""
endif
else
return ""
endif
endfunction
function GetItemQuality takes integer quality, integer itype returns string
if quality == 0 then
return " |cffddddddCracked "
elseif quality == 1 then
if itype == 11 then
return " |cff7777eeCommon "
else
return " |cffeeeeeeLow quality "
endif
elseif quality == 2 then
if itype == 11 then
return " |cff0000ffUncommon "
else
return " |cfff5f5f5Normal "
endif
elseif quality == 3 then
if itype == 11 then
return " |cffffff00Superior "
else
return " |cff9999ffEnhanced "
endif
elseif quality == 4 then
return " |cffffff55Rare "
elseif quality == 5 then
return " |cfffff000Very Rare "
elseif quality == 6 then
return " |cff77ff77Excelent "
elseif quality == 7 then
return " |cffff7733Unique "
else
return " |cffffffff"
endif
endfunction
function GetFullItemName takes item itm, boolean showRefine returns string
local integer ilv = GetItemLevel(itm)
local integer subtype
local integer id
local integer ref
local integer q //quality
if ilv>= 100 and ilv < 200 then
if ilv == 199 then
set id = LoadInteger(udg_CItem_Table, GetHandleId(itm), 0)
if id > 0 then
return "|cff3377ff" + GetItemName(itm) + "|r |cffffffaa(" + I2S(id) + "/" + I2S(BAG_SIZE_MAX()) + ")|r"
else
return "|cff3377ff" + GetItemName(itm) + "|r |cffaaaaaa(empty)|r"
endif
elseif ilv == BOX_LEVEL() then
return "|cff3377ff" + GetItemName(itm) + "|r"
else
set id = GetHandleId(itm)
set ref = LoadInteger(udg_CItem_Table, id, 16)
set q = LoadInteger(udg_CItem_Table, id, 4)
set subtype = LoadInteger (udg_CItem_Table, id, 3)
if ref > 0 and showRefine then
return (GetItemQuality(q, ilv - 100) + GetArmorType(ilv - 100, subtype) + GetItemName(itm) + "|r |cffaaaaff(Gr. " + I2S(LoadInteger (udg_CItem_Table, id, 7)) + "|r)|r |cffffff77+" + I2S(ref) + "|r" )
else
return (GetItemQuality(q, ilv - 100) + GetArmorType(ilv - 100, subtype) + GetItemName(itm) + "|r |cffaaaaff(Gr. " + I2S(LoadInteger (udg_CItem_Table, id, 7)) + ")|r ")
endif
endif
else
if GetItemCharges(itm) > 0 then
return " |cffffff00" + GetItemName(itm) + "|r x |cffaaaaff" + I2S(GetItemCharges(itm)) + "|r"
else
return " |cffffff00" + GetItemName(itm) + "|r"
endif
endif
return ""
endfunction
//-------------------------------------------------------------------------
// OVER TIME THINGS: Damage, Heal, Mana over time
//-------------------------------------------------------------------------
function AddOT takes unit u1, unit u2, integer t, real value, integer dur returns nothing
set udg_OT_Max = udg_OT_Max + 1
set udg_OT_Source[udg_OT_Max] = u1
set udg_OT_Target[udg_OT_Max] = u2
set udg_OT_Type[udg_OT_Max] = t
set udg_OT_Timer[udg_OT_Max] = dur
set udg_OT_Value[udg_OT_Max] = value
endfunction
//-------------------------------------------------------------------------
// STAT MODIFYING FUNCTIONS
//-------------------------------------------------------------------------
function AddHPMP takes boolean HP, integer v, unit u returns nothing
local integer a
local integer s
local integer i
local integer l
local integer cv
local integer mv
if HP then
set a = ADDHP_ID()
else
set a = ADDMP_ID()
endif
if ( v >= 0 ) then
set s = 1
set cv = v
else
set s = 5
set cv = v * - 1
endif
set mv = cv - ( cv / 1000 ) * 1000
set l = cv / 1000
set i = 1
loop
exitwhen i > l
call UnitAddAbility( u, a )
call SetUnitAbilityLevel( u, a, ( 4 + s ) )
call UnitRemoveAbility( u, a )
set i = i + 1
endloop
set cv = mv
set mv = cv - ( cv / 100 ) * 100
set l = cv / 100
set cv = mv
set i = 1
loop
exitwhen i > l
call UnitAddAbility( u, a )
call SetUnitAbilityLevel( u, a, ( 3 + s ) )
call UnitRemoveAbility( u, a )
set i = i + 1
endloop
set mv = cv - ( cv / 10 ) * 10
set l = cv / 10
set cv = mv
set i = 1
loop
exitwhen i > l
call UnitAddAbility( u, a )
call SetUnitAbilityLevel( u, a, ( 2 + s ) )
call UnitRemoveAbility( u, a )
set i = i + 1
endloop
set i = 1
loop
exitwhen i > cv
call UnitAddAbility( u , a )
call SetUnitAbilityLevel( u, a, ( 1 + s ) )
call UnitRemoveAbility( u, a )
set i = i + 1
endloop
set u = null
endfunction
function AddDMG takes boolean DMG, integer cv, integer v returns nothing
local integer i = 0
local integer n = 0
local integer a1 = 0
local integer a2 = 0
local integer a3 = 0
local integer a4 = 0
local unit u = udg_UDexUnits[cv]
if not DMG then
set a1 = 'A001'//udg_Abilities2[14]
set a2 = 'A005'//udg_Abilities2[15]
set a3 = 'A006'//udg_Abilities2[16]
set i = v
set n = i / 100 + 1
call SetUnitAbilityLevel( u, a3, n )
set i = i - ( i / 100 ) * 100
set n = i / 10 + 1
call SetUnitAbilityLevel( u, a2, n )
set i = i - ( i / 10 ) * 10
set n = i + 1
call SetUnitAbilityLevel( u, a1, n )
else
set a1 = 'A002'//udg_Abilities2[17]
set a2 = 'A007'//udg_Abilities2[18]
set a3 = 'A008'//udg_Abilities2[19]
set a4 = 'A009'//udg_Abilities2[20]
set i = v
set n = i / 1000 + 1
call SetUnitAbilityLevel( u, a4, n )
set i = i - ( i / 1000 ) * 1000
set n = i / 100 + 1
call SetUnitAbilityLevel( u, a3, n )
set i = i - ( i / 100 ) * 100
set n = i / 10 + 1
call SetUnitAbilityLevel( u, a2, n )
set i = i - ( i / 10 ) * 10
set n = i + 1
call SetUnitAbilityLevel( u, a1, n )
endif
set u = null
endfunction
function AddBonusMod takes unit u, integer n, integer v returns nothing
local integer a
local integer i
local integer lv
local integer max
local integer cv = GetUnitUserData(u)
local integer x
if n != 0 then
if v == 1 then
set a = 15
set i = 11
set lv = R2I(udg_Total_HP_Regen[cv])
set udg_Total_HP_Regen[cv] = lv + n
set x = lv
elseif v == 2 then
set a = 26
set i = 11
set lv = R2I(udg_Total_MP_Regen[cv])
set udg_Total_MP_Regen[cv] = lv + n
set x = lv
endif
set max = udg_Pow2[i + 1] - 1
if x + n > max then
set x = max
elseif (x + n) <= 0 then
set x = 0
else
set x = x + n
endif
loop
set lv = GetUnitAbilityLevel (u, udg_Abilities[a + i])
if x >= udg_Pow2[i] and x > 0 then
if lv == 0 then
call UnitAddAbility(u, udg_Abilities[a + i])
call UnitMakeAbilityPermanent(u, true, udg_Abilities[a + i])
endif
set x = x - udg_Pow2[i]
else
if lv > 0 then
call UnitRemoveAbility(u, udg_Abilities[a + i])
endif
endif
set i = i - 1
exitwhen i < 0
endloop
endif
endfunction
//-------------------------------------------------------------------------
// FULL SCREEN INFERFACE AND BASE CALCULATION FUNCTIONS
//-------------------------------------------------------------------------
function StringColoring takes string s, integer red1, integer green1, integer blue1, integer red2, integer green2, integer blue2 returns string
local integer len = StringLength(s)
local real redX = (red1 - red2) / len
local real greenX = (green1 - green2) / len
local real blueX = (blue1 - blue2) / len
local integer redY
local integer greenY
local integer blueY
local integer redZ
local integer greenZ
local integer blueZ
local string hexS = "0123456789abcdef"
local string CS = ""
local integer i = 1
loop
exitwhen i > len
set redY = R2I(red1 - redX * i)
set redZ = redY / 16
set greenY = R2I(green1 - greenX * i)
set greenZ = greenY / 16
set blueY = R2I(blue1 - blueX * i)
set blueZ = blueY / 16
set CS = CS + "|cff" + SubString(hexS, redZ, redZ + 1) + SubString(hexS, redY - redZ * 16, redY - redZ * 16 + 1) + SubString(hexS, greenZ, greenZ + 1) + SubString(hexS, greenY - greenZ * 16, greenY - greenZ * 16 + 1) + SubString(hexS, blueZ, blueZ + 1) + SubString(hexS, blueY - blueZ * 16, blueY - blueZ * 16 + 1) + SubString(s, i - 1, i) + "|r"
set i = i + 1
endloop
set hexS = null
set s = CS
set CS = null
return s
endfunction
function GetStringPos takes string s1, string s2 returns integer
local integer i = 0
local integer len = StringLength(s1)
local integer slen = StringLength(s2)
local integer a = 0
loop
exitwhen i >= len or a > 0
if SubString(s1, i, i + slen) == s2 then
set a = i
endif
set i = i + 1
endloop
return a
endfunction
function AddSpace takes string s, integer nr returns string
local integer i = 1
local string t = ""
set nr = R2I(nr * 1.5)
loop
exitwhen i > nr
set t = t + s
set i = i + 1
endloop
set s = t
set t = null
return s
endfunction
function FlushFT_Stat takes integer pl returns nothing
local integer a = 1
local integer i = LoadInteger(udg_FSS, pl + 500, 0)
local destructable d
loop
exitwhen a > i
call DestroyTextTag(LoadTextTagHandle(udg_FSS, pl + 500, a))
set a = a + 1
endloop
call FlushChildHashtable(udg_FSS, pl + 500)
set i = 0
loop
set d = LoadDestructableHandle(udg_FSS, 0, 500+i)
exitwhen d == null
call ShowDestructable(d, false)
set i = i + 1
endloop
set d = null
endfunction
function FT_Stat takes player p, string txt, real fsize, real x, real y, integer alpha returns nothing
local integer pl = GetPlayerId(p) + 1
local integer i = LoadInteger(udg_FSS, pl + 500, 0) + 1
local texttag tt = null
call SaveInteger(udg_FSS, pl + 500, 0, i)
if GetLocalPlayer() == p then
set tt = CreateTextTag( )
call SetTextTagText( tt, txt, fsize * 0.023 )
call SetTextTagPos( tt, x, y, 100.00 )
call SetTextTagColor( tt, 255, 255, 255, alpha )
call SetTextTagPermanent( tt, true )
endif
call SaveTextTagHandle(udg_FSS, pl + 500, i, tt)
set tt = null
endfunction
function StatRefresh takes integer cv returns nothing
local unit u = udg_UDexUnits[cv]
local integer str = 0
local integer agi = 0
local integer int = 0
local real r1 = udg_Total_HP_Regen[cv]
local real r2 = udg_Total_MP_Regen[cv]
local real r3
local real r4
if LoadBoolean(udg_Stat_Table, 8890, GetHandleId(u)) then
if IsUnitType(u, UNIT_TYPE_HERO) then
set str = GetHeroStr(u, true)
set agi = GetHeroAgi(u, true)
set int = GetHeroInt(u, true)
endif
set udg_Global_Acc[cv] = udg_Stat_Acc[cv] + agi * 7
set udg_Global_Eva[cv] = udg_Stat_Eva[cv] + agi * 4
set udg_Global_Crit[cv] = udg_Stat_Crit[cv] + agi / 20 + 1
set udg_Global_CritDmg[cv] = udg_Stat_CritDmg[cv]
set udg_Global_AttLv[cv] = udg_Stat_AttackLv[cv]
set udg_Global_DefLv[cv] = udg_Stat_DefLv[cv]
set udg_Global_Pdef[cv] = udg_Stat_Pdef[cv] + R2I(udg_Stat_Pdef[cv] * str / 100.00 )
set udg_Global_Mdef1[cv] = udg_Stat_Mdef1[cv] + R2I(udg_Stat_Mdef1[cv] * int / 100.00 )
set udg_Global_Mdef2[cv] = udg_Stat_Mdef2[cv] + R2I(udg_Stat_Mdef2[cv] * int / 100.00 )
set udg_Global_Mdef3[cv] = udg_Stat_Mdef3[cv] + R2I(udg_Stat_Mdef3[cv] * int / 100.00 )
set udg_Global_Mdef4[cv] = udg_Stat_Mdef4[cv] + R2I(udg_Stat_Mdef4[cv] * int / 100.00 )
set udg_Global_Mdef5[cv] = udg_Stat_Mdef5[cv] + R2I(udg_Stat_Mdef5[cv] * int / 100.00 )
set udg_Global_Reflect[cv] = udg_Stat_Reflect[cv] // + udg_B_Ref[cv]
set udg_Global_LifeSteal[cv] = udg_Stat_LifeSteal[cv] // + udg_B_LS[cv]
set udg_Global_ManaSteal[cv] = udg_Stat_ManaSteal[cv]
set udg_TotalSpellPower[cv] = udg_Stat_SpellPower[cv] + udg_Stat_SpellPower[cv] * (int + udg_B_SP[cv]) / 100
if udg_CombatTimer[cv] < 1 then
set r3 = udg_Stat_HpRegen[cv] * 2
set r4 = udg_Stat_MpRegen[cv] * 2
else
set r3 = udg_Stat_HpRegen[cv]
set r4 = udg_Stat_MpRegen[cv]
endif
if r1 != r3 then
call AddBonusMod(u, R2I(r3 - r1), 1)
endif
if r2 != r4 then
call AddBonusMod(u, R2I(r4 - r2), 2)
endif
endif
set u = null
endfunction
//this function show the charater stat properties if u are in inventory
function ShowStat takes integer pl returns nothing
local real x = LoadReal(udg_FSS, 0, 1)
local real y = LoadReal(udg_FSS, 0, 2)
local integer cv = udg_Inv_Unit[pl]
local unit u = udg_UDexUnits[cv]
local string c = "|cff9999ff"
local destructable d
call StatRefresh(cv)
call FlushFT_Stat(pl)
if udg_Trader[pl] == 0 then
call FT_Stat(Player(pl - 1), StringColoring("Character Stat", 100, 100, 255, 255, 255, 255), 1.5, x + 864, y + 540, 200)
call FT_Stat(Player(pl - 1), StringColoring("Phy. Dmg: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Total_Dmg[cv] + LoadInteger(udg_FSS, 634, GetUnitTypeId(u)) + GetHeroStr(u, true)) + "|r", 0.9, x + 814, y + 512 - 40, 200) // + udg_B_Crit[cv]
call FT_Stat(Player(pl - 1), StringColoring("Critical chance: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Crit[cv]) + "%%|r", 0.8, x + 814, y + 512 - 70, 200) // + udg_B_Crit[cv]
call FT_Stat(Player(pl - 1), StringColoring("Critical damage: ", 255, 255, 0, 255, 255, 255) + c + I2S(200 + udg_Global_CritDmg[cv]) + "%%|r", 0.8, x + 814, y + 512 - 90, 200)//udg_B_CritDmg[cv]
call FT_Stat(Player(pl - 1), StringColoring("Attack speed: ", 255, 255, 0, 255, 255, 255) + c + I2S(100+GetHeroAgi(u, true)) + "%%|r", 0.8, x + 814, y + 512 - 110, 200)
call FT_Stat(Player(pl - 1), StringColoring("Movement speed: ", 255, 255, 0, 255, 255, 255) + c + I2S(R2I(GetUnitMoveSpeed (u))) + "|r" , 0.8, x + 814, y + 512 - 130, 200)
call FT_Stat(Player(pl - 1), StringColoring("Accurancy: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Acc[cv]) + "|r", 0.8, x + 814, y + 512 - 150, 200)//udg_B_Acc[cv]
call FT_Stat(Player(pl - 1), StringColoring("Evasion: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Eva[cv]) + "|r", 0.8, x + 814, y + 512 - 170, 200)//udg_B_Eva[cv]
call FT_Stat(Player(pl - 1), StringColoring("Armor pen.: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_ArmorBreak[cv]) + "%%|r", 0.8, x + 814, y + 512 - 190, 200)
call FT_Stat(Player(pl - 1), StringColoring("Reflect damage: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Reflect[cv]) + "%%|r", 0.8, x + 814, y + 512 - 210, 200)
call FT_Stat(Player(pl - 1), StringColoring("Attack level: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_AttLv[cv]) + "|r", 0.8, x + 814, y + 512 - 230, 200)//udg_B_AttLv[cv])
call FT_Stat(Player(pl - 1), StringColoring("Life Steal: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_LifeSteal[cv]) + "%%|r", 0.8, x + 814, y + 512 - 250, 200)
call FT_Stat(Player(pl - 1), StringColoring("Experience: ", 255, 255, 0, 255, 255, 255) + c + I2S(100 + udg_Stat_Exp[cv] ) + "%%|r", 0.8, x + 814, y + 512 - 270, 200)// + udg_B_Exp[cv] + udg_Global_Exp_Buff[a]
call FT_Stat(Player(pl - 1), StringColoring("Mag. Dmg: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_TotalSpellPower[cv]) + "|r", 0.9, x + 1032, y + 512 - 40, 200) // + udg_B_Crit[cv]
call FT_Stat(Player(pl - 1), StringColoring("Physical def.: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Pdef[cv]) + "|r", 0.8, x + 1032, y + 512 - 70, 200)//udg_B_Pdef[cv]
call FT_Stat(Player(pl - 1), StringColoring("Fire ressist: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Mdef1[cv]) + "|r", 0.8, x + 1032, y + 512 - 90, 200)//udg_B_Mdef[cv]
call FT_Stat(Player(pl - 1), StringColoring("Water ressist: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Mdef2[cv]) + "|r", 0.8, x + 1032, y + 512 - 110, 200)//udg_B_Mdef[cv]
call FT_Stat(Player(pl - 1), StringColoring("Lightning ressist: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Mdef3[cv]) + "|r", 0.8, x + 1032, y + 512 - 130, 200)//udg_B_Mdef[cv]
call FT_Stat(Player(pl - 1), StringColoring("Poison ressist: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Mdef4[cv]) + "|r", 0.8, x + 1032, y + 512 - 150, 200)//udg_B_Mdef[cv]
call FT_Stat(Player(pl - 1), StringColoring("Earth ressist: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_Mdef5[cv]) + "|r", 0.8, x + 1032, y + 512 - 170, 200)//udg_B_Mdef[cv]
call FT_Stat(Player(pl - 1), StringColoring("HP regen: ", 255, 255, 0, 255, 255, 255) + c + R2SW(udg_Total_HP_Regen[cv], 4, 2) + " /s|r", 0.8, x + 1032, y + 512 - 190, 200)
call FT_Stat(Player(pl - 1), StringColoring("MP regen: ", 255, 255, 0, 255, 255, 255) + c + R2SW(udg_Total_MP_Regen[cv], 4, 2) + " /s|r", 0.8, x + 1032, y + 512 - 210, 200)
call FT_Stat(Player(pl - 1), StringColoring("Defence level: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_DefLv[cv]) + "|r", 0.8, x + 1032, y + 512 - 230, 200)//udg_B_DefLv[cv])
call FT_Stat(Player(pl - 1), StringColoring("Mana Steal: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Global_ManaSteal[cv]) + "%%|r", 0.8, x + 1032, y + 512 - 250, 200)
call FT_Stat(Player(pl - 1), StringColoring("Block chance: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Stat_BlockDmg[cv]) + "%%|r", 0.8, x + 1032, y + 512 - 270, 200)
if udg_Stat_Point[cv] > 0 then
set c = "|cff0000ff"
endif
call FT_Stat(Player(pl - 1), StringColoring("Unspent stat point: ", 255, 255, 0, 255, 255, 255) + c + I2S(udg_Stat_Point[cv]) + "|r", 0.9, x + 890, y + 512 - 500, 200)
set cv = 0
loop
set d = LoadDestructableHandle(udg_FSS, 0, 500+cv)
exitwhen d == null
call ShowDestructable(d, true)
set cv = cv + 1
endloop
endif
set d = null
set u = null
set c = null
endfunction
function GetCraftLv takes integer value, boolean flat returns integer
local integer i = 9
local integer lv = 1
loop
exitwhen lv != 1 or i < 1
if value >= (R2I(i * i * i / 7.00) + 7) then
set lv = i + 1
endif
set i = i - 1
endloop
if not flat then
if value == 0 or lv == 10 then
set lv = 0
else
set i = R2I(((lv) * (lv) * (lv)) / 7.00 + 7)
set lv = R2I(value * 100 / i)
endif
endif
return lv
endfunction
function HitChance takes integer cv1, integer cv2 returns integer
local integer acc = udg_Global_Acc[cv1]
local integer eva = udg_Global_Eva[cv2]
local real i = R2I(100.00 - ( eva - 1.00 ) / ( ( 2.00 * acc ) + ( eva - 1.00 ) ) * 100.00)
if i > 100.00 then
return 100
elseif i < 0.00 then
return 0
else
return R2I(i)
endif
endfunction
function GetShopUniqueId takes integer mc, integer sc, integer ls returns integer
local integer id
if mc > 0 and sc > 0 and ls > 0 then
set id = LoadInteger(udg_Shop_Table, mc, - sc)
if id > 0 then
return LoadInteger(udg_Shop_Table, id, - ls)
else
return 0
endif
else
return 0
endif
endfunction
function SetChargesText takes integer pl returns nothing
local real x
local real y
local integer ilv
local integer charge
local integer i = 100
local texttag tt = null
local integer mc
local integer sc
local integer id1
local integer id2
local integer max = 205
local integer cv = udg_Inv_Unit[pl]
local unit u = udg_UDexUnits[cv]
local item itm
if udg_Camera_Lock[pl] == 1 then
set max = 205
elseif udg_Camera_Lock[pl] == 2 then
set mc = LoadInteger(udg_FSS, 2402, pl) - 2000 //selected main category
set sc = LoadInteger(udg_FSS, 2402, 20 + pl) - 2100 //selected sub category
set id1 = LoadInteger(udg_Shop_Table, mc, - sc)
set max = 2224
elseif udg_Camera_Lock[pl] == 3 then
set max = 2224
endif
loop
exitwhen i > max
if LoadTextTagHandle(udg_FSS, 1000 + pl, i) != null then
call DestroyTextTag (LoadTextTagHandle(udg_FSS, 1000 + pl, i))
call SaveTextTagHandle(udg_FSS, 1000 + pl, i, null)
endif
set x = LoadReal(udg_FSS, i, 1) + 15 + 8
set y = LoadReal(udg_FSS, i, 2) - 27
set ilv = 0
set charge = 0
if i < 300 then
if i < 200 then
set ilv = LoadInteger(udg_Stat_Table, cv, - i)
if ilv > 0 and (ilv >= 200 or ilv < 100)then
set charge = GetItemCharges(LoadItemHandle(udg_Stat_Table, cv, i))
endif
else
if udg_Camera_Lock[pl] > 1 then
set i = 1000
else
if GetItemLevel(UnitItemInSlot(u, i - 200)) != BOX_LEVEL() then
set charge = GetItemCharges(UnitItemInSlot(u, i - 200))
endif
endif
endif
elseif i > 2200 then
call DestroyTextTag (LoadTextTagHandle(udg_FSS, 1000 + pl, i))
if udg_Camera_Lock[pl] == 2 then
if id1 != 0 and mc > 0 and sc > 0 then
set id2 = LoadInteger(udg_Shop_Table, id1, i - 2200)
set ilv = LoadInteger(udg_FSS, 603, id2)
if (ilv >= 200 or ilv < 100) and ilv != 0 then
set charge = GetShopUniqueId (mc, sc, i - 2200)
else
set charge = 0
endif
endif
elseif udg_Camera_Lock[pl] == 3 and udg_Inv_Bag[pl] > 0 then
set itm = LoadItemHandle(udg_CItem_Table, udg_Inv_Bag[pl], i - 2200)
if itm != null then
set ilv = GetItemLevel(itm)
if (ilv >= 200 or ilv < 100) and ilv != 0 then
set charge = GetItemCharges(itm)
else
set charge = 0
endif
endif
endif
endif
if charge > 0 then
if GetLocalPlayer() == Player(pl - 1) then
set tt = CreateTextTag( )
if charge < 10 then
set x = x - 8
endif
call SetTextTagText( tt, I2S(charge), 0.7 * 0.023 )
call SetTextTagPos( tt, x, y, 35.00 )
call SetTextTagColor( tt, 255, 255, 255, 255 )
call SetTextTagPermanent( tt, true )
endif
call SaveTextTagHandle(udg_FSS, 1000 + pl, i, tt)
endif
if i==119 then
if udg_Camera_Lock[pl] == 1 then
set i = 199
elseif udg_Camera_Lock[pl] > 1 then
set i = 2200
endif
endif
set i = i + 1
endloop
if udg_Trader[pl] > 0 then
//-------------------------------------------------------
//charged text it is but still not done
//-------------------------------------------------------
endif
set u = null
set itm = null
set tt = null
endfunction
//-------------------------------------------------------------------------
// BUFF: ADD, REFRESH, REMOVE
//-------------------------------------------------------------------------
function ApplyBuff takes integer cv, integer bt, integer bv, boolean b returns nothing
local unit u = udg_UDexUnits[cv]
if LoadBoolean(udg_Stat_Table, 8890, GetHandleId(u)) then
if bt == 1 then
set udg_Stat_Acc[cv] = udg_Stat_Acc[cv] + bv
elseif bt == 2 then
set udg_Stat_AttackLv[cv] = udg_Stat_AttackLv[cv] + bv
elseif bt == 3 then
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + bv
elseif bt == 4 then
set udg_Stat_Crit[cv] = udg_Stat_Crit[cv] + bv
elseif bt == 5 then
set udg_Stat_CritDmg[cv] = udg_Stat_CritDmg[cv] + bv
elseif bt == 6 then
set udg_Global_DmgInc[cv] = udg_Global_DmgInc[cv] + bv
elseif bt == 7 then
set udg_Global_DmgRed[cv] = udg_Global_DmgRed[cv] + bv
elseif bt == 8 then
set udg_Stat_Eva[cv] = udg_Stat_Eva[cv] + bv
elseif bt == 9 then
set udg_Stat_LifeSteal[cv] = udg_Stat_LifeSteal[cv] + bv
elseif bt == 10 then
set udg_Stat_ManaSteal[cv] = udg_Stat_ManaSteal[cv] + bv
elseif bt == 11 then
set udg_Stat_Reflect[cv] = udg_Stat_Reflect[cv] + bv
elseif bt == 12 then
set udg_Stat_Exp[cv] = udg_Stat_Exp[cv] + bv
elseif bt == 13 then
call AddHPMP (true, bv, u)
elseif bt == 14 then
call AddHPMP (false, bv, u)
elseif bt == 15 then
set udg_Stat_Pdef[cv] = udg_Stat_Pdef[cv] + bv
elseif bt == 16 then
set udg_Stat_Mdef1[cv] = udg_Stat_Mdef1[cv] + bv
elseif bt == 17 then
set udg_Stat_Mdef2[cv] = udg_Stat_Mdef2[cv] + bv
elseif bt == 18 then
set udg_Stat_Mdef3[cv] = udg_Stat_Mdef3[cv] + bv
elseif bt == 19 then
set udg_Stat_Mdef4[cv] = udg_Stat_Mdef4[cv] + bv
elseif bt == 20 then
set udg_Stat_Mdef5[cv] = udg_Stat_Mdef5[cv] + bv
elseif bt == 21 then
//reserved
endif
else
if bt == 1 then
set udg_Global_Acc[cv] = udg_Global_Acc[cv] + bv
elseif bt == 2 then
set udg_Global_AttLv[cv] = udg_Global_AttLv[cv] + bv
elseif bt == 3 then
set udg_Global_DefLv[cv] = udg_Global_DefLv[cv] + bv
elseif bt == 4 then
set udg_Global_Crit[cv] = udg_Global_Crit[cv] + bv
elseif bt == 5 then
set udg_Global_CritDmg[cv] = udg_Global_CritDmg[cv] + bv
elseif bt == 6 then
set udg_Global_DmgInc[cv] = udg_Global_DmgInc[cv] + bv
elseif bt == 7 then
set udg_Global_DmgRed[cv] = udg_Global_DmgRed[cv] + bv
elseif bt == 8 then
set udg_Global_Eva[cv] = udg_Global_Eva[cv] + bv
elseif bt == 9 then
set udg_Global_LifeSteal[cv] = udg_Global_LifeSteal[cv] + bv
elseif bt == 10 then
set udg_Global_ManaSteal[cv] = udg_Global_ManaSteal[cv] + bv
elseif bt == 11 then
set udg_Global_Reflect[cv] = udg_Global_Reflect[cv] + bv
elseif bt == 12 then
set udg_Global_Exp[cv] = udg_Global_Exp[cv] + bv
elseif bt == 13 then
call AddHPMP (true, bv, u)
elseif bt == 14 then
call AddHPMP (false, bv, u)
elseif bt == 15 then
set udg_Global_Pdef[cv] = udg_Global_Pdef[cv] + bv
elseif bt == 16 then
set udg_Global_Mdef1[cv] = udg_Global_Mdef1[cv] + bv
elseif bt == 17 then
set udg_Global_Mdef2[cv] = udg_Global_Mdef2[cv] + bv
elseif bt == 18 then
set udg_Global_Mdef3[cv] = udg_Global_Mdef3[cv] + bv
elseif bt == 19 then
set udg_Global_Mdef4[cv] = udg_Global_Mdef4[cv] + bv
elseif bt == 20 then
set udg_Global_Mdef5[cv] = udg_Global_Mdef5[cv] + bv
elseif bt == 21 then
//reserved
endif
endif
set u = null
endfunction
function AddUnitBuff takes unit u, integer bt, integer bv, integer dur, integer eff, integer perc returns nothing
local integer cv = GetUnitUserData(u)
local integer a = cv + 36000
local integer b = cv + 45000
if LoadInteger( udg_Stat_Table, cv + 36000, - bt ) == 0 then
//call DisplayTextToForce( GetPlayersAll(), "Added a new buff to |cffffff00" + GetUnitName(u) + "|r buff type is " + I2S(bt) + ", buff value is " + I2S(bv))
if udg_Buff_Count[cv] == 0 then
set udg_Buff_Max = ( udg_Buff_Max + 1 )
set udg_Buff_List[udg_Buff_Max] = cv
endif
set udg_Buff_Count[cv] = udg_Buff_Count[cv] + 1
call SaveInteger(udg_Stat_Table, a, udg_Buff_Count[cv], bt)
call SaveInteger(udg_Stat_Table, - a, - bt, bv)
call SaveInteger(udg_Stat_Table, a, - bt, dur)
if perc > 0 then
call SaveInteger(udg_Stat_Table, b, - bt, perc)
endif
if eff > 0 then
call SaveEffectHandle(udg_Stat_Table, b, bt, AddSpecialEffectTarget(EFFECT(eff), udg_UDexUnits[cv], EFFECT_POINT(eff)))
endif
call ApplyBuff (cv, bt, bv, false)
set bt = GetPlayerId(GetOwningPlayer(u)) + 1
call StatRefresh(cv)
if udg_Inv_Unit[bt] == cv and udg_Camera_Lock[bt] == 1 then
call ShowStat(bt)
endif
else
call ApplyBuff (cv, bt, -LoadInteger(udg_Stat_Table, -a, -bt), false)
call ApplyBuff (cv, bt, bv, false)
call SaveInteger(udg_Stat_Table, -a, -bt, bv)
call SaveInteger(udg_Stat_Table, a, -bt, dur) //reset the timer
endif
endfunction
function RemoveUnitBuff takes integer cv, integer bc returns integer
local integer bv
local integer tl
local integer b = 36000 + cv
local integer c = 45000 + cv
local integer bt = LoadInteger(udg_Stat_Table, b, bc)
local integer bt2 = bt
local integer bv2 = LoadInteger(udg_Stat_Table, - b, - bt)
call SaveInteger(udg_Stat_Table, b, - bt, 0) //reset timer
call SaveInteger(udg_Stat_Table, - b, - bt, 0) //reset buff value
call DestroyEffect(LoadEffectHandle(udg_Stat_Table, c, bt))
call RemoveSavedHandle(udg_Stat_Table, c, bt)
call SaveInteger(udg_Stat_Table, c, - bt, 0) //reset timer
set bt = LoadInteger(udg_Stat_Table, b, udg_Buff_Count[cv])
set tl = LoadInteger(udg_Stat_Table, b, - bt)
set bv = LoadInteger(udg_Stat_Table, - b, - bt)
if bc != udg_Buff_Count[cv] then
call SaveInteger(udg_Stat_Table, b, bc, bt) // save buff type from last record
call SaveInteger(udg_Stat_Table, - b, - bt, bv) // save buff value from last record
call SaveInteger(udg_Stat_Table, b, - bt, tl) // save buff timer from last record
set bc = bc - 1
endif
call SaveInteger(udg_Stat_Table, b, udg_Buff_Count[cv], 0) // reset buff type
set udg_Buff_Count[cv] = udg_Buff_Count[cv] - 1
set bv = - bv2
set bt = bt2
call ApplyBuff (cv, bt2, -bv2, false)
set bt2 = GetPlayerId(GetOwningPlayer(udg_UDexUnits[cv])) + 1
call StatRefresh(cv)
if udg_Inv_Unit[bt2] == cv and udg_Camera_Lock[bt2] == 1 then
call ShowStat(bt2)
endif
return bc
endfunction
function RemoveUnitBuffs takes integer i returns nothing
local integer cv = udg_Buff_List[i]
local integer bc = udg_Buff_Count[cv]
loop
exitwhen bc == 0
call RemoveUnitBuff(cv, bc)
set bc = bc - 1
endloop
if i != udg_Buff_Max then
set udg_Buff_List[i] = udg_Buff_List[udg_Buff_Max]
endif
set udg_Buff_List[udg_Buff_Max] = 0
endfunction
//---------------------------------------------------------------------
// ATTACHMENT FUNCTIONS FOR VILLAGERS
//---------------------------------------------------------------------
function SetAttackAnimation takes integer cv returns nothing
local unit u = udg_UDexUnits[cv]
local integer ilv = LoadInteger(udg_Stat_Table, cv, - 3)
local integer id = GetHandleId(LoadItemHandle(udg_Stat_Table, cv, 3))
local integer subtype
local string s
call AddUnitAnimationProperties( u, LoadStr(udg_Stat_Table, - cv, 3), false )
if ilv == 103 then
set subtype = LoadInteger(udg_CItem_Table, id, 3)
if subtype < 3 then
set s = ""
elseif subtype < 4 then
set s = "Channel"
elseif subtype < 6 then
set s = "Flesh"
elseif subtype == 6 then
set s = "Lumber"
elseif subtype == 7 then
set s = "Gold"
else
set s = "none"
endif
call SaveStr(udg_Stat_Table, - cv, 3, s )
else
set s = "none"
call SaveStr(udg_Stat_Table, - cv, 3, s )
endif
call AddUnitAnimationProperties( u, s, true )
set s = null
endfunction
function AddAttachment takes integer cv, integer opt returns nothing
local unit u = udg_UDexUnits[cv]
local integer pl
local integer itype
local integer subtype
local integer i
local integer w
local integer id
local string p = "Equipment\\"
//local real x = GetRandomReal( GetRectMinX( GetPlayableMapRect( ) ), GetRectMaxX( GetPlayableMapRect( ) ) )
//local real y = GetRandomReal( GetRectMinY( GetPlayableMapRect( ) ), GetRectMaxY( GetPlayableMapRect( ) ) )
if LoadBoolean(udg_FSS, 631, GetUnitTypeId(u)) then
set pl = GetPlayerId(GetOwningPlayer(u)) + 1
set i = 1
set w = LoadInteger(udg_Stat_Table, cv, - 3 )
set p = "Equipment\\"
loop
exitwhen i > 9
set id = LoadInteger(udg_Stat_Table, cv, - i )
if id > 0 then
set itype = GetItemTypeId(LoadItemHandle(udg_Stat_Table, cv, i))
if (i < 3 or i == 4) and (opt == 3 or opt == 4 or opt == 1) then
if i == 1 then
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, 1, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "head" ))
elseif i == 2 then
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, 2, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "chest" ))
elseif i == 4 then
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, 4, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "foot right" ))
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, - 4, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "foot left" ))
endif
elseif i == 9 and (opt == 4 or opt == 2 or opt == 3) then
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, 9, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "chest" ))
elseif i == 5 and (opt == 0 or opt == 3) then
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, 5, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "hand right" ))
elseif i == 3 then
// in template i created here unit what got same name than equiped weapon class, reason for make ability requiment to weapon depend
//if ( udg_WeaponClass == 1 and udg_Weapon_Dummy_unit == null ) then
// set udg_Weapon_Dummy_unit = CreateUnit( Player( pl ), 'h00D', x, y, 0 )
//else
// if ( ( udg_WeaponClass == 2 or udg_WeaponClass == 3 ) and udg_Weapon_Dummy_unit == null ) then
// set udg_Weapon_Dummy_unit = CreateUnit( Player( pl ), 'h00C', x, y, 0 )
// else
// if ( udg_WeaponClass == 4 or udg_Weapon_Dummy_unit == null ) then
// set udg_Weapon_Dummy_unit = CreateUnit( Player( pl ), 'h00F', x, y, 0 )
// else
// if ( udg_WeaponClass == 5 and udg_Weapon_Dummy_unit == null ) then
// set udg_Weapon_Dummy_unit = CreateUnit( Player( pl ), 'h00E', x, y, 0 )
// else
// if ( ( udg_WeaponClass == 6 or udg_WeaponClass == 7 ) and udg_Weapon_Dummy_unit == null ) then
// set udg_Weapon_Dummy_unit = CreateUnit( Player( pl ), 'h00G', x, y, 0 )
// endif
// endif
// endif
// endif
//endif
set subtype = LoadInteger(udg_CItem_Table, GetHandleId(LoadItemHandle(udg_Stat_Table, cv, i)), 3 )
if subtype < 3 then
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, 3, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "hand left" ))
elseif subtype == 3 then
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, 3, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "hand left" ))
elseif subtype == 6 then
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, 3, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "hand left" ))
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, - 3, AddSpecialEffectTarget(p + "Quiver.mdx" , u, "chest" ))
else
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, 3, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "hand right" ))
if subtype == 7 then
call SaveEffectHandle(udg_Stat_Table, 9000 + cv, - 3, AddSpecialEffectTarget(p + LoadStr(udg_FSS, 601, itype) , u, "hand left" ))
endif
endif
endif
endif
set i = i + 1
if i == 6 then
set i = 9
endif
endloop
endif
set u = null
set p = null
endfunction
function RemoveAttachment takes integer cv, integer opt returns nothing
local unit u = udg_UDexUnits[cv]
local integer pl
local integer a
local integer a1
local integer id
local integer subtype
if LoadBoolean(udg_FSS, 631, GetUnitTypeId(u)) then
set pl = GetPlayerId(GetOwningPlayer(u)) + 1
set a = BEARFORM_ID() // ability raw code what trasfom to bear form
set a1 = MELEE2RANGED_ID() // ability raw code what trasfom melee to ranged form
set id = GetHandleId(LoadItemHandle(udg_Stat_Table, cv, 3 ))
set subtype = LoadInteger(udg_CItem_Table, id, 3 )
if opt == 1 or opt == 3 then
call DestroyEffect( LoadEffectHandle(udg_Stat_Table, 9000 + cv, 2) )
call DestroyEffect( LoadEffectHandle(udg_Stat_Table, 9000 + cv, 4) )
call DestroyEffect( LoadEffectHandle(udg_Stat_Table, 9000 + cv, - 4) )
call DestroyEffect( LoadEffectHandle(udg_Stat_Table, 9000 + cv, 1) )
endif
if opt == 2 or opt == 3 then
call DestroyEffect( LoadEffectHandle(udg_Stat_Table, 9000 + cv, 9) )
endif
if opt == 0 or opt == 3 then
call DestroyEffect( LoadEffectHandle(udg_Stat_Table, 9000 + cv, 5) )
//if ( LoadInteger(udg_Stat_Table, 3, 99 ) != 0 ) then
//if ( udg_Weapon_Dummy_unit[pl] != null ) then
// call RemoveUnit( udg_Weapon_Dummy_unit[cv] )
// set udg_Weapon_Dummy_unit[pl] = null
//endif
call DestroyEffect( LoadEffectHandle(udg_Stat_Table, 9000 + cv, 3) )//normal weapon attachment
call DestroyEffect( LoadEffectHandle(udg_Stat_Table, 9000 + cv, - 3) )//dual handed like dagger and quiver
//endif
endif
call UnitAddAbility( u, a )
call IssueImmediateOrder( u, "bearform" )
call UnitRemoveAbility( u, a )
if subtype == 6 then
if ( GetUnitTypeId( u ) == HERO_MELEE() ) then
call SetPlayerAbilityAvailable( Player( pl - 1 ), a1, true )
call IssueImmediateOrder( u, "metamorphosis" )
call SetPlayerAbilityAvailable( Player( pl - 1 ), a1, false )
endif
else
if ( GetUnitTypeId( u ) == HERO_RANGED() ) then
call SetPlayerAbilityAvailable( Player( pl - 1 ), a1, true )
call IssueImmediateOrder( u, "metamorphosis" )
call SetPlayerAbilityAvailable( Player( pl - 1 ), a1, false )
endif
endif
endif
set u = null
endfunction
function DummyVillagerAttachmentRefresh takes nothing returns nothing
local integer pl = 1
local integer LP = GetPlayerId(GetLocalPlayer()) + 1
local integer cv = udg_Inv_Unit[LP]
local integer i
local integer p = 1
local integer ilv
local unit u = LoadUnitHandle(udg_FSS, 550, 0)
local integer alpha = 0
local integer glp
local real y1 = 250
local real y2 = 300
local real y = LoadReal(udg_FSS, 0, 2)
local string path
local string QuiverPath = ""
local real UScale = 1.2
local integer subtype
local integer BearForm = DBEARFORM_ID()//dummy bear form ability id
call UnitAddAbility( u, BearForm )
call IssueImmediateOrder( u, "bearform" )
call UnitRemoveAbility( u, BearForm )
call SetUnitFacing(u, 90)
if not LoadBoolean(udg_FSS, 631, GetUnitTypeId(udg_UDexUnits[cv])) then
set alpha = 0
elseif udg_Camera_Lock[LP] == 1 then
set alpha = 255
set QuiverPath = "Equipment\\Quiver.mdx"
endif
if LoadInteger(udg_Stat_Table, cv, - 9) == 0 then
set UScale = 2
set y = y + y1
else
set UScale = 1.2
set y = y + y2
endif
call SetUnitVertexColor(u, 255, 255, 255, alpha)
call SetUnitY(u, y)
call SetUnitScale(u, UScale, UScale, UScale)
loop
exitwhen pl > 10
if udg_Camera_Lock[pl] == 1 then
set i = 1
loop
exitwhen i == 10
if i == 1 or i == 2 or i == 5 or i == 9 then
call DestroyEffect(LoadEffectHandle(udg_FSS, 650 + pl, i))
elseif i == 3 or i == 4 then
call DestroyEffect(LoadEffectHandle(udg_FSS, 650 + pl, i))
call DestroyEffect(LoadEffectHandle(udg_FSS, 650 + pl, i + 100))
endif
set ilv = LoadInteger(udg_Stat_Table, cv, - i)
if ilv > 0 and alpha > 0 then
set path = ""
if GetLocalPlayer() == Player(pl - 1) then
set path = "Equipment\\" + LoadStr(udg_FSS, 601, GetItemTypeId(LoadItemHandle(udg_Stat_Table, cv, i)))
endif
if i == 1 then
call SaveEffectHandle(udg_FSS, 650 + pl, i, AddSpecialEffectTarget(path, u, "head"))
elseif i == 2 or i == 9 then
call SaveEffectHandle(udg_FSS, 650 + pl, i, AddSpecialEffectTarget(path, u, "chest"))
elseif i == 3 then
set subtype = LoadInteger(udg_CItem_Table, GetHandleId(LoadItemHandle(udg_Stat_Table, cv, i)), 3)
if subtype < 3 then
call SaveEffectHandle(udg_FSS, 650 + pl, i, AddSpecialEffectTarget(path, u, "hand left"))
elseif subtype == 6 then
call SaveEffectHandle(udg_FSS, 650 + pl, i, AddSpecialEffectTarget(path, u, "hand left"))
call SaveEffectHandle(udg_FSS, 650 + pl, i + 100, AddSpecialEffectTarget(QuiverPath, u, "chest"))
elseif subtype == 7 then
call SaveEffectHandle(udg_FSS, 650 + pl, i, AddSpecialEffectTarget(path, u, "hand left"))
call SaveEffectHandle(udg_FSS, 650 + pl, i + 100, AddSpecialEffectTarget(path, u, "hand right"))
else
call SaveEffectHandle(udg_FSS, 650 + pl, i, AddSpecialEffectTarget(path, u, "hand right"))
endif
elseif i == 4 then
call SaveEffectHandle(udg_FSS, 650 + pl, i, AddSpecialEffectTarget(path, u, "foot left"))
call SaveEffectHandle(udg_FSS, 650 + pl, i + 100, AddSpecialEffectTarget(path, u, "foot right"))
elseif i == 5 then
call SaveEffectHandle(udg_FSS, 650 + pl, i, AddSpecialEffectTarget(path, u, "hand right"))
endif
endif
if i == 5 then
set i = 8
endif
set i = i + 1
endloop
endif
set pl = pl + 1
endloop
set path = null
set QuiverPath = null
set u = null
endfunction
//---------------------------------------------------------------------
// FULL SCREEN ICON and INTERFACE HANDLING
//---------------------------------------------------------------------
function EnableBlackWindow takes integer pl returns nothing
local real x1Img = LoadReal(udg_FSS, 0, 1) - 150
local real y1Img = LoadReal(udg_FSS, 0, 2) - 150
local real x2Img = LoadReal(udg_FSS, 0, 4)
local real y2Img = LoadReal(udg_FSS, 0, 5)
local integer alphaImg = 0
local image Img
if GetLocalPlayer() == Player(pl - 1) then
call FogEnable(false)
call FogMaskEnable(false)
set alphaImg = 255
endif
set Img = CreateImage("Background.tga", x2Img, y2Img, 50, x1Img, y1Img, 50, 0, 0, 50, 2)
call SetImageRenderAlways (Img, true)
call SetImageColor(Img, 255, 255, 255, alphaImg)
call SaveImageHandle(udg_FSS, 0, 800 + pl, Img)
set Img = null
endfunction
function DisableBlackWindow takes integer pl returns nothing
call DestroyImage(LoadImageHandle(udg_FSS, 0, 800 + pl))
endfunction
function ShowFakeInterface takes nothing returns nothing
local integer i = 0
local destructable d
local unit u
local integer alpha = 255
local boolean b = true
local integer pl = GetPlayerId(GetLocalPlayer()) + 1
if udg_Camera_Lock[pl] > 0 then
set alpha = 0
set b = false
endif
loop
set d = LoadDestructableHandle(udg_FSS, 1400, i)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 0
loop
set u = LoadUnitHandle(udg_FSS, 1401, i)
exitwhen u == null
call SetUnitVertexColor(u, 255, 255, 255, alpha)
set i = i + 1
endloop
set d = null
set u = null
endfunction
function ShowTradeWindow takes nothing returns nothing
local integer i = 0
local destructable d = null
local boolean b = false
local integer pl = GetPlayerId(GetLocalPlayer()) + 1
local integer plt = udg_Trader[GetPlayerId(GetLocalPlayer()) + 1]
local real x
local real y
local texttag tt = null
local string s
call DestroyTextTag(LoadTextTagHandle(udg_FSS, 1250 + pl, 6))
call DestroyTextTag(LoadTextTagHandle(udg_FSS, 1250 + plt, 6))
call DestroyTextTag(LoadTextTagHandle(udg_FSS, 1250 + pl, 5))
call DestroyTextTag(LoadTextTagHandle(udg_FSS, 1250 + plt, 5))
if udg_Camera_Lock[pl] == 1 and udg_Trader[pl] > 0 then
set b = true
set s = GetPlayerName(GetLocalPlayer()) + " trade with " + GetPlayerName(Player(udg_Trader[pl] - 1))
set x = LoadReal(udg_FSS, 0, 1) + 946 - (StringLength(s) * 4)
set y = LoadReal(udg_FSS, 0, 2) + 300
set s = StringColoring ( s, 200, 200, 255, 50, 50, 255 )
set tt = CreateTextTag( )
call SetTextTagText( tt, s, 0.8 * 0.023 )
call SetTextTagPos( tt, x , y, 100.00 )
call SetTextTagPermanent( tt, true )
call SaveTextTagHandle(udg_FSS, 1250 + pl, 5, tt)
if GetLocalPlayer() == Player(pl - 1) then
set x = LoadReal(udg_FSS, 0, 1) + 778+64
elseif GetLocalPlayer() == Player(udg_Trader[pl] - 1) then
set x = LoadReal(udg_FSS, 0, 1) + 1020+64
endif
set y = LoadReal(udg_FSS, 0, 2) + 215
set tt = CreateTextTag( )
call SetTextTagText( tt, I2S(LoadInteger(udg_FSS, 1250 + pl, 7)), 0.8 * 0.023 )
call SetTextTagPos( tt, x , y, 100.00 )
call SetTextTagPermanent( tt, true )
call SetTextTagColor(tt, 200, 200, 200, 100)
call SaveTextTagHandle(udg_FSS, 1250 + pl, 6, tt)
if GetLocalPlayer() == Player(pl - 1) then
set x = LoadReal(udg_FSS, 0, 1) + 1020+64
elseif GetLocalPlayer() == Player(udg_Trader[pl] - 1) then
set x = LoadReal(udg_FSS, 0, 1) + 778+64
endif
set tt = CreateTextTag( )
call SetTextTagText( tt, I2S(LoadInteger(udg_FSS, 1250 + udg_Trader[pl], 7)), 0.8 * 0.023 )
call SetTextTagPos( tt, x , y, 100.00 )
call SetTextTagPermanent( tt, true )
call SetTextTagColor(tt, 200, 200, 200, 100)
call SaveTextTagHandle(udg_FSS, 1250 + udg_Trader[pl], 6, tt)
set tt = null
set s = null
elseif udg_Camera_Lock[pl] == 1 then
if LoadInteger(udg_FSS, 1250 + pl, 7) > 0 then
call SetPlayerState(Player(pl - 1), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(pl - 1), PLAYER_STATE_RESOURCE_GOLD) + LoadInteger(udg_FSS, 1250 + pl, 7))
call SaveInteger(udg_FSS, 1250 + pl, 7, 0)
endif
//LoadInteger(udg_FSS, 1250+udg_Trader[pl],7)
set i = 1200
loop
exitwhen i > 1205//1205
if LoadInteger(udg_FSS, 1249 + pl, i) > 0 then
call SaveInteger(udg_FSS, 1249 + pl, i, 0)
call RemoveDestructable(LoadDestructableHandle(udg_FSS, 2409 + pl, i ))
endif
call RemoveDestructable(LoadDestructableHandle(udg_FSS, 2409 + pl, i + 6 ))
call RemoveDestructable(LoadDestructableHandle(udg_FSS, 2409 + udg_Trader[pl], i + 6 ))
if LoadInteger(udg_FSS, 1249 + udg_Trader[pl], i) > 0 then
call SaveInteger(udg_FSS, 1249 + udg_Trader[pl], i, 0)
call RemoveDestructable(LoadDestructableHandle(udg_FSS, 2409 + udg_Trader[pl], i + 6 ))
endif
set i = i + 1
endloop
endif
set i = 0
loop
set d = LoadDestructableHandle(udg_FSS, 1200 + i, 0)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 0
if udg_Camera_Lock[pl] == 1 and udg_Trader[pl] > 0 then
set b = true
endif
loop
set d = LoadDestructableHandle(udg_FSS, 0, 2000 + i)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 0
loop
set d = LoadDestructableHandle(udg_FSS, 1300 + i, 0)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
if i == 4 then
set b = false
set i = 10
endif
endloop
if LoadInteger(udg_FSS, 1275 + pl, 1) > 0 then
call SaveInteger(udg_FSS, 1275 + pl, 1, 0)
endif
set d = null
set s = null
endfunction
function ShowCraftBox takes nothing returns nothing
local destructable d
local boolean b = false
local integer pl = GetPlayerId(GetLocalPlayer()) + 1
local integer i = 0
if LoadInteger(udg_FSS, 2405, pl) == 1 then
set b = true
endif
loop
set d = LoadDestructableHandle(udg_FSS, 2400, i)
exitwhen i == 6 or d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
call ShowDestructable(LoadDestructableHandle(udg_FSS, 2303, 0), b)
call ShowDestructable(LoadDestructableHandle(udg_FSS, 2304, 0), b)
call ShowDestructable(LoadDestructableHandle(udg_FSS, 2305, 0), b)
//if LoadTextTagHandle(udg_FSS,2400, i -10-20) != null then
// call DestroyTextTag(tt)
//endif
set d = null
endfunction
function UpdateGoldinShop takes integer pl returns nothing
local texttag tt = null
local real x = LoadReal(udg_FSS, 0, 1)
local real y = LoadReal(udg_FSS, 0, 2)
call DestroyTextTag(LoadTextTagHandle(udg_FSS, 2402, 60 + pl))
if GetLocalPlayer() == Player(pl - 1) then
set x = LoadReal(udg_FSS, 0, 1)
set y = LoadReal(udg_FSS, 0, 2)
set tt = CreateTextTag( )
call SetTextTagText( tt, StringColoring(I2S(GetPlayerState(Player(pl - 1), PLAYER_STATE_RESOURCE_GOLD)), 255, 255, 100, 255, 255, 255), 1 * 0.023 )
call SetTextTagPos( tt, x + 128, y + 260, 100.00 )
call SetTextTagPermanent( tt, true )
endif
call SaveTextTagHandle(udg_FSS, 2402, 60 + pl, tt)
set tt = null
endfunction
function ShowInventoryBox takes nothing returns nothing
local destructable d
local boolean b = false
local integer pl = GetPlayerId(GetLocalPlayer()) + 1
local integer i = 0
if udg_Camera_Lock[pl] > 0 then
set b = true
endif
loop
set d = LoadDestructableHandle(udg_FSS, 0, 200+i)
exitwhen d == null or i > 299
call ShowDestructable(d, b)
set i = i + 1
endloop
set d = null
endfunction
function CWInterface takes nothing returns nothing
local integer i = 0
local destructable d
local integer alpha = 0
local boolean b = false
local integer pl = GetPlayerId(GetLocalPlayer()) + 1
local unit u = LoadUnitHandle(udg_FSS, 550, 0)
if udg_Camera_Lock[pl] == 1 then
set b = true
endif
set i = 0
loop
set d = LoadDestructableHandle(udg_FSS, 0, 300+i)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 1
loop
set d = LoadDestructableHandle(udg_FSS, i, 0)
exitwhen i > 307
if udg_Camera_Lock[pl] == 2 or udg_Camera_Lock[pl] == 3 then
if i >= 100 and i < 120 then
set b = true
else
set b = false
endif
elseif udg_Camera_Lock[pl] == 1 then
set b = true
endif
call ShowDestructable(d, b)
set i = i + 1
if i == 12 then
set i = 100
elseif i == 120 then
set i = 200
elseif i == 206 then
set i = 300
endif
endloop
if udg_Camera_Lock[pl] == 1 then
set alpha = 255
endif
set b = false
if udg_Camera_Lock[pl] == 2 then
set b = true
endif
set i = 1
loop
set d = LoadDestructableHandle(udg_FSS, 2000, i)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 0
loop
set d = LoadDestructableHandle(udg_FSS, 2100, i)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 1
loop
set d = LoadDestructableHandle(udg_FSS, 2000 + i, 0)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 1
loop
set d = LoadDestructableHandle(udg_FSS, 2100 + i, 0)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 0
loop
set d = LoadDestructableHandle(udg_FSS, 2200 + i, 0)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 0
loop
set d = LoadDestructableHandle(udg_FSS, 2300 + i, 0)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
if LoadInteger(udg_FSS, 2405, pl) == 1 then
call ShowDestructable(LoadDestructableHandle(udg_FSS, 2302, 0), true)
else
call ShowDestructable(LoadDestructableHandle(udg_FSS, 2302, 0), false)
endif
set b = false
if LoadInteger(udg_FSS, 2405, 20 + pl) == 1 then
set b = true
endif
set i = 0
loop
set d = LoadDestructableHandle(udg_FSS, 675, i)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
if not LoadBoolean(udg_FSS, 631, GetUnitTypeId(udg_UDexUnits[udg_Inv_Unit[pl]])) then
set alpha = 0
endif
call SetUnitVertexColor(u, 255, 255, 255, alpha)
set b = false
if udg_Camera_Lock[pl] == 3 or udg_Camera_Lock[pl] == 2 then
set b = true
endif
set i = 0
loop
set d = LoadDestructableHandle(udg_FSS, 2200 + i, 0)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set i = 1
loop
set d = LoadDestructableHandle(udg_FSS, 2423, i)
exitwhen d == null
call ShowDestructable(d, b)
set i = i + 1
endloop
set d = LoadDestructableHandle(udg_FSS, 2100, 6)
if udg_Camera_Lock[pl] > 0 then
call ShowDestructable(d, true)
endif
call ShowCraftBox()
call ShowInventoryBox()
set u = null
set d = null
endfunction
// ------- clear screen :D if somebody remember to old old Qbasic :P
function CLS takes integer pl returns nothing
if GetLocalPlayer() == Player(pl-1) then
call ClearTextMessages()
endif
endfunction
function ShowItemToInventory takes integer pl, integer cv returns nothing
local item itm
local integer i
local integer dt
local destructable d
local real x
local real y
//check inventory
set i = 100
loop
exitwhen i > 119
set itm = LoadItemHandle(udg_Stat_Table, cv, i)
if itm != null then
set dt = LoadInteger(udg_FSS, 600, GetItemTypeId(itm))
set x = LoadReal(udg_FSS, i, 1)
set y = LoadReal(udg_FSS, i, 2)
if dt > 0 then
set d = LoadDestructableHandle(udg_FSS, 2409 + pl, i)
if d != null then
call RemoveDestructable(d)
endif
set d = CreateDestructableZ(dt, x, y, 5, 0, 0.6, 0)
call SaveDestructableHandle(udg_FSS, 2409 + pl, i, d)
call ShowDestructable(d, false)
if GetLocalPlayer() == Player(pl - 1) then
call ShowDestructable(d, true)
endif
endif
endif
set i = i + 1
endloop
if udg_Camera_Lock[pl] == 2 or udg_Camera_Lock[pl] == 3 then
call UpdateGoldinShop(pl)
endif
set itm = null
set d = null
endfunction
function ShowBagContent takes integer pl returns nothing
local integer i
local integer dt
local destructable d
local real x
local real y
local integer id = udg_Inv_Bag[pl]
local item itm
local integer O = 2200
call CWInterface()
//check inventory
if id > 0 then
set i = O + 1
loop
set itm = LoadItemHandle(udg_CItem_Table, id, i - O)
exitwhen i > O + BAG_SIZE_MAX()
if itm != null then
set dt = LoadInteger(udg_FSS, 600, GetItemTypeId(itm))
set x = LoadReal(udg_FSS, i, 1)
set y = LoadReal(udg_FSS, i, 2)
if dt > 0 then
set d = CreateDestructableZ(dt, x, y, 5, 0, 0.6, 0)
call SaveDestructableHandle(udg_FSS, 2409 + pl, i, d)
call ShowDestructable(d, false)
if GetLocalPlayer() == Player(pl - 1) then
call ShowDestructable(d, true)
endif
endif
endif
set i = i + 1
endloop
endif
set d = null
endfunction
function StartShop takes integer pl returns nothing
local integer ilv
local integer i
local real x = 0
local real y = 0
local integer cv = udg_Inv_Unit[pl]
local texttag tt = null
call IssueImmediateOrder( udg_UDexUnits[cv], "stop" )
if GetLocalPlayer() == Player(pl - 1) then
call ClearSelection()
call SelectUnit(udg_UDexUnits[udg_Inv_Unit[pl]], true)
endif
call UpdateGoldinShop(pl)
call DestroyTextTag(LoadTextTagHandle(udg_FSS, 2402, 80 + pl))
set x = LoadReal(udg_FSS, 0, 1)
set y = LoadReal(udg_FSS, 0, 2)
if GetLocalPlayer() == Player(pl - 1) then
set tt = CreateTextTag( )
call SetTextTagText( tt, StringColoring("Welcome (Shop)", 100, 100, 255, 255, 255, 255), 1.4 * 0.023 )
call SetTextTagPos( tt, x + 32, y + 480, 100.00 )
call SetTextTagPermanent( tt, true )
endif
call SaveTextTagHandle(udg_FSS, 2402, 80 + pl, tt)
set tt = null
call ShowItemToInventory (pl, cv)
call FlushFT_Stat(pl)
call CLS (pl)
call CWInterface()
call SetChargesText(pl)
call ShowTradeWindow()
endfunction
function StartBagpack takes integer pl returns nothing
call UpdateGoldinShop(pl)
call SetChargesText(pl)
call ShowBagContent(pl)
call CLS (pl)
call ShowItemToInventory(pl, udg_Inv_Unit[pl])
if GetLocalPlayer() == Player(pl - 1) then
call ClearSelection()
call SelectUnit(udg_UDexUnits[udg_Inv_Unit[pl]], true)
endif
endfunction
function CreateDummyUnit takes integer pl, string path, real x, real y, real z, real sc, integer p returns nothing
local integer c = LoadInteger(udg_FSS, 0, -pl*20)+1
local integer dr = DUMMY_ID()
local string s = ""
local effect e
local unit u = CreateUnit( Player(pl-1), dr, LoadReal(udg_FSS, 0, 1)+x, LoadReal(udg_FSS, 0, 2)+y, 270 )
call SaveInteger(udg_FSS, 0, -pl*20,c)
if GetLocalPlayer() == Player(pl-1) then
set s = path
endif
call UnitAddAbility(u, 'Amrf')
call UnitRemoveAbility(u, 'Amrf')
call SetUnitAnimationByIndex(u, p )
call SetUnitScale(u, sc,sc,sc)
call SetUnitFlyHeight(u, z, 0)
set e = AddSpecialEffectTarget( s, u, "chest" )
call SaveUnitHandle( udg_FSS, 0, -pl*20-c*2-1, u)
call SaveEffectHandle(udg_FSS, 0, -pl*20-c*2, e)
set u = null
set e = null
set s = null
endfunction
function StartInventory takes integer pl returns nothing
local integer ilv
local integer cv = udg_Inv_Unit[pl]
local integer i
local integer dt
local destructable d
local item itm
local real x
local real y
local unit u = udg_UDexUnits[cv]
local unit u2
call DummyVillagerAttachmentRefresh()
call IssueImmediateOrder( u, "stop" )
if GetLocalPlayer() == Player(pl - 1) then
call ClearSelection()
call SelectUnit(u, true)
endif
call CreateDummyUnit (pl, "Doodads\\Felwood\\Plants\\FelwoodBush\\FelwoodBush0.mdx", 500, 220, 100, 0.7, 155)
call CreateDummyUnit (pl, "Doodads\\LordaeronSummer\\Props\\LanternPost\\LanternPost1.mdl", 630, 250, 150, 1.1, 175)
call CreateDummyUnit (pl, "units\\critters\\BlackStagMale\\BlackStagMale.mdl", 500, 250, 50, 1.3, 155)
//check inventory
set i = 1
loop
exitwhen i == 11
set ilv = LoadInteger(udg_Stat_Table, cv, - i)
if ilv != 0 then
set dt = LoadInteger(udg_FSS, 600, GetItemTypeId(LoadItemHandle(udg_Stat_Table, cv, i)))
set x = LoadReal(udg_FSS, i, 1)
set y = LoadReal(udg_FSS, i, 2)
if dt > 0 then
set d = CreateDestructableZ(dt, x, y, 5, 0, 0.6, 0)
call SaveDestructableHandle(udg_FSS, 2409 + pl, i, d)
call ShowDestructable(d, false)
if GetLocalPlayer() == Player(pl - 1) then
call ShowDestructable(d, true)
endif
endif
endif
set i = i + 1
endloop
call ShowItemToInventory(pl, cv)
set i = 200
loop
exitwhen i > 205
set itm = UnitItemInSlot(u, i - 200)
if itm != null then
set ilv = GetItemLevel(itm)
set dt = LoadInteger(udg_FSS, 600, GetItemTypeId(itm))
set x = LoadReal(udg_FSS, i, 1)
set y = LoadReal(udg_FSS, i, 2)
if dt > 0 then
set d = CreateDestructableZ(dt, x, y, 5, 0, 0.6, 0)
call SaveDestructableHandle(udg_FSS, 2409 + pl, i, d)//i - 200
call ShowDestructable(d, false)
if GetLocalPlayer() == Player(pl - 1) then
call ShowDestructable(d, true)
endif
endif
endif
set i = i + 1
endloop
//we clear the screen from text
call CLS (pl)
call ShowStat(pl)
call SetChargesText(pl)
call CWInterface()
call ShowTradeWindow()
set i = GetUnitTypeId(u)
if LoadStr(udg_FSS, 635, i) != null then
call CreateDummyUnit (pl, LoadStr(udg_FSS, 635, i), 580, 160, 50, LoadReal(udg_FSS, 632, i), 170)
endif
call UpdateGoldinShop(pl)
set itm = null
set u = null
endfunction
function EnableCamLock takes integer pl, integer CamType returns nothing
local integer i
local integer a = 10 * pl + 100
call SaveReal(udg_FSS, 0, a, GetCameraTargetPositionX())
call SaveReal(udg_FSS, 0, a + 1, GetCameraTargetPositionY())
call SaveReal(udg_FSS, 0, a + 2, GetCameraTargetPositionZ())
call SaveReal(udg_FSS, 0, a + 3, GetCameraField(CAMERA_FIELD_TARGET_DISTANCE))
call SaveReal(udg_FSS, 0, a + 4, GetCameraField(CAMERA_FIELD_FARZ))
call SaveReal(udg_FSS, 0, a + 5, GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK))
call SaveReal(udg_FSS, 0, a + 6, GetCameraField(CAMERA_FIELD_FIELD_OF_VIEW))
call SaveReal(udg_FSS, 0, a + 7, GetCameraField(CAMERA_FIELD_ROLL))
call SaveReal(udg_FSS, 0, a + 8, GetCameraField(CAMERA_FIELD_ROTATION))
call SaveReal(udg_FSS, 0, a + 9, GetCameraField(CAMERA_FIELD_ZOFFSET))
//call DisplayTextToPlayer(Player(pl - 1), 0, 0, R2S(GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK)))
call SetUnitPropWindow (udg_UDexUnits[udg_Inv_Unit[pl]], 0)
call EnableBlackWindow(pl)
set udg_Cam_Index = udg_Cam_Index + 1
set i = udg_Cam_Index
set udg_Cam_Pl[i] = pl
set udg_Camera_Lock[pl] = CamType
if CamType == 1 then
call StartInventory(pl)
elseif CamType == 2 then
call StartShop(pl)
elseif CamType == 3 then
call StartBagpack(pl)
endif
set udg_Inv_Prev[pl] = 0
//call DisplayTimedTextToForce( GetPlayersAll(), 30, "camera enable for player "+I2S(pl)+" camera index"+I2S(udg_Cam_Index))
//if udg_Camera_Lock[udg_Cam_Pl[i]] then
//call DisplayTimedTextToForce( GetPlayersAll(), 30,"camplayer "+I2S(udg_Cam_Pl[i])+" camera index"+I2S(udg_Cam_Index)+" i= "+I2S(i))
//endif
call ShowFakeInterface()
if i == 1 then
call EnableTrigger( gg_trg_Periodic_camera_lock )
endif
if GetLocalPlayer() == Player(pl - 1) then
call CameraSetupApplyForceDuration(udg_Cam1, true, 0.00)
endif
if udg_Mb_Type[pl] > 0 then
call DestroyMultiboard(udg_Mb_Table[pl])
set udg_Mb_Type[pl] = 0
endif
endfunction
function DisableCamLock takes integer pl returns nothing
local integer index = 0
local integer i = 1
local integer a = 100 + 10 * pl
local unit u = udg_UDexUnits[udg_Inv_Unit[pl]]
loop
exitwhen i > udg_Cam_Index or index != 0
if udg_Cam_Pl[i] == pl then
set index = i
endif
set i = i + 1
endloop
if index == udg_Cam_Index then
set udg_Cam_Pl[index] = 0
else
set udg_Cam_Pl[index] = udg_Cam_Pl[udg_Cam_Index]
endif
if udg_Cam_Index > 0 then
set udg_Cam_Index = udg_Cam_Index - 1
endif
set udg_Camera_Lock[pl] = 0
call DisableBlackWindow(pl)
call SetUnitPropWindow(u, GetUnitDefaultPropWindow(u))
if GetLocalPlayer() == Player(pl - 1) then
call ResetToGameCamera(0.00)
call ClearSelection()
call SelectUnit(u, true)
endif
if GetLocalPlayer() == Player(pl - 1) then
call FogEnable(true)
call FogMaskEnable(true)
endif
call ShowFakeInterface()
if udg_Cam_Index == 0 then
call DisableTrigger( gg_trg_Periodic_camera_lock )
endif
set udg_Inv_Prev[pl] = 0
if Player(pl - 1) == GetLocalPlayer() then
call SetCameraPosition(LoadReal(udg_FSS, 0, a), LoadReal(udg_FSS, 0, a + 1))
call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE, LoadReal(udg_FSS, 0, a + 3), 0)
call SetCameraField(CAMERA_FIELD_FARZ, LoadReal(udg_FSS, 0, a + 4), 0)
call SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK, bj_RADTODEG * LoadReal(udg_FSS, 0, a + 5), 0)
call SetCameraField(CAMERA_FIELD_FIELD_OF_VIEW, bj_RADTODEG * LoadReal(udg_FSS, 0, a + 6), 0)
call SetCameraField(CAMERA_FIELD_ROLL, bj_RADTODEG * LoadReal(udg_FSS, 0, a + 7), 0)
call SetCameraField(CAMERA_FIELD_ROTATION, bj_RADTODEG * LoadReal(udg_FSS, 0, a + 8), 0)
call SetCameraField(CAMERA_FIELD_ZOFFSET, LoadReal(udg_FSS, 0, a + 9), 0)
endif
set u = null
endfunction
//---------------------------------------------------------------------
// MULTIBOARDS
//---------------------------------------------------------------------
function UpdateMb takes multiboard m, integer x, integer y, string t returns nothing
local multiboarditem mbitem = MultiboardGetItem(m, x, y)
call MultiboardSetItemValue(mbitem, t)
call MultiboardReleaseItem(mbitem)
set mbitem = null
endfunction
function scaning takes unit u, unit ut, player p returns nothing
local integer pl = GetPlayerId(p) + 1
local integer lv
local integer lvt
local integer cv = GetUnitUserData(u)
local integer cvt = GetUnitUserData(ut)
local integer crit = udg_Global_Crit[cvt]
local real eva = udg_Global_Eva[cv]
local real evat = udg_Global_Eva[cvt]
local real acc = udg_Global_Acc[cv]
local real acct = udg_Global_Acc[cvt]
local integer hit
local integer hitt
local integer hpt = R2I(GetWidgetLife(ut))
local integer mpt = R2I(GetUnitState(ut, UNIT_STATE_MANA))
local integer maxhpt = R2I(GetUnitState(ut, UNIT_STATE_MAX_LIFE))
local integer maxmpt = R2I(GetUnitState(ut, UNIT_STATE_MAX_MANA))
local real dmg = udg_Total_Dmg[cv] + 27
local real spelldmg = udg_TotalSpellPower[cv]
local integer AttLv = udg_Global_AttLv[cv]// + udg_B_AttLv[cv]
local integer AttLvt = udg_Global_AttLv[cvt]// + udg_B_AttLv[cvt]
local integer DefLv = udg_Global_DefLv[cvt]// + udg_B_DefLv[cvt]
local integer critdmg = udg_Global_CritDmg[cv] + 200// + udg_B_CritDmg[cv]
local integer pdef = udg_Global_Pdef[cvt]// + udg_B_Pdef[cvt]
local integer mdef1 = udg_Global_Mdef1[cvt]// + udg_B_Mdef[cvt]
local integer mdef2 = udg_Global_Mdef2[cvt]// + udg_B_Mdef[cvt]
local integer mdef3 = udg_Global_Mdef3[cvt]// + udg_B_Mdef[cvt]
local integer mdef4 = udg_Global_Mdef4[cvt]// + udg_B_Mdef[cvt]
local integer mdef5 = udg_Global_Mdef5[cvt]// + udg_B_Mdef[cvt]
local integer ap = GetPlayerId(GetOwningPlayer(ut)) + 1
local real pdefr
local real mdef1r
local real mdef2r
local real mdef3r
local real mdef4r
local real mdef5r
local multiboarditem mbitem
local multiboard m = CreateMultiboard()
local integer i = 0
local string ttype
local integer exp = R2I(udg_Global_Exp[cvt] * (100 + udg_Stat_Exp[cv]) / 100.00) // = R2I((udg_Global_Exp[cvt] * udg_Difficulty * (100 + udg_Stat_Exp[pl] + udg_B_Exp[cv]) / 100.00) / 2) + 50
if udg_Mb_Type[pl] != 0 then
call DestroyMultiboard( udg_Mb_Table[pl] )
endif
set udg_Mb_Table[pl] = m
call MultiboardClear( m )
set udg_Mb_Type[pl] = 2
call MultiboardSetRowCount(m, 22)
call MultiboardSetColumnCount(m, 2)
call MultiboardSetTitleText(m, "Scan board")
call MultiboardSetTitleTextColor(m, 255, 200, 200, 255)
loop
exitwhen i > 22
set mbitem = MultiboardGetItem(m, i, 0)
call MultiboardSetItemWidth(mbitem, 12 / 100.0)
call MultiboardSetItemValueColor(mbitem, 230, 230, 230, 255)
call MultiboardSetItemStyle(mbitem, true, false)
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, i, 1)
call MultiboardSetItemValue(mbitem, " ")
call MultiboardSetItemValueColor(mbitem, 150, 150, 150, 255)
call MultiboardSetItemWidth(mbitem, 8 / 100.0)
call MultiboardSetItemStyle(mbitem, true, false)
call MultiboardReleaseItem(mbitem)
set i = i + 1
endloop
if IsUnitType(u, UNIT_TYPE_HERO) then
set lv = GetHeroLevel(u)
else
set lv = GetUnitLevel(u)
endif
if IsUnitType(ut, UNIT_TYPE_HERO) then
set lvt = GetHeroLevel(ut)
else
set lvt = GetUnitLevel(ut)
endif
if udg_Hero[ap] != ut then
if GetUnitPointValue(ut) == 50 then
set ttype = "Fire"
elseif GetUnitPointValue(ut) == 51 then
set ttype = "Water"
elseif GetUnitPointValue(ut) == 52 then
set ttype = "Lightning"
elseif GetUnitPointValue(ut) == 53 then
set ttype = "Poison"
elseif GetUnitPointValue(ut) == 54 then
set ttype = "Earth"
else
set ttype = "Physical"
endif
else
set ttype = "Hero"
endif
set dmg = dmg + (udg_Global_DmgInc[cv] - udg_Global_DmgRed[cvt]) / 100.00 * dmg
set spelldmg = spelldmg + (udg_Global_DmgInc[cv] - udg_Global_DmgRed[cvt]) / 100.00 * spelldmg
set pdefr = ((1 - pdef / ( 40.00 * lv + pdef + 25.00)) * 100.00 )
set mdef1r = ((1 - mdef1 / ( 40.00 * lv + mdef1 + 25.00)) * 100.00 )
set mdef2r = ((1 - mdef2 / ( 40.00 * lv + mdef2 + 25.00)) * 100.00 )
set mdef3r = ((1 - mdef3 / ( 40.00 * lv + mdef3 + 25.00)) * 100.00 )
set mdef4r = ((1 - mdef4 / ( 40.00 * lv + mdef4 + 25.00)) * 100.00 )
set mdef5r = ((1 - mdef5 / ( 40.00 * lv + mdef5 + 25.00)) * 100.00 )
if mdef1 < 0 then
set mdef1 = 0
endif
if mdef2 < 0 then
set mdef2 = 0
endif
if mdef3 < 0 then
set mdef3 = 0
endif
if mdef4 < 0 then
set mdef4 = 0
endif
if mdef5 < 0 then
set mdef5 = 0
endif
if pdef < 0 then
set pdef = 0
endif
if ( AttLv > DefLv ) then
set dmg = 0//dmg * ( 1 + ( AttLv - DefLv ) / 100.00 ) * pdefr / 100.00
set spelldmg = 0//spelldmg * ( 1 + ( AttLv - DefLv ) / 100.00 ) * mdefr / 100.00
else
set dmg = 0//dmg / ( 1.00 + ( DefLv - AttLv ) / 120.00) * pdefr / 100.00
set spelldmg = 0//spelldmg / ( 1.00 + ( DefLv - AttLv ) / 120.00) * mdefr / 100.00
endif
set hit = HitChance(cv, cvt)
set hitt = 100 - HitChance(cvt, cv)
set mbitem = MultiboardGetItem(m, 0, 0)
call MultiboardSetItemValue(mbitem, "Level")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 1, 0)
call MultiboardSetItemValue(mbitem, "Type")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 2, 0)
call MultiboardSetItemValue(mbitem, "Attack Type")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 3, 0)
call MultiboardSetItemValue(mbitem, "HP")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 4, 0)
call MultiboardSetItemValue(mbitem, "Critical Chance")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 5, 0)
call MultiboardSetItemValue(mbitem, "Attack Level")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 6, 0)
call MultiboardSetItemValue(mbitem, "Def. Level")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 7, 0)
call MultiboardSetItemValue(mbitem, "Life Steal")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 8, 0)
call MultiboardSetItemValue(mbitem, "Mana Steal")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 9, 0)
call MultiboardSetItemValue(mbitem, "Reflect")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 10, 0)
call MultiboardSetItemValue(mbitem, "Armor Break")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 11, 0)
call MultiboardSetItemValue(mbitem, "-")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 12, 0)
call MultiboardSetItemValue(mbitem, "Phy. defence")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 13, 0)
call MultiboardSetItemValue(mbitem, "Fire ress.")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 14, 0)
call MultiboardSetItemValue(mbitem, "Water ress.")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 15, 0)
call MultiboardSetItemValue(mbitem, "Light. ress.")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 16, 0)
call MultiboardSetItemValue(mbitem, "Poison. ress.")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 17, 0)
call MultiboardSetItemValue(mbitem, "Earth. ress.")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 18, 0)
call MultiboardSetItemValue(mbitem, "Accurancy")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 19, 0)
call MultiboardSetItemValue(mbitem, "Evasion")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 20, 0)
call MultiboardSetItemValue(mbitem, "Exp.")
call MultiboardReleaseItem(mbitem)
set mbitem = MultiboardGetItem(m, 21, 0)
call MultiboardSetItemValue(mbitem, "Block chance")
call MultiboardReleaseItem(mbitem)
call UpdateMb (m, 0, 1, I2S(lvt))
call UpdateMb (m, 1, 1, GetUnitName(ut))
call UpdateMb (m, 2, 1, ttype)
call UpdateMb (m, 3, 1, "|cffffff00" + I2S(R2I(GetWidgetLife(ut))) + "|r / |cffff3300" + I2S(R2I(GetUnitState(ut, UNIT_STATE_MAX_LIFE))) + "|r")
call UpdateMb (m, 4, 1, (I2S(crit) + " %%"))
call UpdateMb (m, 5, 1, I2S(AttLvt))
call UpdateMb (m, 6, 1, I2S(DefLv))
call UpdateMb (m, 7, 1, (I2S(udg_Global_LifeSteal[cvt] ) + " %%"))// + udg_B_LS[cvt]
call UpdateMb (m, 8, 1, (I2S(R2I(udg_Global_ManaSteal[cvt])) + " %%"))
call UpdateMb (m, 9, 1, (I2S(udg_Global_Reflect[cvt]) + " %%"))// + udg_B_Ref[cvt]
call UpdateMb (m, 10, 1, (I2S(udg_Global_ArmorBreak[cvt]) + " %%"))
call UpdateMb (m, 11, 1, "....")
call UpdateMb (m, 12, 1, I2S(pdef) + " |cff999900(" + R2S(100 - pdefr) + "%%)|r")
call UpdateMb (m, 13, 1, I2S(mdef1) + " |cff999900(" + R2S(100 - mdef1r) + "%%)|r")
call UpdateMb (m, 14, 1, I2S(mdef2) + " |cff999900(" + R2S(100 - mdef2r) + "%%)|r")
call UpdateMb (m, 15, 1, I2S(mdef3) + " |cff999900(" + R2S(100 - mdef3r) + "%%)|r")
call UpdateMb (m, 16, 1, I2S(mdef4) + " |cff999900(" + R2S(100 - mdef4r) + "%%)|r")
call UpdateMb (m, 17, 1, I2S(mdef5) + " |cff999900(" + R2S(100 - mdef5r) + "%%)|r")
call UpdateMb (m, 18, 1, I2S(udg_Global_Acc[cvt]) + " |cff999900(" + I2S(hit) + "%%)|r")
call UpdateMb (m, 19, 1, I2S(udg_Global_Eva[cvt]) + " |cff999900(" + I2S(hitt) + "%%)|r")
call UpdateMb (m, 20, 1, I2S(exp))
call UpdateMb (m, 21, 1, I2S(udg_Global_Block[cvt]) + " %%")
call MultiboardMinimize(m, true)
call MultiboardMinimize(m, false)
call MultiboardDisplay( m, false )
if GetLocalPlayer() == p then
call MultiboardDisplay( m, true )
endif
set m = null
set mbitem = null
set ttype = null
endfunction
function Mb_Item_ToolTip takes item itm, integer cv, integer cv2, integer slot returns nothing
local integer ilv = GetItemLevel(itm)
local integer itmId = GetHandleId(itm)
local integer itype = 0
local integer dur
local integer maxdur = 0
local integer ref
local integer refv
local integer socket
local integer subtype
local integer maxsocket
local integer quality
local integer charge = GetItemCharges(itm)
local integer rcost = 0
local integer i = 1
local integer str
local integer agi
local integer int
local integer hlv
local integer lvR
local integer strR
local integer agiR
local integer intR
local integer b = 0
local integer c = 0
local integer price = 0
local string reqColor1 = "|cffff3333"
local string reqColor2 = "|cffff3333"
local string noreqColor = "|cffffff33"
local integer place = 0
local integer RowCount = 0
local string s
local string title
local string array MbRow
local multiboarditem mbitem
local string array qc
local unit u = udg_UDexUnits[cv]
local integer pl = GetPlayerId(GetOwningPlayer(u)) + 1
local integer viewer = pl
local integer hclass = LoadInteger(udg_FSS, 633, GetUnitTypeId(u))
local integer iclass
local integer act_id
if charge == 100 then
set charge = 1
endif
//itm name fix
set lvR = LoadInteger(udg_CItem_Table, itmId, 8)
set hlv = GetHeroLevel(u)
if ilv >= 100 and ilv < 200 then
set title = GetFullItemName (itm, true)
if ilv == BAG_LEVEL() then
set itype = GetItemTypeId(itm)
set b = 0
loop
exitwhen i > 24
if LoadItemHandle(udg_CItem_Table, itmId, i) != null then
set b = b + 1
set MbRow[b] = GetFullItemName (LoadItemHandle(udg_CItem_Table, itmId, i), true)
endif
set i = i + 1
endloop
set i = b + 1
if b == 0 then
if LoadStr(udg_FSS, 647, itype) != null then
set MbRow[i] = "|caaaaffaa" + LoadStr(udg_FSS, 647, itype) + "|r"
if LoadStr(udg_FSS, 648, itype) != null then
set i = i + 1
set MbRow[i] = "|caaaaffaa" + LoadStr(udg_FSS, 648, itype) + "|r"
if LoadStr(udg_FSS, 649, itype) != null then
set i = i + 1
set MbRow[i] = "|caaaaffaa" + LoadStr(udg_FSS, 649, itype) + "|r"
endif
endif
set i = i + 1
endif
endif
set b = 0
elseif ilv == BOX_LEVEL() then
set itype = GetItemTypeId(itm)
if LoadStr(udg_FSS, 647, itype) != null then
set MbRow[i] = "|caaaaffaa" + LoadStr(udg_FSS, 647, itype) + "|r"
if LoadStr(udg_FSS, 648, itype) != null then
set i = i + 1
set MbRow[i] = "|caaaaffaa" + LoadStr(udg_FSS, 648, itype) + "|r"
if LoadStr(udg_FSS, 649, itype) != null then
set i = i + 1
set MbRow[i] = "|caaaaffaa" + LoadStr(udg_FSS, 649, itype) + "|r"
endif
endif
set i = i + 1
endif
else
set quality = LoadInteger(udg_CItem_Table, itmId, 4)
set subtype = LoadInteger(udg_CItem_Table, itmId, 3)
set place = ilv - 100
set str = GetHeroStr(u, true)
set agi = GetHeroAgi(u, true)
set int = GetHeroInt(u, true)
set strR = LoadInteger(udg_CItem_Table, itmId, 9)
set agiR = LoadInteger(udg_CItem_Table, itmId, 10)
set intR = LoadInteger(udg_CItem_Table, itmId, 11)
set ref = LoadInteger(udg_CItem_Table, itmId, 16)
set refv = LoadInteger(udg_CItem_Table, itmId, 17)
set socket = LoadInteger(udg_CItem_Table, itmId, 18)
set maxsocket = LoadInteger(udg_CItem_Table, itmId, 20)
set maxdur = R2I(LoadReal(udg_CItem_Table, itmId, 15))
set dur = R2I(LoadReal(udg_CItem_Table, itmId, 14))
set iclass = LoadInteger(udg_CItem_Table, itmId, 6)
if place == 3 then
set act_id = LoadInteger(udg_CItem_Table, itmId, 25)
else
set act_id = 0
endif
if place != 10 then
if place == 11 then
set price = LoadInteger(udg_CItem_Table, itmId, 12)
set rcost = 0
else
set rcost = R2I(maxdur - dur)
set price = R2I(LoadInteger(udg_CItem_Table, itmId, 12) * (dur / maxdur))
endif
else
set price = 1000
set rcost = 0
endif
//set title = (GetItemQuality(quality,place)+GetArmorType(place, subtype)+GetItemName(itm)+"|r |cffaaaaff(Gr. "+I2S(LoadInteger (udg_CItem_Table, itmId, 7))+")|r ")
set s = ""
if lvR > 0 then
if hlv >= lvR then
set reqColor1 = noreqColor
endif
set MbRow[i] = "|cff999999Requiments:|r |cffffffaaLevel |r" + reqColor1 + I2S(lvR) + "|r"
set i = i + 1
set s = " "
set reqColor1 = "|cffff3333"
if strR > 0 and agiR > 0 then
if str >= strR then
set reqColor1 = noreqColor
endif
if agi >= agiR then
set reqColor2 = noreqColor
endif
set s = s + "|cff777777STR:|r " + reqColor1 + I2S(strR) + "|r |cff777777AGI:|r " + reqColor2 + I2S(agiR) + "|r"
elseif strR > 0 and intR > 0 then
if str >= strR then
set reqColor1 = noreqColor
endif
if int >= intR then
set reqColor2 = noreqColor
endif
set s = s + "|cff777777INT:|r " + reqColor2 + I2S(intR) + "|r |cff777777STR:|r " + reqColor1 + I2S(strR) + "|r"
endif
set s = s + "|r"
set MbRow[i] = s
set i = i + 1
set s = null
endif
if iclass > 0 then
set reqColor1 = "|cffff3333"
if hclass == 0 or hclass == iclass or (((iclass == 1 and hclass == 2) or (iclass == 3 and hclass == 4)) and ilv < 105 and ilv != 103) then
set reqColor1 = noreqColor
endif
set s = " " + reqColor1 + GetClassName(iclass, ilv) + " only |r"
set MbRow[i] = s
set i = i + 1
endif
if place == 11 then
set s = "Charm"
elseif place == 10 then
set s = "Tome"
elseif place == 2 then
set s = "Armor"
elseif place == 1 then
set s = "Helmet"
elseif place == 4 then
set s = "Boot"
elseif place == 9 then
set s = "Wing"
elseif place == 6 then
set s = "Ring"
elseif place == 8 then
set s = "Amulet"
elseif place == 5 then
set s = "Shield"
elseif place == 3 and subtype < 3 then
set s = "One-Handed"
elseif place == 3 and subtype > 2 then
set s = "Two-Handed"
endif
set MbRow[i] = "|cff999999Type:|r |cffffff77" + s + "|r"
set i = i + 1
if place < 10 then
if ref > 0 then
set MbRow[i] = "|cff999999Refine:|r |cffffff77+" + I2S(ref) + "|r"
set i = i + 1
endif
if place != 10 and place == 11 then
if LoadInteger(udg_CItem_Table, itmId, 67) == 0 then
set MbRow[i] = "|cff999999Duratibility:|r |cffffff77" + I2S(dur) + "/" + I2S(maxdur) + "|r"
else
set MbRow[i] = "|cff999999Duratibility:|r |cff7777ff" + I2S(dur) + "/" + I2S(maxdur) + "|r"
endif
set i = i + 1
endif
if maxsocket > 0 then
set MbRow[i] = "|cff999999Socket:|r |cffffff77" + I2S(socket) + "/" + I2S(maxsocket) + "|r"
set i = i + 1
//we list the gems
if socket > 0 then
set b = 0
loop
exitwhen b > socket
set c = LoadInteger(udg_CItem_Table, itmId, 1000 + b)
if c > 0 then
set MbRow[i] = " |cffffff00" + GetObjectName(LoadInteger(udg_CItem_Table, itmId, 1500 + b)) + "|r x |cffffff77" + I2S(c) + "|r"
set i = i + 1
endif
set b = b + 1
endloop
endif
endif
endif
if LoadInteger(udg_CItem_Table, itmId, 52) > 0 then
set MbRow[i] = "|cff999999Physical damage:|r |cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 52)) + "|r"
if place == 3 and ref > 0 and subtype < 8 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif place == 3 and subtype < 8 and ref > 0 then
set MbRow[i] = "|cff999999Physical Damage:|r 0" + " |cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 53) > 0 then
set MbRow[i] = "|cff999999Magic damage:|r |cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 53)) + "|r"
if place == 3 and ref > 0 and subtype > 7 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif place == 3 and subtype > 7 and ref > 0 then
set MbRow[i] = "|cff999999Magic damage:|r 0" + " |cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 26) > 0 then
set MbRow[i] = "|cff999999HP:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 26)) + "|r"
if (place == 1 or place == 2 or place == 4) and ref > 0 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif (place == 1 or place == 2 or place == 4) and ref > 0 then
set MbRow[i] = "|cff999999HP:|r;" + " |cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 30) > 0 then
set MbRow[i] = "|cff999999MP:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 30)) + "|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 56) > 0 then
set MbRow[i] = "|cff999999Pet Power:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 56)) + " %% |r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 34) > 0 then
set MbRow[i] = "|cff999999Physical Defence:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 34)) + "|r"
if (place == 5 or place == 8) and ref > 0 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif (place == 5 or place == 8) and ref > 0 then
set MbRow[i] = "|cff999999Physical Defence:|r;" + "|cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 35) > 0 then
set MbRow[i] = "|cff999999Fire Ressist:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 35)) + "|r"
if (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = "|cff999999Fire Ressist:|r;" + "|cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 36) > 0 then
set MbRow[i] = "|cff999999Water Ressist:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 36)) + "|r"
if (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = "|cff999999Water Ressist:|r;" + "|cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 37) > 0 then
set MbRow[i] = "|cff999999Lightning Ressist:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 37)) + "|r"
if (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = "|cff999999Lightning Ressist:|r;" + "|cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 38) > 0 then
set MbRow[i] = "|cff999999Poison Ressist:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 38)) + "|r"
if (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = "|cff999999Poison Ressist:|r;" + "|cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 39) > 0 then
set MbRow[i] = "|cff999999Earth Ressist:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 39)) + "|r"
if (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif (place == 6 or place == 7) and ref > 0 then
set MbRow[i] = "|cff999999Earth Ressist:|r;" + "|cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 43) > 0 then
set MbRow[i] = "|cff999999Block Damage Chance:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 43)) + " %% |r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 54) > 0 then
set MbRow[i] = "|cff999999Critical Strike:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 54)) + " %% |r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 41) > 0 then
set MbRow[i] = "|cff999999Accurancy:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 41)) + "|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 42) > 0 then
set MbRow[i] = "|cff999999Evasion:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 42)) + "|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 50) > 0 then
set MbRow[i] = "|cff999999Attack Level:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 50)) + "|r"
if place == 9 and ref > 0 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif place == 9 and ref > 0 then
set MbRow[i] = "|cff999999Attack Level:|r;" + " |cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 51) > 0 then
set MbRow[i] = "|cff999999Defence Level:|r;|cffffff77+" + I2S(LoadInteger(udg_CItem_Table, itmId, 51)) + "|r"
if place == 9 and ref > 0 then
set MbRow[i] = MbRow[i] + " |cff999900(+" + I2S(refv) + ")|r"
endif
set i = i + 1
elseif place == 9 and ref > 0 then
set MbRow[i] = "|cff999999Defence Level:|r;" + " |cff999900(+" + I2S(refv) + ")|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 40) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 40)) + "|r |cff9999ffMovement Speed|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 47) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 47)) + " %%|r |cff9999ffAttack Speed|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 27) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 27)) + " |cff9999ffHP Regen|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 31) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 31)) + " |cff9999ffMP Regen|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 28) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 28)) + " %% |r|cff9999ffLife Steal|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 29) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 29)) + "|r |cff9999ffLife per kill|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 32) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 32)) + " %% |r|cff9999ffMana Steal|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 33) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 33)) + " |r|cff9999ffMana per kill|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 22) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 22)) + " %% |r|cff9999ffExperience|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 23) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 23)) + " %% |r|cff9999ffRare drop|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 24) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 24)) + " %% |r|cff9999ffGold Drop|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 44) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 44)) + "|r |cff9999ffStrength|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 45) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 45)) + "|r |cff9999ffAgility|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 46) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 46)) + "|r |cff9999ffIntelligence|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 48) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 48)) + " %% |r|cff9999ffReflect|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 55) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 55)) + " %% |r|cff9999ffCritical Strike Dmg|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 49) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 49)) + " %% |r|cff9999ffArmor penetration|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 57) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 57)) + " |r|cff9999ffFire Damage|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 58) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 58)) + " |r|cff9999ffWater Damage|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 59) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 59)) + " |r|cff9999ffLightning Damage|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 60) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 60)) + " |r|cff9999ffPoison Damage|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 61) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 61)) + " |r|cff9999ffEarth Damage Addon|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 62) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 62)) + "|r |cff9999ffPhysical Attack|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 63) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 63)) + "|r |cff9999ffMagical Attack|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 64) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 64)) + "|r |cff9999ffLife|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 65) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 65)) + "|r |cff9999ffMana|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 66) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 66)) + "%%|r |cff9999ffCritical strike|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 67) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 67)) + "|r |cff9999ffDuratibility|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 68) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 68)) + "|r |cff9999ffSocket|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 69) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 69)) + "|r |cff9999ffAttack Level|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 70) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 70)) + "|r |cff9999ffDefence Level|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 71) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 71)) + "%%|r |cff9999ffBlock chance|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 72) != 0 then
set MbRow[i] = " |cffffff99" + I2S(LoadInteger(udg_CItem_Table, itmId, 72)) + "|r |cff9999ffLevel requiment|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 73) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 73)) + "|r |cff9999ffAccurancy|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 74) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 74)) + "|r |cff9999ffEvasion|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 75) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 75)) + "|r |cff9999ffPhysical Defence|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 76) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 76)) + "|r |cff9999ffFire Ressist|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 77) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 77)) + "|r |cff9999ffWater Ressist|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 78) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 78)) + "|r |cff9999ffLightning Ressist|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 79) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 79)) + "|r |cff9999ffPoison Ressist|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 80) > 0 then
set MbRow[i] = " |cffffff99+" + I2S(LoadInteger(udg_CItem_Table, itmId, 80)) + "|r |cff9999ffEarth Ressist|r"
set i = i + 1
endif
if LoadInteger(udg_CItem_Table, itmId, 81) > 0 then
set MbRow[i] = " |cffffff99-" + I2S(LoadInteger(udg_CItem_Table, itmId, 81)) + " %% |r|cff9999ffShop Price|r"
set i = i + 1
endif
if act_id > 0 then
if act_id == 1 then
set MbRow[i] = "|cffff3333Sacrificial Assault:|r |cffeeffddMinor chance|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd for double damage|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd but cost 5%% Max HP.|r"
elseif act_id == 2 then
set MbRow[i] = "|cffff3333Bless:|r |cffeeffddMinor chance for|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd recover back 10%% Max HP|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd is last 20 second.|r"
elseif act_id == 3 then
set MbRow[i] = "|cffff3333Bleed:|r |cffeeffddMinor chance for|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd make target bleed|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd is last 20 second.|r"
elseif act_id == 4 then
set MbRow[i] = "|cffff3333Rage:|r |cffeeffddMinor chance for|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd increase the dealed and|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd taked damage, 5 second.|r"
elseif act_id == 5 then
set MbRow[i] = "|cffff3333Streaming:|r |cffeeffddMinor chance for|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd increase life & mana steal|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd by 13%%, is last 6 second.|r"
elseif act_id == 6 then
set MbRow[i] = "|cffff3333Amplify:|r |cffeeffddMinor chance for|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd increase every damage on|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd target by 15%%|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd is last 5 second.|r"
elseif act_id == 7 then
set MbRow[i] = "|cffff3333Thorn:|r |cffeeffddMinor chance for|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd reflect back every|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd damage, 4 second.|r"
elseif act_id == 8 then
set MbRow[i] = "|cffff3333Protection:|r |cffeeffddMinor chance for|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd increase defences by 60%%|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd in last 20 second.|r"
elseif act_id == 9 then
set MbRow[i] = "|cffff3333Eagle-Eye:|r |cffeeffddMinor chance for|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd increase critical strike|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd damage by 50%%|r"
set i = i + 1
set MbRow[i] = "|cffeeffdd is last 5 second.|r"
endif
set i = i + 1
endif
if LoadStr(udg_CItem_Table, itmId, 21) != null and LoadStr(udg_CItem_Table, itmId, 21) != "" then
set MbRow[i] = "|cff7777ffCrafter:|r |cffffff77" + LoadStr(udg_CItem_Table, itmId, 21) + " |r"
set i = i + 1
endif
if slot > 0 and cv2 == cv then
if LoadInteger(udg_Stat_Table, 18000 + cv, - slot) > 0 then
set MbRow[i] = "|cff999900Set Bonus 1:|r |cffffff99+" + I2S(LoadInteger(udg_Stat_Table, 18000 + cv, - slot)) + " Defence Lv |r"
set i = i + 1
endif
if LoadInteger(udg_Stat_Table, 18000 + cv, slot) > 0 then
set MbRow[i] = "|cff999900Set Bonus 2:|r |cffffff99+" + I2S(LoadInteger(udg_Stat_Table, 18000 + cv, slot)) + " Defence Lv |r"
set i = i + 1
endif
endif
if udg_Camera_Lock[pl] == 1 then
if rcost > 0 then
set i = i + 1
set MbRow[i] = "|cffffff33Repair Cost:|r |cffffff88" + I2S(rcost) + " Gold|r"
set i = i + 1
else
if udg_Camera_Lock[pl] == 2 or rcost == 0 then
set i = i + 1
set MbRow[i] = "|cffffff33Price:|r |cffffff88" + I2S(price / 2) + " Gold|r"
set i = i + 1
endif
endif
elseif udg_Camera_Lock[pl] == 2 or udg_Camera_Lock[pl] == 3 then
set i = i + 1
set MbRow[i] = "|cffffff33Price:|r |cffffff88" + I2S(price / 2) + " Gold|r"
set i = i + 1
endif
endif
else
set title = GetItemName(itm)
set s = ""
set price = LoadInteger(udg_FSS, 602, GetItemTypeId(itm))
if charge > 0 and (ilv < 1902 or ilv > 1905) then
set s = "|cffffff00 x " + I2S(charge) + "|r"
set price = price * charge
elseif ilv > 1901 and ilv < 1906 then
if lvR > 0 then
if hlv >= lvR then
set reqColor1 = noreqColor
endif
set MbRow[i] = "|cff999999Requiments:|r |cffffffaaLevel |r" + reqColor1 + I2S(lvR) + "|r"
set i = i + 1
endif
set i = i + 1
if ilv == 1902 then
set MbRow[i] = "|cffaaaaffRestore " + I2S(LoadInteger(udg_CItem_Table, itmId, 26)) + " hit point|r"
elseif ilv == 1903 then
set MbRow[i] = "|cffaaaaffRestore " + I2S(LoadInteger(udg_CItem_Table, itmId, 30)) + " mana point|r"
elseif ilv == 1904 then
set MbRow[i] = "|cffaaaaffRegenerate " + I2S(LoadInteger(udg_CItem_Table, itmId, 26)) + " hit point|r"
set i = i + 1
set MbRow[i] = "|cffaaaaffin last 30 second.|r"
elseif ilv == 1905 then
set MbRow[i] = "|cffaaaaffRegenerate " + I2S(LoadInteger(udg_CItem_Table, itmId, 30)) + " mana point|r"
set i = i + 1
set MbRow[i] = "|cffaaaaffin last 30 second.|r"
endif
set price = LoadInteger(udg_CItem_Table, itmId, 12)
set rcost = 0
set i = i + 1
endif
set title = StringColoring(GetItemName(itm), 100, 100, 255, 255, 255, 255) + s
if charge > 0 then
if itype != 0 then
if LoadStr(udg_FSS, 647, itype) != null then
set i = i + 1
set MbRow[i] = "|cffaaaaaa" + LoadStr(udg_FSS, 647, itype) + "|r"
if LoadStr(udg_FSS, 648, itype) != null then
set i = i + 1
set MbRow[i] = "|cffaaaaaa" + LoadStr(udg_FSS, 648, itype) + "|r"
if LoadStr(udg_FSS, 649, itype) != null then
set i = i + 1
set MbRow[i] = "|cffaaaaaa" + LoadStr(udg_FSS, 649, itype) + "|r"
endif
endif
set i = i + 1
endif
endif
if udg_Camera_Lock[pl] == 2 then
set i = i + 1
set MbRow[i] = "|cffffff33Price:|r |cffffff88" + I2S(price / 2) + " Gold|r"
set i = i + 1
endif
endif
endif
if udg_Mb_Table[viewer] != null then
call DestroyMultiboard(udg_Mb_Table[viewer])
endif
set RowCount = i
if RowCount > 0 then
call MultiboardClear(udg_Mb_Table[viewer])
call DestroyMultiboard(udg_Mb_Table[viewer])
set udg_Mb_Table[viewer] = CreateMultiboard()
set udg_Mb_Type[viewer] = 1
call MultiboardSetRowCount(udg_Mb_Table[viewer], RowCount)
call MultiboardSetColumnCount(udg_Mb_Table[viewer], 1)
call MultiboardSetTitleText(udg_Mb_Table[viewer], title)
call MultiboardSetTitleTextColor(udg_Mb_Table[viewer], 255, 200, 200, 255)
set i = 0
loop
exitwhen i > RowCount
set mbitem = MultiboardGetItem(udg_Mb_Table[viewer], i, 0)
call MultiboardSetItemWidth(mbitem, 16 / 100.0)
call MultiboardSetItemStyle(mbitem, true, false)
set b = GetStringPos (MbRow[i], ";")
if b > 0 then
set s = SubString(MbRow[i], 0, b)
call MultiboardSetItemValue(mbitem, s + AddSpace (" ", 35 - StringLength(s)) + SubString(MbRow[i], b + 1, 0))
else
call MultiboardSetItemValue(mbitem, MbRow[i])
endif
call MultiboardReleaseItem(mbitem)
set MbRow[i] = null
set i = i + 1
endloop
call MultiboardDisplay(udg_Mb_Table[viewer], false)
if ( GetLocalPlayer() == Player(viewer - 1) ) then
call MultiboardDisplay(udg_Mb_Table[viewer], true)
call MultiboardMinimize(udg_Mb_Table[viewer], false)
endif
endif
set u = null
endfunction
function Mb_ToolTip takes integer viewer, integer pl, integer slot returns nothing
local integer ilv
local item itm
local string s
local string title
local integer cv = udg_Inv_Unit[pl]
if slot < 200 then
set ilv = LoadInteger(udg_Stat_Table, cv, - slot)
set itm = LoadItemHandle(udg_Stat_Table, cv, slot)
else
if udg_Camera_Lock[viewer] == 1 then
set itm = UnitItemInSlot(udg_UDexUnits[udg_Inv_Unit[pl]], slot - 200)
set ilv = GetItemLevel(itm)
elseif slot > 2200 and slot < 2225 then
set itm = LoadItemHandle(udg_CItem_Table, udg_Inv_Bag[pl], slot - 2200)
if itm != null then
set ilv = - 1
endif
endif
endif
if ilv == - 1 then
call Mb_Item_ToolTip (itm, cv, 0, 0)
elseif ilv > 0 then
call Mb_Item_ToolTip (itm, cv, cv, slot)
elseif (slot >= 300 and slot < 350) or (slot >= 1300 and slot < 1302) then
set s = ""
if slot == 300 then
set s = " Drop"
elseif slot == 301 then
set s = " Repair"
elseif slot == 302 then
set s = " Repair All"
elseif slot == 303 then
set s = " Close "
elseif slot == 307 then
set s = " Restat "
elseif slot == 306 then
set s = " +1 Str "
elseif slot == 305 then
set s = " +1 Agi "
elseif slot == 304 then
set s = " +1 Int "
elseif slot == 1300 then
if udg_Trader[pl] > 0 then
if LoadInteger(udg_FSS, 1275 + pl, 1) == 0 then
set s = " Locked "
else
set s = " Unlocked "
endif
endif
elseif slot == 1301 then
if udg_Trader[pl] > 0 then
set s = " Trade "
endif
endif
call MultiboardClear(udg_Mb_Table[viewer])
call DestroyMultiboard(udg_Mb_Table[viewer])
if s != "" then
set udg_Mb_Table[viewer] = CreateMultiboard()
set udg_Mb_Type[viewer] = 1
call MultiboardSetRowCount(udg_Mb_Table[viewer], 0)
call MultiboardSetColumnCount(udg_Mb_Table[viewer], 0)
call MultiboardSetTitleText(udg_Mb_Table[viewer], "|cffffff00 " + s + " |r")
call MultiboardSetTitleTextColor(udg_Mb_Table[viewer], 255, 200, 200, 255)
call MultiboardDisplay(udg_Mb_Table[viewer], false)
if ( GetLocalPlayer() == Player(viewer - 1) ) then
call MultiboardDisplay(udg_Mb_Table[viewer], true)
call MultiboardMinimize(udg_Mb_Table[viewer], true)
endif
endif
else
call DestroyMultiboard(udg_Mb_Table[viewer])
set udg_Mb_Type[viewer] = 0
endif
set s = null
set itm = null
set title = null
endfunction
//-------------------------------------------------------------------------
// EQUIPING FUNCTIONS
//-------------------------------------------------------------------------
function EquipAItem takes integer cv, item itm, boolean equip returns nothing
local integer pl = GetPlayerId(GetOwningPlayer(udg_UDexUnits[cv])) + 1
local unit u = udg_UDexUnits[cv]
local integer i = 1
local integer ii = 0
local integer id = GetHandleId(itm)
local integer ilv = GetItemLevel(itm)
local integer array ids
local integer g1
local integer g2
local integer g3
local integer q1
local integer q2
local integer q3
local integer sl = ilv - 100
local integer s1
local integer s2
local integer s3
local integer q
local integer SB1
local integer SB2
local integer x = 1
local integer hp = 0
local integer mp = 0
local integer amount = 0
local integer reflv = LoadInteger(udg_CItem_Table, id, 16 )
local integer refv = LoadInteger(udg_CItem_Table, id, 17 )
local integer socket = LoadInteger(udg_CItem_Table, id, 18 )
if ilv == 103 then
if equip then
set udg_Global_Act_Id[cv] = LoadInteger(udg_CItem_Table, id, 25 )
else
set udg_Global_Act_Id[cv] = 0
endif
endif
if equip then
if sl == 1 or sl == 2 or sl == 4 then
if LoadInteger(udg_Stat_Table, cv, - 1 ) > 0 then
set ids[1] = GetHandleId(LoadItemHandle(udg_Stat_Table, cv, 1 ))
else
set ids[1] = 0
endif
if LoadInteger(udg_Stat_Table, cv, - 2 ) > 0 then
set ids[2] = GetHandleId(LoadItemHandle(udg_Stat_Table, cv, 2 ))
else
set ids[2] = 0
endif
if LoadInteger(udg_Stat_Table, cv, - 4 ) > 0 then
set ids[3] = GetHandleId(LoadItemHandle(udg_Stat_Table, cv, 4 ))
else
set ids[3] = 0
endif
if sl == 4 then
set q = LoadInteger(udg_CItem_Table, ids[3], 4 )
else
set q = LoadInteger(udg_CItem_Table, ids[sl], 4 )
endif
set SB1 = R2I(q * 1) + 1
set SB2 = R2I(q * 1.5) + 2
if ids[1] > 0 and ids[2] > 0 and ids[3] > 0 then
set s1 = LoadInteger(udg_CItem_Table, ids[1], 3 )
set q1 = LoadInteger(udg_CItem_Table, ids[1], 4 )
set g1 = LoadInteger(udg_CItem_Table, ids[1], 7 )
set s2 = LoadInteger(udg_CItem_Table, ids[2], 3 )
set q2 = LoadInteger(udg_CItem_Table, ids[2], 4 )
set g2 = LoadInteger(udg_CItem_Table, ids[2], 7 )
set s3 = LoadInteger(udg_CItem_Table, ids[3], 3 )
set q3 = LoadInteger(udg_CItem_Table, ids[3], 4 )
set g3 = LoadInteger(udg_CItem_Table, ids[3], 7 )
if s1 == s2 and s2 == s3 and q1 == q2 and q2 == q3 and g1 == g2 and g2 == g3 then
if LoadInteger(udg_Stat_Table, 18000 + cv, 1 ) == 0 then
call SaveInteger(udg_Stat_Table, 18000 + cv, 1, SB2 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + SB2
endif
if LoadInteger(udg_Stat_Table, 18000 + cv, 2 ) == 0 then
call SaveInteger(udg_Stat_Table, 18000 + cv, 2, SB2 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + SB2
endif
if LoadInteger(udg_Stat_Table, 18000 + cv, 4 ) == 0 then
call SaveInteger(udg_Stat_Table, 18000 + cv, 4, SB2 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + SB2
endif
endif
endif
if ids[1] > 0 and ids[2] > 0 then
set s1 = LoadInteger(udg_CItem_Table, ids[1], 3 )
set q1 = LoadInteger(udg_CItem_Table, ids[1], 4 )
set g1 = LoadInteger(udg_CItem_Table, ids[1], 7 )
set s2 = LoadInteger(udg_CItem_Table, ids[2], 3 )
set q2 = LoadInteger(udg_CItem_Table, ids[2], 4 )
set g2 = LoadInteger(udg_CItem_Table, ids[2], 7 )
if s1 == s2 and q1 == q2 and g1 == g2 then
if LoadInteger(udg_Stat_Table, 18000 + cv, - 1 ) == 0 then
call SaveInteger(udg_Stat_Table, 18000 + cv, - 1, SB1 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + SB1
endif
if LoadInteger(udg_Stat_Table, 18000 + cv, - 2 ) == 0 then
call SaveInteger(udg_Stat_Table, 18000 + cv, - 2, SB1 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + SB1
endif
endif
endif
if ids[2] > 0 and ids[3] > 0 then
set s1 = LoadInteger(udg_CItem_Table, ids[2], 3 )
set q1 = LoadInteger(udg_CItem_Table, ids[2], 4 )
set g1 = LoadInteger(udg_CItem_Table, ids[2], 7 )
set s2 = LoadInteger(udg_CItem_Table, ids[3], 3 )
set q2 = LoadInteger(udg_CItem_Table, ids[3], 4 )
set g2 = LoadInteger(udg_CItem_Table, ids[3], 7 )
if s1 == s2 and q1 == q2 and g1 == g2 then
if LoadInteger(udg_Stat_Table, 18000 + cv, - 2 ) == 0 then
call SaveInteger(udg_Stat_Table, 18000 + cv, - 2, SB1 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + SB1
endif
if LoadInteger(udg_Stat_Table, 18000 + cv, - 4 ) == 0 then
call SaveInteger(udg_Stat_Table, 18000 + cv, - 4, SB1 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + SB1
endif
endif
endif
if ids[1] > 0 and ids[3] > 0 then
set s1 = LoadInteger(udg_CItem_Table, ids[1], 3 )
set q1 = LoadInteger(udg_CItem_Table, ids[1], 4 )
set g1 = LoadInteger(udg_CItem_Table, ids[1], 7 )
set s2 = LoadInteger(udg_CItem_Table, ids[3], 3 )
set q2 = LoadInteger(udg_CItem_Table, ids[3], 4 )
set g2 = LoadInteger(udg_CItem_Table, ids[3], 7 )
if s1 == s2 and q1 == q2 and g1 == g2 then
if LoadInteger(udg_Stat_Table, 18000 + cv, - 1 ) == 0 then
call SaveInteger(udg_Stat_Table, 18000 + cv, - 1, SB1 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + SB1
endif
if LoadInteger(udg_Stat_Table, 18000 + cv, - 4 ) == 0 then
call SaveInteger(udg_Stat_Table, 18000 + cv, - 4, SB1 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + SB1
endif
endif
endif
endif
else
if sl == 1 or sl == 2 or sl == 4 then
set ids[1] = GetHandleId(LoadItemHandle(udg_Stat_Table, cv, 1 ))
set ids[2] = GetHandleId(LoadItemHandle(udg_Stat_Table, cv, 2 ))
set ids[3] = GetHandleId(LoadItemHandle(udg_Stat_Table, cv, 4 ))
if ids[1] > 0 and ids[2] > 0 and ids[3] > 0 then
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] - LoadInteger(udg_Stat_Table, 18000 + cv, 1 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] - LoadInteger(udg_Stat_Table, 18000 + cv, 2 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] - LoadInteger(udg_Stat_Table, 18000 + cv, 4 )
call SaveInteger(udg_Stat_Table, 18000 + cv, 1, 0 )
call SaveInteger(udg_Stat_Table, 18000 + cv, 2, 0 )
call SaveInteger(udg_Stat_Table, 18000 + cv, 4, 0 )
endif
if ids[1] > 0 and ids[2] > 0 then
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] - LoadInteger(udg_Stat_Table, 18000 + cv, - 1 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] - LoadInteger(udg_Stat_Table, 18000 + cv, - 2 )
call SaveInteger(udg_Stat_Table, 18000 + cv, - 1, 0 )
call SaveInteger(udg_Stat_Table, 18000 + cv, - 2, 0 )
elseif ids[2] > 0 and ids[3] > 0 then
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] - LoadInteger(udg_Stat_Table, 18000 + cv, - 2 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] - LoadInteger(udg_Stat_Table, 18000 + cv, - 4 )
call SaveInteger(udg_Stat_Table, 18000 + cv, - 2, 0 )
call SaveInteger(udg_Stat_Table, 18000 + cv, - 4, 0 )
elseif ids[1] > 0 and ids[3] > 0 then
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] - LoadInteger(udg_Stat_Table, 18000 + cv, - 1 )
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] - LoadInteger(udg_Stat_Table, 18000 + cv, - 4 )
call SaveInteger(udg_Stat_Table, 18000 + cv, - 1, 0 )
call SaveInteger(udg_Stat_Table, 18000 + cv, - 4, 0 )
endif
endif
set x = - 1
endif
if socket > 0 and (sl < 5 or sl == 9 ) then
set i = 0
loop
exitwhen i > socket - 1
set amount = LoadInteger(udg_CItem_Table, id, 1000 + i)
set ii = LoadInteger(udg_CItem_Table, id, 1500 + i)
if amount > 0 then
set amount = amount * x
if sl == 1 or sl == 2 or sl == 4 then
if ii == 'I001' then
set hp = hp + 25 * amount
elseif ii == 'I002' then
set hp = hp + 50 * amount
elseif ii == 'I003' then
set hp = hp + 75 * amount
elseif ii == 'I004' then
set hp = hp + 100 * amount
elseif ii == 'I005' then
set hp = hp + 125 * amount
elseif ii == 'I006' then
set hp = hp + 175 * amount
endif
elseif sl == 3 then
if ii == 'I001' then
set udg_Stat_AttackLv[cv] = udg_Stat_AttackLv[cv] + 1 * amount
elseif ii == 'I002' then
set udg_Stat_AttackLv[cv] = udg_Stat_AttackLv[cv] + 2 * amount
elseif ii == 'I003' then
set udg_Stat_AttackLv[cv] = udg_Stat_AttackLv[cv] + 3 * amount
elseif ii == 'I004' then
set udg_Stat_AttackLv[cv] = udg_Stat_AttackLv[cv] + 4 * amount
elseif ii == 'I005' then
set udg_Stat_AttackLv[cv] = udg_Stat_AttackLv[cv] + 5 * amount
elseif ii == 'I006' then
set udg_Stat_AttackLv[cv] = udg_Stat_AttackLv[cv] + 7 * amount
endif
elseif sl == 9 then
if ii == 'I001' then
set udg_Stat_HpRegen[cv] = udg_Stat_HpRegen[cv] + 2 * amount
elseif ii == 'I002' then
set udg_Stat_HpRegen[cv] = udg_Stat_HpRegen[cv] + 4 * amount
elseif ii == 'I003' then
set udg_Stat_HpRegen[cv] = udg_Stat_HpRegen[cv] + 6 * amount
elseif ii == 'I004' then
set udg_Stat_HpRegen[cv] = udg_Stat_HpRegen[cv] + 8 * amount
elseif ii == 'I005' then
set udg_Stat_HpRegen[cv] = udg_Stat_HpRegen[cv] + 10 * amount
elseif ii == 'I006' then
set udg_Stat_HpRegen[cv] = udg_Stat_HpRegen[cv] + 15 * amount
endif
endif
endif
set i = i + 1
endloop
endif
if reflv > 0 then
if ( refv > 0 ) then
if sl == 3 then
if ( ilv >= 1000 ) then
set udg_Stat_SpellPower[cv] = udg_Stat_SpellPower[cv] + refv * x
else
set udg_Stat_Dmg[cv] = udg_Stat_Dmg[cv] + refv * x
endif
else
if sl == 6 or sl == 7 then
set udg_Stat_Mdef1[cv] = udg_Stat_Mdef1[cv] + refv * x
set udg_Stat_Mdef2[cv] = udg_Stat_Mdef2[cv] + refv * x
set udg_Stat_Mdef3[cv] = udg_Stat_Mdef3[cv] + refv * x
set udg_Stat_Mdef4[cv] = udg_Stat_Mdef4[cv] + refv * x
set udg_Stat_Mdef5[cv] = udg_Stat_Mdef5[cv] + refv * x
elseif sl == 8 then
set udg_Stat_Pdef[cv] = udg_Stat_Pdef[cv] + refv * x
elseif sl == 9 then
set udg_Stat_AttackLv[cv] = udg_Stat_AttackLv[cv] + refv * x
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + refv * x
elseif sl == 5 then
set udg_Stat_Pdef[cv] = udg_Stat_Pdef[cv] + refv * x
elseif sl == 1 or sl == 2 or sl == 4 then
set hp = hp + refv * x
endif
endif
endif
endif
set udg_Stat_SpellPower[cv] = udg_Stat_SpellPower[cv] + (LoadInteger(udg_CItem_Table, id, 53) + LoadInteger(udg_CItem_Table, id, 63)) * x
set udg_Stat_AttackLv[cv] = udg_Stat_AttackLv[cv] + (LoadInteger(udg_CItem_Table, id, 50) + LoadInteger(udg_CItem_Table, id, 69)) * x
set udg_Stat_AttackSpeed[cv] = udg_Stat_AttackSpeed[cv] + LoadInteger(udg_CItem_Table, id, 47) * x
set udg_Stat_Reflect[cv] = udg_Stat_Reflect[cv] + LoadInteger(udg_CItem_Table, id, 48) * x
set udg_Stat_BlockDmg[cv] = udg_Stat_BlockDmg[cv] + LoadInteger(udg_CItem_Table, id, 43) * x
set udg_Stat_Crit[cv] = udg_Stat_Crit[cv] + (LoadInteger(udg_CItem_Table, id, 54) + LoadInteger(udg_CItem_Table, id, 66)) * x
set udg_Stat_Dmg[cv] = udg_Stat_Dmg[cv] + (LoadInteger(udg_CItem_Table, id, 52) + LoadInteger(udg_CItem_Table, id, 62)) * x
set udg_Stat_CritDmg[cv] = udg_Stat_CritDmg[cv] + LoadInteger(udg_CItem_Table, id, 55) * x
set udg_Stat_Acc[cv] = udg_Stat_Acc[cv] + (LoadInteger(udg_CItem_Table, id, 42) + LoadInteger(udg_CItem_Table, id, 73)) * x
set udg_Stat_Eva[cv] = udg_Stat_Eva[cv] + (LoadInteger(udg_CItem_Table, id, 42) + LoadInteger(udg_CItem_Table, id, 74)) * x
set udg_Stat_DefLv[cv] = udg_Stat_DefLv[cv] + (LoadInteger(udg_CItem_Table, id, 51) + LoadInteger(udg_CItem_Table, id, 70)) * x
set udg_Stat_HpRegen[cv] = udg_Stat_HpRegen[cv] + LoadInteger(udg_CItem_Table, id, 27) * x
set udg_Stat_LifeSteal[cv] = udg_Stat_LifeSteal[cv] + LoadInteger(udg_CItem_Table, id, 28) * x
set udg_Stat_Pdef[cv] = udg_Stat_Pdef[cv] + (LoadInteger(udg_CItem_Table, id, 34) + LoadInteger(udg_CItem_Table, id, 75)) * x
//here we need add 5 elemental def, hp per kill, mp per kill, drop chance, 5 elemental dmg
set udg_Stat_Mdef1[cv] = udg_Stat_Mdef1[cv] + (LoadInteger(udg_CItem_Table, id, 35) + LoadInteger(udg_CItem_Table, id, 76)) * x
set udg_Stat_Mdef2[cv] = udg_Stat_Mdef2[cv] + (LoadInteger(udg_CItem_Table, id, 36) + LoadInteger(udg_CItem_Table, id, 77)) * x
set udg_Stat_Mdef3[cv] = udg_Stat_Mdef3[cv] + (LoadInteger(udg_CItem_Table, id, 37) + LoadInteger(udg_CItem_Table, id, 78)) * x
set udg_Stat_Mdef4[cv] = udg_Stat_Mdef4[cv] + (LoadInteger(udg_CItem_Table, id, 38) + LoadInteger(udg_CItem_Table, id, 79)) * x
set udg_Stat_Mdef5[cv] = udg_Stat_Mdef5[cv] + (LoadInteger(udg_CItem_Table, id, 39) + LoadInteger(udg_CItem_Table, id, 80)) * x
set udg_Stat_ManaSteal[cv] = udg_Stat_ManaSteal[cv] + LoadInteger(udg_CItem_Table, id, 32) * x
set udg_Stat_MovSpeed[cv] = udg_Stat_MovSpeed[cv] + LoadInteger(udg_CItem_Table, id, 40) * x
set udg_Stat_MpRegen[cv] = udg_Stat_MpRegen[cv] + LoadInteger(udg_CItem_Table, id, 31) * x
set udg_Stat_Exp[cv] = udg_Stat_Exp[cv] + LoadInteger(udg_CItem_Table, id, 22) * x
set udg_Stat_Drop_Bonus[cv] = udg_Stat_Drop_Bonus[cv] + LoadInteger(udg_CItem_Table, id, 23) * x
set udg_Stat_Gold_Bonus[cv] = udg_Stat_Gold_Bonus[cv] + LoadInteger(udg_CItem_Table, id, 24) * x
set udg_Global_Acc[cv] = udg_Global_Acc[cv] + (LoadInteger(udg_CItem_Table, id, 41) + LoadInteger(udg_CItem_Table, id, 73)) * x
//set udg_Global_MattackAddon[cv] = udg_Global_MattackAddon[cv] + LoadInteger(udg_Item_Table, id, 18) * x
set udg_Global_Hp4Kill[cv] = udg_Global_Hp4Kill[cv] + LoadInteger(udg_CItem_Table, id, 29) * x
set udg_Global_Mp4Kill[cv] = udg_Global_Mp4Kill[cv] + LoadInteger(udg_CItem_Table, id, 33) * x
set udg_Global_ArmorBreak[cv] = udg_Global_ArmorBreak[cv] + LoadInteger(udg_CItem_Table, id, 49) * x
set udg_Global_MDmg1[cv] = udg_Global_MDmg1[cv] + LoadInteger(udg_CItem_Table, id, 57) * x
set udg_Global_MDmg2[cv] = udg_Global_MDmg2[cv] + LoadInteger(udg_CItem_Table, id, 58) * x
set udg_Global_MDmg3[cv] = udg_Global_MDmg3[cv] + LoadInteger(udg_CItem_Table, id, 59) * x
set udg_Global_MDmg4[cv] = udg_Global_MDmg4[cv] + LoadInteger(udg_CItem_Table, id, 60) * x
set udg_Global_MDmg5[cv] = udg_Global_MDmg5[cv] + LoadInteger(udg_CItem_Table, id, 61) * x
set hp = hp + (LoadInteger(udg_CItem_Table, id, 26) + LoadInteger(udg_CItem_Table, id, 64)) * x
set mp = mp + (LoadInteger(udg_CItem_Table, id, 30) + LoadInteger(udg_CItem_Table, id, 65)) * x
call SetHeroStr(u, GetHeroStr(u, true) + LoadInteger(udg_CItem_Table, id, 44) * x , true)
call SetHeroAgi(u, GetHeroAgi(u, true) + LoadInteger(udg_CItem_Table, id, 45) * x , true)
call SetHeroInt(u, GetHeroInt(u, true) + LoadInteger(udg_CItem_Table, id, 46) * x , true)
set udg_Global_Discount[cv] = udg_Global_Discount[cv] + LoadInteger(udg_CItem_Table, id, 81) * x
call AddHPMP(true, hp, u)
call AddHPMP(false, mp, u)
if GetHeroStr(u, true) > GetHeroAgi(u, true) then
set udg_Total_Dmg[cv] = udg_Stat_Dmg[cv] + udg_Stat_Dmg[cv] * (GetHeroStr(u, true) / 400)
else
set udg_Total_Dmg[cv] = udg_Stat_Dmg[cv] + udg_Stat_Dmg[cv] * (GetHeroAgi(u, true) / 400)
endif
call AddDMG(false, cv, (udg_Stat_AttackSpeed[cv] + (GetHeroAgi(u, true) / 2)))
call AddDMG(true, cv, udg_Total_Dmg[cv])
call StatRefresh(cv)
if udg_Camera_Lock[pl] == 1 then
call ShowStat(pl)
endif
endfunction
function EquipItem takes integer cv, integer slot, boolean equip returns nothing
local item itm = LoadItemHandle(udg_Stat_Table, cv, slot)
local integer ilv = LoadInteger(udg_Stat_Table, cv, - slot )
if ilv > 0 then
if ilv != 111 then
call DummyVillagerAttachmentRefresh()
endif
call EquipAItem(cv, itm, equip)
endif
set itm = null
endfunction
function ForcedUnequip takes integer cv, integer slot returns nothing
local integer i = 100
local integer Quit = 0
local integer a = 0
local integer ilv = LoadInteger(udg_Stat_Table, cv, - slot)
local integer id
local integer dur = 1
local unit u = udg_UDexUnits[cv]
local integer pl = GetPlayerId(GetOwningPlayer(u)) + 1
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local item itm
if ilv > 0 then
set itm = LoadItemHandle(udg_Stat_Table, cv, slot)
set id = GetHandleId(itm)
call EquipItem(pl, slot, false)
call SetAttackAnimation (cv)
call RemoveAttachment (cv, 3)
call ClearSlot (cv, slot)
call AddAttachment (cv, 3)
set udg_Stop_Stack[cv] = true
set i = 100
loop
exitwhen i == 206 or Quit == 1
if i < 200 then
if LoadInteger(udg_Stat_Table, cv, - i) == 0 then
call SaveInteger(udg_Stat_Table, cv, - i, ilv)
call SaveItemHandle(udg_Stat_Table, cv, i, itm)
set Quit = 1
endif
else
if UnitItemInSlot(u, i - 200) == null then
call AddItem2Slot (cv, itm, i - 200)
set Quit = 1
endif
endif
if i==119 then
set i = 199
endif
set i = i + 1
endloop
if Quit == 0 then
call SetItemVisible(itm, true)
call SetItemPosition(itm, x, y)
endif
endif
set udg_Stop_Stack[cv] = false
set itm = null
set u = null
endfunction
//-------------------------------------------------------------------------
// DROP FUNCTIONS
//-------------------------------------------------------------------------
function SetUnitDrop takes integer utype, real C1, real LvDrop, integer DSId, real C2 returns nothing
local integer a1 = R2I(C1 / 100)
local integer a2 = R2I(C2 / 100)
local integer aLvD = R2I(LvDrop / 100)
set C1 = C1 - a1 * 100
set C2 = C2 - a2 * 100
set LvDrop = LvDrop - aLvD * 100
call SaveInteger(udg_Drop_Table, utype, 701, a1) // default drop amount
call SaveInteger(udg_Drop_Table, utype, 702, a2) // shared drop amount
call SaveInteger(udg_Drop_Table, utype, 710, DSId) // shared drop id
call SaveInteger(udg_Drop_Table, utype, 703, aLvD) // general level drop amount
call SaveReal(udg_Drop_Table, utype, 711, C1) // default drop chance
call SaveReal(udg_Drop_Table, utype, 712, C2) // shared drop chance
call SaveReal(udg_Drop_Table, utype, 713, LvDrop) // general level drop chance
endfunction
function AddLevelDrop takes integer lv, integer itype, real chance returns nothing
local integer i = 0
local integer a = 1
local integer Index
if lv < 0 then
set lv = - lv
endif
set Index = LoadInteger(udg_Drop_Table, - lv, 0) // saved item count in level category
if chance > 0 then
loop
exitwhen i > Index or a == - 1
set a = LoadInteger(udg_Drop_Table, - lv, i)
if a == itype then
call SaveReal(udg_Drop_Table, - lv, - Index, chance)
set a = - 1
endif
set i = i + 1
endloop
endif
if Index < 512 then
if a != - 1 then
//increase the index
call SaveInteger(udg_Drop_Table, - lv, 0, Index + 1)
// save the itemtypeid and chance
call SaveInteger(udg_Drop_Table, - lv, Index + 1, itype)
call SaveReal(udg_Drop_Table, - lv, - Index - 1, chance)
endif
endif
endfunction
function AddUnitDrop takes integer utype, integer itype, real chance returns nothing
local integer Index = LoadInteger(udg_Drop_Table, utype, 0) // saved item count
local integer i = 1
local integer a = 1
//we check if the item already exist on list or no
//if yes then we just upgrade the drop chance
if chance > 0 then
loop
exitwhen i > Index or a == - 1
set a = LoadInteger(udg_Drop_Table, utype, i)
if a == itype then
call SaveReal(udg_Drop_Table, utype, - Index, chance)
set a = - 1
endif
set i = i + 1
endloop
//if we dont got the item in drop list then we add it
if Index < 512 then
if a != - 1 then
//increase the index
call SaveInteger(udg_Drop_Table, utype, 0, Index + 1)
// save the itemtypeid and chance
call SaveInteger(udg_Drop_Table, utype, Index + 1, itype)
call SaveReal(udg_Drop_Table, utype, - Index, chance)
endif
endif
endif
endfunction
function RemoveItemDropFromUnit takes integer utype, integer itype returns nothing
local integer i = 1
local integer Index = LoadInteger(udg_Drop_Table, utype, 0) // saved item count
local integer a = 1
loop
exitwhen i > Index or a == - 1
set a = LoadInteger(udg_Drop_Table, utype, i)
if a == itype then
if i != Index then
call SaveInteger(udg_Drop_Table, utype, i, LoadInteger(udg_Drop_Table, utype, Index))
call SaveReal(udg_Drop_Table, utype, - i, LoadReal(udg_Drop_Table, utype, - i))
endif
call SaveInteger(udg_Drop_Table, utype, 0, Index - 1 )
endif
set i = i + 1
endloop
endfunction
function GetDefaultDropItem takes integer utype returns integer
local integer i
local integer itemId = 0
local integer Index = LoadInteger(udg_Drop_Table, utype, 0) // saved item count
local integer rndI
local real rndC
if Index > 0 then
loop
exitwhen itemId > 0
set rndI = GetRandomInt(1, Index)
set rndC = GetRandomReal(0, 100)
if LoadReal(udg_Drop_Table, utype, - rndI) > rndC then
set itemId = LoadInteger(udg_Drop_Table, utype, rndI)
endif
endloop
endif
return itemId
endfunction
function GetLevelDropItem takes integer lv returns integer
local integer i
local integer itemId = 0
local integer Index = LoadInteger(udg_Drop_Table, - lv, 0) // saved item count
local integer rndI
local real rndC
if Index > 0 then
loop
exitwhen itemId != 0
set rndI = GetRandomInt(1, Index)
set rndC = GetRandomReal(0, 100)
if LoadReal(udg_Drop_Table, - lv, - rndI) > rndC then
set itemId = LoadInteger(udg_Drop_Table, - lv, rndI)
endif
endloop
endif
return itemId
endfunction
Last edited: