Добавлен Стас Орлов
Ребят, попытался переделать счётчик хендлов с vjass на WURST, но ничего не создаётся, что я сделал не так?
Код
package HandlerTest
import ClosureTimers
public location array P
public leaderboard array HB
init
doAfter(0.01) ->
integer i = 0
integer id = 0
real result = 0
for p = 0 to 12
HB[p] = CreateLeaderboard()
LeaderboardSetLabel(HB[p],"Handle Counter")
PlayerSetLeaderboard(players[p],HB[p])
LeaderboardDisplay(HB[p],true)
LeaderboardAddItem(HB[p],"Handles",0,players[p])
LeaderboardSetSizeByItemCount(HB[p],1)
doPeriodically(0.05) hc ->
while i >= 50
i = 1 + 1
P[i] = Location(0,0)
id = GetHandleId(P[i])
result = result + (id - 0x100000)
result = result / i - i / 2
while i <= 1
RemoveLocation(P[i])
P[i] = null
i = i-1
LeaderboardSetItemValue(HB[p],0,R2I(result))
Делал на основе этого счётчика
library HC initializer init
globals
leaderboard HB
endglobals
private function HCU takes nothing returns nothing
local integer i = 0
local integer id
local location array P
local real result = 0
loop
exitwhen i >= 50
set i = i+1
set P[i] = Location(0,0)
set id = GetHandleId(P[i])
set result = result+(id-0x100000)
endloop
set result = result/i-i/2
loop
call RemoveLocation(P[i])
set P[i] = null
exitwhen i <= 1
set i = i-1
endloop
call LeaderboardSetItemValue(HB,0,R2I(result))
endfunction
private function HCA takes nothing returns nothing
set HB = CreateLeaderboard()
call LeaderboardSetLabel(HB,"Handle Counter")
call PlayerSetLeaderboard(GetLocalPlayer(),HB)
call LeaderboardDisplay(HB,true)
call LeaderboardAddItem(HB,"Handles",0,Player(0))
call LeaderboardSetSizeByItemCount(HB,1)
call HCU()
call TimerStart(GetExpiredTimer(),.05,true,function HCU)
endfunction
private function init takes nothing returns nothing
call TimerStart(CreateTimer(),0,false,function HCA)
endfunction
endlibrary
Принятый ответ
У тебя локалки объявлены выше скоупом, чем doPeriodically и используются всеми таймерами сразу (или не используются вообще, если в вурст нет замыканий).
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Стас Орлов
то есть цикл для других игроков срабатывать не должен по идее, если у тебя не создаются отдельные потоки на игроков
если у тебя в цикле бесконечный цикл то он никогда не закончится и для других игроков их цикл не начнётся
Example use: | doPeriodically(0.5) cb -> | if i > 10 | destroy cb
function doPeriodically(real time, CallbackPeriodic cb) returns CallbackPeriodic
defined in package ClosureTimers
Отредактирован ScorpioT1000