Name | Type | is_array | initial_value |
loc | location | No |
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Gnollz_left_Kopieren_Conditions takes nothing returns boolean
if ( not ( GetOwningPlayer(GetDyingUnit()) == Player(11) ) ) then
return false
endif
return true
endfunction
function Trig_Gnollz_left_Kopieren_Actions takes nothing returns nothing
local integer i = 0
if Gnollsleft == 1 then
call DestroyLeaderboard( gnollboard )
call DestroyTrigger(gg_trg_Gnollz__one_less)
loop
exitwhen i == 6
call SetUnitPositionLocFacingBJ( Hero[i], GetRectCenter(gg_rct_Forest_Start), 0.00 )
set i = i + 1
endloop
call DisableTrigger( gg_trg_Camera )
call ActivadeCircle( gg_unit_n005_0005)
call BJDebugMsg("``Cinematic and stuff, Story blablub..``")
else
set Gnollsleft = Gnollsleft - 1
call LeaderboardSetPlayerItemValueBJ( Player(PLAYER_NEUTRAL_PASSIVE),gnollboard, Gnollsleft )
endif
endfunction
//===========================================================================
function InitTrig_Gnollz__one_less takes nothing returns nothing
set gg_trg_Gnollz__one_less = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Gnollz__one_less, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_Gnollz__one_less, Condition( function Trig_Gnollz_left_Kopieren_Conditions ) )
call TriggerAddAction( gg_trg_Gnollz__one_less, function Trig_Gnollz_left_Kopieren_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_skip_kill_Actions takes nothing returns nothing
local integer i = 0
loop
exitwhen i == 6
call SetUnitPositionLocFacingBJ( Hero[i], GetRectCenter(gg_rct_Forest_Start), 0.00 )
set i = i + 1
endloop
call DisableTrigger( gg_trg_Camera )
endfunction
//===========================================================================
function InitTrig_skip_kill takes nothing returns nothing
set gg_trg_skip_kill = CreateTrigger( )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_skip_kill, Player(0) )
call TriggerAddAction( gg_trg_skip_kill, function Trig_skip_kill_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
library ItemCosts initializer init
globals
unit seller
unit buyer
real SellRate = 0.2
endglobals
function GetItemCosts takes item i returns real
local item it = UnitAddItemById(seller,GetItemTypeId(i))
local real money = GetPlayerState(Player(7), PLAYER_STATE_RESOURCE_GOLD)
call UnitDropItemTarget(seller,it,buyer)
return (GetPlayerState(Player(7), PLAYER_STATE_RESOURCE_GOLD) - money) / SellRate
endfunction
private function init takes nothing returns nothing
set seller = CreateUnit(Player(7), 'h00A',0,0,0)
set buyer = CreateUnit(Player(7), 'u007',0,0,0)
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library GlobalFunction initializer init uses Reveal
globals
item ItemTester = null
boolexpr nullfiilter
//location TestLocation = Location(0,0)
endglobals
function GetColoredPlayer takes player p returns string
return PlayerColour[GetPlayerId(p)]+GetPlayerName(p)+"|r"
endfunction
function GetItemSlot takes unit u, item i returns integer
local integer ii = 0
loop
exitwhen ii == 6
if UnitItemInSlot(u,ii) == i then
return ii
endif
set ii = ii + 1
endloop
return 6
endfunction
function GetCritChance takes unit u returns real
local player p = GetOwningPlayer(u)
local integer id = GetPlayerId(p)
local real crit = CritChance[id]
if id == 11 then
return LoadReal(ht,GetUnitTypeId(u),1)
endif
//Revealed Weaknesses Bonus
if GetUnitAbilityLevel(u,RWBuff) == 1 and GetUnitAbilityLevel(u,RD) == 0 then
set crit = crit + RWCritCHanceBonus(RWlevel)
elseif GetUnitAbilityLevel(u,RD) != 0 then
set crit = crit + RWCritCHanceBonusHero(RWlevel)
endif
return crit
endfunction
function TestLocationPath takes real x, real y returns boolean
//local boolean ret = false
call SetItemPosition(ItemTester,x,y)
return GetItemX(ItemTester) == x and GetItemY(ItemTester) == y
endfunction
function GetUnitDistance takes unit a, unit b returns real
//Distance between 2 units
return SquareRoot((GetUnitX(a) - GetUnitX(b)) * (GetUnitX(a) - GetUnitX(b)) + (GetUnitY(a) - GetUnitY(b)) * (GetUnitY(a) - GetUnitY(b)))
endfunction
function GetUnitsAngle takes unit a, unit b returns real
//angle between units, from a to b
return Atan2(GetUnitY(b) - GetUnitY(a), GetUnitX(b) - GetUnitX(a))
endfunction
function NullFilter takes nothing returns boolean
return true
endfunction
function CreateDrop takes integer it, unit u returns nothing
call CreateItem(it, GetUnitX(u), GetUnitY(u))
endfunction
function GetCrit takes player p returns real
local integer id = GetPlayerId(p)
local real crit = CritChance[id]
local unit b = Hero[id]
if GetUnitAbilityLevel(b,RWBuff) == 1 and GetUnitAbilityLevel(b,RD) == 0 then
set crit = crit + RWCritCHanceBonus(RWlevel)
elseif GetUnitAbilityLevel(b,RD) != 0 then
set crit = crit + RWCritCHanceBonusHero(RWlevel)
endif
return crit
endfunction
private function init takes nothing returns nothing
set ItemTester = CreateItem('I00L',-10500.0,-18000)
set nullfilter = Filter(function NullFilter)
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library MissileSystem uses GlobalFunction
globals
private timer t = CreateTimer()
private real TimerPeriod = 0.035
endglobals
private function Callback takes nothing returns nothing
local integer i = 0
local MS d
//looping through each Projectile to move it
loop
exitwhen i >= MS.Index
set d = MS.Data[i]
if GetUnitDistance(d.dummy,d.target) <= d.hitrange then
//Here is defined if aa Projectile hits its target
if d.dmg > 0 then
call SpellDamageTarget(d.target,d.ca,d.dmg)
elseif d.dmg < 0 then
if GetUnitTypeId(d.dummy) == 'h007' then
call HealTarget(d.target,d.target,-1*d.dmg)
else
call HealTarget(d.ca,d.target,-1*d.dmg)
endif
endif
call KillUnit(d.dummy)
set d.dummy = null
set d.ca = null
set d.target = null
call MS.destroy(d)
set MS.Index = MS.Index - 1
set MS.Data[i] = MS.Data[MS.Index]
else
call d.move()
set i = i + 1
endif
endloop
if MS.Index > 0 then
call TimerStart(t, TimerPeriod, false, function Callback)
endif
endfunction
struct MS //Projectile
static integer Index = 0
static MS array Data
unit target //Missile dummy
unit ca //"Caster" , means its the attacking summon
real speed
real dmg //dmage stored
real mana
unit dummy
real startz
real hitrange
real hitheight
real maxd
static method create takes unit ca, unit ta, real damage, real mana, real speed, integer dummy,real offsetX, real offsetY ,real startZ, real hitz, real hitrange returns MS
local MS data = MS.allocate()
local real a = GetUnitsAngle(ca,ta)
local real x = GetUnitX(ca) + 10 //+ (Cos(a) * offsetY) + (Sin(a) *offsetX)
local real y = GetUnitY(ca) // + (Cos(a) * offsetX) + (Sin(a) * offsetY)
set MS.Data[MS.Index] = data
set data.dummy = CreateUnit(GetOwningPlayer(ca),dummy,x,y,a)
call UnitAddAbility(data.dummy, 'Amrf' )
call UnitRemoveAbility(data.dummy, 'Amrf' )
call SetUnitFlyHeight(data.dummy,startZ,0)
set data.maxd = GetUnitDistance(ta,ca)
set data.ca = ca
set data.target = ta
set data.dmg = damage
set data.mana = mana
set data.speed = speed
set data.hitrange = hitrange
set data.hitheight = hitz
set data.startz = startZ
if MS.Index == 0 then
call TimerStart(t, TimerPeriod,false, function Callback)
endif
set MS.Index = MS.Index + 1
return data
endmethod
method move takes nothing returns nothing
local real a = GetUnitsAngle(this.dummy,this.target)
local real d = (this.speed+GetUnitDistance(this.target,this.dummy))/this.maxd
call SetUnitX(this.dummy,GetUnitX(this.dummy)+this.speed*Cos(a))
call SetUnitY(this.dummy,GetUnitY(this.dummy)+this.speed*Sin(a))
call SetUnitFlyHeight(this.dummy,this.startz + (GetUnitFlyHeight(this.target) - this.startz + this.hitheight) * (1-d) ,0)
call SetUnitFlyHeight(this.dummy,this.startz + (GetUnitFlyHeight(this.target) - this.startz + this.hitheight) * (1-d) ,0)
endmethod
endstruct
endlibrary
//TESH.scrollpos=62
//TESH.alwaysfold=0
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Spawn System
// created by JonNny
//
//
// ° Mapmaking since 2006...
// °
// °
// °
// °°°ÛÜ
// °°X°ÛÛÛ ÛÛÛÛÛÛÛÛ ÿÜÛÛÛÛÛÛÛÛÜ
// °°XX° ÛÛÛ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛß ßÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXX°° ÛÛÛÛÛÛÜ ÛÛÛÜ ÛÛÛÛÛ ßÛÛÛÛÛ ßÛÛÛÛ ÛÛÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÜ
// ÛÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÜÛÛÛÛÛÛ
// °°XXXXX° ÛÛÛÛ ÛÛÛÜ ÛÛÛÛÛ ÛÛÛÛÛÛÜ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXXXX °° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛ °°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°° ÛÛÛÛÛÛÛÛÛÛÛÛÛß
// ° XXXXX °°ÛÛÛÛÛ°°°°ÛÛÛÛÛÛÛÛ°°XX ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ XXX°°ÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛ
// °° XXXXX ÜÛÛÛÛÛÛ X ÛÛÛÛÛÛÛÛÛ XXX ÛÛÛÛÛÛÛÛÛÛÛ XXXXXX ÛÛÛÛÛÛÛ° ÛÛÛ
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°° °°°°
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°X°°
// °°° XXXXXXXXXX °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° XXXXXXXXXXXXXXXXX°°
// °°°°°°°°°°°°°°°° °°°°°°°° XXXXXXX °°°
// °°°°°° XX °°
// ...2009 and still moving on. °°°°°°°
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// AddSpawnToHut takes unit hut, player Owner, integer Spawn, real Facing, real EnemyRange, real SpawnInterval, integer MaxUnits, real CountRange, string SpawnEffect
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
library SL initializer init requires DamageSystem
globals
private constant real TimerPeriod = 0.25
// The Interval all checks and spawns are executed
// Its also the min. Step of Spawn Intervals
endglobals
function AddSpawnToHut takes unit hut, player Owner, integer Spawn, real Facing, real EnemyRange, real SpawnInterval, integer MaxUnits, real CountRange, string SpawnEffect, integer puffer, integer drops returns nothing
// This is the main Function of this system to be used
// It initializes the spawn of the hut
// Fo detailed information what each variable stands for look in the struct
call SL.create(hut,Owner,Spawn,Facing,EnemyRange,SpawnInterval,MaxUnits,CountRange,SpawnEffect,puffer,drops)
endfunction
/////////////////////////////////////////////System Script////////////////////////////////////////
globals
// Systems Variables
private timer t = CreateTimer()
private group g = CreateGroup()
private boolexpr ufilter = null
endglobals
private function UnitFilter takes nothing returns boolean
// Any Units counted in range of the hut (enemy/Spawns) have to match this condition
return (GetWidgetLife(GetFilterUnit()) > 0.405)
endfunction
private function CountUnitsInRangeOfType takes unit hut, real Range, integer UnitType, boolean Enemy returns integer
// This functions counts all units in range
// If the boolean Enemys == false it counts all units of the unittype in range
// If the boolean Enemys == true it counts every Enemy unit in range
local integer i = 0
local unit u
call GroupEnumUnitsInRange(g, GetUnitX(hut), GetUnitY(hut),Range, ufilter)
loop
set u = FirstOfGroup(g)
exitwhen u == null
call GroupRemoveUnit(g,u)
//Condition for counting, set up as described above
if (GetUnitTypeId(u) == UnitType and GetOwningPlayer(u) == GetOwningPlayer(hut) and Enemy == false ) or ( IsPlayerEnemy(GetOwningPlayer(u),GetOwningPlayer(hut)) == true and Enemy == true ) then
set i = i + 1
endif
endloop
set u = null
return i
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
local unit u
local SL d
loop
//Looping through all structs
exitwhen i >= SL.Index
set d = SL.Data[i]
//Sure the hut or unit where all spawns are created shouldnt be dead
if GetWidgetLife(d.hut) >= 0.405 then
set d.Counter = d.Counter + TimerPeriod
//Checks if enemys are near to spawn and if the max. amount of spawns isn reached
if CountUnitsInRangeOfType(d.hut,d.CountRange, d.SpawnType,false) < d.MaxUnits and CountUnitsInRangeOfType(d.hut,d.EnemyRange, d.SpawnType,true) != 0 then
if d.spawns >= 0 and (d.Counter >= d.SpawnInterval or ((CountUnitsInRangeOfType(d.hut,d.CountRange, d.SpawnType,false) < (d.MaxUnits/3) and d.Counter >= (d.SpawnInterval/5)) and d.puffer > 0)) then
set d.Counter = 0//d.Counter - d.SpawnInterval
//Spawning the unit
set u = CreateUnit(d.Owner,d.SpawnType,GetUnitX(d.hut)+GetRandomReal(0,100)*Sin(GetRandomReal(0,2*bj_PI)),GetUnitY(d.hut)+GetRandomReal(0,100)*Cos(GetRandomReal(0,2*bj_PI)),d.Facing)
set d.puffer = d.puffer - 1
if d.drop > 0 then
call SaveBoolean(ht,GetHandleId(u),27,true)
else
call SaveBoolean(ht,GetHandleId(u),27,false)
endif
set d.spawns = d.spawns - 1
set d.drop = d.drop - 1
call AddUnitToDamage(u)
call DestroyEffect(AddSpecialEffect(d.SpawnEffect,GetUnitX(u),GetUnitY(u)))
endif
else
// Even if no enemys are near or the max amout of units is reached the hut "prepares" to spawn
// that if the conditions above are true and a unit should be spawned it is spaned directly
// because i think it useless if you get near a hut in range and then after the spawn interval the first unit spawns
if d.Counter >= d.SpawnInterval then
set d.Counter = d.SpawnInterval - TimerPeriod
endif
endif
set i = i + 1
else
// Hut is destroeyed, struct gets removed
set d.hut = null
set d.Owner = null
call SL.destroy(d)
set SL.Index = SL.Index - 1
set SL.Data[i] = SL.Data[SL.Index]
endif
endloop
if SL.Index == 0 then
call PauseTimer(t)
endif
set u = null
endfunction
struct SL
static integer Index = 0
static SL array Data
unit hut // Main building or unit where all spawns are created
player Owner // The owner of the Spawns (should be the owner of the Hut)
integer SpawnType // The units which Spawn
real Facing // Units Facing when spawning
real EnemyRange // Units do only Spawn if an enemy is in this range
real SpawnInterval // IThe interval in which units Spawn if enemys are near
integer MaxUnits // Maximum units spawned at the same time
real CountRange // Max. Amount of units near the hut is counted in this range
string SpawnEffect // Special Effect created when a unit Spawns
integer puffer
integer drop
integer spawns
real Counter // Current Counter of the Spawn
static method create takes unit hut, player Owner, integer Spawn, real Facing, real EnemyRange, real SpawnInterval, integer MaxUnits, real CountRange, string SpawnEffect, integer puffer, integer drop returns SL
local SL d = SL.allocate()
// Setting all Variables
set d.hut = hut
set d.Owner = Owner
set d.SpawnType = Spawn
set d.EnemyRange = EnemyRange
set d.SpawnInterval = SpawnInterval
set d.MaxUnits = MaxUnits
set d.CountRange = CountRange
set d.SpawnEffect = SpawnEffect
set d.Facing = d.Facing
set d.Counter = SpawnInterval - TimerPeriod
set d.puffer = puffer
set d.drop = drop
set d.spawns = 2 * drop
set SL.Data[SL.Index] = d
//Starting the timer if it isnt already
if d.Index == 0 then
call TimerStart(t, TimerPeriod, true, function Callback)
endif
set d.Index = d.Index + 1
return d
endmethod
endstruct
private function init takes nothing returns nothing
//Setting up the unit filter
set ufilter = Filter(function UnitFilter)
endfunction
endlibrary
//TESH.scrollpos=15
//TESH.alwaysfold=0
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Lightning System
// created by JonNny
//
//
// ° Mapmaking since 2006...
// °
// °
// °
// °°°ÛÜ
// °°X°ÛÛÛ ÛÛÛÛÛÛÛÛ ÿÜÛÛÛÛÛÛÛÛÜ
// °°XX° ÛÛÛ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛß ßÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXX°° ÛÛÛÛÛÛÜ ÛÛÛÜ ÛÛÛÛÛ ßÛÛÛÛÛ ßÛÛÛÛ ÛÛÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÜ
// ÛÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÜÛÛÛÛÛÛ
// °°XXXXX° ÛÛÛÛ ÛÛÛÜ ÛÛÛÛÛ ÛÛÛÛÛÛÜ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXXXX °° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛ °°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°° ÛÛÛÛÛÛÛÛÛÛÛÛÛß
// ° XXXXX °°ÛÛÛÛÛ°°°°ÛÛÛÛÛÛÛÛ°°XX ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ XXX°°ÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛ
// °° XXXXX ÜÛÛÛÛÛÛ X ÛÛÛÛÛÛÛÛÛ XXX ÛÛÛÛÛÛÛÛÛÛÛ XXXXXX ÛÛÛÛÛÛÛ° ÛÛÛ
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°° °°°°
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°X°°
// °°° XXXXXXXXXX °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° XXXXXXXXXXXXXXXXX°°
// °°°°°°°°°°°°°°°° °°°°°°°° XXXXXXX °°°
// °°°°°° XX °°
// ...2009 and still moving on. °°°°°°°
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// struct Li
// method create takes string Lightning,real speed, unit c, unit ta
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
scope Lightning
globals
private real TimerPeriod = 0.05
private timer t = CreateTimer()
endglobals
private function Callback takes nothing returns nothing
local integer i = 0
loop
//Looping through all structs
exitwhen i >= Li.Index
if Li.Data[i].li == null then
set Li.Data[i].ta = null
set Li.Data[i].h = null
call Li.destroy(Li.Data[i])
set Li.Index = Li.Index - 1
set Li.Data[i] = Li.Data[Li.Index]
else
call Li.Data[i].looping()
set i = i + 1
endif
endloop
if Li.Index > 0 then
call TimerStart(t, TimerPeriod, false, function Callback)
endif
endfunction
struct Li // The lightning
static integer Index = 0
static Li array Data
lightning li
boolean inde = true //increase / decrease the lightnings alpha
unit h //hero
unit ta //Target
real alpha = 0.00 //Current alpha
real Speed
static method create takes string Lightning,real speed, unit c, unit ta returns Li
//Creating the lightning
local Li data = Li.allocate()
local real a = 0.00
set data.ta = ta
set data.Speed = speed
set data.h = c
set data.li = AddLightning(Lightning, true , GetUnitX(ta), GetUnitY(ta), GetUnitX(c), GetUnitY(c))
call SetLightningColor(data.li,1.00,1.00,1.00,0.00)
//In case you dont want to create the lightning at full alpha thange the colour from 1.00 to any other below
set Li.Data[Li.Index] = data
if data.Index == 0 then
call TimerStart(t, TimerPeriod, false, function Callback)
endif
set data.Index = data.Index + 1
return data
endmethod
method looping takes nothing returns nothing
//looplooploop changes the lightnings alpha
if this.li != null then
if this.alpha >= 1.0 and this.inde == true then
//Lightning reached its max visibility and its "fade" is declared
set this.inde = false
set this.alpha = 1.0
elseif this.alpha <= 1.0 and this.inde == true then
//Increase its visibility
set this.alpha = this.alpha + this.Speed
if this.alpha >= 1.00 then
set this.alpha = 1.00
endif
elseif this.alpha >= 0.0 and this.inde == false then
//Decrease its visibility
set this.alpha = this.alpha - this.Speed
endif
call SetLightningColor(this.li,1,1,1,this.alpha)
call MoveLightning(this.li,true, GetUnitX(this.ta), GetUnitY(this.ta), GetUnitX(this.h), GetUnitY(this.h))
if this.alpha <= 0.0 and this.inde == false then
call DestroyLightning(this.li)
set this.li = null
endif
endif
endmethod
endstruct
endscope
//TESH.scrollpos=45
//TESH.alwaysfold=0
////////////////////////////////////////////////////////////////////////////////
// struct Eff
// method AddEffect takes string e, real dur, real x, real y
// method AddEffectTarget takes string e, real dur, unit target, string attach
///////////////////////////////////////////////////////////////////////////////
scope Effect
globals
private real TimerPeriod = 0.1
private timer t = CreateTimer()
endglobals
private function Callback takes nothing returns nothing
local integer i = 0
loop
//Looping through all structs
exitwhen i >= Eff.Index
if Eff.Data[i].left <= 0.00 then
call DestroyEffect(Eff.Data[i].e)
set Eff.Data[i].e = null
call Eff.destroy(Eff.Data[i])
set Eff.Index = Eff.Index - 1
set Eff.Data[i] = Eff.Data[Eff.Index]
else
set Eff.Data[i].left = Eff.Data[i].left - TimerPeriod
set i = i + 1
endif
endloop
if Eff.Index > 0 then
call TimerStart(t, TimerPeriod, false, function Callback)
endif
endfunction
struct Eff // The Effect
static integer Index = 0
static Eff array Data
effect e
real left
static method AddEffect takes string e, real dur, real x, real y returns Eff
//Creating the Effect
local Eff data = Eff.allocate()
set Eff.Data[Eff.Index] = data
//setup
set data.e = AddSpecialEffect(e,x,y)
set data.left = dur
//Starting Timer
if data.Index == 0 then
call TimerStart(t, TimerPeriod, false, function Callback)
endif
set data.Index = data.Index + 1
return data
endmethod
static method AddEffectTarget takes string e, real dur, unit target, string attach returns Eff
//Creating the Effect
local Eff data = Eff.allocate()
set Eff.Data[Eff.Index] = data
//setup
set data.e = AddSpecialEffectTarget(e,target,attach)
set data.left = dur
//Starting Timer
if data.Index == 0 then
call TimerStart(t, TimerPeriod, false, function Callback)
endif
set data.Index = data.Index + 1
return data
endmethod
endstruct
endscope
//TESH.scrollpos=111
//TESH.alwaysfold=0
///////////////////////////////////////////////////////////////////////////////////////////////////////
library Display //requires GeneralFunctions
function GetRoundedInteger takes real r returns integer
local real x = r - R2I(r)
if x >= 0.50 then
return R2I(r) + 1
endif
return R2I(r)
endfunction
function DisplayDamage takes real damage, unit u, unit dealer, string color, string prefix returns nothing
//Displays any damage
local texttag tt = null
local player p = GetLocalPlayer()
local integer id = GetPlayerId(p)
if R2I(damage) != 0 then // does not display any "0" damage
set tt = CreateTextTag()
call SetTextTagText(tt, color + prefix + I2S(GetRoundedInteger(damage))+"|r", 0.023)
//The color is set here
//Any other things you may want to modify or not
call SetTextTagPos(tt, GetUnitX(u)-25, GetUnitY(u)+60, GetUnitFlyHeight(u))
call SetTextTagColor(tt,255,255,255,255)
call SetTextTagFadepoint(tt,3.00)
call SetTextTagPermanent(tt,false)
call SetTextTagVelocity(tt, GetRandomReal(-0.005,0.005), 0.0455)
call SetTextTagLifespan(tt, 4.00)
if (ShowAllTexts[id] == true) or ((p == GetOwningPlayer(u) or p == GetOwningPlayer(dealer)) and ShowOwnTexts[id] == true) then
call SetTextTagVisibility(tt, true)
else
call SetTextTagVisibility(tt, false)
endif
set tt = null
set p = null
endif
endfunction
function DisplayAnything takes unit u, string txt returns nothing
//Displays any damage
local texttag tt = null
local player p = GetLocalPlayer()
local integer id = GetPlayerId(p)
set tt = CreateTextTag()
call SetTextTagText(tt, txt, 0.023)
call SetTextTagPos(tt, GetUnitX(u)-25, GetUnitY(u)+60, GetUnitFlyHeight(u))
call SetTextTagColor(tt,255,255,255,255)
call SetTextTagFadepoint(tt,3.00)
call SetTextTagPermanent(tt,false)
call SetTextTagVelocity(tt, GetRandomReal(-0.005,0.005), 0.0455)
call SetTextTagLifespan(tt, 4.00)
if (ShowAllTexts[id] == true) or ((p == GetOwningPlayer(u) or p == GetOwningPlayer(u)) and ShowOwnTexts[id] == true) then
call SetTextTagVisibility(tt, true)
else
call SetTextTagVisibility(tt, false)
endif
set tt = null
set p = null
endfunction
function DisplayBounty takes unit u, integer amount, player p returns nothing
//Displays bounty
local texttag tt = null
local player pp = GetLocalPlayer()
local integer id = GetPlayerId(p)
if amount == 0 or pp != p then
return
endif
set tt = CreateTextTag()
call SetTextTagText(tt,"|c00fed15d+" + I2S(amount)+ " Gold", 0.023)
call SetTextTagPos(tt, GetUnitX(u)-25, GetUnitY(u)+60, GetUnitFlyHeight(u))
call SetTextTagColor(tt,255,255,255,255)
call SetTextTagFadepoint(tt,3.00)
call SetTextTagPermanent(tt,false)
call SetTextTagVelocity(tt, GetRandomReal(-0.005,0.005), 0.0455)
call SetTextTagLifespan(tt, 4.00)
if pp == p and ShowBounty[id] == true then
call SetTextTagVisibility(tt, true)
else
call SetTextTagVisibility(tt, false)
endif
set tt = null
set p = null
endfunction
function DisplayShopText takes unit u, string txt, string c, real h returns nothing
//Displays any Text
local texttag tt = null
set tt = CreateTextTag()
call SetTextTagText(tt, c+txt+"|r", 0.023)
call SetTextTagPos(tt, GetUnitX(u)-25, GetUnitY(u)+60, GetUnitFlyHeight(u)+h)
call SetTextTagColor(tt,255,255,255,255)
call SetTextTagFadepoint(tt,3.50)
call SetTextTagPermanent(tt,false)
call SetTextTagVelocity(tt, GetRandomReal(-0.005,0.005), 0.0325)
call SetTextTagLifespan(tt, 4.50)
call SetTextTagVisibility(tt, true)
set tt = null
endfunction
function DisplayCritDamage takes real damage, unit u, unit dealer, string color, string prefix returns nothing
//Displays any damage
local texttag tt = null
local player p = GetLocalPlayer()
local integer id = GetPlayerId(p)
if R2I(damage) != 0 then // does not display any "0" damage
set tt = CreateTextTag()
call SetTextTagText(tt, color + prefix + I2S(GetRoundedInteger(damage))+"|r", 0.028)
//Any other things you may want to modify or not
call SetTextTagPos(tt, GetUnitX(u)-30, GetUnitY(u)+60, GetUnitFlyHeight(u))
call SetTextTagColor(tt,255,255,255,255)
call SetTextTagVisibility(tt, true)
call SetTextTagFadepoint(tt,3.00)
call SetTextTagPermanent(tt,false)
call SetTextTagVelocity(tt, GetRandomReal(-0.01,0.01), 0.0455)
call SetTextTagLifespan(tt, 4.00)
if (ShowAllTexts[id] == true) or ((p == GetOwningPlayer(u) or p == GetOwningPlayer(dealer)) and ShowOwnTexts[id] == true ) then
call SetTextTagVisibility(tt, true)
else
call SetTextTagVisibility(tt, false)
endif
call TriggerSleepAction(0.01)
call SetTextTagText(tt, color + prefix + I2S(R2I(damage))+"!|r", 0.032)
call TriggerSleepAction(0.01)
call SetTextTagText(tt, color + prefix + I2S(R2I(damage))+"!|r", 0.028)
set tt = null
set p = null
endif
endfunction
function DisplayText takes unit u, unit dealer, string color, string text returns nothing
local texttag tt = null
local player p = GetLocalPlayer()
local integer id = GetPlayerId(p)
if text != "" then // does not display any "0" damage
set tt = CreateTextTag()
call SetTextTagText(tt, color + text + "|r", 0.023)
//The color is set here
//Any other things you may want to modify or not
call SetTextTagPos(tt, GetUnitX(u)-25, GetUnitY(u)+60, GetUnitFlyHeight(u))
call SetTextTagColor(tt,255,255,255,255)
call SetTextTagFadepoint(tt,3.00)
call SetTextTagPermanent(tt,false)
call SetTextTagVelocity(tt, GetRandomReal(-0.005,0.005), 0.0455)
call SetTextTagLifespan(tt, 4.00)
if (ShowAllTexts[id] == true) or ((p == GetOwningPlayer(u) or p == GetOwningPlayer(dealer)) and ShowOwnTexts[id] == true) then
call SetTextTagVisibility(tt, true)
else
call SetTextTagVisibility(tt, false)
endif
set tt = null
set p = null
endif
endfunction
endlibrary
//TESH.scrollpos=18
//TESH.alwaysfold=0
//////////////////////////////////////////////////////////////////////////////////////////
// AddBuff takes unit target, unit caster, integer abil, string order, integer level
// DamageTarget takes unit target, unit damager, real damage, attacktype attack
// ATTACK_TYPE_MELEE = Attack
// ATTACK_TYPE_NORMAL = Spells
// SpellDamageTarget takes unit target, unit damager, real damage returns nothing
/////////////////////////////////////////////////////////////////////////////////////////
library DummySystem initializer init
globals
unit Dummy
private group g = CreateGroup()
private integer DummyUnit = 'h000'
private string HealColor = "|c0069d554"
endglobals
function AddBuff takes unit target, unit caster, integer abil, string order, integer level returns nothing
call SetUnitX(Dummy,GetUnitX(target))
call SetUnitY(Dummy,GetUnitY(target))
call SetUnitOwner(Dummy,GetOwningPlayer(caster),false)
call UnitAddAbility(Dummy,abil)
call SetUnitAbilityLevel(Dummy,abil,level)
call IssueTargetOrder( Dummy, order, target )
call UnitRemoveAbility(Dummy,abil)
endfunction
function DamageTarget takes unit target, unit damager, real damage, attacktype attack returns nothing
call SetUnitOwner(Dummy,GetOwningPlayer(damager),false)
call UnitDamageTarget(Dummy,target,damage,true,false,attack,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
endfunction
function SpellDamageTarget takes unit target, unit damager, real damage returns nothing
local player p = GetOwningPlayer(damager)
local integer id = GetPlayerId(p)
local real dmg = (damage * SpellDamageMultiPlyer[id]) + SpellDamageAddition[id]
set SPELLDMG = true
call UnitDamageTarget(damager,target,dmg,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
set p = null
endfunction
function SpellDamageAOE takes unit damager , real damage , real x, real y, real AOE , boolexpr filter returns nothing
local unit a
call GroupEnumUnitsInRange(g, x, y,AOE,filter)
loop
set a = FirstOfGroup(g)
exitwhen a == null
if IsPlayerEnemy(GetOwningPlayer(damager), GetOwningPlayer(a)) == true then
call SpellDamageTarget(a,damager,damage)
endif
call GroupRemoveUnit(g,a)
endloop
set a = null
call GroupClear(g)
endfunction
function HealTarget takes unit healer, unit healed , real healamount returns nothing
local integer id = GetPlayerId(GetOwningPlayer(healer))
local real heal = (healamount * SpellDamageMultiPlyer[id]) + SpellDamageAddition[id]
local real crit = CritChance[id]
if GetRandomReal(0,100) <= crit then
call SetWidgetLife(healed,GetWidgetLife(healed) + heal *(1+CritValue[id]/100) )
call DisplayCritDamage.execute(heal*(1+CritValue[id]/100),healed,healer,HealColor,"+")
else
call SetWidgetLife(healed,GetWidgetLife(healed) + heal)
call DisplayDamage(heal,healed,healer,HealColor,"+")
endif
endfunction
private function init takes nothing returns nothing
set Dummy = CreateUnit(Player(0),DummyUnit,0,0,0)
endfunction
endlibrary
//TESH.scrollpos=275
//TESH.alwaysfold=0
library DamageSystem initializer init requires DummySystem, Reveal, GlobalFunction
globals
trigger Dtrigger = CreateTrigger()
private string color = "|c00ff5656"
private string color2 = "|c00fefc56"
hashtable ht2 = InitHashtable()
integer PRlevel //Reverse Polarity
unit PRHero = null//Paladin
endglobals
//Great Aming
function GABonus takes unit a, unit b, real level returns real
local real range = GetUnitDistance(a,b)
local real bonus = 10 + 10 * level// 0.025 + 0.075 * level
return bonus*(range/750)
endfunction
function FACRIT takes real level returns real
return 12.5 + 7.5 * level
endfunction
function FADMG takes real level returns real
local real factor = GetRandomReal(0.5,1.0)
return factor * (20 + 20 * level)
endfunction
//Justice Chance Bonus
function JusticeBonus takes integer level returns real
return 0.03 + 0.0075*level
endfunction
//JusticeCritMultiPl
function JusticeCrit takes integer level returns real
return -30.0 + level * 30.0
endfunction
//Calculated Strike chance
function CSChargeChance takes integer level returns real
return 14.0 + 6.0 *level
endfunction
function MMDMG takes integer lvl returns real
return 0.25 + 0.05 * lvl
endfunction
function MMMANA takes integer lvl returns integer
return 2 + 2 * lvl
endfunction
//Reverse Polarity
function PRdmgprot takes integer level returns real
return 0.60-0.1*level
endfunction
function PRdmggain takes integer level returns real
return 1.0
endfunction
function PRdmgmax takes integer level returns integer
return 80+40*level
endfunction
//Giantic Strength Crit Stun
function GSStun takes integer level returns integer
return 2 + level
endfunction
private function RunCondition takes nothing returns boolean
return (GetEventDamage() >= 1) and GetEventDamageSource() != Dummy
endfunction
function AddUnitToDamage takes unit u returns nothing
call TriggerRegisterUnitEvent( Dtrigger, u, EVENT_UNIT_DAMAGED )
endfunction
function DelayedHeal takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer i = GetHandleId(t)
call SetWidgetLife(LoadUnitHandle(ht2,i,1),GetWidgetLife(LoadUnitHandle(ht2,i,1))+LoadReal(ht2,i,2))
call DestroyTimer(t)
set t = null
endfunction
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local unit b = GetEventDamageSource()
local player p = GetOwningPlayer(b)
local integer id = GetPlayerId(p)
local integer id2 = GetPlayerId(GetOwningPlayer(u))
local player pp = GetOwningPlayer(u)
local real crit = GetCritChance(b)
local real damage = GetEventDamage()
local integer i = GetHandleId(b)
local string c = null
local real x = 0.00
local real r = 0.00
local timer ti = null
if GetOwningPlayer(u) == Player(11) then
set c = color
else
set c = color2
endif
//Block
if id2 != 11 and GetRandomReal(0,100) <= BlockChance[GetPlayerId(GetOwningPlayer(u))] then
call DisplayText(u,b,"|cffc3dbff","Blocked!")
set r = GetEventDamage() - (GetUnitState(GetTriggerUnit(),UNIT_STATE_MAX_LIFE)-GetWidgetLife(GetTriggerUnit()))
call SetWidgetLife(u,GetWidgetLife(u) + damage)
if r > 0 then
set ti = CreateTimer()
call SaveReal(ht2,GetHandleId(ti),2,r)
call SaveUnitHandle(ht2,GetHandleId(ti),1,GetTriggerUnit())
call TimerStart(ti,0.01,false,function DelayedHeal)
endif
return
endif
//NeutralBlock
if id2 == 11 and GetRandomReal(0,100) <= LoadReal(ht,GetUnitTypeId(u),3) then
call DisplayText(u,b,"|cffc3dbff","Blocked!")
set r = GetEventDamage() - (GetUnitState(GetTriggerUnit(),UNIT_STATE_MAX_LIFE)-GetWidgetLife(GetTriggerUnit()))
call SetWidgetLife(u,GetWidgetLife(u) + damage)
if r > 0 then
set ti = CreateTimer()
call SaveReal(ht2,GetHandleId(ti),2,r)
call SaveUnitHandle(ht2,GetHandleId(ti),1,GetTriggerUnit())
call TimerStart(ti,0.01,false,function DelayedHeal)
endif
return
endif
//Revealed Weaknesses Bonus
if GetUnitAbilityLevel(b,RWBuff) == 1 and GetUnitAbilityLevel(b,RD) == 0 then
set damage = damage * (1 + RWBonusDamage(RWlevel))
elseif GetUnitAbilityLevel(b,RD) != 0 then
set damage = damage * (1 + RWBonusDamage(RWlevel))
endif
//Great Aiming
if GetUnitAbilityLevel(b,'A02W') != 0 then
set damage = damage + GABonus(u,b,GetUnitAbilityLevel(b,'A02W'))
endif
//Gashing Strike Bonus
if GetUnitAbilityLevel(u,GashBuff) != 0 then
set damage = damage * GashMulti
endif
//DeathWish selfkill x)
if LoadBoolean(ht,i,51) == true and SPELLDMG == false then
set x = 0.025 * GetUnitState(b,UNIT_STATE_LIFE)
call DamageTarget(b,b,x+5,ATTACK_TYPE_MELEE)
call DisplayDamage(x+5,b,b,color2,"")
endif
//Magic Missiles
if GetUnitAbilityLevel(u,'B008') != 0 and GetUnitAbilityLevel(b,'A02T') != 0 and SPELLDMG == false then
set damage = damage * MMDMG(GetUnitAbilityLevel(u,'A02T'))
call SetUnitState(b, UNIT_STATE_MANA, GetUnitState(b,UNIT_STATE_MANA) + MMMANA(GetUnitAbilityLevel(b,'A02T')))
call DisplayDamage( MMMANA(GetUnitAbilityLevel(b,'A02T')),b,b,"|c005480ff","+")
endif
//Focussed Arrow
if GetUnitAbilityLevel(u,'B00A') != 0 and GetUnitAbilityLevel(b,'A02X') != 0 and SPELLDMG == false then
set damage = damage + FADMG(GetUnitAbilityLevel(b,'A02X'))
set crit = crit + FACRIT(GetUnitAbilityLevel(b,'A02X'))
endif
//Calculated Strike Increase
if GetUnitAbilityLevel(b,CS) != 0 and LoadInteger(ht,i,52) != 10 and GetRandomReal(0,100) <= CSChargeChance(GetUnitAbilityLevel(b,CS)) and SPELLDMG == false then
call SaveInteger(ht,i,52,LoadInteger(ht,i,52)+1)
endif
//Reverse Polarity
if GetUnitAbilityLevel(u,'B00D') != 0 then
set x = LoadInteger(ht,GetHandleId(PRHero),57)
set x = x + R2I(damage* (1-PRdmgprot(PRlevel)) * PRdmggain(PRlevel))
if x > PRdmgmax(PRlevel) then
set x = PRdmgmax(PRlevel)
endif
set x = x-LoadInteger(ht,GetHandleId(PRHero),57)
set BonusDMG[GetPlayerId(GetOwningPlayer(PRHero))] = BonusDMG[GetPlayerId(GetOwningPlayer(PRHero))] + x
call SaveInteger(ht,GetHandleId(PRHero),57,R2I(LoadInteger(ht,GetHandleId(PRHero),57)+x))
call AdjustDMGBonus(PRHero,BonusDMG[GetPlayerId(GetOwningPlayer(PRHero))])
set damage = damage * (PRdmgprot(PRlevel))
endif
if b == PRHero then
set x = LoadInteger(ht,GetHandleId(PRHero),57)
call SaveInteger(ht,GetHandleId(PRHero),57,0)
set BonusDMG[GetPlayerId(GetOwningPlayer(PRHero))] = BonusDMG[GetPlayerId(GetOwningPlayer(PRHero))] - x
call AdjustDMGBonus(PRHero,BonusDMG[GetPlayerId(GetOwningPlayer(PRHero))])
endif
//call BJDebugMsg("-2222222222!!!----------------------------------")
//Justice (paladin)
if GetUnitTypeId(b) == 'H00F' and GetUnitAbilityLevel(b,'A031') != 0 then
set x = LoadReal(ht,i,55 )
if GetRandomReal(0,1) < x then
call ReleaseHealWave.execute(b,GetUnitAbilityLevel(b,'A032'),false)
//set crit = 100.00
set x = 0.00
else
set x = x + JusticeBonus(GetUnitAbilityLevel(b,'A031'))
endif
call SaveReal(ht,i,55,x)
endif
//Difficulty
if id2 == 11 then
set damage = damage * DealDamageDif
elseif id == 11 then
set damage = damage * TakeDamageDif
endif
//Neutral Resistance
if id2 == 11 then
if SPELLDMG == true then
set damage = damage - (0.01*damage*LoadReal(ht,GetUnitTypeId(u),5))
else
set damage = damage - (0.01*damage*LoadReal(ht,GetUnitTypeId(u),4))
endif
endif
if LoadInteger(ht2,GetHandleId(b),1) > 0 then
call SaveInteger(ht2,GetHandleId(b),1,LoadInteger(ht2,GetHandleId(b),1)-1)
set damage = 0
endif
set DamageDealt[id] = DamageDealt[id] + damage
set DamageTaken[GetPlayerId(pp)] = DamageTaken[GetPlayerId(pp)] + damage
if damage > GetEventDamage() then
//call BJDebugMsg(R2S(damage)+ " dmg")
//call BJDebugMsg(R2S(GetEventDamage())+" should")
call DamageTarget(GetTriggerUnit(),GetEventDamageSource(),damage-GetEventDamage(),ATTACK_TYPE_MELEE)
elseif damage <= GetEventDamage() then
set r = (GetUnitState(GetTriggerUnit(),UNIT_STATE_MAX_LIFE)-GetWidgetLife(GetTriggerUnit()))
//call BJDebugMsg(R2S(r)+" diff and " + R2S(damage))
call SetWidgetLife(GetTriggerUnit(),GetWidgetLife(GetTriggerUnit())-damage+GetEventDamage())
//call BJDebugMsg("KLEINER "+R2S(damage)+" "+R2S(GetEventDamage()) + " --> " + R2S(r))
if ((GetEventDamage() - damage) - r) > 0 then //if damage > r then
//call BJDebugMsg("hit " + R2S((GetEventDamage() - damage) - r))
set ti = CreateTimer()
call SaveReal(ht2,GetHandleId(ti),2,(GetEventDamage() - damage) - r)
call SaveUnitHandle(ht2,GetHandleId(ti),1,GetTriggerUnit())
call TimerStart(ti,0.01,false,function DelayedHeal)
endif
endif
//Justice Critical Strike +++
if GetUnitTypeId(b) == 'H00F' and LoadBoolean(ht,i,56) == true then
set CritValue[id] = CritValue[id] + JusticeCrit(GetUnitAbilityLevel(b,'A031'))
set crit = 100
endif
//Critical Strike
if GetRandomReal(0,100) <= crit then
call DamageTarget(GetTriggerUnit(),GetEventDamageSource(),damage*LoadReal(ht,id,2)/100,ATTACK_TYPE_MELEE)
if id == 11 then
call DamageTarget(GetTriggerUnit(),GetEventDamageSource(),damage*LoadReal(ht,GetUnitTypeId(b),2)/100,ATTACK_TYPE_MELEE)
call DisplayCritDamage.execute(damage*((100+LoadReal(ht,GetUnitTypeId(b),2))/100),u,b,c,"")
set DamageDealt[id] = DamageDealt[id] + damage * LoadReal(ht,GetUnitTypeId(b),2)/100
set DamageTaken[GetPlayerId(pp)] = DamageTaken[GetPlayerId(pp)] + damage * LoadReal(ht,GetUnitTypeId(b),2)/100
else
call DamageTarget(GetTriggerUnit(),GetEventDamageSource(),damage*CritValue[id]/100,ATTACK_TYPE_MELEE)
call DisplayCritDamage.execute(damage*(100+CritValue[id])/100,u,b,c,"")
set DamageDealt[id] = DamageDealt[id] + damage * CritValue[id]/100
set DamageTaken[GetPlayerId(pp)] = DamageTaken[GetPlayerId(pp)] + damage * CritValue[id]/100
endif
//Giantic Strnegth
if GetUnitAbilityLevel(GetEventDamageSource(),'A00D') != 0 and SPELLDMG == false then
call AddBuff(GetTriggerUnit(),GetEventDamageSource(), 'A02F',"thunderbolt",GSStun(GetUnitAbilityLevel(GetEventDamageSource(),'A00D')))
endif
else
call DisplayDamage(damage,u,b,c,"")
endif
//Justice Critical Strike ---
if GetUnitTypeId(b) == 'H00F' and LoadBoolean(ht,i,56) == true then
set CritValue[id] = CritValue[id] - JusticeCrit(GetUnitAbilityLevel(b,'A031'))
call DestroyEffect(LoadEffectHandle(ht,i,57))
call SaveBoolean(ht,i,56,false)
endif
set SPELLDMG = false
set p = null
set u = null
set b = null
endfunction
private function init takes nothing returns nothing
call TriggerAddCondition( Dtrigger,Condition( function RunCondition ) )
call TriggerAddAction( Dtrigger, function Actions )
endfunction
endlibrary
//TESH.scrollpos=39
//TESH.alwaysfold=0
library Initialization initializer init
globals
//General variables
string array PlayerColour [8]
unit array Hero [6]
boolean SPELLDMG = false
dialog Dialog = DialogCreate()
button array DialogButton [12]
real TakeDamageDif = 1.0
real DealDamageDif = 1.0
//General Settings
real DisplayTime = 15.00
//Player Settings
boolean array ShowAllTexts [6]
boolean array ShowOwnTexts [6]
boolean array ShowBounty [6]
//Stats
real array CritChance [6]
real array CritValue [6]
real array BlockChance [6]
real array SpellDamageMultiPlyer [6]
real array SpellDamageAddition [6]
real array HPReg [6]
real array ManaReg [6]
integer array BonusHP [6]
integer array BonusMana [6]
real array BonusIAS [6]
real array BonusDMG [6]
real array BonusARM [6]
real array BonusAGI [6]
real array BonusSTR [6]
real array BonusINT [6]
//infos
real array DamageDealt [6]
real array DamageTaken [6]
endglobals
private function init takes nothing returns nothing
local integer i = 0
set PlayerColour[0] = "|c00ff5656"
set PlayerColour[1] = "|c005480ff"
set PlayerColour[2] = "|c0067eed0"
set PlayerColour[3] = "|c008c54ab"
set PlayerColour[4] = "|c00fefc56"
set PlayerColour[5] = "|c00fed15d"
set PlayerColour[6] = "|c0069d554"
set PlayerColour[7] = "|c00ed92c9"
//Light
//call SetDayNightModels("", "")
//General Loop for arrays
loop
exitwhen i == 6
set CritChance[i] = 5.00
set ShowBounty[i] = true
set CritValue[i] = 75
set ShowAllTexts[i] = true
set ShowOwnTexts[i] = true
set SpellDamageMultiPlyer[i] = 1.00
set SpellDamageAddition[i] = 0.00
set BlockChance[i] = 1.00
set NormalInventar[i] = true
set i = i + 1
endloop
call RemoveUnit(gg_unit_h001_0006)
endfunction
endlibrary
//TESH.scrollpos=22
//TESH.alwaysfold=0
scope DiffChoose initializer init
globals
private trigger t
endglobals
private function actions takes nothing returns nothing
call DialogClear( Dialog )
set bj_lastCreatedButton = DialogAddButton( Dialog, "|c0069d554Easy|r", 0 )
set DialogButton[0] = bj_lastCreatedButton
set bj_lastCreatedButton = DialogAddButton( Dialog, "|c00fed15dNormal|r", 0 )
set DialogButton[1] = bj_lastCreatedButton
set bj_lastCreatedButton = DialogAddButton( Dialog, "|c00ff5656Hard|r", 0 )
set DialogButton[2] = bj_lastCreatedButton
call DialogSetMessage( Dialog, "Difficulty" )
call DialogDisplay( Player(0), Dialog, true )
call EnableTrigger( t )
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger tt = CreateTrigger( )
call TriggerAddAction( tt, function actions )
endfunction
////////////////////////////////////////////////////////////////////////
private function Actions takes nothing returns nothing
if GetClickedButton() == DialogButton[0] then
set DealDamageDif = 1.00
set TakeDamageDif = 1.00
elseif GetClickedButton() == DialogButton[1] then
set DealDamageDif = 0.85
set TakeDamageDif = 1.20
elseif GetClickedButton() == DialogButton[2] then
set DealDamageDif = 0.70
set TakeDamageDif = 1.4
endif
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger delay = CreateTrigger()
call TriggerRegisterTimerEvent(delay, 48.00, false)
call TriggerAddAction( delay, function actions)
set t = CreateTrigger( )
call TriggerRegisterDialogEventBJ( t, Dialog )
call TriggerAddAction( t, function Actions )
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope DamageAdd initializer add
private function add takes nothing returns nothing
local group g = CreateGroup()
local unit a = null
call GroupEnumUnitsOfPlayer(g,Player(11),nullfilter)
loop
set a = FirstOfGroup(g)
exitwhen a == null
call AddUnitToDamage(a)
call SaveBoolean(ht,GetHandleId(a),27,true)
call GroupRemoveUnit(g,a)
endloop
endfunction
endscope
//TESH.scrollpos=23
//TESH.alwaysfold=0
library IR initializer SetUpItemRestrictions
function SetUpItemRestrictions takes nothing returns nothing
local integer i = 0
//Setting up the Equipable item types
//Voodoo Master
set i = 'O000'
call SaveBoolean(ht,i,101,false)//MainHand
call SaveBoolean(ht,i,102,false)//OffHand
call SaveBoolean(ht,i,103,true)//Helmet
call SaveBoolean(ht,i,104,true)//Armor
call SaveBoolean(ht,i,105,true)//Jewelery
call SaveBoolean(ht,i,106,false)//Two Handed Blade
call SaveBoolean(ht,i,107,true)//Staff
call SaveBoolean(ht,i,108,false)//Shield
call SaveBoolean(ht,i,109,true)//Bow
//Amazone
set i = 'E000'
call SaveBoolean(ht,i,101,true)//MainHand
call SaveBoolean(ht,i,102,true)//OffHand
call SaveBoolean(ht,i,103,true)//Helmet
call SaveBoolean(ht,i,104,true)//Armor
call SaveBoolean(ht,i,105,true)//Jewelery
call SaveBoolean(ht,i,106,false)//Two Handed Blade
call SaveBoolean(ht,i,107,false)//Staff
call SaveBoolean(ht,i,108,true)//Shield
call SaveBoolean(ht,i,109,false)//Bow
//Rocky
set i = 'H004'
call SaveBoolean(ht,i,101,true)//MainHand
call SaveBoolean(ht,i,102,true)//OffHand
call SaveBoolean(ht,i,103,true)//Helmet
call SaveBoolean(ht,i,104,true)//Armor
call SaveBoolean(ht,i,105,true)//Jewelery
call SaveBoolean(ht,i,106,true)//Two Handed Blade
call SaveBoolean(ht,i,107,false)//Staff
call SaveBoolean(ht,i,108,true)//Shield
call SaveBoolean(ht,i,109,false)//Bow
//Rocky untouchable
set i = 'H005'
call SaveBoolean(ht,i,101,true)//MainHand
call SaveBoolean(ht,i,102,true)//OffHand
call SaveBoolean(ht,i,103,true)//Helmet
call SaveBoolean(ht,i,104,true)//Armor
call SaveBoolean(ht,i,105,true)//Jewelery
call SaveBoolean(ht,i,106,true)//Two Handed Blade
call SaveBoolean(ht,i,107,false)//Staff
call SaveBoolean(ht,i,108,true)//Shield
call SaveBoolean(ht,i,109,false)//Bow
//Jaina
set i = 'H006'
call SaveBoolean(ht,i,101,false)//MainHand
call SaveBoolean(ht,i,102,false)//OffHand
call SaveBoolean(ht,i,103,true)//Helmet
call SaveBoolean(ht,i,104,true)//Armor
call SaveBoolean(ht,i,105,true)//Jewelery
call SaveBoolean(ht,i,106,false)//Two Handed Blade
call SaveBoolean(ht,i,107,true)//Staff
call SaveBoolean(ht,i,108,false)//Shield
call SaveBoolean(ht,i,109,false)//Bow
//Ranger
set i = 'H009'
call SaveBoolean(ht,i,101,false)//MainHand
call SaveBoolean(ht,i,102,false)//OffHand
call SaveBoolean(ht,i,103,true)//Helmet
call SaveBoolean(ht,i,104,true)//Armor
call SaveBoolean(ht,i,105,true)//Jewelery
call SaveBoolean(ht,i,106,false)//Two Handed Blade
call SaveBoolean(ht,i,107,false)//Staff
call SaveBoolean(ht,i,108,false)//Shield
call SaveBoolean(ht,i,109,true)//Bow
//Holy Knight
set i = 'H00F'
call SaveBoolean(ht,i,101,true)//MainHand
call SaveBoolean(ht,i,102,true)//OffHand
call SaveBoolean(ht,i,103,true)//Helmet
call SaveBoolean(ht,i,104,true)//Armor
call SaveBoolean(ht,i,105,true)//Jewelery
call SaveBoolean(ht,i,106,true)//Two Handed Blade
call SaveBoolean(ht,i,107,false)//Staff
call SaveBoolean(ht,i,108,true)//Shield
call SaveBoolean(ht,i,109,false)//Bow
endfunction
endlibrary
//TESH.scrollpos=13
//TESH.alwaysfold=0
library cine initializer init
globals
private real TimerPeriod = 0.75
private timer t = CreateTimer()
private real dist = 280.00
private trigger array trig [100]
private unit array Circle [100]
private integer Index = 0
constant real CSPEED = 1.0
endglobals
private function AllHeroesNear takes unit u returns boolean
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local integer i = 0
local boolean b = false
local boolean a = false
loop
exitwhen i == 6
//if GetWidgetLife(Hero[i]) <= 0.405 then
set b = true
//else
set a = true
//endif
if SquareRoot((GetUnitX(Hero[i])-x)*(GetUnitX(Hero[i])-x)+(GetUnitY(Hero[i])-y)*(GetUnitY(Hero[i])-y)) > dist and GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and GetWidgetLife(Hero[i]) >= 0.405 then
return false
endif
set i = i + 1
endloop
return (b and a)
endfunction
function AddCircleCine takes unit u, trigger tr, boolean flag returns nothing
local integer id = GetHandleId(u)
call SaveBoolean(ht,id,0,flag)
set trig[Index] = tr
set Circle[Index] = u
set Index = Index + 1
call SetUnitVertexColor(u,255,255,255,75)
if flag == false then
call ShowUnit(u,flag)
endif
endfunction
function ActivadeCircle takes unit u returns nothing
local integer id = GetHandleId(u)
call ShowUnit(u,true)
call SaveBoolean(ht,id,0,true)
endfunction
private function check takes nothing returns nothing
local integer i = 0
local integer id
loop
exitwhen i >= Index
set id = GetHandleId(Circle[i])
if LoadBoolean(ht,id,0) == true then
if AllHeroesNear(Circle[i]) == true then
call TriggerExecute(trig[i])
call KillUnit(Circle[i])
call RemoveUnit(Circle[i])
set Index = Index - 1
set trig[i]=trig[Index]
set Circle[i] = Circle[Index]
endif
endif
set i = i + 1
endloop
endfunction
private function init takes nothing returns nothing
call TimerStart(t, TimerPeriod, true, function check)
endfunction
endlibrary
//TESH.scrollpos=12
//TESH.alwaysfold=0
scope Intro initializer Test1
private function AActions takes nothing returns nothing
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_1,true,0.0)
call ActivadeCircle( gg_unit_n005_0005)
call TriggerSleepAction(0.20)
call TriggerSleepAction(0.20)
call CinematicModeBJ( true, bj_FORCE_ALL_PLAYERS )
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_1,true,0.0)
call TriggerSleepAction(0.35)
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_2,true,14.0)
call TriggerSleepAction(0.45)
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_2,true,7.0)
call TriggerSleepAction(5.0)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_e001_0036, "Dagda", null, "|cffc3dbffWelcome." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(1.2)
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_2,true,16.0)
call TriggerSleepAction(1.6)
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_3,true,16.0)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_e001_0036, "Dagda", null, "|cffc3dbffThanks that you appeared to help me. Strange things are happening arround here." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(4.8)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_e001_0036, "Dagda", null, "|cffc3dbffWe as the nightelves suddenly got atacked by forest inhabiters! But after the War with the Trolls our Forces are too weak to resist." , bj_TIMETYPE_SET,5.6, false )
call TriggerSleepAction(7.6)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_e001_0036, "Dagda", null, "|cffc3dbffI need brave Warriors which will go out and find the Root of those Changes." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(5.2)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_e001_0036, "Dagda", null, "|cffc3dbffWho of you will fight for honour and bring this land back to normal?" , bj_TIMETYPE_SET,3.6, false )
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_4,true,5.5)
call TriggerSleepAction(5.8)
call CinematicModeBJ( false, bj_FORCE_ALL_PLAYERS )
call TriggerExecute(CChosen)
endfunction
function Test1 takes nothing returns nothing
local trigger tr = CreateTrigger( )
call TriggerRegisterTimerEventSingle( tr, 0.20 )
call TriggerAddAction( tr, function AActions )
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
library HChosen initializer init
globals
trigger CChosen
leaderboard gnollboard
integer Gnollsleft = 40
endglobals
function HChosen takes nothing returns nothing
local integer i = 0
call CinematicModeBJ( true, bj_FORCE_ALL_PLAYERS )
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_3,true,0.0)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_e001_0036, "Dagda", null, "|cffc3dbffThanks that you listened to my call." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(1.8)
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_5,true,14.0)
call TriggerSleepAction(1.8)
call CameraSetupApplyForceDuration(gg_cam_C_DagdaStart_5,true,8.0)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_e001_0036, "Dagda", null, "|cffc3dbffDamn ! While we talked those stupid gnolls came again up here again." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(5.4)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_e001_0036, "Dagda", null, "|cffc3dbffPlease begin with eliminating those Gnolls." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(4.2)
call CinematicModeBJ( false, bj_FORCE_ALL_PLAYERS )
call ResetToGameCamera(0.0)
call EnableTrigger( gg_trg_Camera )
call TriggerSleepAction(1.0)
set gnollboard = CreateLeaderboardBJ( GetPlayersAll(), "Kill teh Gnollz !" )
call LeaderboardSetStyle( gnollboard, true, true, true, false )
call LeaderboardAddItemBJ( Player(PLAYER_NEUTRAL_PASSIVE), gnollboard, "Gnolls left", 40 )
call LeaderboardDisplayBJ( true, gnollboard )
endfunction
private function init takes nothing returns nothing
set CChosen = CreateTrigger()
call TriggerAddAction( CChosen, function HChosen)
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope GnollStop initializer Init
globals
boolean talked = false
endglobals
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local player p = GetOwningPlayer(u)
if talked == false then
call DisplayTimedTextToPlayer(p, 0, 0,6.0,"|cffc3dbffIts not necessary to go up there. We should talk to those Soldiers.")
call IssueImmediateOrder( u , "stop" )
//call SetUnitY(u,GetUnitY(u)- 12.0)
endif
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger tr = CreateTrigger( )
call TriggerRegisterEnterRectSimple( tr, gg_rct_Goll_Base_Path )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=28
//TESH.alwaysfold=0
scope GnollBarrier initializer init
function cintest takes nothing returns nothing
local integer i = 0
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_1,true,1.0)
call TriggerSleepAction(0.35)
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_1,true,0.50)
loop
exitwhen i == 6
call IssueImmediateOrder( Hero[i], "stop" )
call SetUnitFacing (Hero[i],32)
set i = i + 1
endloop
call TriggerSleepAction(0.45)
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_1,true,6.0)
call CinematicModeBJ( true, bj_FORCE_ALL_PLAYERS )
call TriggerSleepAction(0.80)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbffWelcome Strangers." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(3.2*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbffWe are sorry but we cannot let you pass through." , bj_TIMETYPE_SET,6, false )
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_2,true,14*CSPEED)
call TriggerSleepAction(2.8*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_2,true,8.0*CSPEED)
call TriggerSleepAction(1.8*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbffAfter we got attacked by some gnolls we have orders to barricade this path.|r" , bj_TIMETYPE_SET, 6, false )
call TriggerSleepAction(4.0*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_2,true,14*CSPEED)
call TriggerSleepAction(1.0*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbffThey came from above and ran downwards after we started defending this way here.|r" , bj_TIMETYPE_SET, 6, false )
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_3,true,12*CSPEED)
call TriggerSleepAction(1.0*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_3,true,6*CSPEED)
call TriggerSleepAction(5.0*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbffWe would check it ourself but we must stay here till we get new orders.|r" , bj_TIMETYPE_SET, 6, false )
call TriggerSleepAction(4.2*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_3,true,12*CSPEED)
call TriggerSleepAction(1.0*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_4,true,16*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbffIf you clear up the issue we can let you pass.|r" , bj_TIMETYPE_SET, 6, false )
call TriggerSleepAction(1.0*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_4,true,8*CSPEED)
call TriggerSleepAction(4.4*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbffI hope to see you soon again.|r" , bj_TIMETYPE_SET,6, false )
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_4,true,14*CSPEED)
call TriggerSleepAction(0.8*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_Barrier_4,true,3.2*CSPEED)
set talked = true
call RemoveDestructable( gg_dest_YTfb_3415 )
call RemoveDestructable( gg_dest_YTfb_3414 )
call RemoveDestructable( gg_dest_YTfb_3413 )
call RemoveDestructable( gg_dest_YTfb_3412 )
call RemoveDestructable( gg_dest_YTfb_3411 )
call RemoveDestructable( gg_dest_YTfb_3410 )
call RemoveDestructable( gg_dest_YTfb_3409 )
call RemoveDestructable( gg_dest_YTfb_3408 )
call TriggerSleepAction(1.6*CSPEED)
call CinematicModeBJ( false, bj_FORCE_ALL_PLAYERS )
endfunction
private function init takes nothing returns nothing
local trigger tri = CreateTrigger()
call TriggerAddAction(tri,function cintest)
call AddCircleCine(gg_unit_n005_0005,tri,true)
endfunction
endscope
//TESH.scrollpos=94
//TESH.alwaysfold=0
function DeadSoldiers takes nothing returns nothing
local integer i = 0
call RemoveDestructable( gg_dest_YTfb_3513 )
call RemoveDestructable( gg_dest_YTfb_3512 )
call RemoveDestructable( gg_dest_YTfb_3511 )
call RemoveDestructable( gg_dest_YTfb_3510 )
call RemoveDestructable( gg_dest_YTfb_3509 )
call RemoveDestructable( gg_dest_YTfb_3508 )
call RemoveDestructable( gg_dest_YTfb_3507 )
call CameraSetupApplyForceDuration(gg_cam_C_SoldierDeath_0,true,0.0)
call CameraSetupApplyForceDuration(gg_cam_C_SoldierDeath_1,true,2.2)
call TriggerSleepAction(0.35)
call CameraSetupApplyForceDuration(gg_cam_C_SoldierDeath_1,true,1.0)
loop
exitwhen i == 6
call IssueImmediateOrder( Hero[i], "stop" )
call SetUnitFacing (Hero[i],0)
set i = i + 1
endloop
call TriggerSleepAction(0.35)
call CameraSetupApplyForceDuration(gg_cam_C_SoldierDeath_1,true,6.0)
call CinematicModeBJ( true, bj_FORCE_ALL_PLAYERS )
call TriggerSleepAction(0.80)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbff *Cough* ... ouch .." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(2.8*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_SoldierDeath_2,true,16.0)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbff .. hundrets .. from behind .. no chance .. *cough*" , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(0.8*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_SoldierDeath_2,true,8.0)
call TriggerSleepAction(3.4*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbff .. but dont worry, its just a little scratch .. uh ..." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(4.2*CSPEED)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPriest.mdl",GetUnitX(gg_unit_h00C_0035),GetUnitY(gg_unit_h00C_0035)))
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbff ... ouch .. oh, wait ... deep fleshwounds .." , bj_TIMETYPE_SET,3.6, false )
call CameraSetupApplyForceDuration(gg_cam_C_SoldierDeath_2,true,16.0)
call TriggerSleepAction(1.4*CSPEED)
call CameraSetupApplyForceDuration(gg_cam_C_SoldierDeath_3,true,18.0)
call TriggerSleepAction(2.8*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbff .. just go on ... you can do nothing for us now ..." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(4.20*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbff .. and take care ... of those ... evil ..." , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(2.80*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbff ... M .. Mu .. r .... " , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(3.00*CSPEED)
call TransmissionFromUnitWithNameBJ( bj_FORCE_ALL_PLAYERS, gg_unit_h00C_0035, "Captain", null, "|cffc3dbff ........... *fades away* " , bj_TIMETYPE_SET,3.6, false )
call TriggerSleepAction(1.4*CSPEED)
if GetRandomInt(1,2) == 1 then
call CreateItem('I01A',GetUnitX(gg_unit_h00C_0035)-40,GetUnitY(gg_unit_h00C_0035)+45)
else
call CreateItem('I01E',GetUnitX(gg_unit_h00C_0035)-40,GetUnitY(gg_unit_h00C_0035)+45)
endif
call CameraSetupApplyForceDuration(gg_cam_C_SoldierDeath_3,true,2.0)
call TriggerSleepAction(1.4*CSPEED)
call CinematicModeBJ( false, bj_FORCE_ALL_PLAYERS )
endfunction
function Trig_Unbezeichneter_Ausl__ser_001_Actions takes nothing returns nothing
local unit u
call RemoveDestructable( gg_dest_YTfb_3247 )
call RemoveDestructable( gg_dest_YTfb_3246 )
call RemoveDestructable( gg_dest_YTfb_3344 )
call RemoveDestructable( gg_dest_LTba_3396 )
call RemoveDestructable( gg_dest_LTba_3395 )
call RemoveDestructable( gg_dest_LTba_3391 )
call RemoveDestructable( gg_dest_LTba_3392 )
call RemoveDestructable( gg_dest_LTba_3394 )
call RemoveDestructable( gg_dest_B001_3349 )
call RemoveDestructable( gg_dest_B001_2885 )
call RemoveDestructable( gg_dest_B002_3350 )
call RemoveDestructable( gg_dest_B002_3381 )
//call SetUnitOwner(gg_unit_h00B_0051,Player(0),false)
//call SetUnitOwner(gg_unit_h00B_0004,Player(0),false)
//call SetUnitOwner(gg_unit_h00B_0004,Player(0),false)
//call SetUnitOwner(gg_unit_h00C_0035,Player(0),false)
call TriggerSleepAction( 0.400 )
//call SetWidgetLife(gg_unit_h00B_0051,-1.00)
//call SetWidgetLife(gg_unit_h00B_0003,0.00)
//call SetWidgetLife(gg_unit_h00B_0004,-.404)
//call KillUnit(gg_unit_h00C_0035)
call SetUnitAnimation( gg_unit_h00B_0051, "death" )
call SetUnitX(gg_unit_h00B_0051,GetUnitX(gg_unit_h00B_0051)+425)
set u = CreateUnit(Player(7),'h00D', GetUnitX(gg_unit_h00B_0051),GetUnitY(gg_unit_h00B_0051), GetRandomReal(0,360) )
call SetUnitTimeScale(u, 0.00 )
call SetUnitFacing(gg_unit_h00B_0051,0)
call UnitAddAbility(gg_unit_h00B_0051,'Aloc')
call SetUnitAnimation( gg_unit_h00B_0003, "death" )
call SetUnitX(gg_unit_h00B_0003,GetUnitX(gg_unit_h00B_0003)+425)
set u = CreateUnit(Player(7),'h00D', GetUnitX(gg_unit_h00B_0003),GetUnitY(gg_unit_h00B_0003), GetRandomReal(0,360) )
call SetUnitTimeScale(u, 0.00 )
call SetUnitFacing(gg_unit_h00B_0003,15)
call UnitAddAbility(gg_unit_h00B_0003,'Aloc')
call SetUnitAnimation( gg_unit_h00B_0004, "death" )
set u = CreateUnit(Player(7),'h00D', GetUnitX(gg_unit_h00B_0004)+425,GetUnitY(gg_unit_h00B_0004), GetRandomReal(0,360) )
call SetUnitTimeScale(u, 0.00 )
call SetUnitX(gg_unit_h00B_0004,GetUnitX(gg_unit_h00B_0004)+425)
call UnitAddAbility(gg_unit_h00B_0004,'Aloc')
call SetUnitFacing(gg_unit_h00B_0004,-15)
call SetUnitAnimation( gg_unit_h00C_0035, "death" )
set u = CreateUnit(Player(7),'h00D', GetUnitX(gg_unit_h00C_0035)+425,GetUnitY(gg_unit_h00C_0035), GetRandomReal(0,360) )
call SetUnitTimeScale(u, 0.00 )
call SetUnitX(gg_unit_h00C_0035,GetUnitX(gg_unit_h00C_0035)+425)
call UnitAddAbility(gg_unit_h00C_0035,'Aloc')
call SetUnitFacing(gg_unit_h00C_0035,34)
call TriggerSleepAction( 0.400 )
//call SetUnitOwner(gg_unit_h00B_0051,Player(7),false)
//call SetUnitOwner(gg_unit_h00B_0004,Player(7),false)
//call SetUnitOwner(gg_unit_h00B_0004,Player(7),false)
//call SetUnitOwner(gg_unit_h00C_0035,Player(7),false)
call TriggerSleepAction( 2.80 )
//call SetUnitTimeScale( gg_unit_h00C_0035, 0.00 )
//call SetUnitTimeScale( gg_unit_h00B_0051, 0.00 )
//call SetUnitTimeScale( gg_unit_h00B_0003, 0.00 )
//call SetUnitTimeScale( gg_unit_h00B_0004, 0.00 )
//call UnitSuspendDecay(gg_unit_h00C_0035,true)
//call UnitSuspendDecay(gg_unit_h00B_0003,true)
//call UnitSuspendDecay(gg_unit_h00B_0004,false)
//call UnitSuspendDecay(gg_unit_h00B_0051,true)
///test
call TriggerSleepAction( 1.40 )
call ActivadeCircle( gg_unit_n005_0071 )
//
endfunction
//===========================================================================
function InitTrig_Soldier_Death takes nothing returns nothing
local trigger tri = CreateTrigger()
call TriggerAddAction( tri, function DeadSoldiers)
call AddCircleCine(gg_unit_n005_0071,tri,false)
set gg_trg_Soldier_Death = CreateTrigger( )
//call TriggerRegisterPlayerEventEndCinematic( gg_trg_Soldier_Death, Player(0) )
call TriggerRegisterUnitEvent( gg_trg_Soldier_Death, gg_unit_n007_0068, EVENT_UNIT_DEATH )
call TriggerAddAction( gg_trg_Soldier_Death, function Trig_Unbezeichneter_Ausl__ser_001_Actions )
endfunction
//TESH.scrollpos=6
//TESH.alwaysfold=0
scope Commands initializer init
globals
private string s
endglobals
private function Actions takes nothing returns nothing
local player p = GetTriggerPlayer()
set s = StringCase(GetEventPlayerChatString(),false)
if s == "-sctown" then
call SCTOWN(p)
elseif s == "-sctall" then
call SCTALL(p)
elseif s == "-sctnon" or s == "-sctoff" then
call SCTNON(p)
elseif s == "-crit" or s == "-critchance" then
call CRIT(p)
elseif s == "-blockchance" or s == "-block" then
call BLOCK(p)
elseif s == "-damagedealt" or s == "-dmgd" then
call DMGDEALT(p)
elseif s == "-damagetaken" or s == "-dmgt" then
call DMGTAKEN(p)
elseif s == "-hidebounty" then
call HIDEB(p)
elseif s == "-showbounty" then
call SHOWB(p)
endif
endfunction
//===========================================================================
function init takes nothing returns nothing
local trigger tr = CreateTrigger()
local integer i = 0
loop
exitwhen i >= 6
call TriggerRegisterPlayerChatEvent( tr, Player(i), "",false )
set i = i + 1
endloop
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=29
//TESH.alwaysfold=0
library Stats
function SCTOWN takes player p returns nothing
local integer i = GetPlayerId(p)
set ShowAllTexts[i] = false
set ShowOwnTexts[i] = true
call DisplayTimedTextToPlayer(p, 0, 0, DisplayTime, "|c00fed15dScroling Combat Text was set to : Own Hero|r")
endfunction
function SCTALL takes player p returns nothing
local integer i = GetPlayerId(p)
set ShowAllTexts[i] = true
set ShowOwnTexts[i] = true
call DisplayTimedTextToPlayer(p, 0, 0, DisplayTime, "|c00fed15dScroling Combat Text was set to : All|r")
endfunction
function SCTNON takes player p returns nothing
local integer i = GetPlayerId(p)
set ShowAllTexts[i] = false
set ShowOwnTexts[i] = false
call DisplayTimedTextToPlayer(p, 0, 0, DisplayTime, "|c00fed15dScroling Combat Text was set to : None|r")
endfunction
function CRIT takes player p returns nothing
local integer id = GetPlayerId(p)
local real crit = CritChance[id]
local unit b = Hero[id]
local integer CritM = R2I(100+CritValue[id])
if GetUnitAbilityLevel(b,RWBuff) == 1 and GetUnitAbilityLevel(b,RD) == 0 then
set crit = crit + RWCritCHanceBonus(RWlevel)
elseif GetUnitAbilityLevel(b,RD) != 0 then
set crit = crit + RWCritCHanceBonusHero(RWlevel)
endif
call DisplayTimedTextToPlayer(p, 0, 0, DisplayTime, "|c00fed15dYour Hero has a current chance of " + SubString(R2S(crit), 0, StringLength(R2S(crit))-1) +"% to hit a unit critically for " +I2S(CritM) +"% damage.|r")
endfunction
function BLOCK takes player p returns nothing
local integer id = GetPlayerId(p)
local real block = BlockChance[id]
call DisplayTimedTextToPlayer(p, 0, 0, DisplayTime, "|c00fed15dYour Hero has a current chance of " + SubString(R2S(block), 0, StringLength(R2S(block))-1) +"% to block any damage.|r")
endfunction
function DMGDEALT takes player p returns nothing
local integer id = GetPlayerId(p)
local real dmg = DamageDealt[id]
call DisplayTimedTextToPlayer(p, 0, 0, DisplayTime, "|c00fed15dYour Hero has dealt an amount of " + SubString(R2S(dmg), 0, StringLength(R2S(dmg))-4) +" damage so far.|r")
endfunction
function DMGTAKEN takes player p returns nothing
local integer id = GetPlayerId(p)
local real dmg = DamageTaken[id]
call DisplayTimedTextToPlayer(p, 0, 0, DisplayTime, "|c00fed15dYour Hero has taken an amount of " + SubString(R2S(dmg), 0, StringLength(R2S(dmg))-4) +" damage so far.|r")
endfunction
function HIDEB takes player p returns nothing
local integer id = GetPlayerId(p)
set ShowBounty[id] = false
call DisplayTimedTextToPlayer(p, 0, 0, DisplayTime, "|c00fed15dBounty Display has been disabled.|r")
endfunction
function SHOWB takes player p returns nothing
local integer id = GetPlayerId(p)
set ShowBounty[id] = true
call DisplayTimedTextToPlayer(p, 0, 0, DisplayTime, "|c00fed15dBounty Display has been enabled.|r")
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope Secrets initializer SetUp
globals
integer SecretsNo = 2
integer SecretsFound = 0
string array TextNumber [4]
endglobals
function GetTextNumber takes integer i returns string
local string s = I2S(i)
//call BJDebugMsg("yo")
if i >=11 and i <= 13 then
return s + "th"
elseif ModuloInteger(i,10) >= 4 then
return s + TextNumber[4]
else
return s + TextNumber[ModuloInteger(i,10)]
endif
endfunction
private function SetUp takes nothing returns nothing
local integer i = 1
set TextNumber[0] = "th"
set TextNumber[1] = "st"
set TextNumber[2] = "nd"
set TextNumber[3] = "rd"
set TextNumber[4] = "th"
endfunction
function NewSecret takes player p returns nothing
set SecretsFound = SecretsFound + 1
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, DisplayTime,GetColoredPlayer(p) + "|cfffff888 just found the " + GetTextNumber(SecretsFound) + " of " + I2S(SecretsNo) + " Secrets.")
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope test initializer init
private function init takes nothing returns nothing
call AddUnitToDamage(gg_unit_O000_0002)
call AddUnitToDamage(gg_unit_E000_0024)
call AddUnitToDamage(gg_unit_H004_0027)
call AddUnitToDamage(gg_unit_H006_0020)
call AddUnitToDamage(gg_unit_H009_0025)
call AddUnitToDamage(gg_unit_H00F_0103)
set Hero[0] = gg_unit_E000_0024
set Hero[1] = gg_unit_H004_0027
set Hero[2] = gg_unit_H006_0020
set Hero[3] = gg_unit_O000_0002
set Hero[4] = gg_unit_H009_0025
set Hero[5] = gg_unit_H00F_0103
call InitEqupmentHero(gg_unit_O000_0002)
call InitEqupmentHero(gg_unit_E000_0024)
call InitEqupmentHero(gg_unit_H004_0027)
call InitEqupmentHero(gg_unit_H006_0020)
call InitEqupmentHero(gg_unit_H009_0025)
call InitEqupmentHero(gg_unit_H00F_0103)
endfunction
endscope
//TESH.scrollpos=16
//TESH.alwaysfold=0
scope ItemSetup initializer Setup
// 1. DamageBonus
// 2. DamageBonus % //Deleted
// 3. ArmorBonus
// 4. AttackSpeed %
// 5. Hp Bonus
// 6. Mana Bonus
// 7. hp reg
// 8. mana reg
// 9. mana reg% //Deleted
// 10. Str Bonus
// 11. Int Bonus
// 12. Agi Bonus
// 13. Spell Damage bonus
// 14. Spell Damage%
// 15. CritBonus
// 16. CritMultiplier
// 17. BlockChance
// 18. MovementSpeed
// 19. WeaponType (1 = First Hand Sword , 2 = Second Hand Sword, 3 = Helmdet , 4 = Armor , 5 = Jewelery ,
// 6 = Two Handed Weapon, 7 = Two handed Staff, 8 = Shield, 9 = Bow
private function Setup takes nothing returns nothing
//----------------------------------De´Regzors Set-----------------------------------------------------------------------------------------------
//Regzors amulet / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00A', 0.00, 0.00, 0.00, 60.00, 60.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5, 0)
//Regzors armor / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00B', 0.00, 4.00, 0.00, 40.00, 40.00, 0.75, 0.75, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 4, 0)
//Regzors Helmet / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00E', 0.00, 0.00, 0.00, 40.00, 40.00, 0.75, 0.75, 0.00, 0.00, 0.00, 10.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3, 0)
//Regzors Axe / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00C', 24.00, 0.00, 0.00, 80.0, 0.00, 1.50, .00, 4.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 6, 0)
//Regzors Staff / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00F', 14.00, 0.00, 0.00, 0.0, 80.00, 0.00, 1.50, 0.00, 6.00, 0.00, 0.00, 0.05, 0.00, 0.00, 0.00, 0.00, 7, 0)
//-----------------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------Simple Set--------------------------------------------------------------------------------------------------
//Simple Sword / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I001', 8.00, 0.00, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1, 0)
//Simple Shield / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I009', 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 8, 0)
//Simple Armor / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00G', 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 4, 0)
//Simple Ring / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00H', 0.00, 0.00, 0.00, 0.00, 0.00, 0.50, 0.50, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5, 0)
//Simple Helmet / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00I', 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.05, 2.00, 0.00, 0.00, 0.00, 3, 0)
//Simple Wand / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00J', 2.00, 0.00, 0.00, 0.00, 10.00, 0.00, 0.00, 0.00, 2.00, 0.00, 5.00, 0.05, 0.00, 0.00, 0.00, 0.00, 7, 0)
//Simple Cloak / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00K', 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.50, 0.00, 5.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 4 , 0)
//Simple Bow / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00O', 14.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 9, 0)
//Simple Axe / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00P', 16.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 6, 0)
//Simple Dagger / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00Q', 4.00, 0.00, 0.05, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2, 0)
//Simple Mask / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00S', 0.00, 0.00, 0.00, 25.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 0.00, 20.00, 0.00, 0.00, 3, 0)
//! Upgrades !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//Simple Sword I / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I012', 14.00, 0.00, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 0.00, 0.00, 0.00, 1, 0)
//Simple Sword II / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00W', 16.00, 0.00, 0.15, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1, 0)
//Simple Sword III / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00Z', 12.00, 0.00, 0.25, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1, 0)
//Simple Sword IV / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I011', 4.00, 0.00, 0.20, 0.00, 0.00, 0.00, 0.00, 6.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1, 0)
//Simple Sword V / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I014',22.00, 0.00, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 6.00, 0.00, 0.00, 0.00, 1, 0)
//Simple Axe I / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I016', 24.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 4.00, 20.00, 0.00, 0.00, 6, 0)
//Simple Axe II / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I018', 22.00, 0.00, 0.00, 60.00, 0.00, 0.00, 0.00, 8.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 6, 0)
//Simple Wand I / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I01C', 8.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 8.00, 0.10, 0.00, 0.00, 0.00, 0.00, 7, 0)
//Simple Wand I / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I01F', 2.00, 0.00, 0.00, 0.00, 80.00, 0.00, 1.00, 0.00, 6.00, 0.00, 5.00, 0.00, 0.00, 0.00, 0.00, 0.00, 7, 0)
//Simple Dagger / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I01H', 8.00, 0.00, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 6.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2, 0)
//-----------------------------------------------------------------------------------------------------------------------------------------------
//! 1 = Voodoo Master ;
//--------------------Class Items----------------------------------------------------------------------------------------------------------------
//Voodoo Puppet / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00R', 18.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 12.00, 0.00, 15.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5 , 1)
//-----------------------------------------------------------------------------------------------------------------------------------------------
//---------------------Rest--- For Now ..--------------------------------------------------------------------------------------------------------
//Glowing Sword / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I00D', 6.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 6.00, 0.00, 0.00, 0.00, 0.00, 2.00, 0.00, 2, 0)
//Commanders Sword / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I01A', 18.00, 0.00, 0.00, 120., 0.00, 1.50, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 6.00, 0.00, 1, 0)
//Amulet of Hope / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I01E', 0.00, 1.00, 0.00, 60., 80.00, 0.00, 0.00, 0.00, 4.00, 0.00, 0.00, 0.00, 0.00, 50.00, 0.00, 0.00, 5, 0)
//Gnoll Book 1 / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I01B', 03.00, 0.00, 0.00, 0., 0.00, 0.00, 0.75, 0.00, 4.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5, 0)
//Gnoll Shield / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I01J', 0.00, 5.00, 0.00, 0., 0.00, 1.00, 0.00, 4.00, 0.00, 4.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 8, 0)
//Gnoll Cape / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I01K', 0.00, 0.00, 0.00, 0., 80.00, 0.00, 0.00, 4.00, 5.00, 0.00, 0.00, 0.00, 5.00, 0.00, 0.00, 0.00, 4, 0)
//Helm of ZOMG!!1 / Item / DMG / ARMO / IAS / HP / MANA / HPREG/ MANAR/ STR / INT / AGI / SDMG / SDMG%/ CRIT / CRITM/ BLOCK/ MS / IType
call SetupItemStats('I002', 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.25, 25.00, 25.00, 0.00, 0.00, 3, 0)
endfunction
endscope
//TESH.scrollpos=40
//TESH.alwaysfold=0
// 1. DamageBonus
// 2. DamageBonus %
// 3. ArmorBonus
// 4. AttackSpeed %
// 5. Hp Bonus
// 6. Mana Bonus
// 7. hp reg
// 8. mana reg
// 9. mana reg%
// 10. Str Bonus
// 11. Int Bonus
// 12. Agi Bonus
// 13. Spell Damage bonus
// 14. Spell Damage%
// 15. CritBonus
// 16. CritMultiplier
// 17. BlockChance
// 18. MovementSpeed
// 19. WeaponType
// 1 = First Hand Sword
// 2 = First Hand Dagger
// 3 = Both Hand Sword
// 4 = Staff
// 5 = Heavy Armor
// 6 = Light Armor
// 7 = Heavy Boots
// 8 = Light Boots#
// 9 = Heavy Boots
// 10 = Jeverlery
// 11 = Voodoo Master Only
library Setup initializer init requires GlobalFunction
globals
hashtable ht = InitHashtable()
integer array BaseItem [5]
item array LastUsedItem [6]
boolean array NormalInventar [6]
private integer array OrderA [8]
private string array UnableToEquip [8]
private string array UnableToEquipClass [12]
private string FullInv = "|c00fed15dYour Hero has a full inventory and dropped the unequipted item.|r"
endglobals
function UpdateBonus takes unit u, integer b returns nothing
call AdjustDMGBonus(u,BonusDMG[b])
call AdjustARMBonus(u,BonusARM[b])
call AdjustIASBonus(u,BonusIAS[b])
call AdjustHPBonus(u,BonusHP[b])
call AdjustManaBonus(u,BonusMana[b])
call AdjustSTRBonus(u,BonusSTR[b])
call AdjustINTBonus(u,BonusINT[b])
call AdjustAGIBonus(u,BonusAGI[b])
endfunction
function InitEqupmentHero takes unit h returns nothing
local integer i = GetHandleId(h)
call SaveBoolean(ht,i,50,true)
call SaveInteger(ht,i,1,'I003')
call SaveInteger(ht,i,2,'I004')
call SaveInteger(ht,i,3,'I005')
call SaveInteger(ht,i,4,'I006')
call SaveInteger(ht,i,5,'I007')
call SaveInteger(ht,i,6,'I008')
endfunction
function AdjustItemBonus takes integer itemt, unit u, integer i returns nothing
local player p = GetOwningPlayer(u)
local integer b = GetPlayerId(p)
//!Damage
set BonusDMG[b] = BonusDMG[b] + i*R2I(LoadReal(ht,itemt,1))
call AdjustDMGBonus(u,BonusDMG[b])
//!Armor Bonuse
set BonusARM[b] = BonusARM[b] + i*R2I(LoadReal(ht,itemt,3))
call AdjustARMBonus(u,BonusARM[b])
//!Attackspeed Bonus
set BonusIAS[b] = BonusIAS[b] + i*LoadReal(ht,itemt,4)
call AdjustIASBonus(u,BonusIAS[b])
//!HP Bonus
set BonusHP[b] = BonusHP[b] + i*R2I(LoadReal(ht,itemt,5))
call AdjustHPBonus(u,BonusHP[b])
//!Mana Bonus
set BonusMana[b] = BonusMana[b] + i*R2I(LoadReal(ht,itemt,6))
call AdjustManaBonus(u,BonusMana[b])
//!HP Reg
set HPReg[b] = HPReg[b] + i*R2I(LoadReal(ht,itemt,7))
//!Mana Reg
set ManaReg[b] = ManaReg[b] + i*R2I(LoadReal(ht,itemt,8))
//!STR
set BonusSTR[b] = BonusSTR[b] + i*LoadReal(ht,itemt,10)
call AdjustSTRBonus(u,BonusSTR[b])
//!INT
set BonusINT[b] = BonusINT[b] + i*LoadReal(ht,itemt,11)
call AdjustINTBonus(u,BonusINT[b])
//!AGI
set BonusAGI[b] = BonusAGI[b] + i*LoadReal(ht,itemt,12)
call AdjustAGIBonus(u,BonusAGI[b])
//!SpellDMG Bonus
set SpellDamageAddition[b] = SpellDamageAddition[b] + i * R2I(LoadReal(ht,itemt,13))
//!SpellDMG MultiPlayier
set SpellDamageMultiPlyer[b] = SpellDamageMultiPlyer[b] + i * LoadReal(ht,itemt,14)
//!Crit Bonus
set CritChance[b] = CritChance[b] + i * R2I(LoadReal(ht,itemt,15))
//!Crit Value
set CritValue[b] = CritValue[b] + i * R2I(LoadReal(ht,itemt,16))
//!Block
set BlockChance[b] = BlockChance[b] + i * R2I(LoadReal(ht,itemt,17))
//MS
call SetUnitAbilityLevel(u,'A00G',GetUnitAbilityLevel(u,'A00G')+i*R2I(LoadReal(ht,itemt,18)))
endfunction
private function RunCondition takes nothing returns boolean
return GetItemType(GetManipulatedItem()) == ITEM_TYPE_PERMANENT
endfunction
function UD takes nothing returns nothing
call SetItemDroppable(bj_lastCreatedItem, false )
endfunction
function DS takes unit u, integer slot returns nothing
call UnitDropItemSlot( u, bj_lastCreatedItem, slot )
endfunction
private function Order takes integer i returns integer
return OrderA[i]
endfunction
//Unit Zuordnung Class Items!!
function GetUnitArray takes unit u returns integer
local integer ret = 0
if GetUnitTypeId(u) == 'O000' then //Vodoo master
set ret = 1
elseif GetUnitTypeId(u) == 'E000' then //Amazone
set ret = 2
elseif GetUnitTypeId(u) == 'H004' or GetUnitTypeId(u) == 'H005' then //Rocky
set ret = 3
elseif GetUnitTypeId(u) == 'H006' then //Jaina
set ret = 4
endif
return ret
endfunction
function NormalInventory takes unit u returns nothing
local integer i = GetHandleId(u)
if LoadBoolean(ht,i,50) == true then
return
endif
call SaveBoolean(ht,i,50,true)
call RemoveItem(UnitItemInSlot(u, 0))
call RemoveItem(UnitItemInSlot(u, 1))
call RemoveItem(UnitItemInSlot(u, 2))
call RemoveItem(UnitItemInSlot(u, 3))
call RemoveItem(UnitItemInSlot(u, 4))
call RemoveItem(UnitItemInSlot(u, 5))
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,11))
call SetItemCharges(bj_lastCreatedItem,LoadInteger(ht,i,21))
call DS(u,0)
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,12))
call SetItemCharges(bj_lastCreatedItem,LoadInteger(ht,i,22))
call DS(u,1)
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,13))
call SetItemCharges(bj_lastCreatedItem,LoadInteger(ht,i,23))
call DS(u,2)
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,14))
call SetItemCharges(bj_lastCreatedItem,LoadInteger(ht,i,24))
call DS(u,3)
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,15))
call SetItemCharges(bj_lastCreatedItem,LoadInteger(ht,i,25))
call DS(u,4)
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,16))
call SetItemDroppable(bj_lastCreatedItem, true )
call DS(u,5)
call UD()
endfunction
function EquipInventory takes unit u returns nothing
local integer i = GetHandleId(u)
if LoadBoolean(ht,i,50) == false or currit[GetPlayerId(GetOwningPlayer(u))] != null then
return
endif
call SaveBoolean(ht,i,50,false)
call SaveInteger(ht,i,11,GetItemTypeId(UnitItemInSlot(u, 0)))
call SaveInteger(ht,i,21,GetItemCharges(UnitItemInSlot(u, 0)))
call RemoveItem(UnitItemInSlot(u, 0))
call SaveInteger(ht,i,12,GetItemTypeId(UnitItemInSlot(u, 1)))
call SaveInteger(ht,i,22,GetItemCharges(UnitItemInSlot(u, 1)))
call RemoveItem(UnitItemInSlot(u, 1))
call SaveInteger(ht,i,13,GetItemTypeId(UnitItemInSlot(u, 2)))
call SaveInteger(ht,i,23,GetItemCharges(UnitItemInSlot(u, 2)))
call RemoveItem(UnitItemInSlot(u, 2))
call SaveInteger(ht,i,14,GetItemTypeId(UnitItemInSlot(u, 3)))
call SaveInteger(ht,i,24,GetItemCharges(UnitItemInSlot(u, 3)))
call RemoveItem(UnitItemInSlot(u, 3))
call SaveInteger(ht,i,15,GetItemTypeId(UnitItemInSlot(u, 4)))
call SaveInteger(ht,i,25,GetItemCharges(UnitItemInSlot(u, 4)))
call RemoveItem(UnitItemInSlot(u, 4))
call SaveInteger(ht,i,16,GetItemTypeId(UnitItemInSlot(u, 5)))
call RemoveItem(UnitItemInSlot(u, 5))
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,1))
call UD()
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,2))
call UD()
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,3))
call UD()
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,4))
call UD()
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,5))
call UD()
set bj_lastCreatedItem = UnitAddItemById(u,LoadInteger(ht,i,6))
call UD()
endfunction
function ItemUse takes nothing returns nothing
local item it = GetManipulatedItem()
local integer id = GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
local unit u = GetManipulatingUnit()
local integer i = GetHandleId(u)
local integer ITEM = GetItemTypeId(it)
local integer ITEM2
local integer ITEM3
local integer a = 1
local boolean b = false
local integer slot
set bj_lastCreatedItem = null
//Equipmentmenue
if GetItemTypeId(it) == 'I000' then
call EquipInventory(u)
return
elseif GetItemTypeId(it) == 'I008' then
call NormalInventory(u)
endif
//Equip item
if LastUsedItem[id] == it then
if LoadInteger(ht,ITEM,20) != 0 and LoadInteger(ht,ITEM,20) != GetUnitArray(u) then
call DisplayTimedTextToPlayer(GetOwningPlayer(u), 0, 0, DisplayTime,UnableToEquipClass[LoadInteger(ht,ITEM,20)] )
return
endif
if LoadBoolean(ht,GetUnitTypeId(u),100+LoadInteger(ht,ITEM,19)) == false then
call DisplayTimedTextToPlayer(GetOwningPlayer(u), 0, 0, DisplayTime,UnableToEquip[LoadInteger(ht,ITEM,19)] )
return
endif
if currit[GetPlayerId(GetOwningPlayer(u))] != null then
return
endif
if LoadBoolean(ht,i,50) == true then //NormalInventar[i] == true then
if Order(LoadInteger(ht,ITEM,19)) == 6 then //Double handed
set ITEM2 = LoadInteger(ht,i,1)
set ITEM3 = LoadInteger(ht,i,2)
call SaveInteger(ht,i,1,ITEM)
call SaveInteger(ht,i,2,ITEM)
set slot = GetItemSlot(GetTriggerUnit(),GetManipulatedItem())
call RemoveItem(GetManipulatedItem())
if ITEM2 != BaseItem[1] then
set bj_lastCreatedItem = UnitAddItemById(u,ITEM2)
call AdjustItemBonus(ITEM2,u,-1)
endif
if ITEM3 != BaseItem[2] and Order(LoadInteger(ht,ITEM3,19)) != 6 then
set bj_lastCreatedItem = UnitAddItemById(u,ITEM3)
call AdjustItemBonus(ITEM3,u,-1)
endif
call AdjustItemBonus(ITEM,u,1)
call UnitDropItemSlot( GetTriggerUnit(), bj_lastCreatedItem, slot )
else
set slot = GetItemSlot(GetTriggerUnit(),GetManipulatedItem())
set ITEM2 = LoadInteger(ht,i,Order(LoadInteger(ht,ITEM,19)))
if Order(LoadInteger(ht,ITEM2,19)) == 6 then
call SaveInteger(ht,i,1,BaseItem[1])
call SaveInteger(ht,i,2,BaseItem[2])
call SaveInteger(ht,i,Order(LoadInteger(ht,ITEM,19)),ITEM)
call RemoveItem(GetManipulatedItem())
set bj_lastCreatedItem = UnitAddItemById(u,ITEM2)
call AdjustItemBonus(ITEM2,u,-1)
call AdjustItemBonus(ITEM,u,1)
else
call SaveInteger(ht,i,Order(LoadInteger(ht,ITEM,19)),ITEM)
call RemoveItem(GetManipulatedItem())
if ITEM2 != BaseItem[Order(LoadInteger(ht,ITEM,19))] then
set bj_lastCreatedItem = UnitAddItemById(u,ITEM2)
call AdjustItemBonus(ITEM2,u,-1)
call AdjustItemBonus(ITEM,u,1)
else
call AdjustItemBonus(ITEM,u,1)
endif
endif
call UnitDropItemSlot( GetTriggerUnit(), bj_lastCreatedItem, slot )
endif
else
if LoadBoolean(ht,i,50) == false then
//set i = GetHandleId(u)
if Order(LoadInteger(ht,ITEM,19)) == 6 then
set ITEM = LoadInteger(ht,i,1)
set ITEM2 = LoadInteger(ht,i,2)
call SaveInteger(ht,i,1,BaseItem[1])
call RemoveItem( UnitItemInSlot(u, 0) )
set bj_lastCreatedItem = UnitAddItemById(u,BaseItem[1])
call UD()
call SaveInteger(ht,GetHandleId(u),2,BaseItem[2])
call RemoveItem( UnitItemInSlot(u, 1) )
set bj_lastCreatedItem = UnitAddItemById(u,BaseItem[2])
call UD()
call AdjustItemBonus(ITEM,u,-1)
loop
exitwhen a == 6
if LoadInteger(ht,i,10+a) == 0 then
call SaveInteger(ht,i,10+a,ITEM)
set a = 5
set b = true
endif
set a = a +1
endloop
if b == false then
call UnitAddItemById(u,ITEM)
call DisplayTimedTextToPlayer(GetOwningPlayer(u), 0, 0, DisplayTime,FullInv)
endif
else
call SaveInteger(ht,i,Order(LoadInteger(ht,ITEM,19)),BaseItem[Order(LoadInteger(ht,ITEM,19))])
call RemoveItem(GetManipulatedItem())
set bj_lastCreatedItem = UnitAddItemById(u,BaseItem[Order(LoadInteger(ht,ITEM,19))])
call UD()
call AdjustItemBonus(ITEM,u,-1)
loop
exitwhen a == 6
if LoadInteger(ht,i,10+a) == 0 then
call SaveInteger(ht,i,10+a,ITEM)
set a = 5
set b = true
endif
set a = a +1
endloop
if b == false then
call UnitAddItemById(u,ITEM)
call DisplayTimedTextToPlayer(GetOwningPlayer(u), 0, 0, DisplayTime,FullInv)
endif
endif
endif
endif
return
else
set LastUsedItem[id] = it
endif
call TriggerSleepAction(0.50)
if LastUsedItem[id] == it then
set LastUsedItem[id] = null
endif
endfunction
function SetupItemStats takes integer itemt, real dmg, real armor, real attacks, real hp, real mana, real hpreg, real manareg, real str, real int, real agi, real spell, real spellp, real crit, real critm, real block, real ms, integer Type, integer class returns nothing
local integer id = itemt
call SaveReal(ht,id,1,dmg)
call SaveReal(ht,id,3,armor)
call SaveReal(ht,id,4,attacks)
call SaveReal(ht,id,5,hp)
call SaveReal(ht,id,6,mana)
call SaveReal(ht,id,7,hpreg)
call SaveReal(ht,id,8,manareg)
call SaveReal(ht,id,10,str)
call SaveReal(ht,id,11,int)
call SaveReal(ht,id,12,agi)
call SaveReal(ht,id,13,spell)
call SaveReal(ht,id,14,spellp)
call SaveReal(ht,id,15,crit)
call SaveReal(ht,id,16,critm)
call SaveReal(ht,id,17,block)
call SaveReal(ht,id,18,ms)
call SaveInteger(ht,id,19,Type)
call SaveInteger(ht,id,20,class)
endfunction
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( tr, EVENT_PLAYER_UNIT_USE_ITEM )
call TriggerAddAction( tr, function ItemUse )
call TriggerAddCondition( tr,Condition( function RunCondition ) )
set BaseItem[1] = 'I003'
set BaseItem[2] = 'I004'
set BaseItem[3] = 'I005'
set BaseItem[4] = 'I006'
set BaseItem[5] = 'I007'
set BaseItem[6] = 'I008'
set OrderA[1] = 1
set OrderA[2] = 2
set OrderA[3] = 3
set OrderA[4] = 4
set OrderA[5] = 5
set OrderA[6] = 6
set OrderA[7] = 6
set OrderA[8] = 2
set OrderA[9] = 6
set UnableToEquip[1] = "|c00fed15dYour Class cannot equip Main-hand Weapons.|r"
set UnableToEquip[2] = "|c00fed15dYour Class cannot equip Off-hand Weapons.|r"
set UnableToEquip[6] = "|c00fed15dYour Class cannot equip Two Handed Blades.|r"
set UnableToEquip[7] = "|c00fed15dYour Class cannot equip Staffs.|r"
set UnableToEquip[8] = "|c00fed15dYour Class cannot equip Shields.|r"
set UnableToEquip[9] = "|c00fed15dYour Class cannot equip Bows.|r"
set UnableToEquipClass[1] = "|c00fed15dThis Item can only be equipted by the Voodoo Master.|r"
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope Reg initializer init
globals
private timer t = CreateTimer()
private real TimerPeriod = 0.25
endglobals
private function reg takes nothing returns nothing
local integer i = 0
loop
exitwhen i > 6
if Hero[i] != null then
call SetWidgetLife(Hero[i],GetWidgetLife(Hero[i]) + HPReg[i] * TimerPeriod)
call SetUnitState(Hero[i], UNIT_STATE_MANA,GetUnitState(Hero[i],UNIT_STATE_MANA) + ManaReg[i] * TimerPeriod)
endif
set i = i + 1
endloop
endfunction
private function init takes nothing returns nothing
call TimerStart(t,TimerPeriod,true,function reg)
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
library AdjustHP
globals
private integer B1 = 'A00J'
private integer B2 = 'A007'
private integer B4 = 'A009'
private integer B8 = 'A00A'
private integer B16 = 'A00B'
private integer B32 = 'A00C'
private integer B64 = 'A00K'
private integer B128 = 'A00L'
private integer B256 = 'A00M'
private integer B512 = 'A00N'
private integer B1024 = 'A00O'
private integer B2048 = 'A00P'
private integer B4096 = 'A00Q'
endglobals
function AdjustHPBonus takes unit u, integer bonus returns nothing
local integer b = bonus
if b >= 4096 then
set b = b - 4096
call UnitAddAbility(u,B4096)
else
call UnitRemoveAbility(u,B4096)
endif
if b >= 2048 then
set b = b - 2048
call UnitAddAbility(u,B2048)
else
call UnitRemoveAbility(u,B2048)
endif
if b >= 1024 then
set b = b - 1024
call UnitAddAbility(u,B1024)
else
call UnitRemoveAbility(u,B1024)
endif
if b >= 512 then
set b = b - 512
call UnitAddAbility(u,B512)
else
call UnitRemoveAbility(u,B512)
endif
if b >= 256 then
set b = b - 256
call UnitAddAbility(u,B256)
else
call UnitRemoveAbility(u,B256)
endif
if b >= 128 then
set b = b - 128
call UnitAddAbility(u,B128)
else
call UnitRemoveAbility(u,B128)
endif
if b >= 64 then
set b = b - 64
call UnitAddAbility(u,B64)
else
call UnitRemoveAbility(u,B64)
endif
if b >= 32 then
set b = b - 32
call UnitAddAbility(u,B32)
else
call UnitRemoveAbility(u,B32)
endif
if b >= 16 then
set b = b - 16
call UnitAddAbility(u,B16)
else
call UnitRemoveAbility(u,B16)
endif
if b >= 8 then
set b = b - 8
call UnitAddAbility(u,B8)
else
call UnitRemoveAbility(u,B8)
endif
if b >= 4 then
set b = b - 4
call UnitAddAbility(u,B4)
else
call UnitRemoveAbility(u,B4)
endif
if b >= 2 then
set b = b - 2
call UnitAddAbility(u,B2)
else
call UnitRemoveAbility(u,B2)
endif
if b >= 1 then
set b = b - 1
call UnitAddAbility(u,B1)
else
call UnitRemoveAbility(u,B1)
endif
endfunction
endlibrary
//TESH.scrollpos=12
//TESH.alwaysfold=0
library AdjustMana
globals
private integer B1 = 'A00R'
private integer B2 = 'A00S'
private integer B4 = 'A00T'
private integer B8 = 'A00U'
private integer B16 = 'A00V'
private integer B32 = 'A00W'
private integer B64 = 'A00X'
private integer B128 = 'A00Y'
private integer B256 = 'A00Z'
private integer B512 = 'A010'
private integer B1024 = 'A011'
private integer B2048 = 'A012'
private integer B4096 = 'A013'
endglobals
function AdjustManaBonus takes unit u, integer bonus returns nothing
local integer b = bonus
if b >= 4096 then
set b = b - 4096
call UnitAddAbility(u,B4096)
else
call UnitRemoveAbility(u,B4096)
endif
if b >= 2048 then
set b = b - 2048
call UnitAddAbility(u,B2048)
else
call UnitRemoveAbility(u,B2048)
endif
if b >= 1024 then
set b = b - 1024
call UnitAddAbility(u,B1024)
else
call UnitRemoveAbility(u,B1024)
endif
if b >= 512 then
set b = b - 512
call UnitAddAbility(u,B512)
else
call UnitRemoveAbility(u,B512)
endif
if b >= 256 then
set b = b - 256
call UnitAddAbility(u,B256)
else
call UnitRemoveAbility(u,B256)
endif
if b >= 128 then
set b = b - 128
call UnitAddAbility(u,B128)
else
call UnitRemoveAbility(u,B128)
endif
if b >= 64 then
set b = b - 64
call UnitAddAbility(u,B64)
else
call UnitRemoveAbility(u,B64)
endif
if b >= 32 then
set b = b - 32
call UnitAddAbility(u,B32)
else
call UnitRemoveAbility(u,B32)
endif
if b >= 16 then
set b = b - 16
call UnitAddAbility(u,B16)
else
call UnitRemoveAbility(u,B16)
endif
if b >= 8 then
set b = b - 8
call UnitAddAbility(u,B8)
else
call UnitRemoveAbility(u,B8)
endif
if b >= 4 then
set b = b - 4
call UnitAddAbility(u,B4)
else
call UnitRemoveAbility(u,B4)
endif
if b >= 2 then
set b = b - 2
call UnitAddAbility(u,B2)
else
call UnitRemoveAbility(u,B2)
endif
if b >= 1 then
set b = b - 1
call UnitAddAbility(u,B1)
else
call UnitRemoveAbility(u,B1)
endif
endfunction
endlibrary
//TESH.scrollpos=12
//TESH.alwaysfold=0
library AdjustIAS
globals
private integer B05 = 'A00H'
private integer B1 = 'A00F'
private integer B2 = 'A00I'
private integer B4 = 'A017'
private integer B8 = 'A018'
private integer B16 = 'A019'
private integer B32 = 'A01A'
endglobals
function AdjustIASBonus takes unit u, real bonus returns nothing
local real b = bonus
if b >= 3.2 then
set b = b - 3.2
call UnitAddAbility(u,B32)
else
call UnitRemoveAbility(u,B32)
endif
if b >= 1.6 then
set b = b - 1.6
call UnitAddAbility(u,B16)
else
call UnitRemoveAbility(u,B16)
endif
if b >= 0.8 then
set b = b - 0.8
call UnitAddAbility(u,B8)
else
call UnitRemoveAbility(u,B8)
endif
if b >= 0.4 then
set b = b - 0.4
call UnitAddAbility(u,B4)
else
call UnitRemoveAbility(u,B4)
endif
if b >= 0.2 then
set b = b - 0.2
call UnitAddAbility(u,B2)
else
call UnitRemoveAbility(u,B2)
endif
if b >= 0.1 then
set b = b - 0.1
call UnitAddAbility(u,B1)
else
call UnitRemoveAbility(u,B1)
endif
if b >= 0.05 then
set b = b - 0.05
call UnitAddAbility(u,B05)
else
call UnitRemoveAbility(u,B05)
endif
endfunction
endlibrary
//TESH.scrollpos=5
//TESH.alwaysfold=0
library AdjustDMG
globals
private integer B1 = 'A01E'
private integer B2 = 'A01F'
private integer B4 = 'A01G'
private integer B8 = 'A01H'
private integer B16 = 'A01I'
private integer B32 = 'A01J'
private integer B64 = 'A01K'
private integer B128 = 'A01L'
private integer B256 = 'A01M'
private integer B512 = 'A01N'
endglobals
function AdjustDMGBonus takes unit u, real bonus returns nothing
local real b = bonus
if b >= 512 then
set b = b - 512
call UnitAddAbility(u,B512)
else
call UnitRemoveAbility(u,B512)
endif
if b >= 256 then
set b = b - 256
call UnitAddAbility(u,B256)
else
call UnitRemoveAbility(u,B256)
endif
if b >= 128 then
set b = b - 128
call UnitAddAbility(u,B128)
else
call UnitRemoveAbility(u,B128)
endif
if b >= 64 then
set b = b - 64
call UnitAddAbility(u,B64)
else
call UnitRemoveAbility(u,B64)
endif
if b >= 32 then
set b = b - 32
call UnitAddAbility(u,B32)
else
call UnitRemoveAbility(u,B32)
endif
if b >= 16 then
set b = b - 16
call UnitAddAbility(u,B16)
else
call UnitRemoveAbility(u,B16)
endif
if b >= 8 then
set b = b - 8
call UnitAddAbility(u,B8)
else
call UnitRemoveAbility(u,B8)
endif
if b >= 4 then
set b = b - 4
call UnitAddAbility(u,B4)
else
call UnitRemoveAbility(u,B4)
endif
if b >= 2 then
set b = b - 2
call UnitAddAbility(u,B2)
else
call UnitRemoveAbility(u,B2)
endif
if b >= 1 then
set b = b - 1
call UnitAddAbility(u,B1)
else
call UnitRemoveAbility(u,B1)
endif
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library AdjustARM
globals
private integer B1 = 'A02P'
private integer B2 = 'A02H'
private integer B4 = 'A02I'
private integer B8 = 'A02J'
private integer B16 = 'A02K'
private integer B32 = 'A02L'
private integer B64 = 'A02M'
private integer B128 = 'A02N'
private integer B256 = 'A02O'
endglobals
function AdjustARMBonus takes unit u, real bonus returns nothing
local real b = bonus
if b >= 256 then
set b = b - 256
call UnitAddAbility(u,B256)
else
call UnitRemoveAbility(u,B256)
endif
if b >= 128 then
set b = b - 128
call UnitAddAbility(u,B128)
else
call UnitRemoveAbility(u,B128)
endif
if b >= 64 then
set b = b - 64
call UnitAddAbility(u,B64)
else
call UnitRemoveAbility(u,B64)
endif
if b >= 32 then
set b = b - 32
call UnitAddAbility(u,B32)
else
call UnitRemoveAbility(u,B32)
endif
if b >= 16 then
set b = b - 16
call UnitAddAbility(u,B16)
else
call UnitRemoveAbility(u,B16)
endif
if b >= 8 then
set b = b - 8
call UnitAddAbility(u,B8)
else
call UnitRemoveAbility(u,B8)
endif
if b >= 4 then
set b = b - 4
call UnitAddAbility(u,B4)
else
call UnitRemoveAbility(u,B4)
endif
if b >= 2 then
set b = b - 2
call UnitAddAbility(u,B2)
else
call UnitRemoveAbility(u,B2)
endif
if b >= 1 then
set b = b - 1
call UnitAddAbility(u,B1)
else
call UnitRemoveAbility(u,B1)
endif
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library AdjustAGI
globals
private integer B1 = 'A01P'
private integer B2 = 'A01Q'
private integer B4 = 'A01R'
private integer B8 = 'A01S'
private integer B16 = 'A01T'
private integer B32 = 'A01U'
private integer B64 = 'A01V'
private integer B128 = 'A01W'
private integer B256 = 'A01X'
endglobals
function AdjustAGIBonus takes unit u, real bonus returns nothing
local real b = bonus
if b >= 256 then
set b = b - 256
call UnitAddAbility(u,B256)
else
call UnitRemoveAbility(u,B256)
endif
if b >= 128 then
set b = b - 128
call UnitAddAbility(u,B128)
else
call UnitRemoveAbility(u,B128)
endif
if b >= 64 then
set b = b - 64
call UnitAddAbility(u,B64)
else
call UnitRemoveAbility(u,B64)
endif
if b >= 32 then
set b = b - 32
call UnitAddAbility(u,B32)
else
call UnitRemoveAbility(u,B32)
endif
if b >= 16 then
set b = b - 16
call UnitAddAbility(u,B16)
else
call UnitRemoveAbility(u,B16)
endif
if b >= 8 then
set b = b - 8
call UnitAddAbility(u,B8)
else
call UnitRemoveAbility(u,B8)
endif
if b >= 4 then
set b = b - 4
call UnitAddAbility(u,B4)
else
call UnitRemoveAbility(u,B4)
endif
if b >= 2 then
set b = b - 2
call UnitAddAbility(u,B2)
else
call UnitRemoveAbility(u,B2)
endif
if b >= 1 then
set b = b - 1
call UnitAddAbility(u,B1)
else
call UnitRemoveAbility(u,B1)
endif
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library AdjustSTR
globals
private integer B1 = 'A014'
private integer B2 = 'A015'
private integer B4 = 'A01Y'
private integer B8 = 'A01Z'
private integer B16 = 'A020'
private integer B32 = 'A021'
private integer B64 = 'A022'
private integer B128 = 'A023'
private integer B256 = 'A024'
endglobals
function AdjustSTRBonus takes unit u, real bonus returns nothing
local real b = bonus
if b >= 256 then
set b = b - 256
call UnitAddAbility(u,B256)
else
call UnitRemoveAbility(u,B256)
endif
if b >= 128 then
set b = b - 128
call UnitAddAbility(u,B128)
else
call UnitRemoveAbility(u,B128)
endif
if b >= 64 then
set b = b - 64
call UnitAddAbility(u,B64)
else
call UnitRemoveAbility(u,B64)
endif
if b >= 32 then
set b = b - 32
call UnitAddAbility(u,B32)
else
call UnitRemoveAbility(u,B32)
endif
if b >= 16 then
set b = b - 16
call UnitAddAbility(u,B16)
else
call UnitRemoveAbility(u,B16)
endif
if b >= 8 then
set b = b - 8
call UnitAddAbility(u,B8)
else
call UnitRemoveAbility(u,B8)
endif
if b >= 4 then
set b = b - 4
call UnitAddAbility(u,B4)
else
call UnitRemoveAbility(u,B4)
endif
if b >= 2 then
set b = b - 2
call UnitAddAbility(u,B2)
else
call UnitRemoveAbility(u,B2)
endif
if b >= 1 then
set b = b - 1
call UnitAddAbility(u,B1)
else
call UnitRemoveAbility(u,B1)
endif
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library AdjustINT
globals
private integer B1 = 'A016'
private integer B2 = 'A025'
private integer B4 = 'A026'
private integer B8 = 'A027'
private integer B16 = 'A028'
private integer B32 = 'A029'
private integer B64 = 'A02A'
private integer B128 = 'A02B'
private integer B256 = 'A02C'
endglobals
function AdjustINTBonus takes unit u, real bonus returns nothing
local real b = bonus
if b >= 256 then
set b = b - 256
call UnitAddAbility(u,B256)
else
call UnitRemoveAbility(u,B256)
endif
if b >= 128 then
set b = b - 128
call UnitAddAbility(u,B128)
else
call UnitRemoveAbility(u,B128)
endif
if b >= 64 then
set b = b - 64
call UnitAddAbility(u,B64)
else
call UnitRemoveAbility(u,B64)
endif
if b >= 32 then
set b = b - 32
call UnitAddAbility(u,B32)
else
call UnitRemoveAbility(u,B32)
endif
if b >= 16 then
set b = b - 16
call UnitAddAbility(u,B16)
else
call UnitRemoveAbility(u,B16)
endif
if b >= 8 then
set b = b - 8
call UnitAddAbility(u,B8)
else
call UnitRemoveAbility(u,B8)
endif
if b >= 4 then
set b = b - 4
call UnitAddAbility(u,B4)
else
call UnitRemoveAbility(u,B4)
endif
if b >= 2 then
set b = b - 2
call UnitAddAbility(u,B2)
else
call UnitRemoveAbility(u,B2)
endif
if b >= 1 then
set b = b - 1
call UnitAddAbility(u,B1)
else
call UnitRemoveAbility(u,B1)
endif
endfunction
endlibrary
//TESH.scrollpos=4
//TESH.alwaysfold=0
scope ShopSetup initializer ShopSetUp
private function AddPage takes unit shop, integer i, integer number, integer page returns nothing
local unit u = CreateUnit(Player(15),page,GetUnitX(shop),GetUnitY(shop),0)
local integer a = GetHandleId(u)
call SetUnitPathing(u,false)
call SetUnitX(u,GetUnitX(shop))
call SetUnitY(u,GetUnitY(shop))
call SaveUnitHandle(ht,i,number,u) //Saving the sub shop in teh shop
call SaveInteger(ht,a,1,number) //Saving the sub shops page number
call SaveUnitHandle(ht,a,0,shop) //Saving the Shop in the subshop
endfunction
private function ShopSetUp takes nothing returns nothing
local unit u
local integer i
//Simple Test-Shop
set u = gg_unit_u000_0008
set i = GetHandleId(u)
call SaveBoolean(ht,i,26,true)
call SaveInteger(ht,i,0,4) //Number of pages
call AddPage(u,i,1,'u002') //Potions
call AddPage(u,i,2,'u001') //Simple Set
call AddPage(u,i,3,'u004') //Simple Set2
call AddPage(u,i,4,'u003') //DeRegz0r
//Other Shops
endfunction
endscope
//TESH.scrollpos=81
//TESH.alwaysfold=0
scope Offers initializer init
globals
private string array BuyText [20]
boolean array display [6]
integer array lastdisplay [6]
endglobals
private function delayed takes integer i returns nothing
set display[i] = false
call TriggerSleepAction(0.50)
set display[i] = true
endfunction
function resetoffer takes integer i returns nothing
call TriggerSleepAction(90.00)
if lastdisplay[i] == 19 then
set lastdisplay[i] = 0
endif
endfunction
private function Actions takes nothing returns nothing
local player p = GetOwningPlayer(GetBuyingUnit())
local integer i = GetRandomInt(1,19)
local integer id = GetPlayerId(p)
local real costs = GetItemCosts(GetSoldItem())
if LoadInteger(ht,GetHandleId(GetTriggerUnit()),1) == 0 or GetItemTypeId(GetSoldItem()) == 'I00N' or GetItemTypeId(GetSoldItem()) == 'I00M' or GetItemTypeId(GetSoldItem()) == 'I00V' then
return
endif
loop
exitwhen i != lastdisplay[id] and i != 10 //Potion Bonuse ausgeschlossen
set i = GetRandomInt(1,19)
endloop
if display[GetPlayerId(p)] == true and p == GetLocalPlayer() then
if lastdisplay[id] == 19 then
set i = 20
call resetoffer.execute(id)
endif
call DisplayShopText(GetTriggerUnit(),BuyText[i],"|cfffff888",-1000)
set lastdisplay[id] = i
call delayed(id)
if i == 11 then //15% back
call DisplayShopText(GetBuyingUnit(),"+"+I2S(R2I(0.15*costs)),"|cffffcc00",0)
call DestroyEffect(AddSpecialEffectTarget("UI\\Feedback\\GoldCredit\\GoldCredit.mdl",GetBuyingUnit(),"chest"))
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD)+R2I(costs*0.15))
endif
if i == 12 then //25% back
call DisplayShopText(GetBuyingUnit(),"+"+I2S(R2I(0.25*costs)),"|cffffcc00",0)
call DestroyEffect(AddSpecialEffectTarget("UI\\Feedback\\GoldCredit\\GoldCredit.mdl",GetBuyingUnit(),"chest"))
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD)+R2I(costs*0.25))
endif
if i == 20 then //20% deal
call DisplayShopText(GetBuyingUnit(),"+"+I2S(R2I(0.20*costs)),"|cffffcc00",0)
call DestroyEffect(AddSpecialEffectTarget("UI\\Feedback\\GoldCredit\\GoldCredit.mdl",GetBuyingUnit(),"chest"))
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD)+R2I(costs*0.20))
endif
if i == 10 then
//Potion Bonus
endif
endif
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger t = CreateTrigger( )
local integer i = 0
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SELL_ITEM )
call TriggerAddAction( t, function Actions )
loop
exitwhen i > 6
set display[i] = true
set i = i + 1
endloop
set BuyText[1] = "Thank you"
set BuyText[2] = "Have a good day"
set BuyText[3] = "Thanks alot"
set BuyText[4] = "I would be happy to see you again"
set BuyText[5] = "A good choise"
set BuyText[6] = "Great choise"
set BuyText[7] = "I would be honoured to see you again"
set BuyText[8] = "I hope you will have fun with it"
set BuyText[9] = "Come again"
set BuyText[10] = "Thanks for your buy, here you got a potion for free"
set BuyText[11] = "Ill give you 15% on that just because its you"
set BuyText[12] = "Ive got a good day - Here , i discount you 25% of the price"
set BuyText[13] = "I hope you like my prices"
set BuyText[14] = "A nice item you bought there"
set BuyText[15] = "A high quality Item"
set BuyText[16] = "Anything else?"
set BuyText[17] = "Buy MOARRR!!!11.. ehh.. i mean thanks"
set BuyText[18] = "Thanks for your visit"
set BuyText[19] = "Ok, heres a deal - ill give you 20% on the next item you buy now"
set BuyText[20] = "As promised you get 20% of the price back"
endfunction
endscope
//TESH.scrollpos=1
//TESH.alwaysfold=0
scope SelectShop initializer InitShop
private function action takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer i = GetHandleId(u)
local player p = GetTriggerPlayer()
if LoadBoolean(ht,i,26) == true then
call NormalInventory(Hero[GetPlayerId(p)])
if (GetLocalPlayer() == p) then
call ClearSelection()
call SelectUnit(LoadUnitHandle(ht,i,1), true)
endif
endif
endfunction
private function InitShop takes nothing returns nothing
local trigger trig = CreateTrigger()
local integer i = 0
loop
exitwhen i >= 7
call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SELECTED, null)
set i = i + 1
endloop
call TriggerAddAction( trig, function action )
endfunction
endscope
//TESH.scrollpos=10
//TESH.alwaysfold=0
scope PageUpDown initializer init
private function cond takes nothing returns boolean
return 'I00M' == GetItemTypeId(GetSoldItem()) or 'I00N' == GetItemTypeId(GetSoldItem())
endfunction
private function action takes nothing returns nothing
local unit u = GetSellingUnit()
local integer i = GetHandleId(u)
local player p = GetOwningPlayer(GetBuyingUnit())
local integer page = LoadInteger(ht,i,1)
local unit shop = LoadUnitHandle(ht,i,0)
local integer ii = GetHandleId(shop)
if 'I00M' == GetItemTypeId(GetSoldItem()) then
set page = page + 1
elseif 'I00N' == GetItemTypeId(GetSoldItem()) then
set page = page - 1
endif
if page > LoadInteger(ht,ii,0) then
set page = 1
elseif page == 0 then
set page = LoadInteger(ht,ii,0)
endif
if (GetLocalPlayer() == p) then
call ClearSelection()
call SelectUnit(LoadUnitHandle(ht,ii,page), true)
endif
endfunction
private function init takes nothing returns nothing
local trigger tr = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( tr, EVENT_PLAYER_UNIT_SELL_ITEM )
call TriggerAddCondition( tr, Condition( function cond) )
call TriggerAddAction(tr, function action )
endfunction
endscope
//TESH.scrollpos=18
//TESH.alwaysfold=0
library SmithSetup initializer Setup
function AddItemToSmith takes integer base , integer upgrade , integer fakeupgrade, integer shop returns nothing
//call SaveInteger(ht,base,0,shop) //Shop in Base
local unit u = CreateUnit(Player(15),shop,0,0,0)
call SaveInteger(ht,shop,0,base) //Base in Shop
call SaveStr(ht,shop,1,"smith")
call SaveStr(ht,base,1,"upgr")
call SaveInteger(ht,fakeupgrade,0,upgrade) // Upgrade in Fake
call SaveUnitHandle(ht,base,0,u)
endfunction
function AddFurtherItem takes integer upgrade , integer fakeupgrade returns nothing
call SaveInteger(ht,fakeupgrade,0,upgrade) // Upgrade in Fake
endfunction
private function Setup takes nothing returns nothing
// Simple Sword Upgrade // BASE // UPGR // FAKE // SHOP
// UPGR // FAKE
call AddItemToSmith( 'I001', 'I00Z', 'I00X', 'u008')//II
call AddFurtherItem('I00W', 'I00Y')//III
call AddFurtherItem('I011', 'I010')//IV
call AddFurtherItem('I012', 'I013')//I
call AddItemToSmith( 'I012', 'I014', 'I015', 'u009')//V
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Simple Axe Upgrade // BASE // UPGR // FAKE // SHOP
// UPGR // FAKE
call AddItemToSmith( 'I00P', 'I016', 'I017', 'u00A')//I
call AddFurtherItem('I018', 'I019')//II
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Simple Wand Upgrade // BASE // UPGR // FAKE // SHOP
// UPGR // FAKE
call AddItemToSmith( 'I00J', 'I01C', 'I01D', 'u00B')//I
call AddFurtherItem('I01F', 'I01G')//II
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//SimpleDaggerUpgrade// BASE // UPGR // FAKE // SHOP
// UPGR // FAKE
call AddItemToSmith( 'I00Q', 'I01H', 'I01I', 'u00C')//I
endfunction
endlibrary
//TESH.scrollpos=103
//TESH.alwaysfold=0
scope SmithShop initializer init
globals
unit tempunit
item tempitem
integer tempslot
item array currit [6]
private string array BuyText [20]
private integer array lastdisplay [6]
private unit array lastsmith [6]
endglobals
private function Actions1 takes nothing returns nothing //drops item
if GetUnitTypeId(GetTriggerUnit()) == 'u005' then
return
endif
set tempitem = GetManipulatedItem()
set tempunit = GetTriggerUnit()
set tempslot = GetItemSlot(tempunit,tempitem)
endfunction
private function Actions2 takes nothing returns nothing //Gets item
local unit u
local integer i
local integer id = GetPlayerId(GetOwningPlayer(tempunit))
if LoadStr(ht,GetItemTypeId(GetManipulatedItem()),1) == "upgr" and currit[id] == null and GetUnitTypeId(GetTriggerUnit()) == 'u005' and GetManipulatedItem() == tempitem then
set u = LoadUnitHandle(ht,GetItemTypeId(tempitem),0)
call SetUnitX(u,GetUnitX(GetTriggerUnit()))
call SetUnitY(u,GetUnitY(GetTriggerUnit()))
set currit[id] = tempitem
call UnitAddItem(tempunit,tempitem)
call UnitDropItemSlot( tempunit, tempitem, tempslot )
call SetItemDroppable(tempitem, false )
if (GetLocalPlayer() == GetOwningPlayer(tempunit)) then
call ClearSelection()
call SelectUnit(u,true)
endif
set lastsmith[id] = GetTriggerUnit()
elseif GetUnitTypeId(GetTriggerUnit()) == 'u005' and GetManipulatedItem() == tempitem then
call UnitAddItem(tempunit,tempitem)
if (GetLocalPlayer() == GetOwningPlayer(tempunit)) then
call DisplayShopText(lastsmith[id],"I cannot upgrade this item","1111|cfffff888",0)
endif
endif
endfunction
private function Actions3 takes nothing returns nothing //Deselect shmith
local player p = GetTriggerPlayer()
local integer id = GetPlayerId(p)
//call KillUnit(GetTriggerUnit())
if LoadStr(ht,GetUnitTypeId(GetTriggerUnit()),1) != "smith" and currit[id] != null then
call SetItemDroppable(currit[id], true )
set currit[id] = null
endif
endfunction
private function Actions4 takes nothing returns nothing //Buy fake item
local integer i = GetItemTypeId(GetSoldItem())
local unit u = GetBuyingUnit()
local integer slot = 0
local integer id = GetPlayerId(GetOwningPlayer(u))
local integer it = LoadInteger(ht,i,0)
local item ite
local integer ii = GetRandomInt(1,18)
loop
exitwhen ii != lastdisplay[id]
set ii = GetRandomInt(1,18)
endloop
if it != 0 then
set slot = GetItemSlot(u,currit[id])
call RemoveItem(currit[id])
set currit[id]= null
set ite = UnitAddItemById(GetBuyingUnit(),it)
call UnitDropItemSlot(u, ite, slot )
if (GetLocalPlayer() == GetOwningPlayer(u)) then
call DisplayShopText(lastsmith[id],BuyText[ii],"|cfffff888",0)
call ClearSelection()
call SelectUnit(Hero[id],true)
endif
endif
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
local trigger tr2 = CreateTrigger()
local trigger tr3 = CreateTrigger()
local trigger tr4 = CreateTrigger()
local integer i = 0
call TriggerRegisterAnyUnitEventBJ( tr, EVENT_PLAYER_UNIT_DROP_ITEM )
call TriggerAddAction( tr, function Actions1 )
call TriggerRegisterAnyUnitEventBJ( tr2, EVENT_PLAYER_UNIT_PICKUP_ITEM )
call TriggerAddAction( tr2, function Actions2 )
loop
exitwhen i >= 7
call TriggerRegisterPlayerUnitEvent(tr3, Player(i), EVENT_PLAYER_UNIT_SELECTED, null)
set i = i + 1
endloop
call TriggerAddAction( tr3, function Actions3 )
call TriggerRegisterAnyUnitEventBJ( tr4, EVENT_PLAYER_UNIT_SELL_ITEM )
call TriggerAddAction( tr4, function Actions4 )
set BuyText[1] = "Thank you"
set BuyText[2] = "Have a good day"
set BuyText[3] = "Here you go"
set BuyText[6] = "have fun with it"
set BuyText[7] = "Come again"
set BuyText[8] = "A high quality Item"
set BuyText[9] = "Anything else?"
set BuyText[10] = "Thanks for you visit"
set BuyText[11] = "Bambabam!!"
set BuyText[12] = "Yoo, im teh Smith"
set BuyText[13] = "Thats my job"
set BuyText[14] = "SHEZAAAM!!"
set BuyText[15] = "*smith* *smith*"
set BuyText[16] = "Stop - Hammertime !"
set BuyText[17] = "Ive got the biggest Hammer"
set BuyText[18] = "Go and slaughter some enemys"
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope ForestSpawn initializer Spawn
private function Spawn takes nothing returns nothing
call AddSpawnToHut(gg_unit_n003_0043,Player(11),'n001',270,800,4,8,1000,"",4,8)
call AddSpawnToHut(gg_unit_n003_0044,Player(11),'n001',320,800,4.5,6,1000,"",3,8)
call AddSpawnToHut(gg_unit_n003_0044,Player(11),'n002',320,800,5,4,1000,"",3,8)
call AddSpawnToHut(gg_unit_n003_0045,Player(11),'n001',320,600,3,4,1000,"",3,8)
call AddSpawnToHut(gg_unit_n003_0046,Player(11),'n002',320,1000,4,4,1000,"",3,8)
call AddSpawnToHut(gg_unit_n003_0047,Player(11),'n002',340,1000,3.5,5,1000,"",5,10)
//Gnoll Path
call AddSpawnToHut(gg_unit_n003_0052,Player(11),'n001',270,800,3,8,1000,"",4,8)
call AddSpawnToHut(gg_unit_n003_0053,Player(11),'n002',270,800,2,6,1000,"",4,8)
call AddSpawnToHut(gg_unit_n003_0058,Player(11),'n001',270,800,4,8,1000,"",4,8)
call AddSpawnToHut(gg_unit_n003_0059,Player(11),'n002',270,800,4,8,1000,"",4,8)
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
library ItemSets initializer SetUp
globals
integer array DeRegzor [4]
integer NUMDeRegzor = 4
integer array SimpleSet [6]
integer NUMSimpleSet = 6
endglobals
private function SetUp takes nothing returns nothing
//Simple Set
set SimpleSet[0] = 'I001' //Sword
set SimpleSet[1] = 'I009' //Shield
set SimpleSet[2] = 'I00G' //Armor
set SimpleSet[3] = 'I00H' //Ring
set SimpleSet[4] = 'I00I' //Helmet
set SimpleSet[5] = 'I00J' //Wand
set SimpleSet[6] = 'I00K' //Cloak
//DeRegzors Items
set DeRegzor[0] = 'I00A' //Amulet
set DeRegzor[1] = 'I00B' //Armor
set DeRegzor[2] = 'I00E' //Helmet
set DeRegzor[3] = 'I00C' //Axe
set DeRegzor[4] = 'I00F' //Staff
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library Bounty uses Display
function GiveBounty takes unit u, player p, integer amount returns nothing
local integer i = 0
call TriggerSleepAction(0.30)
call AdjustPlayerStateBJ( R2I(amount * 0.60) , p, PLAYER_STATE_RESOURCE_GOLD )
call DisplayBounty(u,R2I(amount * 0.60),p)
loop
exitwhen i == 6
if i != GetPlayerId(p) then
call DisplayBounty(u,R2I(amount * 0.12),Player(i))
call AdjustPlayerStateBJ( R2I(amount * 0.12) , Player(i), PLAYER_STATE_RESOURCE_GOLD )
endif
set i = i + 1
endloop
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library Drop1 uses GlobalFunction
function SIMPLE3 takes unit u returns nothing
local real x = GetRandomReal(0,100)
if x <= 6.00 then //doubled rate for testing ;)
call CreateDrop(SimpleSet[GetRandomInt(0,NUMSimpleSet)],u)
endif
endfunction
function SIMPLE5 takes unit u returns nothing
local real x = GetRandomReal(0,100)
if x <= 5.00 then
call CreateDrop(SimpleSet[GetRandomInt(0,NUMSimpleSet)],u)
endif
endfunction
function SIMPLE75 takes unit u returns nothing
local real x = GetRandomReal(0,100)
if x <= 75.00 then
call CreateDrop(SimpleSet[GetRandomInt(0,NUMSimpleSet)],u)
endif
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library Drop2 uses GlobalFunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library Drop3 uses GlobalFunction
function OMGDROP takes unit u returns nothing
local real x = GetRandomReal(0,100)
if x <= 100.00 then
call CreateDrop('I002',u)
endif
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library Drop4 uses GlobalFunction
function HUGEGNOLL takes unit u returns nothing
local real x = GetRandomReal(0,100)
if x <= 50.0 then
call CreateDrop('I01K',u)
else
call CreateDrop('I01J',u)
endif
endfunction
endlibrary
//TESH.scrollpos=8
//TESH.alwaysfold=0
scope ItemDropEventForest initializer init
function Checks takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer ut = GetUnitTypeId(u)
if LoadBoolean(ht,GetHandleId(u),27) == false then
return
endif
//Small Spider and murlocc
if ut == 'nspr' or ut == 'nmrl' then
call SIMPLE5(u)
endif
//Small Gnoll / Small Ranged Gnoll
if ut == 'n001' or ut == 'n002' then
call SIMPLE3(u)
call GiveBounty(u,GetOwningPlayer(GetKillingUnit()),GetRandomInt(3,8))
endif
//Big Gnoll
if ut == 'n004' then
call SIMPLE75(u)
call GiveBounty(u,GetOwningPlayer(GetKillingUnit()),GetRandomInt(50,90))
endif
//Gnoll Boss
if ut == 'n006' then
call HUGEGNOLL(u)
call GiveBounty(u,GetOwningPlayer(GetKillingUnit()),GetRandomInt(120,200))
endif
//Panda Epic
if ut == 'n000' then
call OMGDROP(u)
endif
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger( )
call TriggerRegisterPlayerUnitEvent( tr, Player(11), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerAddAction( tr, function Checks )
endfunction
endscope
//TESH.scrollpos=13
//TESH.alwaysfold=0
library CreepStats initializer SetUpCreepStats
function SaveStats takes integer id, real crit, real critmulti, real block, real res, real spellres returns nothing
call SaveReal(ht,id,1,crit) //Crit
call SaveReal(ht,id,2,critmulti) //Critmulti
call SaveReal(ht,id,3,block) //block
call SaveReal(ht,id,4,res) //res
call SaveReal(ht,id,5,spellres) //spellres
endfunction
function SetUpCreepStats takes nothing returns nothing
local integer i = 0
set i = 'n001' //Small Gnoll
//!////////////////CRIT/CRITM/BLOCK/RESIST/SPELLRES
call SaveStats(i, 5.0, 75.0, 0.0, 15.0, -25.0)
set i = 'n002' //Small Ranged Gnoll
//!////////////////CRIT/CRITM/BLOCK/RESIST/SPELLRES
call SaveStats(i, 15.0, 90.0, 0.0, -20.0, 0.0)
set i = 'n004' //Big Gnoll
//!////////////////CRIT/CRITM/BLOCK/RESIST/SPELLRES
call SaveStats(i, 10.0, 60.0, 5.0, 20.0, 0.0)
set i = 'n006' //Gnoll Boss
//!////////////////CRIT/CRITM/BLOCK/RESIST/SPELLRES
call SaveStats(i, 10.0, 50.0, 15.0, 0.0, -20.0)
set i = 'nspr' //Little Spider
//!////////////////CRIT/CRITM/BLOCK/RESIST/SPELLRES
call SaveStats(i, 5.0, 75.0, 15.0, 0.0, 0.0)
set i = 'nmrl' //Murloc
//!///////////////CRIT/CRITM/BLOCK/RESIST/SPELLRES
call SaveStats(i, 25.0, 75.0, 0.0, 0.0, 20.0)
set i = 'n000' //Panda
//!///////////////CRIT/CRITM/BLOCK/RESIST/SPELLRES
call SaveStats(i, 15.0, 75.0, 0.0, 70.0, -25.0)
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope GashStrike initializer init
globals
private integer GashStrike = 'A008'
integer GashBuff = 'B002'
real GashMulti = 1.5
//Spell
endglobals
private function Damage takes integer level returns real
return 80.0 + 60.0 * level
endfunction
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == GashStrike
endfunction
private function Actions takes nothing returns nothing
local unit u = GetSpellTargetUnit()
local unit b = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(b,GashStrike)
call SpellDamageTarget(u,b,Damage(level))
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=22
//TESH.alwaysfold=0
scope DeathWish initializer init
globals
private integer Spell = 'A01B'
endglobals
private function RunCondition takes nothing returns boolean
return GetIssuedOrderId() == 1093677378 or OrderId2String(GetIssuedOrderId()) == "unimmolation" or OrderId2String(GetIssuedOrderId()) == "immolation"
endfunction
private function IASBonus takes integer level returns real
return 0.3 + level * 0.1
endfunction
private function negreg takes integer level returns real
return 1.0 + level
endfunction
private function DMGBonus takes integer level returns integer
return 24 + 12 * level
endfunction
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer id = GetPlayerId(GetOwningPlayer(u))
local integer i = GetHandleId(u)
local integer lvl = GetUnitAbilityLevel(u,Spell)
if GetIssuedOrderId() == 1093677378 then
if LoadBoolean(ht,i,51) == true then
set HPReg[id] = HPReg[id] + negreg(lvl-1) - negreg(lvl)
set BonusIAS[id] = BonusIAS[id] - IASBonus(lvl-1)+ IASBonus(lvl)
call AdjustIASBonus(u,BonusIAS[id])
set BonusDMG[id] = BonusDMG[id] - DMGBonus(lvl-1)+ DMGBonus(lvl)
call AdjustDMGBonus(u,BonusDMG[id])
endif
elseif OrderId2String(GetIssuedOrderId()) == "unimmolation" then
call SaveBoolean(ht,i,51,false)
set HPReg[id] = HPReg[id] + negreg(lvl)
set BonusIAS[id] = BonusIAS[id] - IASBonus(lvl)
call AdjustIASBonus(u,BonusIAS[id])
set BonusDMG[id] = BonusDMG[id] - DMGBonus(lvl)
call AdjustDMGBonus(u,BonusDMG[id])
elseif OrderId2String(GetIssuedOrderId()) == "immolation" then
call SaveBoolean(ht,i,51,true)
set HPReg[id] = HPReg[id] - negreg(lvl)
set BonusIAS[id] = BonusIAS[id] + IASBonus(lvl)
call AdjustIASBonus(u,BonusIAS[id])
set BonusDMG[id] = BonusDMG[id] + DMGBonus(lvl)
call AdjustDMGBonus(u,BonusDMG[id])
endif
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( tr, EVENT_PLAYER_UNIT_ISSUED_ORDER )
call TriggerAddCondition( tr, Condition( function RunCondition) )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope CalculatedStrike initializer init
globals
integer CS = 'A01C'
//Spell
private real TimerPeriod = 0.02
//Execution Speed
private string TTBase = "|cffc3dbff[llllllllll]|r"
endglobals
globals
private timer t = CreateTimer()
endglobals
private function RunCondition takes nothing returns boolean
return GetLearnedSkill() == CS and GetUnitAbilityLevel(GetTriggerUnit(),CS) == 1
endfunction
private function GetColoredTT takes integer charge returns string
local integer i = 0
local string s = "|cffc3dbff["
loop
exitwhen i >= 10
if i < charge then
set s = s + "|c00fefc56l|r"
else
set s = s + "|cffc3dbffl|r"
endif
set i = i + 1
endloop
return s + "|cffc3dbff]"
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
loop
//Looping through all structs
exitwhen i >= CSTT.Index
call SetTextTagText(CSTT.Data[i].tt,GetColoredTT(LoadInteger(ht,GetHandleId(CSTT.Data[i].u),52)), 0.018)
call SetTextTagPos(CSTT.Data[i].tt, GetUnitX(CSTT.Data[i].u)-45, GetUnitY(CSTT.Data[i].u)-70, 0)
if GetWidgetLife(CSTT.Data[i].u) >= 0.405 then
call SetTextTagVisibility(CSTT.Data[i].tt, true)
else
call SetTextTagVisibility(CSTT.Data[i].tt, false)
endif
set i = i + 1
endloop
if CSTT.Index == 0 then
call PauseTimer(t)
endif
endfunction
struct CSTT
static integer Index = 0
static CSTT array Data
unit u
texttag tt
static method create takes unit u returns CSTT
local CSTT d = CSTT.allocate()
local player p = GetOwningPlayer(u)
local integer i = GetHandleId(u)
call SaveInteger(ht,i,52,0)
set d.tt = CreateTextTag()
set d.u = u
call SetTextTagText(d.tt, TTBase, 0.018)
call SetTextTagPos(d.tt, GetUnitX(u)-45, GetUnitY(u)-70, 0)
call SetTextTagColor(d.tt,255,255,255,255)
call SetTextTagPermanent(d.tt,true)
if GetLocalPlayer() == GetOwningPlayer(u) then
call SetTextTagVisibility(d.tt, true)
else
call SetTextTagVisibility(d.tt, false)
endif
set p = null
set CSTT.Data[CSTT.Index] = d
//Starting the timer if it isnt already
if d.Index == 0 then
call TimerStart(t, TimerPeriod, true, function Callback)
endif
set d.Index = d.Index + 1
return d
endmethod
endstruct
private function Actions takes nothing returns nothing
call CSTT.create(GetTriggerUnit())
endfunction
//===========================================================================
private function init takes nothing returns nothing
local integer index = 0
local boolexpr cond = Condition( function RunCondition )
local trigger tr = CreateTrigger( )
set nullfilter = Filter(function NullFilter)
loop
call TriggerRegisterPlayerUnitEvent(tr, Player(index),EVENT_PLAYER_HERO_SKILL, nullfilter)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition( tr, cond )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=35
//TESH.alwaysfold=0
scope CSDMG initializer init
globals
private real Range = 255
private real Speed = 22
private timer t = CreateTimer()
private real TimerPeriod = 0.02
private integer Dumm = 'h002'
endglobals
private function Damage takes integer level, integer charge returns real
return 180.0 + (12 + level *12.0) * charge
endfunction
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == CS
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
local integer a = 0
local CSM d
loop
//Looping through all structs
exitwhen i >= CSM.Index
set d =CSM.Data[i]
set d.x = d.x - Speed
set a = 0
loop
exitwhen a >= d.n
call SetUnitX(d.Dummy[a],GetUnitX(d.target) + d.x*Cos(-(d.x/200.0)+(a+1) * (2*bj_PI/d.n) ) )
call SetUnitY(d.Dummy[a],GetUnitY(d.target) + d.x*Sin(-(d.x/200.0)+(a+1) * (2*bj_PI/d.n) ) )
set a = a + 1
endloop
if d.x <= 30 then
call SpellDamageTarget(d.target,d.caster,d.dmg)
set d.caster = null
set d.target = null
set a = 0
loop
exitwhen a >= d.n
call KillUnit(d.Dummy[a])
set d.Dummy[a] = null
set a = a + 1
endloop
call CSM.destroy(d)
set CSM.Index = CSM.Index - 1
set CSM.Data[i] = CSM.Data[CSM.Index]
endif
set i = i + 1
endloop
if CSM.Index == 0 then
call PauseTimer(t)
endif
endfunction
struct CSM
static integer Index = 0
static CSM array Data
unit array Dummy [10]
unit caster
unit target
integer n
real dmg
real x
static method create takes unit c, unit ta, integer n, real dmg returns CSM
local CSM d = CSM.allocate()
local integer i = 0
// Setting all Variables
set d.caster = c
set d.target = ta
set d.n = n
set d.dmg = dmg
set CSM.Data[CSM.Index] = d
set d.x = Range
//Creating Dummies
loop
exitwhen i == d.n
set d.Dummy[i] = CreateUnit(Player(14),Dumm,GetUnitX(ta) + Range * Cos(-(d.x/200.0)+(i+1)*(2*bj_PI/d.n)),GetUnitY(ta) + Range * Sin(-(d.x/200.0)+(i+1)*(2*bj_PI/d.n)),0)
set i = i +1
endloop
//Starting the timer if it isnt already
if d.Index == 0 then
call TimerStart(t, TimerPeriod, true, function Callback)
endif
set d.Index = d.Index + 1
return d
endmethod
endstruct
private function Actions takes nothing returns nothing
local unit u = GetSpellTargetUnit()
local unit b = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(b,CS)
call CSM.create(b,u,5+(LoadInteger(ht,GetHandleId(b),52)/2),Damage(level,LoadInteger(ht,GetHandleId(b),52)))
call SaveInteger(ht,GetHandleId(b),52,0)
call RemoveUnit(CreateUnit(Player(15),Dumm,0,0,0))
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=41
//TESH.alwaysfold=0
scope CombatOutrage initializer init
private function duration takes integer level returns real
return 10.0 + 4.0 * level
endfunction
private function DamageBonus takes integer level returns real
return 4.0
endfunction
private function IASBonus takes integer level returns real
return 0.05
endfunction
private function Stack takes integer level returns integer
return 4 + 2 * level
endfunction
private function AddBonus takes unit u, integer level returns nothing
local integer h = GetHandleId(u)
local integer id = GetPlayerId(GetOwningPlayer(u))
local integer stack = LoadInteger(ht,h,53)
local integer x
set stack = stack + 1
call SaveInteger(ht,h,53,stack)
if stack <= Stack(level) then
set x = stack - LoadInteger(ht,h,54)
call SaveInteger(ht,h,54,LoadInteger(ht,h,54)+x)
set BonusIAS[id] = BonusIAS[id] + x*IASBonus(level)
call AdjustIASBonus(u,BonusIAS[id])
set BonusDMG[id] = BonusDMG[id] + x*DamageBonus(level)
call AdjustDMGBonus(u,BonusDMG[id])
endif
call TriggerSleepAction(duration(level))
set stack = LoadInteger(ht,h,53) - 1
call SaveInteger(ht,h,53,stack)
if stack < Stack(level) and stack < LoadInteger(ht,h,54) then
set x = LoadInteger(ht,h,54) - 1
call SaveInteger(ht,h,54,x)
set BonusIAS[id] = BonusIAS[id] - IASBonus(level)
call AdjustIASBonus(u,BonusIAS[id])
set BonusDMG[id] = BonusDMG[id] - DamageBonus(level)
call AdjustDMGBonus(u,BonusDMG[id])
endif
endfunction
private function RunCondition takes nothing returns boolean
local integer i = 0
local real dx = 0
local real dy = 0
loop
exitwhen i == 7
set dx = GetUnitX(GetDyingUnit()) - GetUnitX(Hero[i])
set dy = GetUnitY(GetDyingUnit()) - GetUnitY(Hero[i])
if GetUnitTypeId(Hero[i]) == 'E000' and GetUnitAbilityLevel(Hero[i],'A01D') != 0 and SquareRoot(dx*dx+dy*dy) <= 200 then
call AddBonus.execute(Hero[i],GetUnitAbilityLevel(Hero[i],'A01D'))
endif
set i = i + 1
endloop
return true
endfunction
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(tr, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( tr,Condition( function RunCondition ) )
endfunction
endscope
//TESH.scrollpos=318
//TESH.alwaysfold=0
/////////////////////////////////////////////////////////////////////////////////////////////////
// Live Distortion 1.08b (1.24 compatible)
// Created by JonNny
//
// ° Mapmaking since 2006...
// °
// °
// °
// °°°ÛÜ
// °°X°ÛÛÛ ÛÛÛÛÛÛÛÛ ÿÜÛÛÛÛÛÛÛÛÜ
// °°XX° ÛÛÛ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛß ßÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXX°° ÛÛÛÛÛÛÜ ÛÛÛÜ ÛÛÛÛÛ ßÛÛÛÛÛ ßÛÛÛÛ ÛÛÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÜ
// ÛÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÜÛÛÛÛÛÛ
// °°XXXXX° ÛÛÛÛ ÛÛÛÜ ÛÛÛÛÛ ÛÛÛÛÛÛÜ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXXXX °° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛ °°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°° ÛÛÛÛÛÛÛÛÛÛÛÛÛß
// ° XXXXX °°ÛÛÛÛÛ°°°°ÛÛÛÛÛÛÛÛ°°XX ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ XXX°°ÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛ
// °° XXXXX ÜÛÛÛÛÛÛ X ÛÛÛÛÛÛÛÛÛ XXX ÛÛÛÛÛÛÛÛÛÛÛ XXXXXX ÛÛÛÛÛÛÛ° ÛÛÛ
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°° °°°°
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°X°°
// °°° XXXXXXXXXX °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° XXXXXXXXXXXXXXXXX°°
// °°°°°°°°°°°°°°°° °°°°°°°° XXXXXXX °°°
// °°°°°° XX °°
// ...2009 and still moving on. °°°°°°°
// °°
//
// What do you need to import this Spell:
// -Your Ability
// -A missile dummy
// -A Spell for the Buff
// -A simple dummy to cast the Buff
//
//
//1. Create all needed things mentioned above.
//2. Copy the code into your map (also GroupUtils if it does not already exist)
//3. Adjust all globals matching to your created stuff :
// line 53 - Your missile dummys Rawcode;
// line 54 - Your Spells Rawcode
// line 55 - Your cast dummys Rawcode
// line 56 - Your Effect Spells Rawcode
// line 59 - The Order ID of the Effect Spell
//
// After that you should be done :)
// Thanks to : Hanky for helping to improve this script , Rising_Dusk for Feedback
//////////////////////////////////////Globals with important values////////////////////////////////////////
library LiveDistortion initializer Init uses GlobalFunction
globals
//RawCodes
private constant integer DummyID = 'h003' //The Missile dummy ID (Rawcode)
private constant integer EssenceSpell = 'A02E' //Spell ID (Rawcode)
private constant integer LiveDistortionEffectSpell = 'A02F' //The Spell which is casted on each hit enemy (Rawcode)
//Spell Related Constants
private constant string EffectOrderID = "thunderbolt" //Order ID of the Spell (LiveDistortionEffectSpell) efect whih should last after being hit
private constant real EssenceSpeed = 0.085 //Defines how fast the missiles are with setting the duration (also faster missiles with longer distance)
private constant real PercentageSpeedReduce = 0.015 //The rate the missiles get slower, a too high value causes the spell not to finish
private constant real TimerPeriod = 0.0275 //How fast the execution is
private constant real LDDummyMaxHeight = 420.00 //Height the missiles reach on their flight
private constant real LDDummyMinHeight = 80.00 //Min. Height of the missiles
private constant real SpinRate = 0.03 //The rate the Missiles begin to spin after reaching 1/2 of the way
private constant real HealthStealRange = 80.00 //the collision of the missile in which it steals damages enemies
private constant real MissileStartScale = 1.00 //The scale the missile has at the beginning
private constant real MissileScaleIncrease = 0.0 //The scale the missile gets bigger when stealing hp
private constant real ReleaseDistance = 10.00 // The Distance the missiled being released of / coming back to the caster
private constant integer MaxMissiles = 14
//Effects
private constant string HealSpecialeffect = "Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl" // Special effect when healing the caster
private constant string LiveStealEffect = "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl" // Special effect when hitting an enemy
//System Variables , Do not Change
private timer t = CreateTimer()
private boolexpr filter = null
//private unit Dummy = null
private group ENUM_GROUP = CreateGroup()
endglobals
///////////////////////////////////Defining most relevant Values////////////////////////////////////////////////
globals
private location l = Location(0,0)
endglobals
private function AddArmor takes real dur, integer arm, unit u returns nothing
local integer b = GetPlayerId(GetOwningPlayer(u))
set BonusARM[b] = BonusARM[b] + arm
call AdjustARMBonus(u,BonusARM[b])
call TriggerSleepAction(dur)
set BonusARM[b] = BonusARM[b] - arm
call AdjustARMBonus(u,BonusARM[b])
endfunction
private function GetZ takes real x, real y returns real
call MoveLocation(l,x,y)
return GetLocationZ(l)
endfunction
private constant function StunDuration takes integer level returns integer
return 2 + 2 * level
endfunction
private function EssencesPerLevel takes integer level returns integer
return 5 + level * 2
// Number of missiles created per level
endfunction
private constant function EssencesRangePerLevel takes integer level returns real
return 260.00 + 35.00 * level
// Max. Range the missiles reach on their flight (also affects their movementspeed)
endfunction
private constant function StolenHealthPerLevel takes integer level returns real
return 50.00 + level * 50.00
//Defines how much damage the missiles deal/steal
endfunction
private constant function PercentageHealPerLevel takes integer level returns real
return 0.10 + (level * 0.05)
endfunction
private function DistanceMovement takes real d returns real
return SquareRoot(Sin(d)*Sin(d))
//defining the movement of the missiles that they also come back , i suggest not to change it
endfunction
private function StealHealthCondition takes unit enemy , unit caster returns boolean
return IsPlayerEnemy(GetOwningPlayer(enemy),GetOwningPlayer(caster)) // The condition if a unit is damaged in addition to the UnitFilter
endfunction
private function HeightFunction takes real d returns real
local real x = 0.4*(3.14159 - d)
// Its a matching function for the height movement of the missiles, a parabula would have been too easy :P
return LDDummyMaxHeight * (Pow(x,-Pow(x,0.8))-1)
endfunction
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == EssenceSpell
//The condition if the spell is casted
endfunction
private function UnitFilter takes nothing returns boolean
local boolean ret = false
if not(IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL)) and not(IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE)) then
set ret = IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) and (GetWidgetLife(GetFilterUnit()) > 0.405)
endif
return ret
endfunction
///////////////////////////////////Main Struckt//Do not change//////////////////////////////////////////////
private struct Essences
static integer Index = 0
static Essences array Data
unit array EssenceDummy [MaxMissiles]
real array angle [MaxMissiles]
group array DamagedUnits [MaxMissiles]
real array MissileScale [MaxMissiles]
group GotBuff
unit Caster
integer level
real d = 0.00
integer EssenceAmount
real StolenHealth = 0
real Z
boolean ef = true
static method create takes nothing returns Essences
local Essences data = Essences.allocate()
set Essences.Data[Essences.Index] = data
set Essences.Index = Essences.Index + 1
return data
endmethod
endstruct
////////////////////////////////Main script// Do not edit unless you understand it////////////////////////////////
private function callback takes nothing returns nothing
local Essences data
local integer i = 0
local real x = 0.00
local real y = 0.00
local integer a = 0
local unit b = null
local unit dummy = null
local real c
local real dmg
local real tim
// looping through all structs
loop
exitwhen i >= Essences.Index
set data = Essences.Data[i]
set data.d = data.d + EssenceSpeed - (PercentageSpeedReduce*data.d)
set a = 0
// looping through each missile of the struct
loop
exitwhen a >= data.EssenceAmount
set dmg = GetRandomReal(1,2) * StolenHealthPerLevel(data.level)
call SetUnitX(data.EssenceDummy[a], GetUnitX(data.Caster) + (ReleaseDistance + EssencesRangePerLevel(data.level) * DistanceMovement(data.d)) * Cos(data.angle[a]))
call SetUnitY(data.EssenceDummy[a], GetUnitY(data.Caster) + (ReleaseDistance + EssencesRangePerLevel(data.level) * DistanceMovement(data.d)) * Sin(data.angle[a]))
call GroupEnumUnitsInRange(ENUM_GROUP,GetUnitX(data.EssenceDummy[a]),GetUnitY(data.EssenceDummy[a]),HealthStealRange,filter)
// looping through each unit in range of each missile
loop
set b = FirstOfGroup(ENUM_GROUP)
exitwhen b==null
call GroupRemoveUnit(ENUM_GROUP,b)
//checking if the unit is damage and stealing its hp °,.,°
if IsUnitInGroup(b,data.GotBuff) == false and IsUnitInGroup(b,data.DamagedUnits[a]) == false and data.d <= (3.14159/2) and StealHealthCondition(b,data.Caster) then
call GroupAddUnit(data.DamagedUnits[a],b)
set data.MissileScale[a] = data.MissileScale[a] + MissileScaleIncrease
call SetUnitScale(data.EssenceDummy[a],data.MissileScale[a],data.MissileScale[a],data.MissileScale[a])
set data.StolenHealth = data.StolenHealth + dmg
call SpellDamageTarget(b,data.Caster,dmg)
//call UnitDamageTarget(data.Caster,b,StolenHealthPerLevel(data.level),true, false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
call DestroyEffect(AddSpecialEffectTarget(LiveStealEffect, b, "origin") )
//casting the effect after being hit at each unit , using the group to avoid dopling dummies for one enemy
if IsUnitInGroup(b,data.GotBuff) == false then
call GroupAddUnit(data.GotBuff,b)
call AddBuff(b,data.Caster,LiveDistortionEffectSpell,EffectOrderID,StunDuration(data.level))
endif
endif
endloop
call GroupClear(ENUM_GROUP)
//setting the missiles height
set c = GetZ(GetUnitX(data.EssenceDummy[a]),GetUnitY(data.EssenceDummy[a])) - data.Z
set data.angle[a] = data.angle[a] + SpinRate * 1.5 * (data.d-1)
if (HeightFunction(data.d)) >= LDDummyMinHeight then
call SetUnitFlyHeight(data.EssenceDummy[a], HeightFunction(data.d)-c, 0)
else
call SetUnitFlyHeight(data.EssenceDummy[a], LDDummyMinHeight-c, 0)
endif
set a = a + 1
endloop
set a = 0
if data.StolenHealth == 0 then
set tim = 0.1
else
set tim = 12.2
endif
if data.d >= 3.00 and data.ef == true then
//call Eff.AddEffectTarget("Doodads\\LordaeronSummer\\Terrain\\LoardaeronRockChunks\\LoardaeronRockChunks4.mdl" ,tim,data.Caster,"chest")
call Eff.AddEffectTarget("Doodads\\LordaeronSummer\\Terrain\\LoardaeronRockChunks\\LoardaeronRockChunks0.mdl" ,tim,data.Caster,"chest")
call Eff.AddEffectTarget("Doodads\\LordaeronSummer\\Terrain\\LoardaeronRockChunks\\LoardaeronRockChunks5.mdl" ,tim,data.Caster,"foot left")
call Eff.AddEffectTarget("Doodads\\LordaeronSummer\\Terrain\\LoardaeronRockChunks\\LoardaeronRockChunks5.mdl" ,tim,data.Caster,"foot right")
call Eff.AddEffectTarget("Doodads\\LordaeronSummer\\Terrain\\LoardaeronRockChunks\\LoardaeronRockChunks0.mdl" ,tim,data.Caster,"hand left")
call Eff.AddEffectTarget("Doodads\\LordaeronSummer\\Terrain\\LoardaeronRockChunks\\LoardaeronRockChunks0.mdl" ,tim,data.Caster,"hand right")
set data.ef = false
endif
//Pi is the value the spell is finished
if data.d >= 3.14159 then
//cleaing all variables
loop
exitwhen a >= data.EssenceAmount
call RemoveUnit(data.EssenceDummy[a])
set data.EssenceDummy[a] = null
call DestroyGroup(data.DamagedUnits[a])
set data.DamagedUnits[a] = null
set a = a + 1
endloop
call DestroyEffect(AddSpecialEffectTarget(HealSpecialeffect, data.Caster, "origin"))
call DestroyGroup(data.GotBuff)
set data.GotBuff = null
//Adding Armor Bonus
if GetWidgetLife(data.Caster) > 0.405 then
if R2I(data.StolenHealth/50) != 0 then
call AddArmor.execute(12,R2I(data.StolenHealth/50),data.Caster)
call DisplayAnything(data.Caster,"|cffc3dbff+"+I2S(R2I(data.StolenHealth/50))+" Armor|r")
endif
endif
set data.Caster = null
call Essences.destroy(data)
set Essences.Data[i] = Essences.Data[Essences.Index - 1]
set i = i - 1
set Essences.Index = Essences.Index - 1
endif
set i = i + 1
endloop
set b = null
set dummy = null
endfunction
private function Actions takes nothing returns nothing
local integer a = 0
local real angle = 0.00
local unit caster = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(caster,EssenceSpell)
local real x = GetUnitX(caster)
local real y = GetUnitY(caster)
local real d = 0.00
local integer EssencesAmount = EssencesPerLevel(level)
local real z = (6.2832 / I2R(EssencesAmount)) // 6.2832 = 2Pi
local integer i = Essences.Index
// Creating the Struct
call Essences.create()
set Essences.Data[Essences.Index-1].Caster = caster
set Essences.Data[Essences.Index-1].Z = GetZ(GetUnitX(caster),GetUnitY(caster))
set Essences.Data[Essences.Index-1].level = level
set Essences.Data[Essences.Index-1].EssenceAmount = EssencesAmount
loop
exitwhen a >= EssencesAmount
// Creating the missiles here
set angle = z * a
set Essences.Data[i].angle[a] = angle
set Essences.Data[i].EssenceDummy[a] = CreateUnit(GetOwningPlayer(caster), DummyID , x + ReleaseDistance * Cos(angle),y + ReleaseDistance * Sin(angle) , angle * 57.296)
call UnitAddAbility(Essences.Data[i].EssenceDummy[a], 'Amrf' )
call UnitRemoveAbility(Essences.Data[i].EssenceDummy[a], 'Amrf' )
set Essences.Data[i].DamagedUnits[a] = CreateGroup()
set Essences.Data[i].GotBuff = CreateGroup()
set Essences.Data[i].MissileScale[a] = MissileStartScale
set a = a + 1
endloop
if Essences.Data[Essences.Index-1].Index == 1 then
call TimerStart(t, TimerPeriod, true, function callback)
endif
set caster = null
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger tr = CreateTrigger()
set filter = Filter(function UnitFilter)
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition( tr, Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
//Preloading the used effect models
call Preload(HealSpecialeffect)
call Preload(LiveStealEffect)
endfunction
endlibrary
//TESH.scrollpos=106
//TESH.alwaysfold=0
scope Taunt initializer init
globals
private integer Taunt = 'A02Q'
private real TimerPeriod = 0.04
private timer t = CreateTimer()
private group g = CreateGroup()
private real Dist = 105.00
private boolexpr ufilter
//private boolean array runnin
endglobals
private function duration takes integer level returns real
return 9.0 + 3 * level + (3*TimerPeriod)
endfunction
private function blockbonus takes integer level returns real
return 12.0 + 2 * level
endfunction
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == Taunt
endfunction
private function UnitFilter takes nothing returns boolean
local boolean ret = false
if not(IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL)) and not(IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE)) then
set ret = IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) and (GetWidgetLife(GetFilterUnit()) > 0.405)
endif
return ret
endfunction
private function callback takes nothing returns nothing
local integer i = 0
local unit u
local run d
loop
//Looping through all structs
exitwhen i >= run.Index
set d = run.Data[i]
set d.dur = d.dur - TimerPeriod
//Sure the run has time left and is alive
if GetWidgetLife(d.u) >= 0.405 and d.dur >= 0 then
call d.move()
else
// run is Dead bla remove
call UpdateBonus(d.u,GetPlayerId(GetOwningPlayer(d.u)))
set BlockChance[GetPlayerId(GetOwningPlayer(d.u))] = BlockChance[GetPlayerId(GetOwningPlayer(d.u))] - blockbonus(d.lvl)
set d.u = null
call run.destroy(d)
set run.Index = run.Index - 1
set run.Data[i] = run.Data[run.Index]
endif
set i = i + 1
endloop
if run.Index == 0 then
call PauseTimer(t)
endif
set u = null
endfunction
struct run
static integer Index = 0
static run array Data
unit u
real dur
integer lvl
static method create takes unit u, real dur, integer level returns run
local run data = run.allocate()
set run.Data[run.Index] = data
set data.u = u
set data.dur = dur
set run.Index =run.Index + 1
set data.lvl = level
if run.Index == 1 then
call TimerStart(t, TimerPeriod, true, function callback)
endif
return data
endmethod
method move takes nothing returns nothing
local unit a
local real angle = 0
local real x
local real y
if this.dur == duration(this.lvl) - (3*TimerPeriod) then
call UpdateBonus(this.u,GetPlayerId(GetOwningPlayer(this.u)))
endif
call GroupEnumUnitsInRange(g, GetUnitX(this.u), GetUnitY(this.u),Dist,ufilter)
call GroupRemoveUnit(g,this.u)
//looping through each near target and checking it
loop
set a = FirstOfGroup(g)
exitwhen a == null
set angle = Atan2(GetUnitY(a) - GetUnitY(this.u), GetUnitX(a) - GetUnitX(this.u))
set x = GetUnitX(a) + 10 * Cos(angle)
set y = GetUnitY(a) + 10 * Sin(angle)
if TestLocationPath(x,y) == true then
call SetUnitX(a,x)
call SetUnitY(a,y)
endif
call GroupRemoveUnit(g,a)
endloop
endmethod
endstruct
private function Actions takes nothing returns nothing
local unit a = GetTriggerUnit()
local integer b = GetPlayerId(GetOwningPlayer(a))
local integer level = GetUnitAbilityLevel(a,Taunt)
set BlockChance[b] = BlockChance[b] + blockbonus(level)
call run.create(a,duration(level),level)
call Eff.AddEffectTarget("Abilities\\Spells\\Orc\\StasisTrap\\StasisTotemTarget.mdl" ,duration(level),a,"hand left")
call Eff.AddEffectTarget("Abilities\\Spells\\Orc\\StasisTrap\\StasisTotemTarget.mdl" ,duration(level),a,"hand right")
call Eff.AddEffectTarget("Abilities\\Spells\\Orc\\StasisTrap\\StasisTotemTarget.mdl" ,duration(level),a,"foot left")
call Eff.AddEffectTarget("Abilities\\Spells\\Orc\\StasisTrap\\StasisTotemTarget.mdl" ,duration(level),a,"foot right")
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
set ufilter = Filter(function UnitFilter)
endfunction
endscope
//TESH.scrollpos=42
//TESH.alwaysfold=0
library GS initializer init
globals
private integer GS = 'A00D'
private integer GSLevel
private integer GSBuff = 'B006'
private boolexpr nullfilter
private integer GSlevel
private integer array GSSTR [6]
private timer t = CreateTimer()
private boolean run = false
endglobals
private function GSBonusStr takes integer level returns integer
return 1 + 1 * level
endfunction
private function GSHeroBonusStr takes integer level returns integer
return 3 + 3 * level
endfunction
private function GSCritmulti takes integer level returns real
return 25.0 * level
endfunction
private function RunCondition takes nothing returns boolean
return GetLearnedSkill() == GS
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
local integer bonus
local integer id
loop
exitwhen i > 6
set id = GetPlayerId(GetOwningPlayer(Hero[i]))
if GetUnitAbilityLevel(Hero[i],GSBuff) != 0 and GetUnitAbilityLevel(Hero[i],GS) == 0 then
set bonus = GSBonusStr(GSLevel)
set BonusSTR[id] = BonusSTR[id] + bonus - GSSTR[i]
set GSSTR[i] = bonus
call AdjustSTRBonus(Hero[i],BonusSTR[id])
elseif GSSTR[i] != 0 then
set BonusSTR[id] = BonusSTR[id] - GSSTR[i]
call AdjustSTRBonus(Hero[i],BonusSTR[id])
set GSSTR[i] = 0
endif
set i = i + 1
endloop
endfunction
private function Actions takes nothing returns nothing
local integer id = GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
local integer lvl = GetUnitAbilityLevel(GetTriggerUnit(),GS)
set GSLevel = lvl
set CritValue[id] = CritValue[id] + GSCritmulti(lvl) - GSCritmulti(lvl-1)
if lvl == 1 then
set BonusSTR[id] = BonusSTR[id] + GSHeroBonusStr(lvl)
else
set BonusSTR[id] = BonusSTR[id] + (GSHeroBonusStr(lvl)) - (GSHeroBonusStr(lvl-1))
endif
call AdjustSTRBonus(GetTriggerUnit(),BonusSTR[id])
if run == false then
call TimerStart(t,0.5,true,function Callback)
set run = true
endif
endfunction
private function NullFilter takes nothing returns boolean
return true
endfunction
//===========================================================================
private function init takes nothing returns nothing
local integer index = 0
local boolexpr cond = Condition( function RunCondition )
local trigger t = CreateTrigger( )
set nullfilter = Filter(function NullFilter)
loop
call TriggerRegisterPlayerUnitEvent(t, Player(index),EVENT_PLAYER_HERO_SKILL, nullfilter)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition( t, cond )
call TriggerAddAction( t, function Actions )
set cond = null
endfunction
endlibrary
//TESH.scrollpos=31
//TESH.alwaysfold=0
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Stone Smash 1.00
// created by JonNny
//
//
// ° Mapmaking since 2006...
// °
// °
// °
// °°°ÛÜ
// °°X°ÛÛÛ ÛÛÛÛÛÛÛÛ ÿÜÛÛÛÛÛÛÛÛÜ
// °°XX° ÛÛÛ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛß ßÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXX°° ÛÛÛÛÛÛÜ ÛÛÛÜ ÛÛÛÛÛ ßÛÛÛÛÛ ßÛÛÛÛ ÛÛÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÜ
// ÛÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÜÛÛÛÛÛÛ
// °°XXXXX° ÛÛÛÛ ÛÛÛÜ ÛÛÛÛÛ ÛÛÛÛÛÛÜ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXXXX °° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛ °°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°° ÛÛÛÛÛÛÛÛÛÛÛÛÛß
// ° XXXXX °°ÛÛÛÛÛ°°°°ÛÛÛÛÛÛÛÛ°°XX ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ XXX°°ÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛ
// °° XXXXX ÜÛÛÛÛÛÛ X ÛÛÛÛÛÛÛÛÛ XXX ÛÛÛÛÛÛÛÛÛÛÛ XXXXXX ÛÛÛÛÛÛÛ° ÛÛÛ
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°° °°°°
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°X°°
// °°° XXXXXXXXXX °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° XXXXXXXXXXXXXXXXX°°
// °°°°°°°°°°°°°°°° °°°°°°°° XXXXXXX °°°
// °°°°°° XX °°
// ...2009 and still moving on. °°°°°°°
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
scope StoneSmash initializer init
globals
private integer StoneSmashSpell = 'A034'
//Spell
private real startheight = 800
private real TimerPeriod = 0.05
//Execution Speed
private real speed = 22.0
private integer FadeRate = 14
private string Dust = "Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl"
//Specialeffect
private integer StoneDummy = 'h00H'
private timer t = CreateTimer()
private boolexpr ufilter = null
endglobals
private function Damage takes integer level returns real
return 60.0 + 60.0 *level
endfunction
private function AOE takes integer level returns real
return 200.0 + 20.0*level
endfunction
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == StoneSmashSpell
endfunction
private function UnitFilter takes nothing returns boolean
return (GetWidgetLife(GetFilterUnit()) > 0.405)
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
local unit u
local Stone d
loop
//Looping through all structs
exitwhen i >= Stone.Index
set d = Stone.Data[i]
call SetUnitFlyHeight(d.stone,GetUnitFlyHeight(d.stone)-speed,0)
set d.fade = d.fade + FadeRate
if d.fade > 0 then
call SetUnitVertexColor(d.stone,255,255,255,d.fade)
endif
//Sure the Stone has time left and is alive
if GetUnitFlyHeight(d.stone) >= 80 then
set i = i + 1
else
// Stone is Dead bla remove
call SpellDamageAOE(d.c,Damage(d.level),GetUnitX(d.stone),GetUnitY(d.stone),AOE(d.level),ufilter)
call DestroyEffect(AddSpecialEffect(Dust,GetUnitX(d.stone),GetUnitY(d.stone)))
call SetUnitX(Dummy,GetUnitX(d.stone))
call SetUnitY(Dummy,GetUnitY(d.stone))
call SetUnitOwner(Dummy,GetOwningPlayer(d.c),false)
call UnitAddAbility(Dummy,'A033')
call SetUnitAbilityLevel(Dummy,'A033',d.level)
call IssueImmediateOrder( Dummy, "thunderclap" )
call UnitRemoveAbility(Dummy,'A033')
call DestroyEffect(AddSpecialEffectTarget(Dust,d.stone,"origin"))
call KillUnit(d.stone)
set d.stone = null
set d.c = null
call Stone.destroy(d)
set Stone.Index = Stone.Index - 1
set Stone.Data[i] = Stone.Data[Stone.Index]
endif
endloop
if Stone.Index == 0 then
call PauseTimer(t)
endif
set u = null
endfunction
struct Stone
static integer Index = 0
static Stone array Data
unit stone
unit c
integer level
integer fade
static method create takes unit c, real x, real y returns Stone
local Stone d = Stone.allocate()
// Setting all Variables
set d.c = c
set d.fade = 0
set d.stone = CreateUnit(GetOwningPlayer(c),StoneDummy,x,y,0)
set d.level = GetUnitAbilityLevel(c,StoneSmashSpell)
call SetUnitFlyHeight(d.stone,startheight,0)
call SetUnitTimeScale(d.stone, 0.5)
call SetUnitVertexColor(d.stone,255,255,255,0)
set Stone.Data[Stone.Index] = d
//Starting the timer if it isnt already
if d.Index == 0 then
call TimerStart(t, TimerPeriod, true, function Callback)
endif
set d.Index = d.Index + 1
return d
endmethod
endstruct
private function Actions takes nothing returns nothing
call Stone.create(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
//call RemoveUnit(CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),Summon,0,0,0))
set ufilter = Filter(function UnitFilter)
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
//call Preload(HealEffect)
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Vodoo Ward 1.00
// created by JonNny
//
//
// ° Mapmaking since 2006...
// °
// °
// °
// °°°ÛÜ
// °°X°ÛÛÛ ÛÛÛÛÛÛÛÛ ÿÜÛÛÛÛÛÛÛÛÜ
// °°XX° ÛÛÛ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛß ßÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXX°° ÛÛÛÛÛÛÜ ÛÛÛÜ ÛÛÛÛÛ ßÛÛÛÛÛ ßÛÛÛÛ ÛÛÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÜ
// ÛÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÜÛÛÛÛÛÛ
// °°XXXXX° ÛÛÛÛ ÛÛÛÜ ÛÛÛÛÛ ÛÛÛÛÛÛÜ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXXXX °° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛ °°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°° ÛÛÛÛÛÛÛÛÛÛÛÛÛß
// ° XXXXX °°ÛÛÛÛÛ°°°°ÛÛÛÛÛÛÛÛ°°XX ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ XXX°°ÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛ
// °° XXXXX ÜÛÛÛÛÛÛ X ÛÛÛÛÛÛÛÛÛ XXX ÛÛÛÛÛÛÛÛÛÛÛ XXXXXX ÛÛÛÛÛÛÛ° ÛÛÛ
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°° °°°°
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°X°°
// °°° XXXXXXXXXX °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° XXXXXXXXXXXXXXXXX°°
// °°°°°°°°°°°°°°°° °°°°°°°° XXXXXXX °°°
// °°°°°° XX °°
// ...2009 and still moving on. °°°°°°°
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
scope Vodoo initializer init
globals
private integer VodooSpell = 'A002'
//Spell
private real TimerPeriod = 0.10
//Execution Speed
private integer Summon = 'o001'
//Ward
private string Lightning = "HWSB"
//Lightningtype
private real LightningSpeed = 0.15
private string HealEffect = "Abilities\\Spells\\Orc\\HealingWave\\HealingWaveTarget.mdl" //"Abilities\\Spells\\Human\\Heal\\HealTarget.mdl"
//Specialeffect
private real CritMulti = 2.25
endglobals
private function HealAmount takes integer level returns real
return 10.0 + 5.0 *level
endfunction
private function Crit takes integer level returns real
return 15.0
endfunction
private function Duration takes integer level returns real
return 16.0
endfunction
private function Range takes integer level returns real
return 750.0
endfunction
private function Interval takes integer level returns real
return 1.6 - 0.1 * level
endfunction
globals
private timer t = CreateTimer()
private group g = CreateGroup()
private boolexpr ufilter = null
endglobals
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == VodooSpell
endfunction
private function UnitFilter takes nothing returns boolean
return GetUnitTypeId(GetFilterUnit()) != Summon and (GetWidgetLife(GetFilterUnit()) > 0.405) and GetOwningPlayer(GetFilterUnit()) != Player(11)
endfunction
private function GetWeakestAlly takes unit w, real range returns unit
local real hp = 1
local unit u
local unit healed
local real x = 0
call GroupEnumUnitsInRange(g, GetUnitX(w), GetUnitY(w),range, ufilter)
loop
set u = FirstOfGroup(g)
exitwhen u == null
call GroupRemoveUnit(g,u)
//Condition for counting, set up as described above
set x = GetWidgetLife(u) / GetUnitState(u, UNIT_STATE_MAX_LIFE)
if x < hp and GetWidgetLife(u) >= 0.405 then
set hp = x
set healed = u
endif
endloop
set u = null
return healed
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
local unit u
local Ward d
loop
//Looping through all structs
exitwhen i >= Ward.Index
set d = Ward.Data[i]
set d.dur = d.dur - TimerPeriod
//Sure the Ward has time left and is alive
if GetWidgetLife(d.w) >= 0.405 and d.dur >= 0.0 then
set d.Counter = d.Counter + TimerPeriod
if d.Counter >= d.interval then
set d.Counter = d.Counter - d.interval
call d.Heal()
endif
set i = i + 1
else
// Ward is Dead bla remove
if GetWidgetLife(d.w) > 0.405 then
call KillUnit(d.w)
endif
set d.w = null
call Ward.destroy(d)
set Ward.Index = Ward.Index - 1
set Ward.Data[i] = Ward.Data[Ward.Index]
endif
endloop
if Ward.Index == 0 then
call PauseTimer(t)
endif
set u = null
endfunction
struct Ward
static integer Index = 0
static Ward array Data
unit w
integer level
real dur
real interval
real Counter
static method create takes unit w, unit c returns Ward
local Ward d = Ward.allocate()
// Setting all Variables
set d.w = w
set d.level = GetUnitAbilityLevel(c,VodooSpell)
set d.dur = Duration(d.level)
set d.interval = Interval(d.level)
set d.Counter = d.interval - TimerPeriod
set Ward.Data[Ward.Index] = d
//Starting the timer if it isnt already
if d.Index == 0 then
call TimerStart(t, TimerPeriod, true, function Callback)
endif
set d.Index = d.Index + 1
return d
endmethod
method Heal takes nothing returns nothing
local unit healed = GetWeakestAlly(this.w,Range(this.level))
call HealTarget(this.w,healed,HealAmount(this.level))//,Crit(this.level),CritMulti)
call Eff.AddEffectTarget(HealEffect,1.2,healed,"origin")
call Li.create(Lightning,LightningSpeed,healed,this.w)
endmethod
endstruct
private function Actions takes nothing returns nothing
local location loc = GetSpellTargetLoc()
local unit w = CreateUnit(GetOwningPlayer(GetTriggerUnit()),Summon,GetLocationX(loc),GetLocationY(loc),270)
call Ward.create(w,GetTriggerUnit())
call RemoveLocation(loc)
set loc = null
set w = null
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call RemoveUnit(CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),Summon,0,0,0))
set ufilter = Filter(function UnitFilter)
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
call Preload(HealEffect)
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Dark Ritual 1.00
// created by JonNny
//
//
// ° Mapmaking since 2006...
// °
// °
// °
// °°°ÛÜ
// °°X°ÛÛÛ ÛÛÛÛÛÛÛÛ ÿÜÛÛÛÛÛÛÛÛÜ
// °°XX° ÛÛÛ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛß ßÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXX°° ÛÛÛÛÛÛÜ ÛÛÛÜ ÛÛÛÛÛ ßÛÛÛÛÛ ßÛÛÛÛ ÛÛÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÜ
// ÛÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÜÛÛÛÛÛÛ
// °°XXXXX° ÛÛÛÛ ÛÛÛÜ ÛÛÛÛÛ ÛÛÛÛÛÛÜ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXXXX °° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛ °°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°° ÛÛÛÛÛÛÛÛÛÛÛÛÛß
// ° XXXXX °°ÛÛÛÛÛ°°°°ÛÛÛÛÛÛÛÛ°°XX ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ XXX°°ÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛ
// °° XXXXX ÜÛÛÛÛÛÛ X ÛÛÛÛÛÛÛÛÛ XXX ÛÛÛÛÛÛÛÛÛÛÛ XXXXXX ÛÛÛÛÛÛÛ° ÛÛÛ
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°° °°°°
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°X°°
// °°° XXXXXXXXXX °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° XXXXXXXXXXXXXXXXX°°
// °°°°°°°°°°°°°°°° °°°°°°°° XXXXXXX °°°
// °°°°°° XX °°
// ...2009 and still moving on. °°°°°°°
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
scope DarkRitual initializer init
globals
private integer DarkRitual = 'A000'
//Spell
private real TimerPeriod = 2
//Execution Speed
private string CasterEffect = "Abilities\\Spells\\Undead\\Cripple\\CrippleTarget.mdl"
//Caster Specialeffect
private string TargetEffect = "Abilities\\Spells\\Undead\\Cripple\\CrippleTarget.mdl"
//Target SpecialEffect
private string ManaGainColor = "|c005480ff"
endglobals
private function RegAmount takes integer level returns real
return 65.0 + 25.0 *level
endfunction
private function DrainPercentage takes integer level returns real
return 0.20 - level * 0.02
endfunction
private function Duration takes integer level returns real
return 8.0
endfunction
globals
private timer t = CreateTimer()
private boolexpr ufilter = null
endglobals
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == DarkRitual
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
local DR d
loop
//Looping through all structs
exitwhen i >= DR.Index
set d = DR.Data[i]
set d.dur = d.dur - TimerPeriod
if GetWidgetLife(d.caster) >= 0.405 and GetWidgetLife(d.target) >= 0.405 then
call SetWidgetLife(d.caster,GetWidgetLife(d.caster) - (GetUnitState(d.caster, UNIT_STATE_MAX_LIFE)*DrainPercentage(d.level)*(TimerPeriod/Duration(d.level))))
call DisplayDamage((GetUnitState(d.caster, UNIT_STATE_MAX_LIFE)*DrainPercentage(d.level)*(TimerPeriod/Duration(d.level))),d.caster,d.target,"|c00ff5656","")
call SetUnitState(d.target, UNIT_STATE_MANA, GetUnitState(d.target,UNIT_STATE_MANA) + RegAmount(d.level)*(TimerPeriod/Duration(d.level)) )
call DisplayDamage(RegAmount(d.level)*(TimerPeriod/Duration(d.level)),d.target,d.caster,ManaGainColor,"+")
set i = i + 1
else
set d.dur = 0
endif
if d.dur <= 0 then
set d.caster = null
set d.target = null
call DR.destroy(d)
set DR.Index = DR.Index - 1
set DR.Data[i] = DR.Data[DR.Index]
endif
endloop
if DR.Index == 0 then
call PauseTimer(t)
endif
endfunction
struct DR
static integer Index = 0
static DR array Data
unit caster
unit target
integer level
real dur
static method create takes unit c, unit ta returns DR
local DR d = DR.allocate()
// Setting all Variables
set d.caster = c
set d.target = ta
set d.level = GetUnitAbilityLevel(c,DarkRitual)
set d.dur = Duration(d.level)
call Eff.AddEffectTarget(CasterEffect,d.dur,c,"chest")
call Eff.AddEffectTarget(TargetEffect,d.dur,ta,"chest")
set DR.Data[DR.Index] = d
//Starting the timer if it isnt already
if d.Index == 0 then
call TimerStart(t, TimerPeriod, true, function Callback)
endif
set d.Index = d.Index + 1
return d
endmethod
endstruct
private function Actions takes nothing returns nothing
call DR.create(GetTriggerUnit(),GetSpellTargetUnit())
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Reveal Weaknesses 1.00
// created by JonNny
//
//
// ° Mapmaking since 2006...
// °
// °
// °
// °°°ÛÜ
// °°X°ÛÛÛ ÛÛÛÛÛÛÛÛ ÿÜÛÛÛÛÛÛÛÛÜ
// °°XX° ÛÛÛ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °XX ° ÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛß ßÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXX°° ÛÛÛÛÛÛÜ ÛÛÛÜ ÛÛÛÛÛ ßÛÛÛÛÛ ßÛÛÛÛ ÛÛÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÜ
// ÛÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÛÛÛÛ
// °°°°°°°° ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛÜ ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÜ ÜÛÛÛÛÛÛ
// °°XXXXX° ÛÛÛÛ ÛÛÛÜ ÛÛÛÛÛ ÛÛÛÛÛÛÜ ßÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// °°XXXXX °° ÛÛÛÛ ÛÛÛÛÜ ÛÛÛÛ °°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°° ÛÛÛÛÛÛÛÛÛÛÛÛÛß
// ° XXXXX °°ÛÛÛÛÛ°°°°ÛÛÛÛÛÛÛÛ°°XX ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ XXX°°ÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛ
// °° XXXXX ÜÛÛÛÛÛÛ X ÛÛÛÛÛÛÛÛÛ XXX ÛÛÛÛÛÛÛÛÛÛÛ XXXXXX ÛÛÛÛÛÛÛ° ÛÛÛ
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°° °°°°
// °° XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX °°°°°X°°
// °°° XXXXXXXXXX °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° XXXXXXXXXXXXXXXXX°°
// °°°°°°°°°°°°°°°° °°°°°°°° XXXXXXX °°°
// °°°°°° XX °°
// ...2009 and still moving on. °°°°°°°
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
library Reveal initializer init
globals
integer RD = 'A003'
integer RWBuff = 'B000'
boolexpr nullfilter
integer RWlevel
endglobals
function RWBonusDamage takes integer level returns real
return 0.05 + 0.05 * level
endfunction
function RWCritCHanceBonus takes integer level returns real
return 1.00 * level
endfunction
function RWCritCHanceBonusHero takes integer level returns real
return 2.25 * level
endfunction
private function RunCondition takes nothing returns boolean
return GetLearnedSkill() == RD
endfunction
private function Actions takes nothing returns nothing
set RWlevel = GetUnitAbilityLevel(GetTriggerUnit(),RD)
endfunction
private function NullFilter takes nothing returns boolean
return true
endfunction
//===========================================================================
private function init takes nothing returns nothing
local integer index = 0
local boolexpr cond = Condition( function RunCondition )
local trigger t = CreateTrigger( )
set nullfilter = Filter(function NullFilter)
loop
call TriggerRegisterPlayerUnitEvent(t, Player(index),EVENT_PLAYER_HERO_SKILL, nullfilter)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition( t, cond )
call TriggerAddAction( t, function Actions )
set cond = null
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope AB initializer init
globals
private integer AB = 'A004'
private integer ABBuffSpell = 'A005'
private string HealEffect = ""
private real HealMulti = 2.0
private group g = CreateGroup()
private group g2 = CreateGroup()
private boolexpr ufilter
private string strongheal = "Abilities\\Weapons\\IllidanMissile\\IllidanMissile.mdl"
private string heal = "Abilities\\Weapons\\SkeletalMageMissile\\SkeletalMageMissile.mdl"
private string damageeffect = "Abilities\\Spells\\Undead\\Possession\\PossessionMissile.mdl"
private string castereffect = "Abilities\\Spells\\Undead\\Darksummoning\\DarkSummonTarget.mdl"
endglobals
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == AB
endfunction
private function Range takes integer level returns real
return 900.00
endfunction
private function Damage takes integer level returns real
return 75.0 + level * 75.0
endfunction
private function Base takes integer level returns integer
return - 3 + 3 * level
endfunction
private function Heal takes integer counter, integer level returns real
return (10.0+5.0*level) * counter
endfunction
private function UnitFilter takes nothing returns boolean
return not(IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE)) and not(IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL)) and IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) and (GetWidgetLife(GetFilterUnit()) > 0.405)
endfunction
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(u,AB)
local unit a
local player p = GetOwningPlayer(u)
local integer counter = Base(level)
local real x = GetWidgetLife(u) / GetUnitState(u, UNIT_STATE_MAX_LIFE)
local real xx
call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u),Range(level),ufilter)
loop
set a = FirstOfGroup(g)
exitwhen a == null
if IsPlayerEnemy(p, GetOwningPlayer(a)) == true then
set xx = GetWidgetLife(a) / GetUnitState(a, UNIT_STATE_MAX_LIFE)
if x <= xx then
call SpellDamageTarget(a,u,Damage(level))
call DestroyEffect(AddSpecialEffectTarget(damageeffect,a,"chest"))
set counter = counter + 1
endif
else
call GroupAddUnit(g2,a)
endif
call GroupRemoveUnit(g,a)
endloop
loop
set a = FirstOfGroup(g2)
exitwhen a == null
if IsPlayerEnemy(p, GetOwningPlayer(a)) == false then
set xx = GetWidgetLife(a) / GetUnitState(a, UNIT_STATE_MAX_LIFE)
if x <= xx then
call HealTarget(u,a,Heal(counter,level))//,3.00,1.75)
call DestroyEffect(AddSpecialEffectTarget(heal,a,"chest"))
call AddBuff(a,u,ABBuffSpell,"innerfire",counter)
else
call HealTarget(u,a,Heal(counter,level)*HealMulti)//,3.00,1.75)
call DestroyEffect(AddSpecialEffectTarget(strongheal,a,"chest"))
endif
endif
call GroupRemoveUnit(g2,a)
endloop
call Eff.AddEffectTarget(castereffect,1,u,"chest")
call GroupClear(g)
call GroupClear(g2)
set a = null
set u = null
endfunction
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call UnitAddAbility(Dummy,ABBuffSpell)
call UnitRemoveAbility(Dummy,ABBuffSpell)
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
call Preload(HealEffect)
set ufilter = Filter(function UnitFilter)
endfunction
endscope
//TESH.scrollpos=50
//TESH.alwaysfold=0
scope StealingShot initializer init
globals
private integer SH = 'A02D'
private integer dummy = 'h007'
private real Offset = 50.0
private real ProjectileStartZ = 80
private real HitHeight = 50
private real ProjectileSpeed = 15
private timer t = CreateTimer()
private real ProjectileSway = 0.16
private real HitRange = 40
private real TimerPeriod = 0.035
endglobals
private function Damage takes integer level returns real
return 100.0 + 35.0 * level + (level * level *5.0)
endfunction
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == SH
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
local real db
local Pr d
loop
exitwhen i >= Pr.Index
set d = Pr.Data[i]
if GetUnitDistance(d.pr[0],d.target) <= HitRange then
if GetWidgetLife(d.target) >= 0.405 then
call SpellDamageTarget(d.target,d.ca,Damage(d.lvl))
call MS.create(d.target,d.ca,-1*Damage(d.lvl),0,28,dummy,0,0,GetUnitFlyHeight(d.target)+50,50,50)
endif
call KillUnit(d.pr[0])
call KillUnit(d.pr[1])
call KillUnit(d.pr[2])
set d.pr[0] = null
set d.pr[1] = null
set d.pr[2] = null
set d.ca = null
set d.target = null
call Pr.destroy(d)
set Pr.Index = Pr.Index - 1
set d = Pr.Data[Pr.Index]
else
call d.move()
set i = i + 1
endif
endloop
if Pr.Index > 0 then
call TimerStart(t, TimerPeriod, false, function Callback)
endif
endfunction
struct Pr //Projectile
static integer Index = 0
static Pr array Data
unit target //Missile dummy
unit ca //"Caster"
real maxd //Distance when creating the missile
integer lvl
unit array pr [3] // the 3 Proectiles
static method create takes unit ca, unit ta, integer lvl returns Pr
local Pr data = Pr.allocate()
local real a = GetUnitsAngle(ca,ta)
local integer i = 0
local real x = GetUnitX(ca) + Cos(a) * Offset
local real y = GetUnitY(ca) + Sin(a) * Offset
set Pr.Data[Pr.Index] = data
//Creating the 3 projectiles
loop
exitwhen i == 3
set data.pr[i] = CreateUnit(GetOwningPlayer(ca),dummy,x,y,a)
call UnitAddAbility(data.pr[i], 'Amrf' )
call UnitRemoveAbility(data.pr[i], 'Amrf' )
call SetUnitFlyHeight(data.pr[i],ProjectileStartZ,0)
set i = i + 1
endloop
set data.maxd = GetUnitDistance(ta,data.pr[1]) * 1.05
set data.ca = ca
set data.target = ta
set data.lvl = lvl
if Pr.Index == 0 then
call TimerStart(t, TimerPeriod,false, function Callback)
endif
set Pr.Index = Pr.Index + 1
return data
endmethod
method move takes nothing returns nothing
local integer i = 0
local real a = GetUnitsAngle(this.pr[1],this.target)
local real d = (ProjectileSpeed+GetUnitDistance(this.target,this.pr[1]))/this.maxd
local real offset = Sin(3.14159*d) * ProjectileSway * this.maxd
//Moving all 3 Missiles (refers to pr[1]´s x and y because its not affected by the amplitide
call SetUnitX(this.pr[1],GetUnitX(this.pr[1])+ProjectileSpeed*Cos(a))
call SetUnitY(this.pr[1],GetUnitY(this.pr[1])+ProjectileSpeed*Sin(a))
call SetUnitFlyHeight(this.pr[1],ProjectileStartZ + offset + (GetUnitFlyHeight(this.target) - ProjectileStartZ + HitHeight) * (1-d) ,0)
call SetUnitX(this.pr[0],GetUnitX(this.pr[1])+offset*Cos(a + (3.14159/2)) )
call SetUnitY(this.pr[0],GetUnitY(this.pr[1])+offset*Sin(a + (3.14159/2)) )
call SetUnitFlyHeight(this.pr[0],ProjectileStartZ + (GetUnitFlyHeight(this.target) - ProjectileStartZ + HitHeight) * (1-d) ,0)
call SetUnitX(this.pr[2],GetUnitX(this.pr[1])+offset*Cos(a - (3.14159/2)) )
call SetUnitY(this.pr[2],GetUnitY(this.pr[1])+offset*Sin(a - (3.14159/2)) )
call SetUnitFlyHeight(this.pr[2],ProjectileStartZ + (GetUnitFlyHeight(this.target) - ProjectileStartZ + HitHeight) * (1-d) ,0)
endmethod
endstruct
private function Actions takes nothing returns nothing
local unit u = GetSpellTargetUnit()
local unit b = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(b,SH)
call Pr.create(b,u,level)
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=50
//TESH.alwaysfold=0
scope JBlessing initializer init
globals
private integer JB = 'A02R'
private integer dummy = 'h008'
private real ProjectileStartRange = 140.00
private real ProjectileEndRange = 60.00
private real ProjectileStartZ = 30
private real ProjectileEndZ = 160
private real ProjectileTurns = 10
private real speed = 0.02
private timer t = CreateTimer()
private real TimerPeriod = 0.025
endglobals
private function Heal takes integer level returns real
return 120.0 + 40.0 * level + (level * level *10.0)
endfunction
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == JB
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
local integer ii = 0
local real db
local JB d
loop
exitwhen i >= JB.Index
set d = JB.Data[i]
if d.curr >= 1 then
if GetWidgetLife(d.target) >= 0.405 then
call HealTarget(d.ca,d.target,Heal(d.lvl))
endif
set ii = 0
loop
exitwhen ii == 3
call SetUnitFlyHeight(d.JBDummy[ii],120.00,0.00)
call SetUnitScale(d.JBDummy[ii],2.20,2.20,2.20)
call KillUnit(d.JBDummy[ii])
set d.JBDummy[ii] = null
set ii = ii + 1
endloop
set d.ca = null
set d.target = null
call JB.destroy(d)
set JB.Index = JB.Index - 1
set JB.Data[i] = JB.Data[JB.Index]
else
call d.move()
set i = i + 1
endif
endloop
if JB.Index > 0 then
call TimerStart(t, TimerPeriod, false, function Callback)
endif
endfunction
struct JB //Projectile
static integer Index = 0
static JB array Data
unit target //Missile dummy
unit ca //"Caster"
real curr //Distance when creating the missile
integer lvl
real angle
unit array JBDummy [3] // the 3 Proectiles
static method create takes unit ca, unit ta, integer lvl returns JB
local JB data = JB.allocate()
local integer i = 0
local real a = 0
local real x = GetUnitX(ca) + Cos(a) * ProjectileStartRange
local real y = GetUnitY(ca) + Sin(a) * ProjectileStartRange
set JB.Data[JB.Index] = data
//Creating the 3 projectiles
loop
exitwhen i == 3
set x = GetUnitX(ta) + Cos(a) * ProjectileStartRange
set y = GetUnitY(ta) + Sin(a) * ProjectileStartRange
set data.JBDummy[i] = CreateUnit(GetOwningPlayer(ca),dummy,x,y,a)
call UnitAddAbility(data.JBDummy[i], 'Amrf' )
call UnitRemoveAbility(data.JBDummy[i], 'Amrf' )
call SetUnitFlyHeight(data.JBDummy[i],ProjectileStartZ,0)
set a = a + 2.1
set i = i + 1
endloop
set data.ca = ca
set data.target = ta
set data.lvl = lvl
set data.curr = 0
if JB.Index == 0 then
call TimerStart(t, 0.00,false, function Callback)
endif
set JB.Index = JB.Index + 1
return data
endmethod
method move takes nothing returns nothing
local integer i = 0
local real a = ProjectileTurns * (this.curr*this.curr+0.05) + 2.1
local real z = ProjectileStartZ * (1-this.curr) + ProjectileEndZ *this.curr
local real offset = ProjectileStartRange*(1-this.curr) + ProjectileEndRange *this.curr
set this.curr = this.curr + speed
loop
exitwhen i == 3
call SetUnitX(this.JBDummy[i],GetUnitX(this.target) + Cos(a) * offset)
call SetUnitY(this.JBDummy[i],GetUnitY(this.target) + Sin(a) * offset)
call SetUnitFlyHeight(this.JBDummy[i],ProjectileStartZ*(1-this.curr) + ProjectileEndZ *this.curr,0)
set a = a + 2.1
set i = i + 1
endloop
endmethod
endstruct
private function Actions takes nothing returns nothing
local unit u = GetSpellTargetUnit()
local unit b = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(b,JB)
call JB.create(b,u,level)
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=13
//TESH.alwaysfold=0
scope LastHope initializer init
globals
private integer LH = 'A02U'
private group g = CreateGroup()
private string heal = "Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl"
private string castereffect = "Abilities\\Spells\\Other\\Awaken\\Awaken.mdl"
endglobals
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == LH
endfunction
private function Range takes integer level returns real
return 1200.00
endfunction
private function HealBasic takes integer level returns real
return 50.0 + level * 50.0
endfunction
private function HealPerMana takes real mana, integer level returns real
return (0.45+(0.25*level)) * mana
endfunction
private function MaxMana takes integer level returns real
return 300.0 + 100.0 * level
endfunction
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(u,LH)
local unit a
local player p = GetOwningPlayer(u)
local integer i = 0
local real manacosts = RMinBJ(GetUnitState(u,UNIT_STATE_MANA),MaxMana(level))
local real healamount = HealBasic(level) + HealPerMana(manacosts,level)
call DestroyEffect(AddSpecialEffectTarget(castereffect,u,"origin"))
call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)-manacosts)
loop
set a = Hero[i]
exitwhen i > 6
if GetWidgetLife(a) >= 0.405 then
call HealTarget(u,a,healamount)
call DestroyEffect(AddSpecialEffectTarget(heal,a,"origin"))
endif
set i = i + 1
endloop
set a = null
set u = null
endfunction
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
call Preload(heal)
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope GA initializer init
globals
private integer GA = 'A02W'
endglobals
private function GABonusAGI takes integer level returns integer
return 3 * level
endfunction
private function RunCondition takes nothing returns boolean
return GetLearnedSkill() == GA
endfunction
private function Actions takes nothing returns nothing
local integer id = GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
local integer lvl = GetUnitAbilityLevel(GetTriggerUnit(),GA)
if lvl == 1 then
set BonusAGI[id] = BonusAGI[id] + GABonusAGI(lvl)
else
set BonusAGI[id] = BonusAGI[id] + (GABonusAGI(lvl)) - (GABonusAGI(lvl-1))
endif
call AdjustAGIBonus(GetTriggerUnit(),BonusAGI[id])
endfunction
//===========================================================================
private function init takes nothing returns nothing
local integer index = 0
local boolexpr cond = Condition( function RunCondition )
local trigger t = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(t, Player(index),EVENT_PLAYER_HERO_SKILL, null)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition( t, cond )
call TriggerAddAction( t, function Actions )
set cond = null
endfunction
endscope
//TESH.scrollpos=76
//TESH.alwaysfold=0
scope PowerShot initializer init
globals
private real offs = 5
private real Speed = 28
private real PickRange = 140
private real Push = 10.0
private integer PowerShot = 'A030'
private timer t = CreateTimer()
private real TimerPeriod = 0.02
private integer Dumm = 'h00E'
private boolexpr filter = null
private group ENUM_GROUP = CreateGroup()
endglobals
private function Range takes integer level returns real
return 900.0 + 75.0*level
endfunction
private function AttackDisables takes integer level returns integer
local real x = 0.5 + 0.5 * level
if I2R(R2I(x)) == x then
return R2I(x)
else
return R2I(GetRandomReal(x+0.5,x-0.5))
endif
endfunction
private function Damage takes integer level returns real
return 90.0 + 45.0 * level
endfunction
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == PowerShot
endfunction
private function UnitFilter takes nothing returns boolean
local boolean ret = false
if not(IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL)) and not(IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE)) then
set ret = IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) and (GetWidgetLife(GetFilterUnit()) > 0.405)
endif
return ret
endfunction
private function Callback takes nothing returns nothing
local integer i = 0
local integer a = 0
local unit b = null
local real angle
local real angle2
local real dist
local real dist2
local real x
local real y
local real offset
local real ang
local integer id
local PS d
loop
//Looping through all structs
exitwhen i >= PS.Index
set d =PS.Data[i]
set d.x = GetUnitX(d.PSDummy) + Speed * Cos(d.angle)
set d.y = GetUnitY(d.PSDummy) + Speed * Sin(d.angle)
set d.range = d.range - Speed
call GroupEnumUnitsInRange(ENUM_GROUP,d.x,d.y,PickRange,filter)
loop
set b = FirstOfGroup(ENUM_GROUP)
exitwhen b==null
set angle2 = Atan2(GetUnitY(b) - GetUnitY(d.PSDummy), GetUnitX(b) - GetUnitX(d.PSDummy))
set dist = GetUnitDistance(b,d.PSDummy)
call GroupRemoveUnit(ENUM_GROUP,b)
if IsUnitInGroup(b,d.g) == false and ((dist*Cos(angle2-d.angle)) <= 140.0) and b != d.caster then
if IsUnitEnemy(b,GetOwningPlayer(d.caster)) then
call SpellDamageTarget(b,d.caster,d.dmg)
set id = GetHandleId(b)
call SaveInteger(ht2,id,1,AttackDisables(d.lev))
endif
call GroupAddUnit(d.g,b)
endif
endloop
call GroupAddGroup(d.g,d.g2)
loop
set b = FirstOfGroup(d.g2)
exitwhen b==null
call GroupRemoveUnit(d.g2,b)
if b != d.caster then
set angle = Atan2(GetUnitY(b) - d.y, GetUnitX(b) - d.x )
set angle2 = Atan2(GetUnitY(b) - GetUnitY(d.PSDummy), GetUnitX(b) - GetUnitX(d.PSDummy))
set dist = GetUnitDistance(b,d.PSDummy)
set dist2 = SquareRoot((d.x-GetUnitX(b))*(d.x-GetUnitX(b))+(d.y-GetUnitY(b))*(d.y-GetUnitY(b)))
//set offset = (Sin(dist2*Cos(angle2-d.angle)/PickRange*bj_PI)-Sin(dist*Cos(angle-d.angle)/PickRange*bj_PI))
set offset = (dist2*Cos(angle2-d.angle)/PickRange)//-(dist*Cos(angle-d.angle)/PickRange))
if (angle2-d.angle) < 0 then
set ang = -(bj_PI/2)
else
set ang = (bj_PI/2)
endif
set x = GetUnitX(b) + Push * offset * Cos(d.angle+ang)
set y = GetUnitY(b) + Push * offset * Sin(d.angle+ang)
if TestLocationPath(x,y) then
call SetUnitX(b,x)
call SetUnitY(b,y)
endif
endif
if GetUnitDistance(b,d.PSDummy) > 140.0 and ((dist*Cos(angle2-d.angle)) <= 80.0) then
call GroupRemoveUnit(d.g,b)
endif
endloop
// pick units near
// check A = H * cosa
// offset unit
// damage when 90° (A = H)
// ect
call SetUnitX(d.PSDummy,d.x)
call SetUnitY(d.PSDummy,d.y)
if d.range <= 0 then
set d.caster = null
call KillUnit(d.PSDummy)
set d.PSDummy = null
call PS.destroy(d)
set PS.Index = PS.Index - 1
set PS.Data[i] = PS.Data[PS.Index]
endif
set i = i + 1
endloop
if PS.Index == 0 then
call PauseTimer(t)
endif
endfunction
struct PS
static integer Index = 0
static PS array Data
unit PSDummy
unit caster
real dmg
real range
real x
real y
real angle
integer lev
group g = CreateGroup()
group g2 = CreateGroup()
static method create takes unit c, real x, real y, integer level returns PS
local PS d = PS.allocate()
local integer i = 0
// Setting all Variables
set d.caster = c
set d.lev = level
set d.dmg = Damage(level)
set PS.Data[PS.Index] = d
set d.range = Range(level)
set d.angle = Atan2(y - GetUnitY(c), x - GetUnitX(c) )
//Creating Dummy
set d.PSDummy = CreateUnit(Player(14),Dumm,GetUnitX(c) + offs * Cos(d.angle),GetUnitY(c) + offs * Sin(d.angle),bj_RADTODEG * d.angle)
//Starting the timer if it isnt already
if d.Index == 0 then
call TimerStart(t, TimerPeriod, true, function Callback)
endif
set d.Index = d.Index + 1
return d
endmethod
endstruct
private function Actions takes nothing returns nothing
local unit b = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(b,PowerShot)
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()
call PS.create(b,x,y,level)
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger tr = CreateTrigger()
set filter = Filter(function UnitFilter)
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition( tr,Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
library ReleaseWave initializer init
globals
constant real Range = 750.0
private group ENUM_GROUP = CreateGroup()
private boolexpr filter = null
endglobals
private function DurationCast takes integer level returns real
return 8.00
endfunction
private function Duration takes integer level returns real
return 6.00
endfunction
private function BonusDamageCast takes integer level returns real
return 8.0 + 6.0 * level
endfunction
private function BonusDamage takes integer level returns real
return 6.0 + 4.0 * level
endfunction
private function HealPassive takes integer level returns real
return 20.0 + 10.0 * level
endfunction
private function HealCast takes integer level returns real
return 25.0 + 15.0 * level
endfunction
private function UnitFilter takes nothing returns boolean
if not(IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL)) and IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) and (GetWidgetLife(GetFilterUnit()) > 0.405) then
return true
else
return false
endif
endfunction
function ReleaseHealWave takes unit u, integer level, boolean cast returns nothing
local real heal
local real duration
local real damagebonus
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local unit b
if cast == true then
set heal = HealCast(level)
set duration = DurationCast(level)
set damagebonus = BonusDamageCast(level)
else
set heal = HealPassive(level)
set duration = Duration(level)
set damagebonus = BonusDamage(level)
endif
call KillUnit(CreateUnit(Player(12),'h00G',x,y,0))
call TriggerSleepAction(0.30)
call GroupEnumUnitsInRange(ENUM_GROUP,x,y,Range,filter)
loop
set b = FirstOfGroup(ENUM_GROUP)
exitwhen b == null
if GetPlayerId(GetOwningPlayer(b)) <= 5 then
call HealTarget(u,b,heal)
endif
call GroupRemoveUnit(ENUM_GROUP,b)
endloop
if GetUnitAbilityLevel(u,'A031') != 0 then
if LoadBoolean(ht,GetHandleId(u),56) == false then
call SaveEffectHandle(ht,GetHandleId(u),57,AddSpecialEffectTarget("Abilities\\Spells\\Undead\\OrbOfDeath\\OrbOfDeathMissile.mdl",u,"weapon"))
endif
call SaveBoolean(ht,GetHandleId(u),56,true)
endif
endfunction
private function init takes nothing returns nothing
set filter = Filter(function UnitFilter)
set ENUM_GROUP = CreateGroup()
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
//Note done
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope HolyWaveCast initializer Init
globals
integer HW = 'A032'
endglobals
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == HW
endfunction
private function Actions takes nothing returns nothing
local integer level = GetUnitAbilityLevel(GetTriggerUnit(),HW)
call ReleaseHealWave(GetTriggerUnit(),level,true)
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger tr = CreateTrigger()
//set filter = Filter(function UnitFilter)
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition( tr, Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=0
//TESH.alwaysfold=0
scope ReversePolarityCast initializer Init
globals
integer RP = 'A035'
endglobals
private function RunCondition takes nothing returns boolean
return GetSpellAbilityId() == RP
endfunction
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
if GetUnitAbilityLevel(u,'A031') != 0 then
if LoadBoolean(ht,GetHandleId(u),56) == false then
call SaveEffectHandle(ht,GetHandleId(u),57,AddSpecialEffectTarget("Abilities\\Spells\\Undead\\OrbOfDeath\\OrbOfDeathMissile.mdl",u,"weapon"))
endif
call SaveBoolean(ht,GetHandleId(u),56,true)
endif
set PRlevel = GetUnitAbilityLevel(u,RP)
set PRHero = u
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger tr = CreateTrigger()
//set filter = Filter(function UnitFilter)
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition( tr, Condition( function RunCondition ) )
call TriggerAddAction( tr, function Actions )
endfunction
endscope
//TESH.scrollpos=40
//TESH.alwaysfold=0
function NewNaitives takes nothing returns nothing
local hashtable ht = InitHashtable()
local unit b
local integer i = GetHandleId(GetTriggerUnit())
local integer ii = StringHash("lawl")
call SaveUnitHandle(ht,i,ii,b)
call LoadUnitHandle(ht,i,ii)
endfunction
type hashtable extends handle
native GetHandleId takes handle h returns integer
native StringHash takes string s returns integer
native InitHashtable takes nothing returns hashtable
native SaveInteger takes hashtable table, integer parentKey, integer childKey, integer value returns nothing
native SaveReal takes hashtable table, integer parentKey, integer childKey, real value returns nothing
native SaveBoolean takes hashtable table, integer parentKey, integer childKey, boolean value returns nothing
native SaveStr takes hashtable table, integer parentKey, integer childKey, string value returns boolean
native SavePlayerHandle takes hashtable table, integer parentKey, integer childKey, player whichPlayer returns boolean
native SaveWidgetHandle takes hashtable table, integer parentKey, integer childKey, widget whichWidget returns boolean
native SaveDestructableHandle takes hashtable table, integer parentKey, integer childKey, destructable whichDestructable returns boolean
native SaveItemHandle takes hashtable table, integer parentKey, integer childKey, item whichItem returns boolean
native SaveUnitHandle takes hashtable table, integer parentKey, integer childKey, unit whichUnit returns boolean
native SaveAbilityHandle takes hashtable table, integer parentKey, integer childKey, ability whichAbility returns boolean
native SaveTimerHandle takes hashtable table, integer parentKey, integer childKey, timer whichTimer returns boolean
native SaveTriggerHandle takes hashtable table, integer parentKey, integer childKey, trigger whichTrigger returns boolean
native SaveTriggerConditionHandle takes hashtable table, integer parentKey, integer childKey, triggercondition whichTriggercondition returns boolean
native SaveTriggerActionHandle takes hashtable table, integer parentKey, integer childKey, triggeraction whichTriggeraction returns boolean
native SaveTriggerEventHandle takes hashtable table, integer parentKey, integer childKey, event whichEvent returns boolean
native SaveForceHandle takes hashtable table, integer parentKey, integer childKey, force whichForce returns boolean
native SaveGroupHandle takes hashtable table, integer parentKey, integer childKey, group whichGroup returns boolean
native SaveLocationHandle takes hashtable table, integer parentKey, integer childKey, location whichLocation returns boolean
native SaveRectHandle takes hashtable table, integer parentKey, integer childKey, rect whichRect returns boolean
native SaveBooleanExprHandle takes hashtable table, integer parentKey, integer childKey, boolexpr whichBoolexpr returns boolean
native SaveSoundHandle takes hashtable table, integer parentKey, integer childKey, sound whichSound returns boolean
native SaveEffectHandle takes hashtable table, integer parentKey, integer childKey, effect whichEffect returns boolean
native SaveUnitPoolHandle takes hashtable table, integer parentKey, integer childKey, unitpool whichUnitpool returns boolean
native SaveItemPoolHandle takes hashtable table, integer parentKey, integer childKey, itempool whichItempool returns boolean
native SaveQuestHandle takes hashtable table, integer parentKey, integer childKey, quest whichQuest returns boolean
native SaveQuestItemHandle takes hashtable table, integer parentKey, integer childKey, questitem whichQuestitem returns boolean
native SaveDefeatConditionHandle takes hashtable table, integer parentKey, integer childKey, defeatcondition whichDefeatcondition returns boolean
native SaveTimerDialogHandle takes hashtable table, integer parentKey, integer childKey, timerdialog whichTimerdialog returns boolean
native SaveLeaderboardHandle takes hashtable table, integer parentKey, integer childKey, leaderboard whichLeaderboard returns boolean
native SaveMultiboardHandle takes hashtable table, integer parentKey, integer childKey, multiboard whichMultiboard returns boolean
native SaveMultiboardItemHandle takes hashtable table, integer parentKey, integer childKey, multiboarditem whichMultiboarditem returns boolean
native SaveTrackableHandle takes hashtable table, integer parentKey, integer childKey, trackable whichTrackable returns boolean
native SaveDialogHandle takes hashtable table, integer parentKey, integer childKey, dialog whichDialog returns boolean
native SaveButtonHandle takes hashtable table, integer parentKey, integer childKey, button whichButton returns boolean
native SaveTextTagHandle takes hashtable table, integer parentKey, integer childKey, texttag whichTexttag returns boolean
native SaveLightningHandle takes hashtable table, integer parentKey, integer childKey, lightning whichLightning returns boolean
native SaveImageHandle takes hashtable table, integer parentKey, integer childKey, image whichImage returns boolean
native SaveUbersplatHandle takes hashtable table, integer parentKey, integer childKey, ubersplat whichUbersplat returns boolean
native SaveRegionHandle takes hashtable table, integer parentKey, integer childKey, region whichRegion returns boolean
native SaveFogStateHandle takes hashtable table, integer parentKey, integer childKey, fogstate whichFogState returns boolean
native SaveFogModifierHandle takes hashtable table, integer parentKey, integer childKey, fogmodifier whichFogModifier returns boolean
native LoadInteger takes hashtable table, integer parentKey, integer childKey returns integer
native LoadReal takes hashtable table, integer parentKey, integer childKey returns real
native LoadBoolean takes hashtable table, integer parentKey, integer childKey returns boolean
native LoadStr takes hashtable table, integer parentKey, integer childKey returns string
native LoadPlayerHandle takes hashtable table, integer parentKey, integer childKey returns player
native LoadWidgetHandle takes hashtable table, integer parentKey, integer childKey returns widget
native LoadDestructableHandle takes hashtable table, integer parentKey, integer childKey returns destructable
native LoadItemHandle takes hashtable table, integer parentKey, integer childKey returns item
native LoadUnitHandle takes hashtable table, integer parentKey, integer childKey returns unit
native LoadAbilityHandle takes hashtable table, integer parentKey, integer childKey returns ability
native LoadTimerHandle takes hashtable table, integer parentKey, integer childKey returns timer
native LoadTriggerHandle takes hashtable table, integer parentKey, integer childKey returns trigger
native LoadTriggerConditionHandle takes hashtable table, integer parentKey, integer childKey returns triggercondition
native LoadTriggerActionHandle takes hashtable table, integer parentKey, integer childKey returns triggeraction
native LoadTriggerEventHandle takes hashtable table, integer parentKey, integer childKey returns event
native LoadForceHandle takes hashtable table, integer parentKey, integer childKey returns force
native LoadGroupHandle takes hashtable table, integer parentKey, integer childKey returns group
native LoadLocationHandle takes hashtable table, integer parentKey, integer childKey returns location
native LoadRectHandle takes hashtable table, integer parentKey, integer childKey returns rect
native LoadBooleanExprHandle takes hashtable table, integer parentKey, integer childKey returns boolexpr
native LoadSoundHandle takes hashtable table, integer parentKey, integer childKey returns sound
native LoadEffectHandle takes hashtable table, integer parentKey, integer childKey returns effect
native LoadUnitPoolHandle takes hashtable table, integer parentKey, integer childKey returns unitpool
native LoadItemPoolHandle takes hashtable table, integer parentKey, integer childKey returns itempool
native LoadQuestHandle takes hashtable table, integer parentKey, integer childKey returns quest
native LoadQuestItemHandle takes hashtable table, integer parentKey, integer childKey returns questitem
native LoadDefeatConditionHandle takes hashtable table, integer parentKey, integer childKey returns defeatcondition
native LoadTimerDialogHandle takes hashtable table, integer parentKey, integer childKey returns timerdialog
native LoadLeaderboardHandle takes hashtable table, integer parentKey, integer childKey returns leaderboard
native LoadMultiboardHandle takes hashtable table, integer parentKey, integer childKey returns multiboard
native LoadMultiboardItemHandle takes hashtable table, integer parentKey, integer childKey returns multiboarditem
native LoadTrackableHandle takes hashtable table, integer parentKey, integer childKey returns trackable
native LoadDialogHandle takes hashtable table, integer parentKey, integer childKey returns dialog
native LoadButtonHandle takes hashtable table, integer parentKey, integer childKey returns button
native LoadTextTagHandle takes hashtable table, integer parentKey, integer childKey returns texttag
native LoadLightningHandle takes hashtable table, integer parentKey, integer childKey returns lightning
native LoadImageHandle takes hashtable table, integer parentKey, integer childKey returns image
native LoadUbersplatHandle takes hashtable table, integer parentKey, integer childKey returns ubersplat
native LoadRegionHandle takes hashtable table, integer parentKey, integer childKey returns region
native LoadFogStateHandle takes hashtable table, integer parentKey, integer childKey returns fogstate
native LoadFogModifierHandle takes hashtable table, integer parentKey, integer childKey returns fogmodifier
native HaveSavedInteger takes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedReal takes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedBoolean takes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedString takes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedHandle takes hashtable table, integer parentKey, integer childKey returns boolean
native RemoveSavedInteger takes hashtable table, integer parentKey, integer childKey returns nothing
native RemoveSavedReal takes hashtable table, integer parentKey, integer childKey returns nothing
native RemoveSavedBoolean takes hashtable table, integer parentKey, integer childKey returns nothing
native RemoveSavedString takes hashtable table, integer parentKey, integer childKey returns nothing
native RemoveSavedHandle takes hashtable table, integer parentKey, integer childKey returns nothing
native FlushParentHashtable takes hashtable table returns nothing
native FlushChildHashtable takes hashtable table, integer parentKey returns nothing