local integer p = GetPlayerId(GetTriggerPlayer()) + 1
    local integer i = 22+p
    set udg_CharodeiDuxInteger[             (i)] = ( udg_CharodeiDuxInteger[             (i)] + 1 )
    if udg_CharodeiDuxInteger[i] == 1 then
    set udg_count[p] = (udg_count[p] + 1)
    call MultiboardSetItemValue( udg_Board, 10, udg_PlayerPosition[p], ( "|c00A1DD00" + I2S(udg_count[p]) ) )
    endif
    call TriggerSleepAction( 0.01 )
    set udg_CharodeiDuxInteger[             (i)] = ( udg_CharodeiDuxInteger[             (i)] - 1 )
Одиночная игра, все дольше время все отлично. Но проблем Сетевая игра (Локальный сеть)
В начало игры все хорошо пошло, несколько минута спустя, теряет контроль над управление войска или здание (как кликает правая мышь они неслушает) некоторые время позже идти. И вижу сбой записывает переменный целочисленный, а другие остальный переменный ок.
Если уберут
call TriggerSleepAction( 0.01 )
Никаких проблем.
Попробовал заменаcall PolledWait(0.1) тоже еще хуже.
Опрос: Вы встречает проблем вычисленный jass и вызвано теряет контроль управления над войска и здание для Сетевая игра?
1. 
Да, не знаю что делает.
2. 
Да, знаю как исправить
3. 
Редко. не знаю как делать
4. 
Редко, знаю как исправить
5. 
НИКОГДА

Принятый ответ

// вверху всего кода
function TimerStartEx takes timer whichTimer, real period, boolean isPeriodic, code handlerFunc, integer userData returns nothing
    call TimerStart(whichTimer, I2R(userData), false, null) // timer exploit, xgm 2007
    call PauseTimer(whichTimer)
    call TimerStart(whichTimer, period, isPeriodic, handlerFunc ) // start timer
endfunction

function TimerGetUserData takes timer whichTimer returns integer
    return R2I(TimerGetRemaining(whichTimer )+0.5) // get user data from timer
endfunction

...

// это сам твой хендлер, вызывается после задержки, назови как хочешь
function xpadd91_handler takes nothing returns nothing 
	local integer p = TimerGetUserData(GetExpiredTimer())
	call MultiboardSetItemValueNorm( udg_Board, 10, udg_PlayerPosition[p], ( "|c00A1DD00" + I2S(udg_APM_COUNT[p]) ) )
	set udg_APM_COUNT[p] = (udg_APM_COUNT[p] + 1)
endfunction

...

    local integer p = GetPlayerId(GetTriggerPlayer()) + 1
    local integer i = 22+p
    call TimerStartEx(udg_APM_TIME[p], 0.01, false, function xpadd91_handler, p) // тут ты p передаешь в таймер, который вызовет xpadd91_handler

...
обновил еще раз, чето не сходится с тем что наверху у тебя
1
15
9 лет назад
Отредактирован Tobi123
1
У меня была подобная проблема. Но с подобным она связана не была.
function Trig_AnimCheck_Func001A takes nothing returns nothing
    call SetUnitAnimationByIndex(GetEnumUnit(),S2I(GetEventPlayerChatString()))
endfunction

function Trig_AnimCheck_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsSelectedAll(Player(0)), function Trig_AnimCheck_Func001A )
endfunction

//===========================================================================
function InitTrig_AnimCheck takes nothing returns nothing
    set gg_trg_AnimCheck = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_AnimCheck, Player(0), "", false )
    call TriggerAddAction( gg_trg_AnimCheck, function Trig_AnimCheck_Actions )
endfunction
Бажил такой код, когда было много чатовых сообщений. Во время игры триггер просто выключен и юзается только, чтоб посмотреть анимации у юнитов.
 set udg_CharodeiDuxInteger!![             (i)]!! = ( udg_CharodeiDuxInteger!![             (i)]!! - 1 )
Как-то странно массив сделан.
0
17
9 лет назад
Отредактирован xpadd91
0
Tobi123, Обновил тема. Одиночная игра все ок. Но еще проблем Сетевая игра.
Надо обязательно xgm.guru/p/wc3/getlocalplayer ?
0
11
9 лет назад
0
Что за предложения?
0
15
9 лет назад
0
Farrien:
Что за предложения?
Он глухонемой. Там нет падежей вроде как, можешь тут почитать.
0
37
9 лет назад
0
Просто хост с плохим пингом, в других картах пробовали?
И что за событие. Дайте больше информации.
0
17
9 лет назад
Отредактирован xpadd91
0
Просто хост с плохим пингом, в других картах пробовали?
Только локальный сеть, тестирование себя.
ScorpioT1000:
И что за событие.
4 события
call TriggerRegisterPlayerUnitEventSimple( gg_trg_APM, ConvertedPlayer(GetForLoopIndexA()), EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_APM, ConvertedPlayer(GetForLoopIndexA()), EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_APM, ConvertedPlayer(GetForLoopIndexA()), EVENT_PLAYER_UNIT_ISSUED_ORDER )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_APM, ConvertedPlayer(GetForLoopIndexA()), EVENT_PLAYER_UNIT_SELECTED )
Дайте больше информации.
Делаю собственная система АРМ.
Еще 1 события, периодическая 1 секунда, снимает 1 единица APM.
>> Инфа доп.код
set udg_CharodeiDuxInteger[13] = 1
loop
exitwhen udg_CharodeiDuxInteger[13] > 12
if GetPlayerSlotState(ConvertedPlayer(udg_CharodeiDuxInteger[13])) == PLAYER_SLOT_STATE_PLAYING then
...
...
if udg_APM_COUNT[udg_CharodeiDuxInteger[13]] > 0 then
set udg_APM_COUNT[udg_CharodeiDuxInteger[13]] = udg_APM_COUNT[udg_CharodeiDuxInteger[13]] - 1
call MultiboardSetItemValueNorm( udg_Board, 10, udg_PlayerPosition[udg_CharodeiDuxInteger[13]], ( "|c00A1DD00" + I2S(udg_APM_COUNT[udg_CharodeiDuxInteger[13]]) ) )
endif
...
...
else
endif
set udg_CharodeiDuxInteger[13] = udg_CharodeiDuxInteger[13] + 1
endloop
<<
0
37
9 лет назад
0
Ну я даже не знаю, попробуй все данные хранить в структуре и передавать её индекс через таймер xgm.guru/p/wc3/70817
0
17
9 лет назад
0
    local integer p = GetPlayerId(GetTriggerPlayer()) + 1
    local integer i = 22+p
    if TimerGetRemaining(udg_APM_TIME[p]) == 0.00 then
    set udg_APM_COUNT[p] = (udg_APM_COUNT[p] + 1)
    call TimerStart(udg_APM_TIME[p], 0.01, false, null)
    call MultiboardSetItemValueNorm( udg_Board, 10, udg_PlayerPosition[p], ( "|c00A1DD00" + I2S(udg_APM_COUNT[p]) ) )
    endif
Правильно? тестил там чуть некоррективно, например начало игры все игроки скачок 40apm это не норма.
0
37
9 лет назад
Отредактирован ScorpioT1000
0
// вверху всего кода
function TimerStartEx takes timer whichTimer, real period, boolean isPeriodic, code handlerFunc, integer userData returns nothing
    call TimerStart(whichTimer, I2R(userData), false, null) // timer exploit, xgm 2007
    call PauseTimer(whichTimer)
    call TimerStart(whichTimer, period, isPeriodic, handlerFunc ) // start timer
endfunction

function TimerGetUserData takes timer whichTimer returns integer
    return R2I(TimerGetRemaining(whichTimer )+0.5) // get user data from timer
endfunction

...

// это сам твой хендлер, вызывается после задержки, назови как хочешь
function xpadd91_handler takes nothing returns nothing 
	local integer p = TimerGetUserData(GetExpiredTimer())
	call MultiboardSetItemValueNorm( udg_Board, 10, udg_PlayerPosition[p], ( "|c00A1DD00" + I2S(udg_APM_COUNT[p]) ) )
	set udg_APM_COUNT[p] = (udg_APM_COUNT[p] + 1)
endfunction

...

    local integer p = GetPlayerId(GetTriggerPlayer()) + 1
    local integer i = 22+p
    call TimerStartEx(udg_APM_TIME[p], 0.01, false, function xpadd91_handler, p) // тут ты p передаешь в таймер, который вызовет xpadd91_handler

...
обновил еще раз, чето не сходится с тем что наверху у тебя
Принятый ответ
0
17
9 лет назад
0
ScorpioT1000, результат без MUI :(
0
37
9 лет назад
0
попробуй все данные хранить в структуре
0
17
9 лет назад
Отредактирован xpadd91
0
ScorpioT1000, подумаю, попробую изменить Массив - Раз: 12, результат теперь MUI. дальше тест локальный сеть.
Все отлично! Спасибо ScorpioT1000,
0
37
9 лет назад
0
Вот про мультиприменение xgm.guru/p/wc3/w3_special_programming#h4
Чтобы оставить комментарий, пожалуйста, войдите на сайт.