Mana Burst |
Type: Active Selection: Area Targetion: Ground Description: Arcist jump to the targeted area, then burst the area with mana whict removing enemies mana on the area Active: Jump atleast with maximum range for 200 / 300 / 400 / 500 range, damaging the targeted 400 area for 8 / 12 / 16 / 20% of your current mana. Manacost: 8 / 12 / 16 / 20% Of your current mana Cooldown: 16 Second Casting Range: 200 / 300 / 400 / 500 Range |
Mana Blast |
Type: Active Selection: Area Targetion: Ground Description: Arcist cast a sucker blast, sucking enemy unit on area into the middle area Active: Blast targeted area with mana, sucking enemy unit on 450 / 500 / 550 / 600 area into the middle area removing the enemies mana for 4 / 6 / 8 / 10% of max mana Manacost: 4 / 6 / 8 / 10% Of max mana Cooldown: 24 Second Casting Range: 600 Range |
Mana Reaction |
Type: Passive Description: The Arcist staff will reaction if nearby ally or him self cast spell. Passive: Every nearby ally on 300 / 400 / 500 / 600 area or himself cast a spell, gaining the nearby ally or himself mana for 20 / 40 / 60 / 80 mana |
Mana Ward |
Type: Active Selection: Target Targetion: Ground Description: Place your staff on the ground, then it will draining nearby enemies mana, also the enemies get slowed a bit while the mana drained Active: Place your staff on the ground, it last infine time until you take back the staff, during this, you can't attack or casting any spell, also you don't had mana too. So basicaly you are depent on your staff. The staff is your spell, mana, and attack. Draining all nearby enemies mana for 20 / 40 / 60 mana per second. Slowing it for 10 / 15 / 20 % Cooldown: 1 Second Casting Range: 0 Range ( Melee ) |
>Does Daze is like when a unit is knocked from a killed Zeppelin?Coded in: GUI
Number of Levels: 5
Mana Cost: 30
Cooldown: 5 * level
Cast Type: auto-cast
Target Type: unit
Detailed Description:
-Spell Description: the paladin invokes his privilege as a knight of the holy order, causing him to deal (str * level) more damage to enemy units, whilst healing 50% of friendly units around the caster.
-Other details: enemy units struck shall be stunned if (level of ability) >= 3 and shall be dazed other wise.
-Puts a buff on the enemy unit named "Awe"
-Stun/Daze shall last (level of ability) seconds, as well as the buff
seems easy enough for me.Coded in: GUI
Number of Levels: 5
Mana Cost: 40
Cooldown: 8 * level
Cast Type: auto-cast
Target Type: unit
Detailed Description:
-Spell's Description: the paladin invokes his privilege as the lord of the magic council, and therefore allows him to have:
- a 50% chance to strike again before the enemy does (plays again his attack anim and deals the same damage as his previous attack)
- a 30% chance to cast divine shield on the caster (divine shield may be the default one, with only 3 levels, as I can always change it myself
)
- a 15% chance to deal AoE (100 * level) Damage (if target has "Awe" buff, set Damage = 30 * level, else set Damage = 15* level), then create a holy bolt sfx on those units' chests.
I think I will try to configure the "double strike" a bit to make it nice, but overall, seems easy. oh yeah, does this spell and Lord's Privilige stacks between each other?Coded in: GUI/vJASS
Number of Levels: 3
Mana Cost: 50
Cooldown: 15 * level
Cast Type: auto-cast
Target Type: unit
Detailed Description:
-Spell's Description: the paladin invokes his right as the Overlord of all things holy, and therefore allows him to:
Additional info: In all instances the effect the spell allows the caster to do, there should be a holy bolt sfx created at the unit's chest.
- Have a 60% chance to attack 4 times the enemy (plays his attack anim in 200% animation rate 4 times, dealing double damage from his last attack (including those made with the Overlord's Privilege)
- Have a 30% chance to cast Divine Shield on all nearby (100 * level = AoE) friendly units and heal them by half their life
- Have a 10% chance to deal 75% of the target's max life in combat
No problem
Are you happy with the spell pack after the fix?
@FRENGERS: ~Accepted. Thanks for the good descriptions
@Lord_JiangWei: We don't usually do systems here. Do you want it in GUI or vJASS? Do you have a damage detection system?
@Lord_JiangWei: We don't usually do systems here. Do you want it in GUI or vJASS? Do you have a damage detection system?
GetEventDamage = Damage Amount
GetEventDamageSource = Damaging Unit
GetTriggerUnit = Damaged Unit
//! endnovjass
private function Delayed_Heal takes nothing returns nothing
local timer t = GetExpiredTimer()//get the timer
local integer i = GetHandleId(t)//get the handle id of the timer
local unit u = LoadUnitHandle(TimerUtils_ht,0,i)//load the damaged unit
call SetWidgetLife(u,GetUnitState(u,UNIT_STATE_MAX_LIFE))//set the unit's life
call SaveInteger(TimerUtils_ht,0,i,0)//used for release timer
call ReleaseTimer(t)//releases the timer
endfunction
private function Conditions takes nothing returns boolean
local integer i = -1
local string s = "|cffffcc00" + GetPlayerName(GetOwningPlayer(GetEventDamageSource())) + "|r |cffff0000has secured a gate!|r"
local timer t
local unit u = GetTriggerUnit()
//It's important to know that the EVENT_UNIT_DAMAGED event will register that the unit is taking damage,
//but this function will run before the damage is applied
//if you set the damaged unit's life to full now, then it will still get damaged
//you need to have a small delay between healing the unit for the damage taken, though to avoid
//it dieing, we'll set it to full anyways
if GetWidgetLife(u)-GetEventDamage() <= .405 then//check to see if the unit is going to die
//the unit is going to die
//restore its life and change the ownership
call SetWidgetLife(u,GetUnitState(u,UNIT_STATE_MAX_LIFE))
call SetUnitOwner(u,GetOwningPlayer(GetEventDamageSource()),true)
//now we need to add a small delay and then heal it to full again to heal the damage taken
set t = NewTimer()//get a timer from the stack
call SaveUnitHandle(TimerUtils_ht,0,GetHandleId(t),u)//save the damaged unit
call TimerStart(t,0,false,function Delayed_Heal)//start the timer
loop
set i = i + 1
call DisplayTextToPlayer( Player(i), 0, 0, s )
exitwhen i == 11
endloop
call StartSound(gg_snd_Hint)
call PingMinimapForForce(bj_FORCE_ALL_PLAYERS, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 5)
endif
return false
endfunction
public function Add takes unit u returns nothing//function used to add gate captains to the system
local trigger t = CreateTrigger()//first create the trigger for the unit
call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_DAMAGED)//then the event for the trigger
call TriggerAddCondition(t,Condition(function Conditions))//then the conditions for the trigger
endfunction
library UnitInRangeOfType requires AIDS, Event, Alloc
globals
private key EVENT_KEY
private key TRIGGER_KEY
private key RANGE_KEY
private key TYPE_KEY
private key UNIT_KEY
endglobals
private struct idlist extends array
public static integer count = 0
implement Alloc
public integer id
public static method create takes integer id returns thistype
local thistype this = thistype.allocate()
set this.id = id
set thistype.count = thistype.count + 1
return this
endmethod
endstruct
private struct data extends array
public static hashtable hash
private static unit lastcenter
public Event e
//! runtextmacro AIDS()
private static method AIDS_filter takes unit u returns boolean
local integer i = idlist.count
local boolean b = false
local integer id = GetUnitTypeId(u)
loop
exitwhen i == 0
set b = b or ( id == idlist[i].id )
set i = i - 1
endloop
set b = b or ( IsUnitType(u, UNIT_TYPE_HERO) )
return b
endmethod
public static method GetCenterUnit takes nothing returns unit
return thistype.lastcenter
endmethod
private static method OnEvent takes nothing returns boolean
set thistype.lastcenter = LoadUnitHandle(thistype.hash, GetHandleId(GetTriggeringTrigger()), UNIT_KEY)
call FireEvent(Event(LoadInteger(data.hash, LoadInteger(thistype.hash, GetHandleId(GetTriggeringTrigger()), TYPE_KEY), EVENT_KEY)))
return false
endmethod
private method AIDS_onCreate takes nothing returns nothing
local trigger t = CreateTrigger()
local integer i = GetUnitTypeId(this.unit)
set this.e = Event.create()
call TriggerRegisterUnitInRange(t, this.unit, LoadReal(thistype.hash, i, RANGE_KEY), null)
call TriggerAddCondition(t, Condition(function thistype.OnEvent))
call SaveInteger(thistype.hash, GetHandleId(t), TYPE_KEY, i)
call SaveUnitHandle(thistype.hash, GetHandleId(t), UNIT_KEY, this.unit)
endmethod
private static method AIDS_onInit takes nothing returns nothing
set hash = InitHashtable()
endmethod
endstruct
function GetCenterUnit takes nothing returns unit
return data.GetCenterUnit()
endfunction
function TriggerRegisterUnitInRangeOfType takes trigger whichTrigger, integer whichType, real range returns Event
local Event e
if ( HaveSavedInteger(data.hash, whichType, EVENT_KEY) ) then
set e = LoadInteger(data.hash, whichType, EVENT_KEY)
else
set e = Event.create()
call SaveInteger(data.hash, whichType, EVENT_KEY, e)
call TriggerRegisterEvent(whichTrigger, e)
endif
call idlist.create(whichType)
call SaveTriggerHandle(data.hash, whichType, TRIGGER_KEY, whichTrigger)
call SaveReal(data.hash, whichType, RANGE_KEY, range)
return e
endfunction
endlibrary
Mr. Bean, what is your warcraft 3 patch??
Well I had 2 patch
1.26a, and one 1.24b xD xD
But Mr. Bean spell only can played on 1.24b patch :/ :/ So I thing his patch is 1.24b :/ :/
Oh, the map doesn't preview on 1.26. But I rename, and it's work....
So do you think you can do the system?
No but I can implement if that's what you're going to use.![]()
Also i'm Using JNGP Version 1.5e with Vexorians Jass Helper.
haven't seen him lately.is Elite still active in this workshop
hey i want to ask what the ReplaceableTextures\Weather\ShadowShackles.BLP for?