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

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

Ответ
 
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
например как можно 0x42303030 сложить с реальной с - ведь тут 2 типа (integer и real)...

TT, где ты это в моем коде увидил?
Цитата:
как в реальную с зенесло значение 0х00 (integer)

где О_о
Старый 23.03.2008, 16:03
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Вот вопрос большой, как правильно вызвать функцию GetUnitArmor из функции damaging, это нужно делать в том же триггере или функцию GetUnitArmor надо выносить в нестандартный код карты?

Код:
function Alive takes nothing returns boolean
    return GetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE) > 0
endfunction
    
function damaging takes nothing returns nothing
    local trigger trig      = GetTriggeringTrigger()
    local unit DamageSource = GetEventDamageSource()
    local unit Attacked     = GetTriggerUnit()
    local real Damage       = GetEventDamage()
    local integer i = GetUnitTypeId(Attacked)
    local string  s = UnitId2StringBJ(i)
    local real armor = I2R(GetStoredInteger(udg_cache, "DB Armor", s))
    if Damage < armor then
        set armor = Damage
    endif
    if DamageSource == I2U(GetStoredInteger(udg_cache, I2S(H2I(trig)), "Attacking")) then
        call TriggerSleepAction(0.01)
        call SetUnitLifeBJ(Attacked, GetUnitState(Attacked, UNIT_STATE_LIFE) + armor)
        call TriggerRemoveCondition(trig, I2TrC(GetStoredInteger(udg_cache, I2S(H2I(trig)), "TrC")))
        call TriggerRemoveAction   (trig, I2TrA(GetStoredInteger(udg_cache, I2S(H2I(trig)), "TrA")))
        call FlushStoredMission(udg_cache, I2S(H2I(trig)))
        call DestroyTrigger(trig)
        set trig = null
    endif
endfunction

function Trig_DETECTION_Actions takes nothing returns nothing
    local trigger trig = CreateTrigger()
    local unit Attacking = GetAttacker()
    local unit Attacked = GetTriggerUnit()
    local triggercondition TrC = TriggerAddCondition     (trig,Condition(function Alive  ))
    local triggeraction    TrA = TriggerAddAction        (trig,          function damaging)
    call                         TriggerRegisterUnitEvent(trig,Attacked,EVENT_UNIT_DAMAGED)
    call StoreInteger(udg_cache, I2S(H2I(trig)), "Attacking", H2I(Attacking))
    call StoreInteger(udg_cache, I2S(H2I(trig)), "TrC"      , H2I(TrC      ))
    call StoreInteger(udg_cache, I2S(H2I(trig)), "TrA"      , H2I(TrA      ))
    call TriggerSleepAction(3)
    if IsTriggerEnabled(trig) then
        call TriggerRemoveCondition(trig, TrC)
        call TriggerRemoveAction(trig, TrA)
        call FlushStoredMission(udg_cache, I2S(H2I(trig)))
        call DestroyTrigger(trig)
    endif
    set trig = null
    set TrA = null
    set TrC = null
endfunction

//===========================================================================
function InitTrig_Main takes nothing returns nothing
    set gg_trg_Main = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Main, EVENT_PLAYER_UNIT_ATTACKED     )
    call TriggerAddAction             (gg_trg_Main, function Trig_DETECTION_Actions)
endfunction


вот такую функцию:

Код:
function GetUnitArmor takes unit u returns real r
    local real r
        if ( not (IsUnitType(u, UNIT_TYPE_HERO)))then
            set r=I2R(GetStoredInteger(udg_cache,"DB Armor",I2S(GetUnitTypeId(u)) ))
        endif
    ...
    return r
endfunction


и можно ли это сделать вообще? Собственно нужно это для того, что в функции GetUnitArmor(модернизированной) считать все бонусы защит от бафов, итемов и т.д.
Старый 23.03.2008, 16:29
J
expert
offline
Опыт: 48,447
Активность:
в функции GetUnitArmor() я думаю в условии не нужна приставка not...

да в том же триггере можеш
Старый 23.03.2008, 16:34
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Если у меня идёт выполнение функции и в ней используется команда call - функция будет продолжаться или подождёт пока выполнится call? (при условии что функция которую вызывают по call не возвращает ничего)
Старый 23.03.2008, 19:08
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
короче грамотная база данных состоит из:
1) бонус мода
2) кастом инвентаря(впринципе на стандартные 6 слотов пишется очень просто)
3) ещё одного бонус мода для триггерных временных баффов и аур(вообще можно добавить в 1ый пункт)
4) триггерных баффов и аур
5) базовых данных по юнитам
6) формул
мб чё-то забыл
ну короче мы получим возможность брать любой параметр в любой момент + делать ауры и баффы(типа command aura и inner fire), которые будут брать % от всего урона, а не только урона со статов и базового
и т.д. и т.п.
собственно я это делать собирался, но хз когда доделаю

df Hunter добавил:
Цитата:
Сообщение от happy_horror
Если у меня идёт выполнение функции и в ней используется команда call - функция будет продолжаться или подождёт пока выполнится call? (при условии что функция которую вызывают по call не возвращает ничего)

поток 1, всё будет выполняться по порядку, ну то есть подождёт
Старый 23.03.2008, 19:20
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Цитата:
Сообщение от happy_horror
Хм...тада вот ещё вопрос: если я использую функцию

Код:
...
local real r = GetStoredReal(udg_cache,"1","2")
...


а по данному адресу в кэше нет значения, то что будет помещено в r?

0
Старый 23.03.2008, 19:45
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Система с вычислением события (любой юнит получает урон) удалась и пояилась моя система расчёта урона в зависимости от числа брони, а не % как в обычном варе) спасибо всем кто помогал разбираться, а особенно Jon'y и ADOLF'y

Отредактировано happy_horror, 24.03.2008 в 14:19.
Старый 24.03.2008, 04:20
Ответ

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

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

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

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



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