Добавлен
`
ОЖИДАНИЕ РЕКЛАМЫ...
7
prog:
Можно, но не нужно.
я полный нуль в луа и это выглядит лучше для меня чем кложур) и примеров кложур ноль
24
Ельнур, а зачем тебе кложур для тех целей, для которых используются хештаблицы?
7
prog:
Ельнур, а зачем тебе кложур для тех целей, для которых используются хештаблицы?
ну мне говорили что вместо хеш таблиц и таймеров используют кложур

Steal nerves:
можно, но возможен такой вариант
нихера не понял) если можно старый простой понятный вариант то его сделаю( если сделается)
27
Ельнур, я просто предложил. в LUA ты уже лучше меня понимаешь, тк на нем уже сидишь. Возможно есть какие то там способы
7
Steal nerves:
Ельнур, я просто предложил. в LUA ты уже лучше меня понимаешь, тк на нем уже сидишь. Возможно есть какие то там способы
я нихера не понимаю я пишу как в джассе и стираю все ненужные endif endfunction и не обнуляю)) думаю первая карты выйдет кпц лаганным, и еще для каждой свистелки свои триггеры а не общий раньше для всех способностей один триггер)), а сейчас для каждой отдельный без кондишенов с ифами....
27
Ельнур, тебе нужны многомерные массивы? я правильно понимаю? посмотри в инете как на луа пишут
7
Steal nerves:
Ельнур, тебе нужны многомерные массивы? я правильно понимаю? посмотри в инете как на луа пишут
мне нужен таймер внутри который сохранены кастер и таргет чтобы проверять дистанцию
и ордер кастера чтобы прерывать
  1. Безжалостный рывок. Дальность применения 800. кд 15 сек.
Бежит в цель на максимальной скорости (522), при столновении наносит (Сила х 3 (вкл бонусы) урона) и получает 33% от макс значения Адреналина (маны).
32
Ельнур, а зачем тебе вовсе все это надо, если даже жасс сложно, мб гуи, простенькие дамми касты и все такое. конфетные войны, замок скиби - годные карты сделанные на гуи. Будет пахать на всех версиях в придачу.
7
quq_CCCP:
Ельнур, а зачем тебе вовсе все это надо, если даже жасс сложно, мб гуи, простенькие дамми касты и все такое. конфетные войны, замок скиби - годные карты сделанные на гуи. Будет пахать на всех версиях в придачу.
да джасс легок не пойму зачем они луа прикрепили

локалки так же работают например если ты поставишь do
function trigger
local
function timer
здесь local не рабоатет обьявленная в trigger хотя мне говорили обратное, но все равно радует то что обнулении нет и код быстрее будет
end

хеш прекрасно работает думаю только хеш буду чистить и код быстрее буде тписаться))

думаю сборщик мусоа не умеет чистить хеш таблицы хаха)
24
DataStorage = {} -- глобальная переменная с lua таблицей вместо хештаблицы

------

local t = CreateTimer()
local u1 = GetCaster() -- нет такой функции, тут должно быть получение кастера
local u2 = GetTarget() -- такой функции тоже нет, тут должно быть получение цели
local i = 42
local data = { caster = u1, target = u2, num = i}
DataStorage[GetHandleId(t)] = data

----

local t = GetExpiredTimer()  -- не помню есть ли такая функция, тут должно быть получение таймера созданого в предыдущем блоке
local data = DataStorage[GetHandleId(t)]
local u3 = data.caster -- здесь окажется юнит из u1
local u4 = data.target -- здесь окажется юнит из u2
local x = data.num -- здесь окажется число из i
Кому нужен хеш, когда можно сделать так?
7
prog:
DataStorage = {} -- глобальная переменная с lua таблицей вместо хештаблицы

------

local t = CreateTimer()
local u1 = GetCaster() -- нет такой функции, тут должно быть получение кастера
local u2 = GetTarget() -- такой функции тоже нет, тут должно быть получение цели
local data = { caster = u1, target = u2}
DataStorage[GetHandleId(t)] = data

----

local t = GetExpiredTimer()  -- не помню есть ли такая функция, тут должно быть получение таймера
local data = DataStorage[GetHandleId(t)]
local u1 = data.caster
local u2 = data.target
Кому нужен хеш, когда можно сделать так?
вместо caster и таргета писать GetSpellAbilityUnit(), GetSpellTargetUnit()?
24
Ельнур, ну, это три куска кода, первый показывает объявление луа таблицы, которая используется вместо хештаблицы. Второй блок показывает запись произвольных данных в эту таблицу по хендлу нового таймера, а третий блок показывает чтение этих данных и запись их в переменную. Какие именно данные, сколько их где они берутся не важно, поэтому я использовал несуществующие функции для упрощения.
27
Ельнур, да
local data = { caster = GetSpellAbilityUnit(), target = GetSpellTargetUnit()}

prog, а если надо 3 значения привязать это надо писать так (чем больше параметров, тем больше аргументов? а как типы данных здесь?):
local data = { caster = GetSpellAbilityUnit(), target = GetSpellTargetUnit(), A = 0} A - целое число
24

local data = { caster = u1, target = u2, num = i}
это то же самое что сделать вот так
local data = {}
data.caster = u1
data.target = u2
data.num = i
или вот так
local data = {}
data["caster"] = u1
data["target"] = u2
data["num"] = i
7
local u1 = GetCaster() -- нет такой функции, тут должно быть получение кастера
local u2 = GetTarget() -- такой функции тоже нет, тут должно быть получение цели
все работает только скажи имена caster target когда будешь в другом триггере указывать оно не будет между собой стакаться? или надо писать caster1 target1 ...?
или можно для каждого триггера отдельный DataStorage1...2...3... замутить? = {} -- глобальная переменная с lua таблицей вместо хештаблицы
24
Ну, я же не вижу твой код - это нужно использовать в соответствующем триггере, естественно - пример приведен без всего "лишнего" кода, вроде триггеров и обработки событий - только минимум необходимый чтобы показать работу с таблицами.
7
prog:
Ну, я же не вижу твой код - это нужно использовать в соответствующем триггере, естественно - пример приведен без всего "лишнего" кода, вроде триггеров и обработки событий - только минимум необходимый чтобы показать работу с таблицами.
do
  local d = InitGlobals -- записываем InitGlobals в переменную
  function InitGlobals() -- заменяем оригинальную InitGlobals своей
       d() -- вызываем оригинальную InitGlobals из переменной
       InitMyTrigger2()
  end
end
do
function InitMyTrigger2()
DataStorage = {} -- глобальная переменная с lua таблицей вместо хештаблицы
function spelleffectr()
local u = GetSpellAbilityUnit()
local u1 = GetSpellTargetUnit()
if GetSpellAbilityId() == FourCC('A002') and GetUnitTypeId(u) == FourCC('Hpal') then
PauseUnit(u,false)
local i = CreateItem(FourCC('I000'),GetUnitX(u),GetUnitY(u))
UnitAddItem(u,i)
local i1 = CreateItem(FourCC('I001'),GetUnitX(u),GetUnitY(u))
UnitAddItem(u,i1)
local t1 = CreateTimer()
local cot1 = timerdistance
TimerStart(t1,0.05,true,cot1)
local data = { caster = u, target = u1}
DataStorage[GetHandleId(t1)] = data
end
end
function timerdistance()
local t = GetExpiredTimer()
local data = DataStorage[GetHandleId(t)]
local u = data.caster
local u1 = data.target
DisplayTimedTextToPlayer(Player(0),0,0,10,GetUnitName(u1))
end
local t = CreateTrigger()
local cot = spelleffectr
local evenk = EVENT_PLAYER_UNIT_SPELL_EFFECT
local p0 = Player(0)
local p1 = Player(1)
local p2 = Player(2)
local p3 = Player(3)
local p4 = Player(4)
TriggerRegisterPlayerUnitEvent(t,p0,evenk,nil)
TriggerRegisterPlayerUnitEvent(t,p1,evenk,nil)
TriggerRegisterPlayerUnitEvent(t,p2,evenk,nil)
TriggerRegisterPlayerUnitEvent(t,p3,evenk,nil)
TriggerRegisterPlayerUnitEvent(t,p4,evenk,nil)
TriggerAddAction(t,cot)
end
end
смотри если я буду использовать DataStorage для всех триггеров и для всех триггеров напишу напишу caster target они не будут между собой переписываться?
24
Steal nerves, в луа тип есть только у значений, но не у переменных, в отличии от жасса. Т.е. в переменную в луа можно записать значение любого типа.
7
а хотя дата стораж же привязан к хендлу таймера так что думаю можно одним обойтись и они не будут перезаписываться если одинаковое название буедт caster target

а как ее чистить я думаю глобалки не обнуляются сборщиком мусора
24
Ельнур, ну вот, на примере твоего кода
DataStorage у тебя это глобальная переменная и если ты с тем-же именем объявишь переменную в другом триггере и запишешь туда {}, т.е. новую пустую таблицу, то это затрет значения записанные в первом триггере, старые значения записанные туда раньше потеряются. И наоборот, если такая переменная будет у каждого триггера своя, то и значения внутри будут независимые между триггерами. Ну и самый полезный вариант - использовать одну переменную на несколько триггеров, но записывать туда пустую таблицу только один раз в одном единственном месте - тогда данные из этой таблицы будут доступны в нескольких триггерах.
Далее
local data = { caster = u, target = u1}
Здесь создается новая таблица, в которую записано два значения по ключам "caster" и "target", взятые из переменных u и u1. В хештаблице у тебя это были бы, скорее всего, числовые ключи хештаблицы, а в луа ключи у таблицы могут быть практически чем угодно.
DataStorage[GetHandleId(t1)] = data
А здесь у тебя таблица из переменной data записывается в таблицу DataStorage по хендлу таймера, чтобы потом забрать эту таблицу по тому же хендлу и получать из неё лежащие внутри значения.

а как ее чистить я думаю глобалки не обнуляются сборщиком мусора
Записывать nil по ключу который хочешь обнулить.
Например, вот так
local t = GetExpiredTimer()
DataStorage[GetHandleId(t)] = nil
DestroyTimer(t) -- удалять ненужный таймер обязательно, сборщик мусора может не понять что это мусор
7
prog:
Ельнур, ну вот, на примере твоего кода
DataStorage у тебя это глобальная переменная и если ты с тем-же именем объявишь переменную в другом триггере и запишешь туда {}, т.е. новую пустую таблицу, то это затрет значения записанные в первом триггере, старые значения записанные туда раньше потеряются. И наоборот, если такая переменная будет у каждого триггера своя, то и значения внутри будут независимые между триггерами. Ну и самый полезный вариант - использовать одну переменную на несколько триггеров, но записывать туда пустую таблицу только один раз в одном единственном месте - тогда данные из этой таблицы будут доступны в нескольких триггерах.
Далее
local data = { caster = u, target = u1}
Здесь создается новая таблица, в которую записано два значения по ключам "caster" и "target", взятые из переменных u и u1. В хештаблице у тебя это были бы, скорее всего, числовые ключи хештаблицы, а в луа ключи у таблицы могут быть практически чем угодно.
DataStorage[GetHandleId(t1)] = data
А здесь у тебя таблица из переменной data записывается в таблицу DataStorage по хендлу таймера, чтобы потом забрать эту таблицу по тому же хендлу и получать из неё лежащие внутри значения.

а как ее чистить я думаю глобалки не обнуляются сборщиком мусора
Записывать nil по ключу который хочешь обнулить.
Например, вот так
local t = GetExpiredTimer()
DataStorage[GetHandleId(t)] = nil
DestroyTimer(t) -- удалять ненужный таймер обязательно, сборщик мусора может не понять что это мусор
спасибо а можно использовать для всех триггеров один дата стораж ведь там он сохраняет по хендлу значит между собой не будут стакаться...
24
Можно, я об это написал же. Но важно чтобы его создание (присвоение {}) было только в одном месте.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.