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

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

Ответ
 
The Requiem

offline
Опыт: 2,766
Активность:
Начало пути по изучению хэша...
Добрый вечер всем. Буквально минут 30 назад начал изучать хэш по статье Hanabishi. Сделал спелл полностью на его коде (ну далее будут добавляться эффекты и т.д.). Просто подстроил под себя, а он отказывается работать.
» Вот сам код
//TESH.scrollpos=-1
//TESH.alwaysfold=0
function FireBall_Damage takes nothing returns nothing
    local timer T = GetExpiredTimer()
    local integer H = GetHandleId(T)
    local unit Q = LoadUnitHandle(udg_Hash, H, 1)
    local unit W = LoadUnitHandle(udg_Hash, H, 2)
    local integer E = LoadInteger(udg_Hash, H, 3)
    if E > 0 then
        call UnitDamageTarget(Q, W, 2.0, true, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, null)
        call SaveInteger(udg_Hash, H, 3, E - 1)
    else
        call DestroyTimer(T)
        call FlushChildHashtable(udg_Hash, H)
    endif
    set Q = null
    set W = null
    set T = null
endfunction
 
function FireBall_Actions takes nothing returns nothing
    local unit Q = GetSpellAbilityUnit()
    local unit W = GetSpellTargetUnit()
    local timer T = CreateTimer()
    local integer H = GetHandleId(T)
    call SaveUnitHandle(udg_Hash, H, 1, Q)
    call SaveUnitHandle(udg_Hash, H, 2, W)
    call SaveUnitHandle(udg_Hash, H, 3, 2.50)  
    call TimerStart(T, 2.00, true, function FireBall_Damage)
    set Q = null
    set W = null
    set T = null
endfunction

function FireBall_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

//===========================================================================
function InitTrig_FireBall takes nothing returns nothing
    set gg_trg_FireBall = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_FireBall, EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    call TriggerAddCondition(gg_trg_FireBall, Condition(function FireBall_Conditions))
    call TriggerAddAction(gg_trg_FireBall, function FireBall_Actions)
endfunction
» А вот те 2 строки, из-за которых не включается триггер
    call TimerStart(T, 2.00, true, function FireBall_Damage)
и
    call TriggerAddCondition(gg_trg_FireBall, Condition(function FireBall_Conditions))
Насчет первой пишет:
Неверный тип аргумента (real)
А насчет второй вот:
Неверное количество аргументов (real)
Грязью не поливать, я не первый и я не последний такой
P.S: Хэш инициализируется в триггере Initialization
Старый 01.10.2011, 19:51
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
Нафиг пересохранять 3 ячейку. Просто пользуйсся уже созданной локалкой Е.
И ты не сможешь очистить массив ячеек, так как ты вначале удаляешь таймер, а вместе с ним и ссылку на весь привязанный к нему массив
Praudmur добавил:
кстати, не вижу смысла вообще пользоваться 3 ячейкой.
Praudmur добавил:
поправочка - написал какую-то ересь, подправил
Старый 01.10.2011, 20:25
The Requiem

offline
Опыт: 2,766
Активность:
Praudmur, окей. Подправил. А вопрос то остался нерешенным.
Старый 01.10.2011, 20:28
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
Ну хз. Всё остальное вроде правильно написано.
Старый 01.10.2011, 20:29
The Requiem

offline
Опыт: 2,766
Активность:
То есть локальной переменной E придать значение 2.50, как тут
    call SaveUnitHandle(udg_Hash, H, 3, 2.50)
просто в функции
function FireBall_Damage takes nothing returns nothing
?
Так-то я еще жду отзывов
Старый 01.10.2011, 20:38
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
угу
function FireBall_Damage takes nothing returns nothing
local real E=2.50
...
PROFIT!!! endfunction
Старый 01.10.2011, 20:42
The Requiem

offline
Опыт: 2,766
Активность:
Народ помогите =( Так и не могу увидеть ошибку...
Старый 01.10.2011, 21:10
Hanabishi
COOL STATUS
offline
Опыт: отключен
TheRequiem, здесь всё правильно, причина ошибок непонятна и кроется в другом.
Старый 01.10.2011, 21:37
The Requiem

offline
Опыт: 2,766
Активность:
Hanabishi, незнаю-незнаю... Не может же быть проблемы в типе самого спелла? =\
на всякий случай - спел огненная стрела (колдун)
Старый 01.10.2011, 21:48
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
попробуй переписать на другой карте
Старый 01.10.2011, 21:50
The Requiem

offline
Опыт: 2,766
Активность:
Не-а, не катит. Те-же самые 2 ошибки... =(
Старый 01.10.2011, 21:58
Lipen

offline
Опыт: 1,550
Активность:
Почему то у меня нет ошибок...
» Тык
globals
    hashtable Hash = InitHashtable()
endglobals

function FireBall_Damage takes nothing returns nothing
    local timer T = GetExpiredTimer()
    local integer H = GetHandleId(T)
    local unit Q = LoadUnitHandle(Hash, H, 1)
    local unit W = LoadUnitHandle(Hash, H, 2)
    local integer E = LoadInteger(Hash, H, 3)
    if E > 0 then
        call UnitDamageTarget(Q, W, 2.0, true, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, null)
        call SaveInteger(Hash, H, 3, E - 1)
    else
        call DestroyTimer(T)
        call FlushChildHashtable(Hash, H)
    endif
    set Q = null
    set W = null
    set T = null
endfunction
 
function FireBall_Actions takes nothing returns nothing
    local unit Q = GetSpellAbilityUnit()
    local unit W = GetSpellTargetUnit()
    local timer T = CreateTimer()
    local integer H = GetHandleId(T)
    call SaveUnitHandle(Hash, H, 1, Q)
    call SaveUnitHandle(Hash, H, 2, W)
    call SaveInteger(Hash, H, 3, 3)
    call TimerStart(T, 2.00, true, function FireBall_Damage)
    set Q = null
    set W = null
    set T = null
endfunction

function FireBall_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function InitTrig_FireBall takes nothing returns nothing
    local trigger trg = CreateTrigger()
    local integer i = 0

    loop
        exitwhen i>11
        call TriggerRegisterPlayerUnitEvent(trg, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set i = i + 1
    endloop
    call TriggerAddCondition(trg, Condition(function FireBall_Conditions))
    call TriggerAddAction(trg, function FireBall_Actions)

    set trg = null
endfunction
Старый 01.10.2011, 22:03
The Requiem

offline
Опыт: 2,766
Активность:
И так Hanabishi, вписал те-же цифры что и в твоем коде и ошибка номер 1 исчезла, осталась только 2, которая капризничает по-поводу условия =[
TheRequiem добавил:
Lipen, спасибо. Теперь у меня тоже нет.
Ну и собственно второй вопрос по теме (уже не столь трудный): если вэйты такие утечные, то каким образом отловить дистанцию между кастером и целью, чтобы поделить на расстояние для дальнейших действий? Или есть другой способ?
Старый 01.10.2011, 22:20
Lipen

offline
Опыт: 1,550
Активность:
каким образом отловить дистанцию между кастером и целью
SquareRoot(deltaX * deltaX + deltaY * deltaY)
Непонятный вопрос ты задал - какую-то дистанцию разделить на какое-то расстояние...
Старый 01.10.2011, 22:32
The Requiem

offline
Опыт: 2,766
Активность:
Lipen, точнее расстояние между кастером и целью поделить на скорость полета спелла, по статьям Сергея ориентируюсь =)
Всем спасибо. Close.
Старый 01.10.2011, 22:48
Ответ

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

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

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

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



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