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

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

Ответ
 
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Структура и метод
боброго дня, возник такой вопрос.
Читал мануал по vJass, попробовал разобраться в структурах.
Я вот не понимаю, как мне извлечь переменнную из структуры для ее использования допустим в условии, или как принимаемый аргумент.
» Имею такой код
#include "cj_types.j"

struct MoveDb
    real time
    
method decrease takes nothing returns nothing
 set this.time=this.time-1
endmethod

endstruct

void MoveProc(){
timer t = GetExpiredTimer()
int h = GetHandleId(t)
    if (this.time<= 0) then
        DestroyTimer(t)
        call MoveDb.destroy h
    else
        DisplayTextToForce(bj_FORCE_ALL_PLAYERS, R2S(this.time))
        h.decrease()
    endif
t = null
}

function Trig_Test_Structs_Actions takes nothing returns nothing
timer t = CreateTimer()
int h = GetHandleId(t)
MoveDb h = MoveDb.create
    h.time = 5
    TimerStart(t, 1, true, function MoveProc)
endfunction

//===========================================================================
function InitTrig_Test_Structs takes nothing returns nothing
    set gg_trg_Test_Structs = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_Test_Structs, Player(0), "1", true )
    call TriggerAddAction( gg_trg_Test_Structs, function Trig_Test_Structs_Actions )
endfunction
но ругается на условие, вот я и хз как мне вынуть ее, перепробовал всякие извращения =\
Старый 27.06.2012, 19:41
Lipen

offline
Опыт: 1,550
Активность:
В функции MoveProc нельзя использовать this. Это указатель на структуру, в которой выполняется действие, можно использовать в методах.
В функции Trig_Test_Structs_Actions две переменные с именем h.
Чтобы в функции MoveProc обратиться к структуре, нужно её загрузить, например, из с хэша с таймера.
» Тык
struct MoveDb
    real time

    method decrease takes nothing returns nothing
        set this.time=this.time-1
    endmethod

endstruct

void MoveProc() {
    timer t = GetExpiredTimer()
    int h = GetHandleId(t)
    MoveDb A = LoadInteger(Hash, h, 1)

    if (A.time<= 0) {
        DestroyTimer(t)
        A.destroy()
    } else {
        DisplayTextToForce(bj_FORCE_ALL_PLAYERS, R2S(A.time))
        A.decrease()
    }

    t = null
}

void Test_Structs() {
    timer t = CreateTimer()
    int h = GetHandleId(t)
    MoveDb A = MoveDb.create()

    A.time = 5
    SaveInteger(Hash, h, 1, A)
    TimerStart(t, 1, true, function MoveProc)
}

//===========================================================================
function InitTrig_Test_Structs takes nothing returns nothing
    trigger trg = CreateTrigger()
    TriggerRegisterPlayerChatEvent( trg, Player(0), "1", true )
    TriggerAddAction( trg, function Test_Structs )
    trg = null
endfunction
Старый 27.06.2012, 20:12
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
печалька... я хотел без хеша провернуть так, что бы хэндл таймера - был названием структуры =_=
Старый 27.06.2012, 20:24
Ответ

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

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

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

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



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