0
8
5 лет назад
0

» WarCraft 3 / [lua] Фрэймы

а что на счет бафов-дебафов ? и циферок панели здоровья и маны ? Где это взять?
1
8
5 лет назад
1

» WarCraft 3 / запустить таймер из таймера

8gabriel8:
В моём случае вообще не нужен ResumeTimer.
Погодой будут управлять не несколько таймеров, а несколько случайных переменных вокруг одного таймера.
Та я уже замутил через 2 таймера и 1 переменную)) просто изначально вопрос был в том почему нельзя запустить таймер этим же таймером!
0
8
5 лет назад
0

» WarCraft 3 / запустить таймер из таймера

8gabriel8:
По идее достаточно одного таймера и случайного погодного эффекта. Например, есть у тебя таймер, который запускаешь на случайное время, по истечению таймера запускается дождь и таймер опять запускается на случайное время, по истечению дождя удаляется этот погодный эффект и устанавливается другой случайный тоже на случайное время таймера и так далее.
ResumeTimer() не запускает остановленный таймер, вернее запускает, но через пару тиков останавливает, только через отельные функции получается надо делать. Одного таймера не достаточно, если один то придется все время на каждый эффект создавать и удлять таймеры.
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / запустить таймер из таймера

8gabriel8:
Castiel, не совсем понял, как работают триггеры. Вот есть у тебя ветер, снег, дождь, солнечные лучи и лунные лучи. Для каждого из них работает таймер, который в случайный момент включает эффект, прерывая предыдущий, а по окончанию продолжает его?
ну есть таймер, который по истечении создает допустим дождь, мы паузим таймер, запускаем сначала слабый дождь, спустя случайное время запускаем сильный дождь, спустя случайное время опять слабый дождь, по истечении времени таймера запускаем таймер который создает случайный погодный эффект. То есть хотелось бы сделать через 2 таймера, не с подсчетом в 1 секунду и локалкой, чисто таймер допустим на 30 секунд с false. не хотелось бы создавать таймер внутри таймера внутри таймера внутри таймера. По этому я и создавал отдельные функции, а не безымянные прям таймере.
0
8
5 лет назад
0

» WarCraft 3 / запустить таймер из таймера

PT153:
Резьюм не работает, как надо.
и как быть тогда ?
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / запустить таймер из таймера

NazarPunk:
ну допустим мне его надо запаузить, а потом возобновить другим таймером
Так используйте функции
PauseTimer()
ResumeTimer()
Как же я забыл про ресюме таймера ) спс бро! Ты мозг великий ) Просто как бы мне было удобней таймер ставить на большое время, а не по одной секунде считать)
0
8
5 лет назад
0

» WarCraft 3 / запустить таймер из таймера

NazarPunk:
Создавал погодные эффекты, по этому всегда нужно было иметь разное время таймера после его перезапуска.
И вот зачем городить такие костыли, если вс решается довольно таки просто?
do
	local InitGlobalsOrigin = InitGlobals
	function InitGlobals()
		InitGlobalsOrigin()
		local i = math.random(5, 10)
		TimerStart(CreateTimer(), 1, true, function()
			i = i - 1
			if i == 0 then
				print('Смена эффекта')
				i = math.random(5, 10)
			end
		end)
	end
end
ну допустим мне его надо запаузить, а потом возобновить другим таймером
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / запустить таймер из таймера

Всем спасибо~Clamp:
Castiel, он имеет в виду, какую игровую задачу ты решал, создавая этот код.
я понимаю)) Создавал погодные эффекты, по этому всегда нужно было иметь разное время таймера после его перезапуска. На джассе делаю так и оно работает, а на луа этот же таймер из этого же таймера запустить с другим временем чет не получается....По этому и задал тут вопрос. Но мне не нужно удалять таймер.
0
8
5 лет назад
0

» WarCraft 3 / запустить таймер из таймера

prog:
Castiel, мне не сильно поможет твой код - расскажи какую задачу ты пытаешься решить, какой должен быть результат работы всех этих таймеров.
ммммм...результат работы ? Так я ж говорил, нужно просто вызывать таймер таймером вот как на функции выше))
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / запустить таймер из таймера

prog:
Castiel, объясни что ты пытаешься сделать этим таймером. Запустить то таймер изнутри таймера можно, но не факт что это действительно решает твою задачу.
могу просто скинуть код но его много) Суть: запускаем функцию №1 она выбирает случайный таймер из 5 и запускает его, в свою очередь каждый таймер вызывает себя по несколько раз(имено важно вызвать самого себя), а когда будет вызван последний раз, запускает таймер который использует функцию №1. Что то типа этого:
function BLABLA()

	local T_1=CreateTimer()
	local T_2=CreateTimer()
	local count
	
	FUNC_2=function()
			count=count+1
			if count=10 then
				TimerStart(T_1,math.random(10,20),false,FUNC_1)
			else
				TimerStart(T_2,math.random(10,20),false,FUNC_2)
			end
	end

	FUNC_1=function()
		count=0
		TimerStart(T_2,math.random(10,20),true,FUNC_2)
	end
	TimerStart(T_1,math.random(10,20),false,FUNC_1)
end
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / запустить таймер из таймера

NazarPunk:
Зачем такие сложности то?
do
	local i, a, b = 0, math.random(5, 10), math.random(5, 10)
	
	TimerStart(CreateTimer(), 1, true, function()
		i = i + 1
		if i == a then
			print('a')
		elseif i == a + b then
			print('b')
			PauseTimer(GetExpiredTimer())
			DestroyTimer(GetExpiredTimer())
		end
	end)
end
Эммм....обьяснить сможешь ? Мне нужно чтоб один и тот же таймер с одной и той же функцией всегда имел разное время) Мне не нужно удалять таймер, потому что есть другие функции, которые запускают этот же таймер ...
И еще хотелось бы узнать есть ли разница между вот TimerStart(t,1,true,и вот эта вот функция допустим до 60 сек.) или TimerStart(t,60,false,function())
2
8
5 лет назад
Отредактирован Castiel
2

» WarCraft 3 / О критических ударах и уклонениях...

Fly123:
Steal nerves, подобную систему никто не сайте не делал ранее? Может есть что-то похожее?
На 1.31 через EVENT_PLAYER_UNIT_DAMAGING спокойно можно запилить самому подходящую систему. Без выдачи способностей...Разница между EVENT_PLAYER_UNIT_DAMAGING от EVENT_PLAYER_UNIT_DAMAGED в том, что EVENT_PLAYER_UNIT_DAMAGING ловит именно нанесенный урон до снижения из разных источников, будь то броня или сопротивление магии или щит наги или каменная броня и тип брони и прочее-прочее...
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / как у спецэффекта проиграть анимацию типа Slam? (1.31)

prog:
BlzSpecialEffectAddSubAnimation(e,SUBANIM_TYPE_SLAM)
BlzPlaySpecialEffect(e,ANIM_TYPE_ATTACK)
Субанимации, они же анимационные таги, работают на эффектах аналогично тому как они работают на юнитах. Но если юниту часто достаточно выдать таг, то эффекту надо сперва выдать таг, а потом проиграть нужную анимацию.
Спасибо, что помог старичку!
2
8
5 лет назад
Отредактирован Castiel
2

» WarCraft 3 / BlzGetUnitBaseDamage, BlzGetUnitDiceNumber, BlzGetUnitDiceSides

Дружище я уже это видел и оно все равно от предметов не действует ))) только от дополнительной характеристики. Вот беру я рукавицы огра + 3 силы и оно работает как только беру когти +15 атаки и оно не добавляет!
0
8
5 лет назад
0

» WarCraft 3 / Увеличенный урон по определенному типу юнитов через способоность

prog:
На 1.31 есть новая пассивка у рыцарей, которая делает именно это.
Да кстати, а есть еще EVENT_PLAYER_UNIT_DAMAGING - она отлавливает урон до брони и прочего, что как то влияет на снижение урона, будь то щит наги, броня, магическое ссопротивление и тд. То есть можно раскрывает весь потенциал использования урона...
2
8
5 лет назад
2

» WarCraft 3 / war3tft editor ?уровень угрозы для ИИ войск игрока

А есть еще приоритет..Вроде бы уже обсуждалось о приоритетах....
Загруженные файлы
0
8
5 лет назад
0

» WarCraft 3 / wc3 1.31 и lua

PT153:
Castiel, как я уже сказал, можно даже ничего не передавать, а использовать GetTriggerUnit и прочее в самом фильтре. Можно передавать глобалками (или через таблицы Lua), тоже будет верно.
Циклом будет быстрее, удобнее и порой надёжнее, если операции внутри цикла короткие. Лично я фильтр использую там, где операции долгие, так как фильтр создаёт поток на каждого юнита.
Спасибо бро!
0
8
5 лет назад
0

» WarCraft 3 / wc3 1.31 и lua

кложуром
Я так понял единственный по ходу способ это через цикл...Что же лучше и быстрее перебирать через фильтр или через цикл ?
Просто мне очень понравилось, что GroupEnumUnitsInRange(group,500,500,500,Condition(function() ) может использовать все локалки триггера, это очень круто и удобно, другими способами заносить лишь в глобалки игроков и другие нужные данные, которые будут использоваться на группе...
prog:
Castiel, выбор стоит или глобалки или утечки. Если грамотно все сделать - проблем с передачей данных через глобалки не будет, пример выше в комментариях... И, кстати, варовские хештаблицы не нужны в Lua.
По подробней про ненадобность хеш таблицы ? Можно глобалку сделать GLOBAL[GetHanldeId(T)] ? А если там номер ключ 5782857? ничего страшного ?
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / wc3 1.31 и lua

PT153:
фильтры не текут
В Lua текут, в JASS нет, выясняли уже.
И лучше заносить фильтры в глобалки, тогда они доступны везде, даже до место определения фильтра. А вместо Condition советую использовать Filter, букв меньше.
Все конечно хорошо, но если Filter(function()) будет занесена глобалку,вне триггера, то использовать локалки триггера в фильтре уже не возможно и нужно нужное заносить в глобалки. А если допустим таймер каждые 0.05 сек вызывает группу, то если все локалки будут заменены глобалками и использованы в глобальном фильтре, не будет ли фарша, когда глобалка перебивается другим игроком вызвавшим таймер, вот к примеру
P=nil

F=Filter(function())
	local f=GetFilterUnit()
	if IsUnitAlly(f,P) then
		какой то код
	end
end)

function TRG()
	local ab=GetSpellAbilityId()
	local u=GetTriggerUnit()

	if ab==A000 then
		local t=CreateTimer()
		SavePlayerHandle(hash,GetHandleId(t),0,GetOwningPlayer(u))
		TimerStart(,0.05,true,function()
			local t=GetExpiredTimer()
			local p=LoadPH(hash,GetHandleId(t),0)
			local g=CreateGroup()
			P=p
			GroupEnumUnitsInRange(group,500,500,500,F)
			DestroyGroup(g)
			if какое то условие then
				DestroyTimer(t)
				Flush....
			end
	end)
	
end
0
8
5 лет назад
0

» WarCraft 3 / Сортировка на Lua

prog:
Castiel, да, типа того.
А если немного доработать - можно и второе сверху значение найти в том-же цикле, если оно еще нужно.
спс бро как тебе плюсик поставить )
2
8
5 лет назад
2

» WarCraft 3 / Сортировка на Lua

prog:
Castiel, окей. И что мешает это сделать? Для этого нужна одна переменная (можно две - одну для ключа и одну для значения), один цикл, один if внутри цикла и пара присвоений переменной. Для нумерованного массива цикл по индексу, для ассоциативного - по ключам через pairs.
Так я уже сделал, написал просто что изначально затупил и не првильно подешел к этому )))
local key_count=0
local j=COUNT[0]
for i=1,6 do
if j<COUNT[i]then
j=COUNT[i]
key_count=i
end
end

так или чет не то ?
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / Сортировка на Lua

prog:
Замена строковых ключей числовыми мало чем поможет - теперь это просто нумерованный массив целых чисел, который можно отсортировать, но результат сортировки будет немного другим и явно не тем который нужен.
table[0]=10
table[1]=5
table[2]=4
table[3]=3
table[4]=1
Впрочем, для получения двух верхних элементов массива тоже не нужна полная сортировка массива, хватит все того-же одного прохода по массиву, но если для получения верхнего элемента нужна минимум одна переменная, то для получения двух верхних нужно минимум две переменных.
Мне нужно узнать просто ключ самого высого числа! А потом по этому ключу проверить через if then end Вот и все ) изначально просто не правильно подошел к этому..
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / Сортировка на Lua

prog:
Castiel, смотря чего добиться в итоге надо - все можно, от конкретной задачи зависит, а я не экстрасенс чтобы угадать. Но поиск максимального значения в массиве обычно и так использует переменную объявленную до цикла чтобы хранить это значение, или индекс этого значения или ключ или несколько переменных.
короче я просто затупил, я ключи пронумеровал и отсортировал, суть в том, что мне нужно было узнать именно ключ самого большого числа! и потом еще раз сравнить со вторым по счету после сортировки! то есть
table[0]=3
table[1]=10
table[2]=5
table[3]=4
table[4]=1
итог:
table[1]=10
table[2]=5
table[3]=4
table[0]=3
table[4]=1
вот примерно так должно быть и узнать именно ключ самого высокго числа в этом случае table[1]
Просто я х3 может на луа есть какие то фичи этого)
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / Сортировка на Lua

prog:
Castiel, перебор ассоциативного массива через pairs выглядит так
 for key,value in pairs(t) do
В переменную key по очереди будет записан каждый ключ из таблицы t а в value - каждое значение.
А поиск самого большого значения в массиве... Гугл в помощь, это простейшая задача, одинаковая почти в любом языке.
А потом их сравнить можно будет по ключу типа if "Petia" then elseif "Vasia" then end ? или самое большое занести в отдельную локалку и потом сравнить ??
0
8
5 лет назад
Отредактирован Castiel
0

» WarCraft 3 / Сортировка на Lua

prog:
У вас строки используются в качестве ключей в таблице. Такое сортировке не подлежит потому как ассоциативные массивы не гарантируют порядок элементов.
Их можно перебрать через цикл по pairs. Для поиска самого большого значения этого хватит, сортировка не нужна для этого.
Если нужна именно сортировка - нужна таблица представляющая собой обычный нумерованный массив, в ячейках которого будут лежать таблицы с именами и другими значениями - такую конструкцию можно сортировать потому как обычный массив знает порядок элементов.
Бро как тогда найти самое высокое значение )))? именно через pairs! и как именно вывести самый высокий! чет пробую никак не выходит!