- Joined
- Mar 9, 2023
- Messages
- 75
Hi! I have created a Leaderboard which rolls a die for the triggering player then displays the result next to their hero's name. Each player can only roll once while the leaderboard is active. Every player that rolls should add an entry to the list, which is then rearranged. I learned how to create Leaderboards today and I couldn't find a guide, so I'm really clueless on most many functions. The issue is that after the first player's entry has been added, the second one will replace the first entry. No subsequent players can type -roll. Meaning that it only has one hero with a roll in the end.
My hypothesis is that I'm using AddItem() incorrectly or that I've set the Style wrong. Perhaps I am adding categories and not the entries. Still doesn't explain the weirdness of only one subsequent roll being available.
Help pl0z.
My hypothesis is that I'm using AddItem() incorrectly or that I've set the Style wrong. Perhaps I am adding categories and not the entries. Still doesn't explain the weirdness of only one subsequent roll being available.
JASS:
globals
leaderboard rollBoard = null
boolean array hasPlayerRolled
timer cleanupTimer = null
endglobals
function HideBoard takes nothing returns nothing
local integer i = 0
call PauseTimer(cleanupTimer)
call DestroyTimer(cleanupTimer)
set cleanupTimer = null
if IsLeaderboardDisplayed(rollBoard) then
call LeaderboardDisplay(rollBoard, false)
call LeaderboardClear(rollBoard)
endif
loop
set hasPlayerRolled[i] = false
set i = i + 1
exitwhen i >= 8
endloop
endfunction
function SetPlayerRoll takes player p, integer r, integer pid returns nothing
set hasPlayerRolled[pid] = true
call LeaderboardAddItem(rollBoard, GetUnitName(udg_HERO[pid + 1]), r, p)
call LeaderboardSortItemsByValue(rollBoard, false)
if rollBoard != null then
call PauseTimer(cleanupTimer)
call DestroyTimer(cleanupTimer)
endif
set cleanupTimer = CreateTimer()
call TimerStart(cleanupTimer, 12.0, false, function HideBoard)
endfunction
function Trig_RollLeaderboard_Actions takes nothing returns nothing
local player p = GetTriggerPlayer()
local integer pid = GetPlayerId(p)
local string chatMessage = GetEventPlayerChatString()
local string rollLabel
local integer r = GetRandomInt(1, 100)
if not hasPlayerRolled[pid] then
if StringLength(chatMessage) > 6 then
set rollLabel = "Roll for: " + SubString(chatMessage, 6, StringLength(chatMessage))
else
set rollLabel = "Roll Result"
endif
if rollBoard == null then
set rollBoard = CreateLeaderboardBJ(GetPlayersAll(), rollLabel)
call LeaderboardSetStyle(rollBoard, true, true, true, true)
endif
if not IsLeaderboardDisplayed(rollBoard) then
call LeaderboardDisplay(rollBoard, true)
call LeaderboardSetLabel(rollBoard, rollLabel)
endif
call SetPlayerRoll(p, r, pid)
endif
set p = null
endfunction
//===========================================================================
function InitTrig_RollLeaderboard takes nothing returns nothing
set gg_trg_RollLeaderboard = CreateTrigger( )
call TriggerRegisterPlayerChatEvent( gg_trg_RollLeaderboard, Player(0), "-roll", false )
call TriggerRegisterPlayerChatEvent( gg_trg_RollLeaderboard, Player(1), "-roll", false )
call TriggerRegisterPlayerChatEvent( gg_trg_RollLeaderboard, Player(2), "-roll", false )
call TriggerRegisterPlayerChatEvent( gg_trg_RollLeaderboard, Player(3), "-roll", false )
call TriggerRegisterPlayerChatEvent( gg_trg_RollLeaderboard, Player(4), "-roll", false )
call TriggerRegisterPlayerChatEvent( gg_trg_RollLeaderboard, Player(5), "-roll", false )
call TriggerRegisterPlayerChatEvent( gg_trg_RollLeaderboard, Player(6), "-roll", false )
call TriggerRegisterPlayerChatEvent( gg_trg_RollLeaderboard, Player(7), "-roll", false )
call TriggerAddAction( gg_trg_RollLeaderboard, function Trig_RollLeaderboard_Actions )
endfunction
Help pl0z.