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

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

Ответ
 
sleepw

offline
Опыт: 8,449
Активность:
Кэш
500 раз читал,вникал в статьи но так ничего толком и не понял..
вод пытаюсь методом тыка понять:)
записываем юнита и как потом этого записанного юнита убить?

Код:
function Trig_EBcast_Actions takes nothing returns nothing
set ebp = GetTriggerUnit()
call CreateUnit(GetOwningPlayer(ebp),'n002',GetUnitX(ebp),GetUnitY(ebp),bj_UNIT_FACIN  G)
call set_object_iparam(GetLastCreatedUnit(),"EnragedBeast",H2I(ebp))
endfunction


Код:
function Trig_xzxz_Actions takes nothing returns nothing
local unit u=get_object_iparam(ebp,"EnragedBeast")
call KillUnit(u)
endfunction

хелп=(
Старый 15.03.2008, 15:15
J
expert
offline
Опыт: 48,447
Активность:
Код:
function Trig_xzxz_Actions takes nothing returns nothing
    local unit u = I2U(get_object_iparam(ebp, "EnragedBeast"))
    call KillUnit(u)
    set u = null
endfunction

function Trig_EBcast_Actions takes nothing returns nothing
    set ebp = GetTriggerUnit()
    call set_object_iparam(ebp, "EnragedBeast", H2I(CreateUnit(GetOwningPlayer(ebp), 'n002', GetUnitX(ebp), GetUnitY(ebp), bj_UNIT_FACING)))
endfunction


Jon добавил:
пойми разницу между БЖ и НЕ БЖ...
если ты создаеш юнит через функцию бж, то юнит ВНУТРИ этой функции заносится в переменую bj_lastCreatedUnit
И потому когда ты используеш функцию
Код:
function GetLastCreatedUnit takes nothing returns unit
    return bj_lastCreatedUnit
endfunction

То возвращает этого юнита
НО
ты пользуешся не бж, а простой нативкой, она в эту переменую не заносит юнита, потому его нужно или прямо создавать как пораметр, или предварительно сохранять в локалке

Отредактировано Jon, 15.03.2008 в 16:19.
Старый 15.03.2008, 15:23
ZLOBICH
Kicked by XimikS
offline
Опыт: 4,727
Активность:
не юзай set_object_iparam и тд и тп, юзай напрямую StoreInteger, GetStoredInteger etc
Старый 15.03.2008, 15:25
J
expert
offline
Опыт: 48,447
Активность:
sleepw, да кстате, ZLOBICH +1
Старый 15.03.2008, 15:26
sleepw

offline
Опыт: 8,449
Активность:
Jon
у мну эти 2 функции в разных тригах и с разными ивентами.. тоетсь пытаюсь знуть кэш как переменную штоли..
+ в твоей функции,причём там "ebp" тогда?
Старый 15.03.2008, 15:39
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
у мну эти 2 функции в разных тригах и с разными ивентами.. тоетсь пытаюсь знуть кэш как переменную штоли..

использовать ее просто замене переменных ненадо
Цитата:
+ в твоей функции,причём там "ebp" тогда?

всмысле?
Старый 15.03.2008, 15:46
sleepw

offline
Опыт: 8,449
Активность:
кароче вот.
call set_object_iparam(bj_lastCreatedUnit, "EnragedBeast", H2I(ebp))
зописал.
как мне теперь выдернуть этого юнита присвоенного к ебп?
Старый 15.03.2008, 15:47
J
expert
offline
Опыт: 48,447
Активность:
я же написал:
local unit u = I2U(get_object_iparam(ebp, "EnragedBeast"))
Старый 15.03.2008, 15:48
sleepw

offline
Опыт: 8,449
Активность:
Цитата:
Сообщение от Jon
использовать ее просто замене переменных ненадо

всмысле?

я ж гвоорю шо тестаю:)

sleepw добавил:
непашед.

может надо вотето тут юзнуть?О_о

function get_object_uparam takes handle h, string key returns unit
return I2U(GetStoredInteger(udg_cache, I2S(H2I(h)), key))
endfunction
Старый 15.03.2008, 15:53
J
expert
offline
Опыт: 48,447
Активность:
Код:
function Trig_xzxz_Actions takes nothing returns nothing
    local unit u = I2U(GetStoredInteger(udg_cache, I2S(H2I(ebp)), "EnragedBeast"))
    call KillUnit(u)
    set u = null
endfunction

function Trig_EBcast_Actions takes nothing returns nothing
    set ebp = GetTriggerUnit()
    call StoreInteger(udg_cache, I2S(H2I(ebp)), "EnragedBeast", H2I(CreateUnit(GetOwningPlayer(ebp), 'n002', GetUnitX(ebp), GetUnitY(ebp), bj_UNIT_FACING)))
endfunction

Отредактировано Jon, 15.03.2008 в 16:05.
Старый 15.03.2008, 15:58
sleepw

offline
Опыт: 8,449
Активность:
норм..
а чего не пашет вот так?..=\
call CreateUnit(GetOwningPlayer(ebp), 'n002', GetUnitX(ebp), GetUnitY(ebp), bj_UNIT_FACING)
call set_object_iparam(ebp, "EnragedBeast", H2I(bj_lastCreatedUnit))
Старый 15.03.2008, 16:19
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от Jon
пойми разницу между БЖ и НЕ БЖ...
если ты создаеш юнит через функцию бж, то юнит ВНУТРИ этой функции заносится в переменую bj_lastCreatedUnit
И потому когда ты используеш функцию

Код:
function GetLastCreatedUnit takes nothing returns unit
    return bj_lastCreatedUnit
endfunction

То возвращает этого юнита
НО
ты пользуешся не бж, а простой нативкой, она в эту переменую не заносит юнита, потому его нужно или прямо создавать как пораметр, или предварительно сохранять в локалке


Jon добавил:
или вот так:
Код:
set bj_lastCreatedUnit = CreateUnit(GetOwningPlayer(ebp), 'n002', GetUnitX(ebp), GetUnitY(ebp), bj_UNIT_FACING)
call set_object_iparam(ebp, "EnragedBeast", H2I(bj_lastCreatedUnit))
Старый 15.03.2008, 16:21
sleepw

offline
Опыт: 8,449
Активность:
ок,выдернул из дотовского спелла.

call SetHandle(lf5,"MyBear",bj_lastCreatedUnit)

кагтак?

sleepw добавил:
пля я тугоплуг.
всё всё понял:) сенк)

sleepw добавил:
эмм
зочем тогда:
function get_object_uparam takes handle h, string key returns unit
return I2U(GetStoredInteger(udg_cache, I2S(H2I(h)), key))
endfunction
?

и как можно записать юнита чтобы не обращаться к "ebp"?
Старый 15.03.2008, 16:46
J
expert
offline
Опыт: 48,447
Активность:
Код:
function get_object_uparam takes handle h, string key returns unit
return I2U(GetStoredInteger(udg_cache, I2S(H2I(h)), key))
endfunction

и это
I2U(get_object_iparam(h, key))
одно и тоже, просто верхнюю функцию сделали для краткости... а вообще я уже сказал, не пользуйся этими функциями, а юзай кеш напрямую, так удобнее будет в будущем...
Цитата:
и как можно записать юнита чтобы не обращаться к "ebp"?

Всмысле? просто без атачивания записать юнита в кеш? вот так:
Код:
local unit u = CreateUnit()
local unit u2
call StoreInteger(udg_cache, "111", "222", H2I(u))
set u2 = I2U(GetStoredInteger(udg_cache, "111", "222"))
if u == u2 then
    return true
endif
Старый 15.03.2008, 16:56
sleepw

offline
Опыт: 8,449
Активность:
а какая разница между миссион кей и кей? или там всё равно что писать?
Старый 15.03.2008, 17:05
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
sleepw, cache -> mission -> object_name = object_value
ака кэш ->папка->имя = объект
Старый 15.03.2008, 17:10
sleepw

offline
Опыт: 8,449
Активность:
тоесть кей это мы уже записываем как хотим,а миссион можно и как хотим и если надо то записать номером юнита?

sleepw добавил:
хм.. более менее подраздуплился,действительно без функций мего легче.. я в них запутался=\
Старый 15.03.2008, 17:12
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
sleepw, просто умей толковать отдельные конструкции и забывай о них. takes integer - ага, один локальный интегер создается и в него пишется значение того, что было при вызове в соотв. поле. Все..
Старый 15.03.2008, 17:18
J
expert
offline
Опыт: 48,447
Активность:
sleepw что непонятного? если кеш представить в виде иеврхической модели, то это будет как сказал Фел, т.е. Представь себе папку - кеш, в ней подпапки - мисион кей, а в них файлы - кей.
Если представить как релеационоую модели (как вообщемто и есть), то это будет таблица - кеш, столбей - мисион кей, строка -кей (или наоборот, непомню)
Старый 15.03.2008, 17:22
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
угу, пользователям операционок иерархическая модель интуитивно ближе)) хотя от реального расположения данных несколько далека
Старый 15.03.2008, 17:25
Ответ

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

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

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

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



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