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

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

Ответ
 
Sailar

offline
Опыт: 8,555
Активность:
Вопрос про локальные переменные
Подскажите у меня триггер делат локальный триггер и те локальные прем-ые что создавались ранее не работают в локальном, отаёться вариант создать такиеже и в нём но скрипт будет работать только с triggeringunit а если допустем мене надо getspelltargetunit преровнять а в этот промежуток времени другой игрок кастует магию и получаеться что переменая собёться и будет неккоректно работать тагже и с второстепенным условием

KLAUD добавил:
Можно ли без глобальных обойтись в таких ситуациях если можно как?

KLAUD добавил:
А вот ещё почему если создавать if/then/else и вместо if lkll(название проверяемой функции)() ставить саму функцыю то она иногда не срабатывает а иногда срабатавает?
Старый 16.06.2007, 01:02
Sailar

offline
Опыт: 8,555
Активность:
Я карту с сотовово не закину неполучитья да и ненадо скрипт работает я наверно вопрос нетак задал. Во допустим у юнита х есть способность он её кастнул и происходят действия разные в которых создаёться лок тригер каждые 0.01 в этом тригере я если поставлю лок п = жертве и перед срабатыванием другой юнит касует на другую цель заклинание переменная жертвы поменяеться. А можно перенести чтоли локалку 1триггера в локальный тр и бе глоб переменной

KLAUD добавил:
Да и если цикл с условием создать а в цикле вайт каждые2 сек то его необходимо создавать проверочную функцию и туда нельзя в писать локальные что делать? Как лок перенести в другую функ?
Старый 16.06.2007, 03:59
J
expert
offline
Опыт: 48,447
Активность:
RB

RB + Game Cache1

RB + Game Cache2

почитай в основном последнию
Старый 16.06.2007, 04:04
Sailar

offline
Опыт: 8,555
Активность:
А в это время пока цикл ктото наколдавал на другово и проверка в условии где вместо лок переменой х которая была =getspelltargetunit стоит просто это действие в это время ктонить пременяет чёнить жертва меняеться а проверка идёт не на перемемую а на getspelltargetunit и всё условие сорвалось

KLAUD добавил:
Про кэш я знаю но для этого нужно создавать лишние глобальные а какая разница что один кэш и один массив просто путаница с ними возникают поэтому можно ли както без глобальных
Старый 16.06.2007, 04:12
J
expert
offline
Опыт: 48,447
Активность:
KLAUD чтобы юзать кеш нужна лиш одна глобальная пременая переменная с типом GameCache, можеш юзать кеш сколько хочеш, и где хочеш
ты прочитай на что я дал тебе сылки, там все ответы на твои вопросы
Старый 16.06.2007, 04:19
Sailar

offline
Опыт: 8,555
Активность:
Усе прочитал тока функций как set_object_iparam несуществует не в коммо.дж негде редактор её не распазнаёт следовательно был зделан нестандартный код а карту пример мне скачать неполучиться. Может есть ещё способ или подскажите какой там код хотяб как приравнять? Да ещё на условие насколько я понел кэш не проверяет
Старый 16.06.2007, 06:15
J
expert
offline
Опыт: 48,447
Активность:
» SCV
Код:
function get_object_iparam takes handle h, string key returns integer
   return GetStoredInteger(udg_cache, I2S(H2I(h)), key)
endfunction

function set_object_iparam takes handle h, string key, integer val returns nothing
   call StoreInteger(udg_cache, I2S(H2I(h)), key, val)
endfunction

function get_object_rparam takes handle h, string key returns real
   return GetStoredReal(udg_cache, I2S(H2I(h)), key)
endfunction

function set_object_rparam takes handle h, string key, real val returns nothing
   call StoreReal(udg_cache, I2S(H2I(h)), key, val)
endfunction

function get_object_bparam takes handle h, string key returns boolean
   return GetStoredBoolean(udg_cache, I2S(H2I(h)), key)
endfunction

function set_object_bparam takes handle h, string key, boolean val returns nothing
   call StoreBoolean(udg_cache, I2S(H2I(h)), key, val)
endfunction

function get_object_sparam takes handle h, string key returns string
   return GetStoredString(udg_cache, I2S(H2I(h)), key)
endfunction

function set_object_sparam takes handle h, string key, string val returns nothing
   call StoreString(udg_cache, I2S(H2I(h)), key, val)
endfunction

function flush_object takes handle h returns nothing
   call FlushStoredMission(udg_cache, I2S(H2I(h)))
endfunction


Jon добавил:
пример смогу сделать только попоже.. ибо заняд

Отредактировано Jon, 16.06.2007 в 11:03.
Старый 16.06.2007, 07:49
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
В общем если освобожусь быстрее джона, то сделаю вам примерчеГ. А пока что без абузов.
Старый 16.06.2007, 08:56
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
в кэш надо раз запихнуть одно значение -
Integer, конвертированиый через РБ юнит, записаный как конверитрованый в строку интегер, который в совю очередь является конвертированным через РБ тригером, в mission LocalTargetUnit
Код:
//=====================
function t2i takes trigger t returns integer
    return t
    return 0
endfunction
function u2i takes unit u returns integer
    return u
    return 0
endfunction

function i2u takes integer i returns unit
    return i
    return null
endfunction
function i2t takes integer i returns trigger
    return i
    return null
endfunction
//=================================
function LocalTrigger takes nothing returns nothing
    local unit u = i2u( GetStoredInteger(udg_gamecache, "LocalTargetUnit", I2S(t2i(GetTriggeringTrigger())) ))
    ....
    call DestroyTrigger(GetTriggeringTrigger()) //сие важно
endfunction

function TrigMain_Actions takes nothing returns nothing
   local trigger t = Create trigger()
   call StoreInteger(udg_gamecache, "LocalTargetUnit", I2S(t2i(t)), u2i(GetSpellTargetUnit()))
   call TriggerRegister...Event(t, ...)
   call TriggerAddAction(t, function LocalTrigger)
   
   .....
endfunction

Отредактировано FellGuard, 16.06.2007 в 13:54.
Старый 16.06.2007, 13:27
J
expert
offline
Опыт: 48,447
Активность:
FellGuard неужели ты тоже юзаеш маленькие буквы в названиях функций RB? Ужос=/ мне кажется нечитабельно
Старый 16.06.2007, 13:42
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
пример писал на скорую руку, можно там даже циферки юзать, чтобы бедный взломщик 100% удавился, увидев код :):
Старый 16.06.2007, 13:53
Sailar

offline
Опыт: 8,555
Активность:
Спасибо всем всё понятно только зачем в коде создавать локальный триггер? И как тогда мне проверить всё сахранённое в буффер загружать и равно да тогда проверет условия на локальную в буффере или как?
Старый 16.06.2007, 15:51
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
KLAUD, инициализируеш локального юнита, приравниваеш тут же к тому, что сохранено в кэше, что тут неясного?
Цитата:
Сообщение от KLAUD
...у меня триггер делат локальный триггер...
та функция, что снизу (TrigMain_Actions) - это действия того триггера, который делает локальный триггер. То что выше (LocalTrigger) - действия твоего локального триггера.
Проверять ВСЕ сохраненное в буфер - никак, можно лишь задать директорию и имя значения в кеше, а потом обратиться к нему из локального триггера. Если нужно условие для локального триггера, которое проверяет чтото у юнита из главного триггера - тоже самое, в условии локальный юнит = сохраненному в кэше (это то что мы сохраняем до создания локального триггера)
Цитата:
call StoreInteger(udg_gamecache, "LocalTargetUnit" //директория, в которую пишу, I2S(t2i(t)) //имя, под которым пишу, оно равно конвертированому в текст имени локального триггера t, созданного еще в главном триггере, это позволяет для разных триггеров не смешивать значения переменных, u2i(GetSpellTargetUnit()) //собственно, наш сохраненный юнит, точнее не сам юнит а адрес его. К юниту если адрес верен, и юнит существует, можно как раз потом обратиться, с помощью GetStoredInteger и i2u уже манипулировать реальным юнитом)

Отредактировано FellGuard, 16.06.2007 в 17:00.
Старый 16.06.2007, 16:46
Sailar

offline
Опыт: 8,555
Активность:
Спасибо щас буду разбираться. А почему если if создать в триггере без ссылки на функцию то он невсегда срабатывает. Только некотырые ифы типа рандом нумбер срабатывают а сложные проверки нет?
Старый 16.06.2007, 17:20
J
expert
offline
Опыт: 48,447
Активность:
FellGuard хм.. вообщето делается наоборот... в категорю суют хендл, а под ключ уже пишут индификационую строку...
Старый 16.06.2007, 18:59
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
как будто есть большая разница
Старый 16.06.2007, 19:02
J
expert
offline
Опыт: 48,447
Активность:
KLAUD вот попробуй используя данную фичу сделать функцию, котороая принимает юнита, угол и скорость, и чтобы при одном вызове функции... юнит начинал перемещатся в заданном направлении с указаной скоростью, только при одном вызове. Без глобальных переменых конешн (кроме кеша), и чтобы функция могла работать с большим количеством юнитов одновремено...
это будет чет вроде зачета...
если несможеш, я дам тебе результат что должно получится... но серьезно... попробуй сделать сам, посторойся
Старый 16.06.2007, 19:02
Sailar

offline
Опыт: 8,555
Активность:
Fell guard в том то и дело что есть разница попробуй сразу без сылки на функцию проверки. Зделать цикл там проверку допустим с тойже если локал юнит дистанция и жертва меньше 400 действие должны быть глюки. Jon щас буду пробовать делать.
Старый 16.06.2007, 20:06
J
expert
offline
Опыт: 48,447
Активность:
KLAUD насчет разныци он мне говорил.. хотя разница всеже есть... смотря как юзать кеш, чем больше стрингов в категорииили в ключе независимо друг от друга тем больше тратится производительности на их поиск соответственно
Старый 16.06.2007, 20:10
Sailar

offline
Опыт: 8,555
Активность:
Jon кажись до меня дошло но возник вопрос если из тригера запуска обращаться к коду и у меня накарте много скриптовых магий то код будет гиганским можно ли создавать лок триггер как всегда а не сылаться на код при этом чтоб сцв работала?

KLAUD добавил:
По мере понятия этой системы Возникают дополнительные вопросы если из тригера запуска обращаться к коду и у меня накарте много скриптовых магий то код будет гиганским можно ли создавать лок триггер как всегда а не сылаться на код при этом чтоб сцв работала?
Старый 16.06.2007, 21:28
Ответ

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

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

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

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



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