Ребят, попытался переделать счётчик хендлов с 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 и используются всеми таймерами сразу (или не используются вообще, если в вурст нет замыканий).
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
я так понимаю у тебя цикл от 0 до 12, в котором появился периодичный цикл каждые 0.05 секунд?
то есть цикл для других игроков срабатывать не должен по идее, если у тебя не создаются отдельные потоки на игроков

впрочем даже если это не так и с этим всё норм, мои полномочия на этом всё)
12
я так понимаю у тебя цикл от 0 до 12, в котором появился периодичный цикл каждые 0.05 секунд?
да
то есть цикл для других игроков срабатывать не должен по идее, если у тебя не создаются отдельные потоки на игроков
Почему? Цикл от 0 до 12 для того и создан, чтобы отдельно для каждого игрока и его лидерборда считались хендлы, разве так нельзя?
28
цикл это цикл, поток это поток
если у тебя в цикле бесконечный цикл то он никогда не закончится и для других игроков их цикл не начнётся

к тому же бесконечный цикл вроде как должен прерывать поток, после лимита операций, но мб вурсту всё равно на оп лимит

doPeriodically(0.05) hc -> это цикл с вейтом или таймер на функцию?
12
doPeriodically(0.05) hc -> это цикл с вейтом или таймер на функцию?
Execute an action periodically. The callback has to be destroyed manually.
Example use: | doPeriodically(0.5) cb -> | if i > 10 | destroy cb
function doPeriodically(real time, CallbackPeriodic cb) returns CallbackPeriodic
defined in package ClosureTimers

Вот что написано о нём

Я понял, что всё, что происходит после doPeriodically(0.05) hc -> не работает
28
ну судя по всему там вызывается функция в которую твои локалки никак не передаются и оно не может работать с ними

впрочем я закругляюсь, а то мне кажется что уже чушь несу, пусть кто-то, кто хоть раз открывал вурст помогает)

посмотреть бы как в джасс оно компилируется
32
Зачем, а главное посему именно wurst? Готовое на жассе есть
15
Прости что не отвечаю на вопрос а просто задаю встречный, а зачем тебе счетчик хэндлов на Wurst?. Счетчик хэндлов быть может полезен для проверки если ты где-то забыл обнулить локальную переменную или используешь утечные BJ-функции, которые втихую плодят объекты. Но Wurst обнуляет локальные переменные автоматически, а со стандартной библиотекой BJ-функции едва ли нужны. В счетчике хэндлов на Wurst едва ли есть смысл.
38
У тебя локалки объявлены выше скоупом, чем doPeriodically и используются всеми таймерами сразу (или не используются вообще, если в вурст нет замыканий).
Принятый ответ
12
GetLocalPlayer, карта изначально была не на вурст, а на гуи, и очень сильно лагает, хочу посмотреть на сколько всё плохо

А если точнее. то в какой-то момент карта застывает и я хочу посмотреть, может в какой-то момент утечки сильно увеличиваются
28
Стас Орлов, если работаешь с вурстом то синтаксис джасса нельзя использовать или что?)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.