• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

===[NEW] Spell Workshop [NEW]===

Status
Not open for further replies.
Level 2
Joined
Jul 19, 2009
Messages
15
hy defskull, i need help for a skill :D, hope you can help me.
the skill i want to make work like this : 300 range(lvl1) around the hero for every enemy unit that die give the hero 15 points and for every enemy hero that die give the hero 15% of the dying hero's max hp.
(lvl 2 -400 range, 30 hp for units, 30% for heroes)
(lvl 3 -500 range, 50 hp for units, 50% for heroes)
I also want when a unit die and give the hero hitpoits, dying unit to release a spirit that go into the hero, then disappear.
 
Level 1
Joined
Jul 6, 2011
Messages
1
2 spells please

the first spell is something like slark's leap ability, but I don't want the thing where the unit is pinned to the ground, just the leap and initial damage.

The second spell needs to be a charge-like ability. The hero needs to sprint forward for a certain distance until he hits a unit. He needs to stop once he has hit the unit, and the unit must take damage and must be stunned for a few seconds.

Both abilities are hero abilities. Thanks in advance for any help.
 
Level 4
Joined
Jul 6, 2011
Messages
73
Can you make me a timestop spell that creates a bubble around the hero (preferably blue) make it kind of big and let hero and allies move but enemies can not. And tell me how to install it and add it to a hero please im new at this
 
Level 2
Joined
Jul 8, 2011
Messages
23
so we just tell you what we want you to make and youll make it?
id like to see this,

you fire an arrow (shockwave) and if it hits they get a buff that makes them revealed to you at all times, if they step on a mine, another ability you have, the buff disapears and the mine blows up dealing massive damage, could you do that?
 
so we just tell you what we want you to make and youll make it?
id like to see this,

you fire an arrow (shockwave) and if it hits they get a buff that makes them revealed to you at all times, if they step on a mine, another ability you have, the buff disapears and the mine blows up dealing massive damage, could you do that?

that's too easy...
 
Level 2
Joined
Jul 8, 2011
Messages
23
how about his, you fire an arrow in a derrection, a bird apears above you and chasses the arrow down, catches it and brings it back to you, creating a boomerang type of effect with the bird revealing vision on its eentire rout :0 you cant control the bird
 
Level 9
Joined
Mar 31, 2011
Messages
496
how about his, you fire an arrow in a derrection, a bird apears above you and chasses the arrow down, catches it and brings it back to you, creating a boomerang type of effect with the bird revealing vision on its eentire rout :0 you cant control the bird


isn't this double posting?
 
Level 2
Joined
Jul 2, 2011
Messages
32
hey i want request spell in item sword of light
2% change to Stun for 5 S
5% change to rain shock wave Dmg 100x Hero Level
5% change to Poison 25/s
50% change to Evasion With SP Divine Shield
10% change to kill Unit With Convert Full life
5% change to KnockBack for 1000 AoE
1% Change to kill All unit in 500 AOE
just that
 
Level 11
Joined
Mar 19, 2008
Messages
800
Suicide Attack (GUI OR MUI; NO VJASS/JASS please)

I Need a spell which deals 350/475/680 damage to targeted Hero, and half damage to Caster. It's a binding spell so enemy can't move when its targeted at him, there is small duration before the damage comes to both, so the SFX what i'm using will be able to do full animation (1.5 - 3.0 seconds) after that there is blood spilling effect on enemy and caster.

Also if the caster is interrupted, the Spell will stop, also if he dies the effect shouldn't go on :p

Thanks in advance
 
Level 11
Joined
Jul 7, 2010
Messages
709
Suicide Attack (GUI OR MUI; NO VJASS/JASS please)

I Need a spell which deals 350/475/680 damage to targeted Hero, and half damage to Caster. It's a binding spell so enemy can't move when its targeted at him, there is small duration before the damage comes to both, so the SFX what i'm using will be able to do full animation (1.5 - 3.0 seconds) after that there is blood spilling effect on enemy and caster.

Also if the caster is interrupted, the Spell will stop, also if he dies the effect shouldn't go on :p

Thanks in advanc
I can make that for you just hang on.
EDIT:
Hvn't tested it yet, Read the README first
Suicide Attack.w3x


  • SA Int
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Suicide Attack
    • Actions
      • -------- ------ --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SA_Index Equal to 0
        • Then - Actions
          • Trigger - Turn on SA Loop <gen>
        • Else - Actions
      • -------- ------ --------
      • Set SA_Index = (SA_Index + 1)
      • -------- ------ --------
      • Set SA_Caster[SA_Index] = (Triggering unit)
      • Set SA_Target[SA_Index] = (Target unit of ability being cast)
      • -------- ------ --------
      • Set SA_SFXEffect[1] = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
      • Set SA_SFXEffect[2] = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
      • -------- ------ --------
      • Set SA_Damage[1] = 350
      • Set SA_Damage[2] = 475
      • Set SA_Damage[1] = 680
      • -------- ------ --------
      • Set SA_Self_Damage[1] = 175
      • Set SA_Self_Damage[2] = 237
      • Set SA_Self_Damage[3] = 340
      • -------- ------ --------
      • Set SA_Spell_Level[SA_Index] = (Level of (Ability being cast) for (Triggering unit))
      • -------- ------ --------
      • Set SA_Damage_Time[SA_Index] = 1.50
      • -------- ------ --------
      • Unit - Pause SA_Caster[SA_Index]
      • Unit - Pause SA_Target[SA_Index]
      • -------- ------ --------
  • SA Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer A) from 1 to SA_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SA_Damage_Time[(Integer A)] Greater than 0.00
            • Then - Actions
              • -------- ------ --------
              • Set SA_Damage_Time[SA_Index] = (SA_Damage_Time[(Integer A)] - 0.03)
              • -------- ------ --------
            • Else - Actions
              • -------- ------ --------
              • Unit - Set life of SA_Caster[(Integer A)] to ((Life of SA_Caster[(Integer A)]) - (Real(SA_Self_Damage[SA_Spell_Level[(Integer A)]])))
              • Unit - Cause SA_Caster[(Integer A)] to damage SA_Target[(Integer A)], dealing (Real(SA_Damage[SA_Spell_Level[(Integer A)]])) damage of attack type Spells and damage type Normal
              • -------- ------ --------
              • Special Effect - Create a special effect attached to the chest of SA_Caster[(Integer A)] using SA_SFXEffect[1]
              • Special Effect - Destroy (Last created special effect)
              • Special Effect - Create a special effect attached to the chest of SA_Target[(Integer A)] using SA_SFXEffect[2]
              • Special Effect - Destroy (Last created special effect)
              • -------- ------ --------
              • Unit - Unpause SA_Caster[(Integer A)]
              • Unit - Unpause SA_Target[(Integer A)]
              • -------- ------ --------
              • Set SA_Index = (SA_Index - 1)
              • -------- ------ --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SA_Index Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
 
Level 11
Joined
Jul 7, 2010
Messages
709
Give me your list I can make some spells.

EDIT:
Spell: Battle Aura
Effect: Damage + 50 for 3 minutes then a 4 minute cooldown

Spell:Stomach Slash
Effect: 100 Damage to enemy + 4 per second for 20 seconds 20 sec cooldown

spell: Persuasion
effect: turns enemy unit to players side

Battle Aura - Just base it of battle call and set the values to +50 for 3 mins and 4 min cooldown.

Stomach Slash - Done Hvnt tested if it bugs ect post here.
--->For
  • Set SS_SFXEffect = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
Set it to you'r own SFX.
--->For
  • Set SS_Damage[SS_Index] = 200
Its your 200 damage when you first cast spell. Change to your needs.
--->
  • Set SS_Damage2[SS_Index] = 4
Your 4 damage per second over 20 seconds. Change to your needs.
DO NOT TOUCH ANYTHING ELSE...ELSE IT MAY CAUSE IT TO STOP WORKING.
 

Attachments

  • Stomach Slash.w3x
    9.5 KB · Views: 38
Last edited:
Level 11
Joined
Mar 19, 2008
Messages
800
I can make that for you just hang on.
EDIT:
Hvn't tested it yet, Read the README first
Suicide Attack.w3x


  • SA Int
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Suicide Attack
    • Actions
      • -------- ------ --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SA_Index Equal to 0
        • Then - Actions
          • Trigger - Turn on SA Loop <gen>
        • Else - Actions
      • -------- ------ --------
      • Set SA_Index = (SA_Index + 1)
      • -------- ------ --------
      • Set SA_Caster[SA_Index] = (Triggering unit)
      • Set SA_Target[SA_Index] = (Target unit of ability being cast)
      • -------- ------ --------
      • Set SA_SFXEffect[1] = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
      • Set SA_SFXEffect[2] = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
      • -------- ------ --------
      • Set SA_Damage[1] = 350
      • Set SA_Damage[2] = 475
      • Set SA_Damage[1] = 680
      • -------- ------ --------
      • Set SA_Self_Damage[1] = 175
      • Set SA_Self_Damage[2] = 237
      • Set SA_Self_Damage[3] = 340
      • -------- ------ --------
      • Set SA_Spell_Level[SA_Index] = (Level of (Ability being cast) for (Triggering unit))
      • -------- ------ --------
      • Set SA_Damage_Time[SA_Index] = 1.50
      • -------- ------ --------
      • Unit - Pause SA_Caster[SA_Index]
      • Unit - Pause SA_Target[SA_Index]
      • -------- ------ --------
  • SA Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer A) from 1 to SA_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SA_Damage_Time[(Integer A)] Greater than 0.00
            • Then - Actions
              • -------- ------ --------
              • Set SA_Damage_Time[SA_Index] = (SA_Damage_Time[(Integer A)] - 0.03)
              • -------- ------ --------
            • Else - Actions
              • -------- ------ --------
              • Unit - Set life of SA_Caster[(Integer A)] to ((Life of SA_Caster[(Integer A)]) - (Real(SA_Self_Damage[SA_Spell_Level[(Integer A)]])))
              • Unit - Cause SA_Caster[(Integer A)] to damage SA_Target[(Integer A)], dealing (Real(SA_Damage[SA_Spell_Level[(Integer A)]])) damage of attack type Spells and damage type Normal
              • -------- ------ --------
              • Special Effect - Create a special effect attached to the chest of SA_Caster[(Integer A)] using SA_SFXEffect[1]
              • Special Effect - Destroy (Last created special effect)
              • Special Effect - Create a special effect attached to the chest of SA_Target[(Integer A)] using SA_SFXEffect[2]
              • Special Effect - Destroy (Last created special effect)
              • -------- ------ --------
              • Unit - Unpause SA_Caster[(Integer A)]
              • Unit - Unpause SA_Target[(Integer A)]
              • -------- ------ --------
              • Set SA_Index = (SA_Index - 1)
              • -------- ------ --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SA_Index Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
Okay tested it, looked great you just forgot the blood effects. +Rep added
 
Level 22
Joined
Feb 3, 2009
Messages
3,292

Mine will count 6 teams, each 2 players. It would track each players score, kills, deaths.

And finally it would show next to each team the score, kills, deaths of the 2 players combined.

Score should just read itself from a variable udg_score arrayed type integer, I assign the values of it in the map already.

Something like this:

i27dbvq7r4.png
 
Level 22
Joined
Feb 3, 2009
Messages
3,292
1. In game it still seems to only show score, not kills and deaths.

2. Can you make a function with which I can set a players score via custom script (because I already update the score in a GUI trigger, it would be easiest to use a custom script function to update the multiboards score values) that will show the number I insert as a parameter into the multiboard (and then the team score is calculated).
 
Level 22
Joined
Feb 3, 2009
Messages
3,292
I see, one final 2 requests then,

1. Can you add a space before each new Team, like this. Also teams

TEAM 1
Player1
Player2

TEAM 2
Player 3
Player 4

TEAM 3
Player 5
Player 6

...

2. Can you make it so that teams which have 0 players in game are removed from multiboard at start and in game if both leave / are missing. If only a single player is in a team the missing one should be removed at start or after he leaves too. Note that computers are accepted as players as the map has an AI.

Sorry for all the additional functions, I didn't think of all at the start :/
 
Make up your mind pls...OK this is the finished product with lots of improvements...
This can be functional in melee maps as well up to 12 players...


JASS:
library MBLib initializer init

globals
    //Never touch these!
    private constant integer          MBCOLUMN = 4
    private constant integer             MBROW = 24
    private constant integer        MBSCORECOL = 1 
    private constant integer         MBKILLCOL = 2 
    private constant integer        MBDEATHCOL = 3 
    //Configurables   
    private constant string            MBTITLE = "AoS Multiboard System"
    //non-constants
    private multiboard MB
    private integer array KILLS
    private integer array DEATHS
    private integer array TOTAL
    private integer TOTAL1 = 0 
    private integer TOTAL2 = 0 
    private integer TOTAL3 = 0 
    private integer TOTAL4 = 0 
    private integer TOTAL5 = 0 
    private integer TOTAL6 = 0
    private integer DEATHS1 = 0
    private integer DEATHS2 = 0
    private integer DEATHS3 = 0
    private integer DEATHS4 = 0
    private integer DEATHS5 = 0
    private integer DEATHS6 = 0
endglobals

private function onPlayerCond takes integer pid returns boolean
    return GetPlayerController(Player(pid))==MAP_CONTROL_COMPUTER or GetPlayerController(Player(pid))==MAP_CONTROL_USER
endfunction

private function onKillsUpdate takes unit u, integer pid returns nothing
    set KILLS[pid] = KILLS[pid]+1
    if GetOwningPlayer(u)==Player(0) or GetOwningPlayer(u)==Player(1) then
        set TOTAL1=TOTAL1+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+1, MBKILLCOL), I2S(KILLS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 1, MBKILLCOL), I2S(TOTAL1))
    elseif GetOwningPlayer(u)==Player(2) or GetOwningPlayer(u)==Player(3) then
        set TOTAL2=TOTAL2+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+3, MBKILLCOL), I2S(KILLS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 5, MBKILLCOL), I2S(TOTAL2))
    elseif GetOwningPlayer(u)==Player(4) or GetOwningPlayer(u)==Player(5) then
        set TOTAL3=TOTAL3+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+5, MBKILLCOL), I2S(KILLS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 9, MBKILLCOL), I2S(TOTAL3))
    elseif GetOwningPlayer(u)==Player(6) or GetOwningPlayer(u)==Player(7) then
        set TOTAL4=TOTAL4+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+7, MBKILLCOL), I2S(KILLS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 13, MBKILLCOL), I2S(TOTAL4))
    elseif GetOwningPlayer(u)==Player(8) or GetOwningPlayer(u)==Player(9) then
        set TOTAL5=TOTAL5+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+9, MBKILLCOL), I2S(KILLS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 17, MBKILLCOL), I2S(TOTAL5))
    elseif GetOwningPlayer(u)==Player(10) or GetOwningPlayer(u)==Player(11) then
        set TOTAL6=TOTAL6+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+11, MBKILLCOL), I2S(KILLS[pid]))    
        call MultiboardSetItemValue(MultiboardGetItem(MB, 21, MBKILLCOL), I2S(TOTAL6))
    endif
endfunction

private function onDeathsUpdate takes unit u, integer pid returns nothing
    set DEATHS[pid] = DEATHS[pid]+1
    if GetOwningPlayer(u)==Player(0) or GetOwningPlayer(u)==Player(1) then
        set DEATHS1 = DEATHS1+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+1, MBDEATHCOL), I2S(DEATHS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 1, MBDEATHCOL), I2S(DEATHS1))
    elseif GetOwningPlayer(u)==Player(2) or GetOwningPlayer(u)==Player(3) then
        set DEATHS2 = DEATHS2+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+3, MBDEATHCOL), I2S(DEATHS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 5, MBDEATHCOL), I2S(DEATHS2))
    elseif GetOwningPlayer(u)==Player(4) or GetOwningPlayer(u)==Player(5) then
        set DEATHS3 = DEATHS3+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+5, MBDEATHCOL), I2S(DEATHS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 9, MBDEATHCOL), I2S(DEATHS3))
    elseif GetOwningPlayer(u)==Player(6) or GetOwningPlayer(u)==Player(7) then
        set DEATHS4 = DEATHS4+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+7, MBDEATHCOL), I2S(DEATHS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 13, MBDEATHCOL), I2S(DEATHS4))
    elseif GetOwningPlayer(u)==Player(8) or GetOwningPlayer(u)==Player(9) then
        set DEATHS5 = DEATHS5+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+9, MBDEATHCOL), I2S(DEATHS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 17, MBDEATHCOL), I2S(DEATHS5))
    elseif GetOwningPlayer(u)==Player(10) or GetOwningPlayer(u)==Player(11) then
        set DEATHS6 = DEATHS6+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, pid+11, MBDEATHCOL), I2S(DEATHS[pid]))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 21, MBDEATHCOL), I2S(DEATHS6))
    endif
endfunction

private function onMb takes nothing returns nothing
    local integer i = 1
    local integer pteam = 0
    local integer pname
        
    call MultiboardSetTitleText(MB, MBTITLE) 
    call MultiboardDisplay(MB, true)
    call MultiboardSetColumnCount(MB, MBCOLUMN)
    call MultiboardSetRowCount(MB, MBROW)
    call MultiboardSetItemsWidth(MB, 0.07)
    call MultiboardSetItemsStyle(MB, true, false)
    
    loop
        set pteam = pteam+1
        call MultiboardSetItemValue(MultiboardGetItem(MB, i, 0), "    TEAM " + I2S(pteam)) 
        set i = i+4
        exitwhen i >= MBROW
    endloop
    
    //TEAM 1
    set i = 0
    set pname = 1
    loop
        set pname = pname+1
        if onPlayerCond(i) then
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), GetPlayerName(Player(i))) 
        else
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), "NONE")             
        endif
        set i = i+1
        exitwhen pname >= 3
    endloop
    
    //TEAM2
    set i = 2
    set pname = 5
    loop
        set pname = pname+1
        if onPlayerCond(i) then
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), GetPlayerName(Player(i))) 
        else
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), "NONE") 
        endif
        set i = i+1
        exitwhen pname >= 7
    endloop
    
    //TEAM 3
    set i = 4
    set pname = 9
    loop
        set pname = pname+1
        if onPlayerCond(i) then
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), GetPlayerName(Player(i))) 
        else
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), "NONE") 
        endif
        set i = i+1
        exitwhen pname >= 11
    endloop
    
    //TEAM 4
    set i = 6
    set pname = 13
    loop
        set pname = pname+1
        if onPlayerCond(i) then
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), GetPlayerName(Player(i))) 
        else
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), "NONE") 
        endif
        set i = i+1
        exitwhen pname >= 15
    endloop
    
    //TEAM 5
    set i = 8
    set pname = 17
    loop
        set pname = pname+1
        if onPlayerCond(i) then
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), GetPlayerName(Player(i))) 
        else
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), "NONE") 
        endif 
        set i = i+1
        exitwhen pname >= 19
    endloop
    
    //TEAM 6
    set i = 10
    set pname = 21
    loop
        set pname = pname+1
        if onPlayerCond(i) then
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), GetPlayerName(Player(i))) 
        else
            call MultiboardSetItemValue(MultiboardGetItem(MB, pname, 0), "NONE")
        endif
        set i = i+1
        exitwhen pname >= 23
    endloop
    
    set i = 1
    loop
        call MultiboardSetItemValue(MultiboardGetItem(MB, i, 1), "0") 
        call MultiboardSetItemValue(MultiboardGetItem(MB, i, 2), "0") 
        call MultiboardSetItemValue(MultiboardGetItem(MB, i, 3), "0") 
        set i = i+1
        exitwhen i >=MBROW
    endloop
    
    call MultiboardSetItemValue(MultiboardGetItem(MB, 0, 1), "Score")
    call MultiboardSetItemValue(MultiboardGetItem(MB, 0, 2), "Kills")
    call MultiboardSetItemValue(MultiboardGetItem(MB, 0, 3), "Deaths")
    
    set i = 0
    loop
        set i = i+4
        call MultiboardSetItemValue(MultiboardGetItem(MB, i, 1), " ")        
        call MultiboardSetItemValue(MultiboardGetItem(MB, i, 2), " ") 
        call MultiboardSetItemValue(MultiboardGetItem(MB, i, 3), " ") 
        exitwhen i >=MBROW
    endloop
    
endfunction
    
private function onMbSetup takes nothing returns boolean
    call onMb()
    return false
endfunction

private function onMbKillsEvent takes nothing returns boolean
    local integer pid
    local integer pid2
    if IsUnitEnemy(GetKillingUnit(), GetTriggerPlayer()) then
        set pid = GetPlayerId(GetOwningPlayer(GetKillingUnit()))+1
        set pid2 = GetPlayerId(GetTriggerPlayer())+1
        call onKillsUpdate(GetKillingUnit(), pid)
        call onDeathsUpdate(GetTriggerUnit(), pid2)
    endif
    return false
endfunction

function runScores takes integer playerid, playerscore pscore returns nothing
    local integer score
    local integer totalscore1
    local integer totalscore2
    set score = GetPlayerScore(Player(playerid), pscore)
    if playerid==0 or playerid==1 then
        set totalscore1 = GetPlayerScore(Player(0), pscore) 
        set totalscore2 = GetPlayerScore(Player(1), pscore) 
        set TOTAL[1] = totalscore1 + totalscore2
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+2, MBSCORECOL), I2S(score)) 
        call MultiboardSetItemValue(MultiboardGetItem(MB, 1, MBSCORECOL), I2S(TOTAL[1]))
    elseif playerid==2 or playerid==3 then
        set totalscore1 = GetPlayerScore(Player(2), pscore) 
        set totalscore2 = GetPlayerScore(Player(3), pscore) 
        set TOTAL[2] = totalscore1 + totalscore2
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+4, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 5, MBSCORECOL), I2S(TOTAL[2]))
    elseif playerid==4 or playerid==5 then
        set totalscore1 = GetPlayerScore(Player(4), pscore) 
        set totalscore2 = GetPlayerScore(Player(5), pscore) 
        set TOTAL[3] = totalscore1 + totalscore2
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+6, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 9, MBSCORECOL), I2S(TOTAL[3]))
    elseif playerid==6 or playerid==7 then
        set totalscore1 = GetPlayerScore(Player(6), pscore) 
        set totalscore2 = GetPlayerScore(Player(7), pscore) 
        set TOTAL[4] = totalscore1 + totalscore2
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+8, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 13, MBSCORECOL), I2S(TOTAL[4]))
    elseif playerid==8 or playerid==9 then
        set totalscore1 = GetPlayerScore(Player(8), pscore) 
        set totalscore2 = GetPlayerScore(Player(9), pscore) 
        set TOTAL[5] = totalscore1 + totalscore2
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+10, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 17, MBSCORECOL), I2S(TOTAL[5]))
    elseif playerid==10 or playerid==11 then
        set totalscore1 = GetPlayerScore(Player(10), pscore) 
        set totalscore2 = GetPlayerScore(Player(11), pscore) 
        set TOTAL[6] = totalscore1 + totalscore2
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+12, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 21, MBSCORECOL), I2S(TOTAL[6]))
    endif
endfunction

private function init takes nothing returns nothing
    local trigger t1 = CreateTrigger()          
    local trigger t2 = CreateTrigger()
    call TriggerRegisterTimerEvent(t1, 0.1, false)
    call TriggerRegisterAnyUnitEventBJ(t2, EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddCondition(t1, Condition(function onMbSetup))
    call TriggerAddCondition(t2, Condition(function onMbKillsEvent))
    set MB = CreateMultiboard()
    set t1 = null
    set t2 = null
endfunction

endlibrary


the score is customized, just make the right calling...

sample:
  • test scores
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Custom script: local integer i = 0
      • Custom script: loop
      • Custom script: call runScores(i, PLAYER_SCORE_TOTAL) <<<this is the customized scoring
      • Custom script: set i=i+1
      • Custom script: exitwhen i >=12
      • Custom script: endloop
 
no probs, anytime!

EDIT:
replace runScores function with this...
the udg_Int1 to udg_Int12 is a global variable...
JASS:
function runScores takes integer playerid, integer score returns nothing
    if playerid==0 or playerid==1 then
        set TOTAL[1] = udg_Int1+udg_Int2
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+2, MBSCORECOL), I2S(score)) 
        call MultiboardSetItemValue(MultiboardGetItem(MB, 1, MBSCORECOL), I2S(TOTAL[1]))
    elseif playerid==2 or playerid==3 then
        set TOTAL[2] = udg_Int3+udg_Int4
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+4, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 5, MBSCORECOL), I2S(TOTAL[2]))
    elseif playerid==4 or playerid==5 then
        set TOTAL[3] = udg_Int5+udg_Int6
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+6, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 9, MBSCORECOL), I2S(TOTAL[3]))
    elseif playerid==6 or playerid==7 then
        set TOTAL[4] = udg_Int7+udg_Int8
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+8, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 13, MBSCORECOL), I2S(TOTAL[4]))
    elseif playerid==8 or playerid==9 then
        set TOTAL[5] = udg_Int9+udg_Int10
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+10, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 17, MBSCORECOL), I2S(TOTAL[5]))
    elseif playerid==10 or playerid==11 then
        set TOTAL[6] = udg_Int11+udg_Int12
        call MultiboardSetItemValue(MultiboardGetItem(MB, playerid+12, MBSCORECOL), I2S(score))
        call MultiboardSetItemValue(MultiboardGetItem(MB, 21, MBSCORECOL), I2S(TOTAL[6]))
    endif
endfunction

test like this...
  • test scores
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Set Int1 = (Int1 + 1)
      • Set Int2 = (Int2 + 1)
      • Set Int3 = (Int3 + 1)
      • Set Int4 = (Int4 + 1)
      • Set Int5 = (Int5 + 1)
      • Set Int6 = (Int6 + 1)
      • Set Int7 = (Int7 + 1)
      • Set Int8 = (Int8 + 1)
      • Set Int9 = (Int9 + 1)
      • Set Int10 = (Int10 + 1)
      • Set Int11 = (Int11 + 1)
      • Set Int12 = (Int12 + 1)
      • Custom script: call runScores(0, udg_Int1)
      • Custom script: call runScores(1, udg_Int2)
      • Custom script: call runScores(2, udg_Int3)
      • Custom script: call runScores(3, udg_Int4)
      • Custom script: call runScores(4, udg_Int5)
      • Custom script: call runScores(5, udg_Int6)
      • Custom script: call runScores(6, udg_Int7)
      • Custom script: call runScores(7, udg_Int8)
      • Custom script: call runScores(8, udg_Int9)
      • Custom script: call runScores(9, udg_Int10)
      • Custom script: call runScores(10, udg_Int11)
      • Custom script: call runScores(11, udg_Int12)
 
Last edited:
Level 2
Joined
Jul 8, 2011
Messages
23
Could you pleese make this spell for me?

A channel based shockwave that goes up to 1000 range, the projectile moves to the point clicked with a max range click of 1000 (click 500 away it goes 500 away) and when it reaches its destination it creates a block of ice, unpathable terrain, for 1-2-3-4-5 seconds as leveled, that block is 100 Wc3 units diameter, if on the path of the projectile hits a unit of a peice of terrain such as a wall, or even a tree, it detonates prematurly, if it is a unit that it hit the unpathable terrain apears around them encasing them as if they were under the effect of enshnare for the 1-2-3-4-5 seconds.

would it be possible for you to make me this skill?
 
Level 11
Joined
Jul 9, 2009
Messages
927
@Dark_AngeaL

are you challenging them to make this spells ??

its not really good mocking them with hard spells like that
tthey can make those spells for you, but it will take a lot of time to do that, and you are not the only one in line right ? xD
Ok lets try this, Show us a map of yours which is worth having the skill you say above

that is mocking to right ?? Im sorry to answer back but it is like you want them to look like some guys who cant do complicated spells. >.>

@Mckill & x3GlikE , keep up the good work :)
 
Status
Not open for further replies.
Top