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

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

Ответ
 
biridius

offline
Опыт: 19,155
Активность:
Не работает спелл с хэш-таблицей
Суть спелла: при касте вокруг героя 10 секунд кружат несколько двойников, сбивающих врага с толку. 75% шанс уклонится от полученного урона.
При втором запуске спелла вар вылетает.
В чем дело???
Прикрепленные файлы
Тип файла: w3x Shadow Dance.w3x (14.0 Кбайт, 4 просмотров )
Старый 13.11.2011, 13:06
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
Лучше выложи код сюда
Старый 13.11.2011, 13:22
biridius

offline
Опыт: 19,155
Активность:
Там несколько триггеров, некоторые на ГУИ.
Код:
function miss_tt takes unit u returns nothing
local location l = GetUnitLoc(u)
local real h = 10
local texttag tt = CreateTextTagLocBJ("miss", l, h, 9, 100, 0, 0, 0)
loop
call TriggerSleepAction(0.05)
set h = h + 15
call SetTextTagPosBJ(tt, l, h)
exitwhen(h > 200)
endloop
call RemoveLocation(l)
call DestroyTextTag(tt)
endfunction

function shadow_move takes unit caster, unit shadow returns nothing
local location l = GetUnitLoc(caster)
local location p = GetUnitLoc(shadow)
local real a = GetRandomReal(0, 360) + AngleBetweenPoints(l, p)
local real d = GetRandomReal(-200, 200)
call RemoveLocation(p)
set p = PolarProjectionBJ(l, d, a)
call RemoveLocation(l)
call SetUnitPositionLoc(shadow, p)
call SetUnitFacing(shadow, a)
call RemoveLocation(p)
endfunction

function create_shadow takes unit caster, integer i returns nothing
    local unit shadow = CreateUnit(Player(15), 'h000', GetUnitX(caster), GetUnitY(caster), 0.00)
    call SetUnitVertexColor(shadow, 90, 90, 90, 80)
    call SaveUnitHandle(udg_hash, GetHandleId(caster), i, shadow)
endfunction

function begin_dance takes unit caster returns nothing
    local integer i = 0
    local integer maxi = 8
    local timer t = CreateTimer()
    call SaveInteger(udg_hash, GetHandleId(caster), 0, maxi)
    call StartTimerBJ(t, false, 10)
    call SaveUnitHandle(udg_hash, GetHandleId(t), 0, caster)
    call TriggerRegisterTimerExpireEventBJ( gg_trg_dance_timedout, t )
    call TriggerRegisterUnitEvent( gg_trg_dancer_damaged, caster, EVENT_UNIT_DAMAGED )
    if IsUnitInGroup(caster, udg_caster) == false then
        call GroupAddUnit(udg_caster, caster)
    else
    endif
    loop
        set i = i + 1
            call create_shadow(caster, i)
        exitwhen(i >= maxi)
    endloop
endfunction

function end_dancing takes unit caster returns nothing
    local integer i = 0
    local integer maxi = LoadInteger(udg_hash, GetHandleId(caster), 0)
    local unit shadow
    call GroupRemoveUnit(udg_caster, caster)
        loop
            set i = i + 1
                set shadow = LoadUnitHandle(udg_hash, GetHandleId(caster), i)
                call RemoveUnit(shadow)
            exitwhen(i==maxi)
        endloop
    call FlushChildHashtable(udg_hash, GetHandleId(caster))
endfunction

function shadow_dance takes nothing returns nothing
    local unit u = GetEnumUnit()
    local integer i = 0
    local integer maxi = LoadInteger(udg_hash, GetHandleId(u), 0)
    local unit shadow
    if IsUnitDeadBJ(u) == true or IsUnitType(u, UNIT_TYPE_STUNNED) == true then
        call end_dancing(u)
    else
    loop
        set i = i + 1
            set shadow = LoadUnitHandle(udg_hash, GetHandleId(u), i)
            call shadow_move(u, shadow)
        exitwhen(i >= maxi)
    endloop
    endif
endfunction


код триггера dancing:
Код:
function Trig_dancing_Actions takes nothing returns nothing
    call ForGroupBJ( udg_caster, function shadow_dance )
endfunction

//===========================================================================
function InitTrig_dancing takes nothing returns nothing
    set gg_trg_dancing = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_dancing, 0.08 )
    call TriggerAddAction( gg_trg_dancing, function Trig_dancing_Actions )
endfunction


udg_caster - группа юнитов
'h000' - дамми
Миниатюры
Кликните на картинку для увеличения
Название:  скрин 1.png
Просмотров: 13
Размер:  9.0 Кбайт  Кликните на картинку для увеличения
Название:  скрин 2.png
Просмотров: 7
Размер:  12.0 Кбайт  Кликните на картинку для увеличения
Название:  скрин 3.png
Просмотров: 8
Размер:  5.9 Кбайт  

Отредактировано infS8Noyabrsk, 13.11.2011 в 13:51.
Старый 13.11.2011, 13:25
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Ну выложи тогда скрин триггеров - быстрей получишь ответ
Старый 13.11.2011, 13:29
Msey
????
offline
Опыт: 67,346
Активность:
через диалоги проверяй
Старый 13.11.2011, 14:50
biridius

offline
Опыт: 19,155
Активность:
В каком смысле через диалоги?
Чтобы выводило сообщения?

infS8Noyabrsk добавил:
Помогите пожалуйста
Старый 13.11.2011, 16:59
Msey
????
offline
Опыт: 67,346
Активность:
infS8Noyabrsk:
Чтобы выводило сообщения?
да
Старый 13.11.2011, 17:01
biridius

offline
Опыт: 19,155
Активность:
ВСЕ РАБОТАЕТ но гдето утечки и как это проверять сообщениями??
даже когда все локалки обнуляю и уничтожаю точки все равно кактолько второй раз создаются клоны вар вылетает

infS8Noyabrsk добавил:
Кто смотрел (16GB, DqUaliTy) у вас работает??
Старый 13.11.2011, 17:06
Msey
????
offline
Опыт: 67,346
Активность:
infS8Noyabrsk:
обнуляю и уничтожаю точки
чет не заметно, что ты вообще читал статьи по обнулению локалок...
Старый 13.11.2011, 19:18
biridius

offline
Опыт: 19,155
Активность:
Обычно это работало (для снарядов например) а тут вдруг нет...
Старый 13.11.2011, 20:24
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
infS8Noyabrsk,
вылетает да
Старый 13.11.2011, 20:35
biridius

offline
Опыт: 19,155
Активность:
Я у себя попробовал даже бж убирать но это не помогло
Старый 13.11.2011, 20:56
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
тут спелл надо полностью переписывать конструкция левая какая-то
Старый 13.11.2011, 21:06
biridius

offline
Опыт: 19,155
Активность:
вроде сначала создается кучка юнитов заносится под номерами от 1 до maxi в хэш.
maxi заносится в хэш под номером 0. Под хэндл кастера. Стартует таймер на 10 сек.
Кастер заносится в группу.

Периодический триггер перебирает группу кастеров, для каждого вызывает функцию: найти число теней из ячейки 0, от 1 до этого числа найти юнитов и вызвать функцию рандомного перемещения.

При этом, пока герой в группе, у него есть 75% шанс при получении урона что он подлечится на этот урон и вылетит "miss".

Когда таймер истекает вызывается функция, убирающая кастера (он в хэш записан под таймер в яч. 0) из группы кастеров, находящая его тени и удаляющая их и очищающая таблицу от него и от таймера.

Спелл работает но один раз почему?

infS8Noyabrsk добавил:
Короче еще один способ заставить вар вылететь, кроме создания юнита для player(16) и многих других

infS8Noyabrsk добавил:
Вроде кастер убирается из группы нормально, бж и локации можно заменить на координаты но от этого ниче не меняется, пробовал менять написание таймера - бестолку. Отключение отображения тексттагов не помогает. Может все дело в таблице?
Прикрепленные файлы
Тип файла: w3x Shadow Dance.w3x (14.3 Кбайт, 1 просмотров )

Отредактировано infS8Noyabrsk, 14.11.2011 в 06:00.
Старый 14.11.2011, 06:02
Ответ

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

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

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

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



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