XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Peer

offline
Опыт: 1,400
Активность:
Фатал эррор
Ребята, подскажите, плиз, может ли крашиться карта от триггеров, работающих при каждой атаке или смерти юнита?
Старый 14.01.2009, 17:34
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
может, смотря какие действия выполняются в триггере.
Старый 14.01.2009, 17:35
Peer

offline
Опыт: 1,400
Активность:
блин, промазал с разделом. в академию надо.
Как вообще грамотно определить почему карта рандомно падает с крашем. бывает 3 игры подряд все нормально. четвертая игра падает через 5 минут
Старый 14.01.2009, 17:45
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Цитата:
Как вообще грамотно определить почему карта рандомно падает с крашем

нужно смотреть код карты
Старый 14.01.2009, 17:49
S

offline
Опыт: 43,833
Активность:
Цитата:
Ребята, подскажите, плиз, может ли крашиться карта от триггеров, работающих при каждой атаке или смерти юнита?

может, еще как
Цитата:
Как вообще грамотно определить почему карта рандомно падает с крашем

что за карта?
Старый 14.01.2009, 17:52
Peer

offline
Опыт: 1,400
Активность:
к сожалению все ГУИшное. если перевести в текст боюсь получится очень много. сможешь посмотреть хотя бы бегло?
P.S. на джассе не пишу и не программист поэтому код будет очень и очень примитивный и громоздкий.
Куда можно сбросить?
Старый 14.01.2009, 17:56
adic3x

offline
Опыт: 108,439
Активность:
http://xgm.guru/articles.php?name=debugging

советую почитать это автору также)
Старый 14.01.2009, 18:04
Peer

offline
Опыт: 1,400
Активность:
немного туплю.
вот триггеры:
» Code
Код:
// Trigger: Own units attack allow Hum
//===========================================================================
function Trig_Own_units_attack_allow_Hum_Conditions takes nothing returns boolean
    if ( not ( GetOwningPlayer(GetKillingUnitBJ()) == GetOwningPlayer(GetDyingUnit()) ) ) then
        return false
    endif
    return true
endfunction

function Trig_Own_units_attack_allow_Hum_Func004003001 takes nothing returns boolean
    return ( GetFilterPlayer() != GetOwningPlayer(GetKillingUnitBJ()) )
endfunction

function Trig_Own_units_attack_allow_Hum_Actions takes nothing returns nothing
    call AdjustPlayerStateBJ( -200, GetOwningPlayer(GetKillingUnitBJ()), PLAYER_STATE_RESOURCE_GOLD )
    call CreateTextTagUnitBJ( "TRIGSTR_067", GetDyingUnit(), 100.00, 10, 100.00, 0.00, 0.00, 0.00 )
    call ShowTextTagForceBJ( false, GetLastCreatedTextTag(), GetPlayersMatching(Condition(function Trig_Own_units_attack_allow_Hum_Func004003001)) )
    call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 64, 90 )
    call SetTextTagPermanentBJ( GetLastCreatedTextTag(), false )
    call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 2.00 )
endfunction

//===========================================================================
function InitTrig_Own_units_attack_allow_Hum takes nothing returns nothing
    set gg_trg_Own_units_attack_allow_Hum = CreateTrigger(  )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_units_attack_allow_Hum, Player(0), EVENT_PLAYER_UNIT_DEATH )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_units_attack_allow_Hum, Player(1), EVENT_PLAYER_UNIT_DEATH )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_units_attack_allow_Hum, Player(2), EVENT_PLAYER_UNIT_DEATH )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_units_attack_allow_Hum, Player(3), EVENT_PLAYER_UNIT_DEATH )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_units_attack_allow_Hum, Player(4), EVENT_PLAYER_UNIT_DEATH )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_units_attack_allow_Hum, Player(5), EVENT_PLAYER_UNIT_DEATH )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_units_attack_allow_Hum, Player(6), EVENT_PLAYER_UNIT_DEATH )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_units_attack_allow_Hum, Player(8), EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_Own_units_attack_allow_Hum, Condition( function Trig_Own_units_attack_allow_Hum_Conditions ) )
    call TriggerAddAction( gg_trg_Own_units_attack_allow_Hum, function Trig_Own_units_attack_allow_Hum_Actions )
endfunction

// Trigger: Other units attack penalty Hum
//===========================================================================
function Trig_Other_units_attack_penalty_Hum_Conditions takes nothing returns boolean
    if ( not ( IsPlayerInForce(GetOwningPlayer(GetAttacker()), GetPlayersAllies(Player(0))) == true ) ) then
        return false
    endif
    if ( not ( GetOwningPlayer(GetAttacker()) != GetOwningPlayer(GetAttackedUnitBJ()) ) ) then
        return false
    endif
    return true
endfunction

function Trig_Other_units_attack_penalty_Hum_Func005003001 takes nothing returns boolean
    return ( GetFilterPlayer() != GetOwningPlayer(GetAttacker()) )
endfunction

function Trig_Other_units_attack_penalty_Hum_Actions takes nothing returns nothing
    call TriggerSleepAction( 0.50 )
    call SetUnitInvulnerable( GetAttackedUnitBJ(), true )
    call AdjustPlayerStateBJ( -300, GetOwningPlayer(GetAttacker()), PLAYER_STATE_RESOURCE_GOLD )
    call CreateTextTagUnitBJ( "TRIGSTR_070", GetAttackedUnitBJ(), 100.00, 10, 100.00, 0.00, 0.00, 0.00 )
    call ShowTextTagForceBJ( false, GetLastCreatedTextTag(), GetPlayersMatching(Condition(function Trig_Other_units_attack_penalty_Hum_Func005003001)) )
    call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 64, 90 )
    call SetTextTagPermanentBJ( GetLastCreatedTextTag(), false )
    call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 2.00 )
    call TriggerSleepAction( 1.00 )
    call SetUnitInvulnerable( GetAttackedUnitBJ(), false )
endfunction

//===========================================================================
function InitTrig_Other_units_attack_penalty_Hum takes nothing returns nothing
    set gg_trg_Other_units_attack_penalty_Hum = CreateTrigger(  )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Other_units_attack_penalty_Hum, Player(0), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Other_units_attack_penalty_Hum, Player(1), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Other_units_attack_penalty_Hum, Player(2), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Other_units_attack_penalty_Hum, Player(3), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Other_units_attack_penalty_Hum, Player(4), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Other_units_attack_penalty_Hum, Player(5), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Other_units_attack_penalty_Hum, Player(6), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Other_units_attack_penalty_Hum, Player(8), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Other_units_attack_penalty_Hum, Condition( function Trig_Other_units_attack_penalty_Hum_Conditions ) )
    call TriggerAddAction( gg_trg_Other_units_attack_penalty_Hum, function Trig_Other_units_attack_penalty_Hum_Actions )
endfunction

//===========================================================================
// Trigger: Own and allied units attack penalty Zom
//===========================================================================
function Trig_Own_and_allied_units_attack_penalty_Zom_Conditions takes nothing returns boolean
    if ( not ( IsPlayerInForce(GetOwningPlayer(GetAttacker()), GetPlayersAllies(Player(9))) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Own_and_allied_units_attack_penalty_Zom_Func006003001 takes nothing returns boolean
    return ( GetFilterPlayer() != GetOwningPlayer(GetAttacker()) )
endfunction

function Trig_Own_and_allied_units_attack_penalty_Zom_Actions takes nothing returns nothing
    call TriggerSleepAction( 0.50 )
    call SetUnitInvulnerable( GetAttackedUnitBJ(), true )
    call AdjustPlayerStateBJ( -300, GetOwningPlayer(GetAttacker()), PLAYER_STATE_RESOURCE_GOLD )
    call CreateTextTagUnitBJ( "TRIGSTR_073", GetAttackedUnitBJ(), 100.00, 10, 100.00, 0.00, 0.00, 0.00 )
    call ShowTextTagForceBJ( false, GetLastCreatedTextTag(), GetPlayersMatching(Condition(function Trig_Own_and_allied_units_attack_penalty_Zom_Func006003001)) )
    call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 64, 90 )
    call SetTextTagPermanentBJ( GetLastCreatedTextTag(), false )
    call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 2.00 )
    call TriggerSleepAction( 1.00 )
    call SetUnitInvulnerable( GetAttackedUnitBJ(), false )
endfunction

//===========================================================================
function InitTrig_Own_and_allied_units_attack_penalty_Zom takes nothing returns nothing
    set gg_trg_Own_and_allied_units_attack_penalty_Zom = CreateTrigger(  )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_and_allied_units_attack_penalty_Zom, Player(9), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_and_allied_units_attack_penalty_Zom, Player(10), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Own_and_allied_units_attack_penalty_Zom, Player(11), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Own_and_allied_units_attack_penalty_Zom, Condition( function Trig_Own_and_allied_units_attack_penalty_Zom_Conditions ) )
    call TriggerAddAction( gg_trg_Own_and_allied_units_attack_penalty_Zom, function Trig_Own_and_allied_units_attack_penalty_Zom_Actions )
endfunction


Peer добавил:
ADOLF, статью твою читал, но здесь другое. триггеры работают и, я ж говорю, можно сыграть три игры подряд все нормально. потом следующая игра падает на 5 минутах или через 20 минут. никак не могу отловить что именно приводит к крашу

Отредактировано DFlyer, 14.01.2009 в 22:52.
Старый 14.01.2009, 18:18
adic3x

offline
Опыт: 108,439
Активность:
ну ТекстТаги (плавающий текст) по идее не должны убивать вар...
Старый 14.01.2009, 18:31
Peer

offline
Опыт: 1,400
Активность:
юнитов обычно штук 600 но разве это может закрашить? (
Adolf, как можно определить что именно в карте падает? Я бы выложил сюда весь код, но так как я не программер и делал на ГУИ то получилось 7к строк. Может ли карта крашиться не из-за кода?
Старый 14.01.2009, 18:34
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
Может ли карта крашиться не из-за кода?

может при неправильно настройки некоторых абил (к примеру орбы), но это надо сильно поизвращаться

ну тебе надо всетаки постараться отследить, после чего именно оно падает... после атаки, или?
Старый 14.01.2009, 18:38
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Может быть у тебя очень много юнитов на карте начинают сражаться в один момент времени?
Лучше бы занести GetAttacker'a/GetAttacked'a в локалку и работать с ней!

К томуже зачемто используется GetDyingUnit()... 0о
Помойму триггер просто сделан очень коряво! Скопируй его в карту-пустышку и выложи ее сюда! Лучше уж на ГУИ посмотреть чем такой код! )

И еще опиши точно что должен делать триггер!

Gres добавил:
Цитата:
юнитов обычно штук 600 но разве это может закрашить? (

Скорее всего в этом проблемма!

Может память на мгновение забивается и вар выдает ошибку!

Либо на ночало триггера в Переменных GetAttacker/GetAttacked одно значение затем оно меняеться и чтото нехорошее происходит... но это конечно же догадки! )
Старый 14.01.2009, 18:45
Peer

offline
Опыт: 1,400
Активность:
орбов на карте нет. спеллов тоже. в игре определить момент краша невозможно. прочитал тут похожую тему - там карта падала если отменить грейд здания (у зданий разные pathing). пробовал у себя - все работает. играли и трое и фуллслот (11 человек) крашицца рандомно. есть еще триггеры каждые 5 сек проверяющие сколько юнитов того или другого типа на карте. если больше заданного числа - удалаяет половину. по ходу игры меняется погода выключением и удалением последнего погодного эффекта и созданием и включением следующего. еще бывает одновременно умирает 30 юнитов - 30раз срабатывает триггер на смерть юнита но если бы это крашило почему можно сыграть 2, 3, 4 игры подряд и все ок а на пятой вылет.
P.S. если в момент сильных нагрузок у кого-то из игроков компьютер не успевает все обработать, начинаются жуткие тормоза и игрок говорит что у него слайд-шоу (у остальных все нормально). Может ли тогда упасть вся карта или выкинет только этого игрока?
Старый 14.01.2009, 18:49
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Цитата:
есть еще триггеры каждые 5 сек проверяющие сколько юнитов того или другого типа на карте. если больше заданного числа - удалаяет половину.

Вотэто помойму может вызвать креш! Может вазникнуть такая ситуация:
Юнита попадает в твой триггер, и триггер начинает с Вайтами выполнять действия, в это время юнит удаляеться из игры твоим Пятисекундным триггером и дальше в действиях когда на него ссылаються, а его ОП и нету! И крэш! )
Старый 14.01.2009, 18:56
vit
кааааррл
offline
Опыт: 3,586
Активность:
Peer, кинь карту, сразу вопросы пропадут
Старый 14.01.2009, 18:56
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Попробуй отключить триггер удаления юнитов каждые 5 сек! И поиграй...
Старый 14.01.2009, 18:57
Peer

offline
Опыт: 1,400
Активность:
выкладываю пустышку с ГУИ-шными триггерами. посмотрите пожалуйста
P.S. пароль к архиву пишу в личку
Прикрепленные файлы
Тип файла: 7z triggers.7z (36.5 Кбайт, 6 просмотров )
Старый 14.01.2009, 19:13
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Создал триггер для создания юнитов для случайного игрока с периодм 0,05 сек! В конце канцов на карте у меня было 6500 юнитов! Но фатала не произошло! Пробовал так три раза!
Едиственный баг, то что плавающий текст вылетает не на всех юнитах на которых должен, но это легко решить локалками...
Вобщем ищи баг в другом месте! Ибо здесь вроде все нормально.... относительно... если не считать кривизну реализации! )
Старый 14.01.2009, 20:00
Peer

offline
Опыт: 1,400
Активность:
абалдеть. значит не триггеры карту крашат?
вот ты писал про пятисекундные триггеры так триггеры на атаку или смерть содержат wait 1 или 2 секунды а который проверяет количество каждые 5 сек. вряд ли какой-то юнит попадет в эти два триггера одновременно. и еще ты писал что сначала attacked unit может иметь одно значение а потом другое и это вызовет краш. объясни плиз что ты имел в виду. если уж юнита атакуют то однозначно определяется атакующий. и еще. если дело не в коде, то что еще может крашить карту? может подскажешь по опыту

Peer добавил:
Gres, ты еще писал что "Может память на мгновение забивается и вар выдает ошибку!" от большого количества юнитов. действительно частенько получаецца так что одновременно сражаюцца две-три сотни юнитов. но это не приводило к крашу.
про плавающий текст: он сам удаляется по окончании отработки в тех триггерах где создавался или надо дописывать последней строчкой destroy last created floating text?
Старый 14.01.2009, 20:20
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Атакующий/Атакованный юнит это по сути переменные типа Боевая Единица! С ними удобно работать в короткий промежуток времени, но если использовать Вайты, то в нее может записаться другое значение!
Насчет ссылки на удаленный обьект эт я наверно погорячился, ибо я где-то читал что пока юнит используется в какой либо переменной он все еще остается в памяти! Хотя тут нужно уже у "знатаков" спрашивать... )
Ну а вообще яж не все тригги проверил, а только те Три которые ты описал! Там же еще были может в них что! Но они ссылаються в пустышке на неизвестные обьекты(неизвестный ID)! Такшо я их не проверял! Ну а так посоветую тебе только одно! Заноси все эти GetLastCreatedTextTag()/GetKillingUnitBJ()/GetDyingUnit()/GetAttackedUnitBJ()/GetAttacker() в локальные переменные и затем работай уже с ними! Мне кажеться что это может решить проблему!
Старый 14.01.2009, 20:21
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 23:49.