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

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

Закрытая тема
 
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
проверка урона 2 раза
В общем такая шняга, сделал триггер который должен ловить и магический и физический урон. Оба он ловит, но очень странно и багано:
1)нанесенный магический урон показывается дважды(срабатывает дважды)
2)нанесенный физический урон вначале показывается как физический,а затем как магический оО
В общем скрины прилагаются,кто понял в чем проблема, прошу ответить.
» КОД
function Trig_AddDamage_Actions takes nothing returns nothing
    local unit damager = GetEventDamageSource()
    local unit damaged = GetTriggerUnit()
    local real damage = GetEventDamage()
    local integer hdr = GetHandleId(damager)
    local integer hdd = GetHandleId(damaged)
    local real xr = GetUnitX(damager)
    local real yr = GetUnitY(damager)
    local real xd = GetUnitX(damaged)
    local real yd = GetUnitY(damaged)
    local player pr = GetOwningPlayer(damager) 
    local player pd = GetOwningPlayer(damaged)
    local unit dammi
    local unit dammi2
    local real r1
    local real r2
    local integer random
    local timer t = CreateTimer()
    local boolean phys = false
    local boolean melee//определение мили-ренж типа атаки
    
    call BJDebugMsg("SRABOTALO")
    call BJDebugMsg(I2S(GetUnitAbilityLevel(damaged,'B000'))+" lvl buff1")
    call BJDebugMsg(I2S(GetUnitAbilityLevel(damaged,'B001'))+" lvl buff2")
    
    if GetUnitAbilityLevel(damaged,'B000') > 0 then
    set melee = true
    set phys = true
    endif
    if GetUnitAbilityLevel(damaged,'B001') > 0 then
    set melee = false
    set phys = true
    endif
    
    if  IsUnitIllusion(damager) == true or phys == true then
    call UnitRemoveAbility(damaged,'B000')
    call UnitRemoveAbility(damaged,'B001')
    
    
    //////////////PHYSICAL DAMAGE
call BJDebugMsg("PHYSICAL DAMAGE")
call BJDebugMsg(GetUnitName(damager)+" attack " + GetUnitName(damaged)+ " and deal " + R2S(damage)+ " physical damage")
    endif
    if phys == false then
    //////////////MAGIC DAMAGE
     call BJDebugMsg("MAGIC DAMAGE")
    call BJDebugMsg(GetUnitName(damager)+" attack " + GetUnitName(damaged)+ " and deal " + R2S(damage)+ " magic damage")
    endif
    set damager = null
    set damaged = null
    set pr = null
    set pd = null
    set dammi = null
    set dammi2 = null
endfunction


function Trig_AddDamage_Conditions takes nothing returns boolean
    return GetEventDamage() > 0.00
    //return (GetUnitAbilityLevel(GetTriggerUnit(),'B000') > 0 or GetUnitAbilityLevel(GetTriggerUnit(),'B001') > 0 or IsUnitIllusion(GetEventDamageSource()) == true) and GetEventDamage() > 0.00
endfunction
//===========================================================================
function InitTrig_AddDamage takes nothing returns nothing
    set gg_trg_AddDamage = CreateTrigger(  )
    call TriggerAddCondition( gg_trg_AddDamage, Condition( function Trig_AddDamage_Conditions ) )
    call TriggerAddAction( gg_trg_AddDamage, function Trig_AddDamage_Actions )
endfunction
Миниатюры
Кликните на картинку для увеличения
Название:  Scr36.jpg
Просмотров: 19
Размер:  350.9 Кбайт  Кликните на картинку для увеличения
Название:  Scr35.jpg
Просмотров: 11
Размер:  341.6 Кбайт  Кликните на картинку для увеличения
Название:  Scr34.jpg
Просмотров: 13
Размер:  242.7 Кбайт  Кликните на картинку для увеличения
Название:  Scr30.jpg
Просмотров: 39
Размер:  255.0 Кбайт  Кликните на картинку для увеличения
Название:  Scr29.jpg
Просмотров: 21
Размер:  249.5 Кбайт  

Кликните на картинку для увеличения
Название:  Scr25.jpg
Просмотров: 33
Размер:  293.9 Кбайт  Кликните на картинку для увеличения
Название:  Scr26.jpg
Просмотров: 15
Размер:  317.6 Кбайт  Кликните на картинку для увеличения
Название:  Scr27.jpg
Просмотров: 11
Размер:  244.5 Кбайт  Кликните на картинку для увеличения
Название:  Scr28.jpg
Просмотров: 16
Размер:  233.8 Кбайт  Кликните на картинку для увеличения
Название:  Scr24.jpg
Просмотров: 20
Размер:  287.8 Кбайт  


Отредактировано Sladkoegka, 22.01.2013 в 22:20.
Старый 22.01.2013, 21:53
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
выложите лучше код под каты, чем страдать этим скриновским извращением
Старый 22.01.2013, 22:35
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Sladkoegka, После cJass, смотреть на такой формат кода, как-то не приятно...
Старый 22.01.2013, 22:44
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
вы кидаете молот бурь и пытаетесь определить какой от него урон?
Старый 22.01.2013, 22:47
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Ищи проблему здесь -_-
    if GetUnitAbilityLevel(damaged,'B000') > 0 then
    set melee = true
    set phys = true
    endif
Vadik29 добавил:
И поставь проверку GetEventDamage() >=1.00
Старый 22.01.2013, 22:52
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Vadik29, ну я тут ошибку не вижу, если есть бафф яда значит атака физическая ^^ и да проверка в условии триггера, но даже 1 не помогает
Hate, нет приколись,я в 1 посте написал что делаю.
Старый 22.01.2013, 22:58
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Sladkoegka, привет, магистр велосипедостроения.
Вообще по-хорошему отлов магического урона делается прямо в том месте кода, где этот урон наносится.
Clamp добавил:
Ну, а если тебе нужно отлавливать магический урон от стандартных способностей, то у меня плохие новости для твоей карты.
Старый 22.01.2013, 23:40
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Clamp, ммм,как классно, вот только эта система проблемы не решает это раз, два она по сути идентична той, что я сделал, три делать в каждом триггере отлов маг урона, а не в 1-ом большом как минимум затратно,четыре это то, что
Ну, а если тебе нужно отлавливать магический урон от стандартных способностей, то у меня плохие
новости для твоей карты.
Моя логика-весь отлавливаемый урон анализируем,если он не прошел проверку на физический значит он магический,не так ли?
Старый 22.01.2013, 23:50
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
просто вы не учитываете того факта, что проверять на бафф при получении урона, не совсем корректно, ибо функция срабатывает на мгновение раньше самого получение урона = баф может и не быть на юните при срабатывании функции, мб я и рак
Старый 23.01.2013, 00:20
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Sladkoegka:
весь отлавливаемый урон анализируем,если он не прошел проверку на физический значит он магический,не так ли?
Не так ли. Ты не знаешь какого типа урон.
Урон с руки тоже может оказаться магическим, не учитываешь.
Clamp добавил:
Да, кстати. Урон проверяется два раза у всех во всех системах, которые я видел (а у меня нет).
Старый 23.01.2013, 06:15
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Hate, на скрине где паладин с рыцарем махается видно,что там в первом случае есть бафф.
Clamp, Разочрую тебя,я никогда не наношу урон холодом,смерть,защитой,божественной,молний,звуком и т.д. только MELEE или NORMAL
Урон с руки тоже может оказаться магическим, не учитываешь.
Урон с руки???
Даже если у юнита магическая атака,то бафф яда вешается->идет проверка на физ дамаг, что мне и нужно,так в карте пока еще нет юнитом с магической атакой,а если и будут, то на они все равно должны иметь способности при атаке что-либо совершать.Я делал такую минисистему, но только с физ дамагом,поэтому я и не понимаю отчего методом исключения не получается(

Отредактировано Sladkoegka, 23.01.2013 в 06:29.
Старый 23.01.2013, 06:15
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Я тебе уже намекал, что стоит наносить весь урон через код, за исключением автоатак. Для них юзай систему, ссылку на которую я скинул. Использовать стандартную магию в качестве способностей героя - идиотизм, и тебе стоит задуматься о том, чтобы от этого избавиться, прежде чем писать системы.
Старый 23.01.2013, 06:35
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Clamp, я не спрашиваю тебя как мне наносит урон-кодом или стандартными скиллами. Твоя система идентична моей, хотя и быстрей. И ты так и не можешь ответить на мой вопрос, но почему то объясняя мне про то какие мне скиллы нужно делать, хотя сам и не знаешь какие у меня есть.
В общем на я жду ответа на свой вопрос. рассказывать об остальном будете другим.
Старый 23.01.2013, 10:59
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Твори дерьмо дальше в таком случае. Если ты паришься отлавливать урон от стандартных абилок, то ничего иного у тебя и не выйдет.
Clamp добавил:
Ах да, про двойную проверку: нативно на событие урона игра реагирует два раза, один раз по факту урона ка такового - у тебя он отображается как "магический", второй раз - по получении урона конкретным юнитом.
Старый 23.01.2013, 11:23
DioD

offline
Опыт: 45,134
Активность:
невозможно никаким образом проверять урон единыжды, все баффы вызывают событие урона с уроном 0.
Старый 23.01.2013, 13:12
ScorpioT1000
Работаем
online
Опыт: отключен
SRABOTALO
Старый 23.01.2013, 14:28
Doc

offline
Опыт: 63,163
Активность:
Sladkoegka, ой иди нахрен, опять та же песня - Я НИКОГО НЕ СПРАШИВАЮ Я ЗНАЮ КАК ЛУЧШЕ ВООБЩЕ МОЙ ТРЕД Я ТУТ КОРОЛЬ.
Ответы даны.
Старый 23.01.2013, 16:10
ScorpioT1000
Работаем
online
Опыт: отключен
Я вот думаю представьте мы потом разойдемся по делам кто куда, а на ксгм так и будут тыкаться в академии как слепые котята, пока не ткнешь мордочкой в статьи - так и будут академию забивать до краев такими умными тредами.
Старый 23.01.2013, 16:23
Закрытая тема

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

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

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

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



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