11

» WarCraft 3 / Генератор ландшафта-шума

Koladik, чем-то на Noise похож
Спасибо! Посмотрю детально эту реализацию. Я решил не называть свой алгоритм шумом Перлина, как тут, ибо всё-таки генерация отличается от классики. Но, скорее всего, тут больше сходств чем отличий по части генерации текстур с этим алгоритмом. Жаль тут разработчик не дал детального описания нюансов.
11

» WarCraft 3 / Превращение в другого юнита

Принятый ответ
anton1623, на самом деле, насколько мне известно, это просто единственный способ не через способности менять модель юнита. Но можно развить то что выше предложили, при использовании способности создавать транспорт и триггерно запихивать героя туда, а при выходе из него удалять этот транспорт.
11

» WarCraft 3 / Генератор ландшафта-шума

Неплохо бы посмотреть на скрины результата генерации.
Добавил картинки, хорошее замечание.
11

» WarCraft 3 / Превращение в другого юнита

anton1623, слышал один костыльный способ есть менять скин юнита, но сам никогда не пробывал, поэтому не знаю работает ли, создавать базово юнита без модели, и под ноги аттачить разные скины и менять аттачмет в зависимости от модели.
11

» WarCraft 3 / Превращение в другого юнита

Делай через метаморфозу охотника на демонов, если не ошибаюсь, по истечении срока возвращается к исходной автоматом.
Изменено: нет, там тоже есть исходная.
11

» WarCraft 3 / Багнулся worldeditor

Принятый ответ
Короче, я нажал переключение цветового режима отображенния войск и у меян все союзники -синие, враги - красные... А нерабочий триггер из-за очепятки, не реагировал и я подумал, что это багнулся номер игрока. facepalm
Бывает иногда и такое, тупить это нормально :)
11

» WarCraft 3 / Багнулся worldeditor

ttoni, Если ты его убрал , то появится он не может, покажи свои свойства сценария. Убраны ли у тебя стандартные триггеры?
11

» WarCraft 3 / Багнулся worldeditor

Фиксацию исходных позиций поставить попробуй. Может в твоем случае именно это поможет.
Загруженные файлы
11

» WarCraft 3 / Вапиризм от способностей или как словить урон по юнитам?

Я думал эта нативная возможность одна из новых преимуществ 1.31 в гуи ее пока нету
call TriggerRegisterPlayerUnitEventSimple( Trg, Player(0), EVENT_PLAYER_UNIT_DAMAGED )
11

» WarCraft 3 / Как сделать анимированный фрейм за пределами 0.8x0.6?

Nelloy:
Koladik, за пределами холста 0.8х0.6 могут быть только SIMPLEFRAME, SIMPLEBUTTON, SIMPLESTATUSBAR и SIMPLECHECKBOX(нерабочий).
Мне кажется, на картинке хороший пример того, что это не совсем так, или это каким-то образом анимированный простой фрейм
GetLocalPlayer:
Для анимации используется спрайт, хороший пример тут
В моем предыдущем комменте тот же самый пример.
GetLocalPlayer:
адекватно не выйдет
Да хоть бы просто понять как это вообще возможно, эта штука же в каком-то файле прописана.
11

» WarCraft 3 / Как сделать анимированный фрейм за пределами 0.8x0.6?

pro100master:
Nelloy, боже какой плохой совет! Это плитки в fdf пишеш размер и он сам будет поочередно менять чем твои таймеры

И к тому же это не картинка а модель который там и проигривает внутри текстуры
И так понятно, что в fdf прописывать надо, найти хотя бы стандартный, который я б наследовать мог.
По поиску даже не ясно, что искать SPRITE, MODEL или HILIGHT. Причем это что-то особое потому, что если взять например эту наработку-SPRITE, ее нельзя за границы пихнуть.
11

» WarCraft 3 / [Lua] Поворачиваем башню танка за курсором

Осталось дождаться, когда дадут возможность проигрывать анимацию отдельных частей модельки независимо и можно будет делать выстрел или атаку в движении. Ото пока это тоже костылеписание с разделением модели на две части (хотя я и такой наработки не встречал)
11

» WarCraft 3 / "Лучший" Jass обработчик

Для jass такие решения уже есть, cjass добавляет лишь сахар, который легко изымается при необходимости
То что нужно, спасибо! Только немного переписать на vjass и дать сюда ссылку в случае чего.
NazarPunk:
нормальный ЯП, в котором можно комфортно работать
Лично мне пока недостаточно комфортно, но да, на луа, конечно, перспективнее писать.
11

» WarCraft 3 / "Лучший" Jass обработчик

больше 256 таблиц.
Это, конечно, весомая причина, спору нет. Но я не уверен, что это серьезная преграда т.к. многие таблицы можно было бы объединить но да, тут начинаются костыли
11

» WarCraft 3 / "Лучший" Jass обработчик

а зачем?
Обоснованного на реальных цифрах, а не вере выбора реализации не достаточно?
11

» WarCraft 3 / "Лучший" Jass обработчик

и так можно сказать что таблицы гораздо быстрее хештаблиц
Сказать то и теоретически обосновать можно, но реальных подсчетов никто не провести не может. Но смысл моего сообщения не в дурацком холиваре, а в том, что решать, что быстрее очень сложно и можно только эмпирически.
11

» WarCraft 3 / "Лучший" Jass обработчик

быстрее if-then-else на жассе ничего не придумаешь
Был бы доступ к видоувскому таймеру можно было бы проверить несколько различных подобных реализаций, а так получается, что даже проверить точно, насколько доступ к lua таблицам быстрее чем к хэш-таблицам на жазе невозможно.
11

» WarCraft 3 / "Лучший" Jass обработчик

объяснили
Я не уверен, что конкретика тут существенна, но в моем случае по ряду входных параметров собирает путь к различным .blp файлам, одним из параметров является тип blp по int, их может быть множество, остальные вспомогательные. Соответственно меняя тип, который я ищу, существенно меняется метод сборки string, использующий вспомогательные параметры.

N1ghtSiren:
Зачем нам увеличивать кол-во ифов если мы можем разнести это всё по разным функциям
И if/then/elseif/else/endif работает по принципу - наткнулся на первый false, дропнул ветку и пошёл проверять другие elseif.
Я понимаю, но если у вас каждый if по очереди проверяет номера 1,2,3,4, а у вас на входе 100 то ему придется провести 100 проверок. Если на входе 2 то, конечно, будет очень быстро.
11

» WarCraft 3 / "Лучший" Jass обработчик

блоке if будет в разы дешевле
Если блоков мало то да, но если вырастить их до 100 то не факт, а тут фиксированное время применения.

невозможно делать руками?
Например, нужен цикл различных обработчиков с вызовом по индексу
11

» WarCraft 3 / "Лучший" Jass обработчик

Hate:
а в чем общий смысол этого?
Получить обработчик с выбором метода обработки по индексу, чтобы не городить дерево if-elseif-elseif-end, а напрямую вызывать нужную функцию.

первом ответе
Пример, который я прикрепил, решен именно с помощью решения описанного в посте. Вот мне и интересно, насколько это адекватное решение.
Я боюсь, что создав массив trigger я начну использовать слишком много памяти или еще что хуже, а решение в целом будет медленнее чем дерево if-elseif-elseif-end
11

» WarCraft 3 / [lua] Создание файлов из под вар3 ?

Hate:
в варкрафт луа нет require
и что связано с io тоже выпилено насколько я знаю
Печально, по всей видимости wc3 научная мысль дальше этой библиотеки основанной на предзагрузке не продвинулась :(
11

» WarCraft 3 / MTG Icon Borders

Супер!
Был бы это еще вектор-исходник, цены б не было просто, чтобы можно было качество увеличивать, масштаб, разрешение
11

» WarCraft 3 / В 1.31 не работает классическая синхронизация?

Принятый ответ
в другую систему счисления
Так понимаю, что на jass так должно быть лучше, хотя я большой разницы не заметил =(
library LibSENDSTR
code
library LibSENDSTR initializer Init_LibSENDSTR


globals
	private string BOOK = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
	private integer BOOK_cout
endglobals


private function Char2Int takes string char returns integer
	local integer i = 0
	loop
		exitwhen(char == SubString(BOOK,i,i+1))
		set i = i + 1
	endloop
	return i
endfunction


function SEND_STR2Unsigint takes string SEND_STR returns integer
	local integer INT = 0
	local integer g = 1
	local integer Length = StringLength(SEND_STR)
	//
	loop
		set INT = INT + Char2Int(SubString(SEND_STR,Length-1,Length))*g
		set g = g*BOOK_cout
		set Length = Length - 1
		exitwhen(Length == 0)
	endloop
	return INT
endfunction


function Unsigint2SEND_STR takes integer INT returns string
	local integer quot
	local integer residue
	local string SEND_STR = ""
	
	loop
		set quot = INT/BOOK_cout
		set residue = INT - quot*BOOK_cout
		set SEND_STR = SubString(BOOK,residue,residue+1) + SEND_STR
		exitwhen(quot == 0)
		set INT = quot
	endloop
	return SEND_STR
endfunction


function Int2SEND_STR takes integer INT returns string
	if(INT < 0)then
		return "-" + Unsigint2SEND_STR(-INT)
	else
		return Unsigint2SEND_STR(INT)
	endif
endfunction


function SEND_STR2Int takes string SEND_STR returns integer
	if(SubString(SEND_STR,0,1) == "-")then
		return -SEND_STR2Unsigint(SubString(SEND_STR,1,StringLength(SEND_STR)))
	else
		return SEND_STR2Unsigint(SEND_STR)
	endif
endfunction


private function Test takes nothing returns nothing
	local integer INT = -3675967
	local string SEND_STR
	local integer OUTINT
	//
	//
	call BJDebugMsg("ORI: " + I2S(INT))
	//
	set SEND_STR = Int2SEND_STR(INT)
	call BJDebugMsg("SEND: " + SEND_STR)
	//
	set OUTINT = SEND_STR2Int(SEND_STR)
	call BJDebugMsg("GET: " + I2S(OUTINT))

endfunction


private function Init_LibSENDSTR  takes nothing returns nothing
	set BOOK_cout = StringLength(BOOK)
	
	//call TimerStart(CreateTimer(), 1, false, function Test)
endfunction

endlibrary
TestLib
code
library TestLib initializer Iinit_TestLib uses LibSENDSTR

function SyncActionTrg takes nothing returns nothing
	local string SyncData = BlzGetTriggerSyncData()
	local real SyncReal = SEND_STR2Int(SyncData)*0.0001
	//
	call BJDebugMsg("GetSTR: " + SyncData)
 	call BJDebugMsg("GetReal: " + R2S(SyncReal))
endfunction

function Test1 takes nothing returns nothing
local real loc_r
local real loc_r1
if(Player(0) == GetLocalPlayer())then
	set loc_r = 5.873
endif

if(Player(1) == GetLocalPlayer())then
	set loc_r = 10.56
endif

call BJDebugMsg("Send: " + R2S(loc_r))
if(Player(0) == GetLocalPlayer())then
	call BlzSendSyncData("mission",Int2SEND_STR(R2I(loc_r*10000)))
endif
endfunction

function Iinit_TestLib takes nothing returns nothing
	local trigger loc_trg = CreateTrigger()
	call BlzTriggerRegisterPlayerSyncEvent(loc_trg,Player(0),"mission",false)
	call BlzTriggerRegisterPlayerSyncEvent(loc_trg,Player(1),"mission",false)
	call TriggerAddAction(loc_trg,function SyncActionTrg)
	//
	call TimerStart(CreateTimer(), 1, false, function Test1)	
endfunction
endlibrary
Загруженные файлы