• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Why Won't This Work

Status
Not open for further replies.
Level 11
Joined
Jun 30, 2008
Messages
580
JASS:
library CounterSys initializer Init

globals
   private hashtable Data = InitHashtable()
   private integer array UnitID[18]
endglobals

struct PlayerData
 integer array Kills[18]
 integer array Deaths[18]
 integer array KillsUnit[342]
 integer array DeathsUnit[342]
endstruct


private function Setup takes nothing returns nothing
    local integer i = 0
    local PlayerData pdat
    set UnitID[1] = 'hfoo' //Rifleman
    set UnitID[2] = 'hkni' //Marine
    set UnitID[3] = 'hrif' //Major
    set UnitID[4] = 'h002' //Marine Major
    set UnitID[5] = 'h008' //Priest
    set UnitID[6] = 'h00d' //Medic
    set UnitID[7] = 'h007' //sniper
    set UnitID[8] = 'h009' //Tank A
    set UnitID[9] = 'h00b' //Tank B
    set UnitID[10] = 'h00c' //Tank C
    set UnitID[11] = 'h00n' //Ship A
    set UnitID[12] = 'h00p' //Ship B
    set UnitID[13] = 'h00q' //Ship C
    set UnitID[14] = 'h00o' //Ship S
    set UnitID[15] = 'h00m' // Ship SS
    set UnitID[16] = 'hbar' //City
    set UnitID[17] = 'h00k' //Port
    set UnitID[18] = 'h00r' //Transport
    loop
        set pdat = PlayerData.create()
        call SaveInteger(Data, i, 1, pdat)
    set i = i+1
    exitwhen i > 12
    endloop
    set i = 0
endfunction



function GetCount takes integer IDindex, integer IPlayer, integer KD returns integer i
    local PlayerData pdat = LoadInteger(Data, IPlayer, 1)
    local integer i = 0
    local integer ii = KD
    if ii == 1 then
    set i = pdat.Kills[IDindex]
    elseif ii == 2 then
    set i = pdat.Deaths[IDindex]
    endif
return i
endfunction

function GetUnitCount takes integer KillIndex, integer IPlayer, integer DeathIndex, integer KD returns integer i
    local PlayerData pdat = LoadInteger(Data, IPlayer, 1)
    local integer i = 0
    if KD == 1 then
        set i = pdat.KillsUnit[KillIndex+(18*DeathIndex)]
    elseif KD == 2 then 
        set i = pdat.DeathsUnit[KillIndex+(18*DeathIndex)]
    endif
return i
endfunction


private function Count takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local unit uu = GetKillingUnit()
    local player p = GetOwningPlayer(u)
    local player pp = GetOwningPlayer(uu)
    local PlayerData pdat = LoadInteger(Data, GetPlayerId(p), 1)
    local PlayerData pdatu = LoadInteger(Data, GetPlayerId(pp), 1)
    local integer i = 0
    local integer DieTrack = 0
    local integer KillTrack = 0
    
    loop
        if GetUnitTypeId(GetTriggerUnit()) == UnitID[i] then
            set pdat.Deaths[i] = pdat.Deaths[i]+1
            set DieTrack = i
        endif
        if GetUnitTypeId(GetKillingUnit()) == UnitID[i] then
            set pdatu.Kills[i] = pdatu.Kills[i]+1
            set KillTrack = i
        endif
        
    if GetUnitTypeId(GetTriggerUnit()) == UnitID[i] or GetUnitTypeId(GetKillingUnit()) == UnitID[i] then
        set pdatu.KillsUnit[KillTrack+(18*DieTrack)] = pdatu.KillsUnit[KillTrack+(18*DieTrack)]+1
        set pdat.DeathsUnit[KillTrack+(18*DieTrack)] = pdat.DeathsUnit[KillTrack+(18*DieTrack)]+1
    endif
    set i = i+1
    exitwhen i > 18
    endloop
    set i = 0
    
endfunction

private function Display takes nothing returns nothing
    local integer i = 1
    local integer kill = 0
    local integer death = 0
    loop
        set kill = GetCount(i, GetPlayerId(GetTriggerPlayer()), 1)
        set death = GetCount(i, GetPlayerId(GetTriggerPlayer()), 2)
        call DisplayTextToPlayer(GetTriggerPlayer(), 0, 0, I2S(i) +" "+ I2S(kill) + " / " + I2S(death))
    set i = i+1
    exitwhen i > 4
    endloop

endfunction

private function Init takes nothing returns nothing
    local trigger t = CreateTrigger()
    local integer i = 0
    call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddAction(t, function Count)
    set t = CreateTrigger()
    call TriggerAddAction(t, function Setup)
    set t = CreateTrigger()
    loop
        call TriggerRegisterPlayerEventEndCinematic( t, Player(i) )
    set i = i+1
    exitwhen i > 12
    endloop
    set i = 0
    call TriggerAddAction(t, function Display)
endfunction

endlibrary
 
Level 11
Joined
Jun 30, 2008
Messages
580
No, thats how you get something to get called at Map Int, anyway, its a system to track, Total Kills by a Unit Type and their Deaths, aswell as how many of each type each unit typ has killed:

Like, the Unit Type Footmen, has a total of 100 kills, and 75 deaths, 35 of those kills have been riflemen, and the rest other footmen, and all 75 deaths are from Knights.
 
Status
Not open for further replies.
Top