14

» WarCraft 3 / зачем в Substring start -1 (minus) ?

вот ещё тест версии варика в одной из карт:
if SubString("|",-1,0)!="o" then
call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,10.,"※ 워크래프트3 1.28기준으로 만든 맵이기 때문에, 다른 버전으로 이용하면 약간의 버그가 있을 수 있습니다.")
call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,10.,"※ 리포지드로 플레이할 경우 클래식 그래픽으로 설정하셔야 원할한 플레이가 가능합니다.")
endif

if SubString("|",-1,0)!="o" then
call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,10.,"※ Since this map was created based on Warcraft 3 1.28, there may be some bugs if used with a different version.")
call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,10.,"※ When playing with Reforged, you must set it to classic graphics to play smoothly.")
endif
14

» XGM Team / Обновление 2024 - Stage 15

Выкинули дизайн из 2000 года
ухты как круто получилось
flat-дизайн это так красиво!
а вы не делаете дизайн сайтов на заказ? клиентам бы понравилось такое портфолио
Загруженные файлы
14

» WarCraft 3 / Warcraft III - MultiWindow

  • Добавлен -mouseclip
родной F7 цепляется без учёта смещения 30 по Y и 8 по X
WMC цеплялся нормально (см сравнение ниже)
то есть вместо края экрана будет ресайз окна, если кликнуть. что полностью исключает возможность использования захвата мыши
Загруженные файлы
14

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

Vlod: lua не конвертируется в jass, это отдельный язык со своей luaVM который интегрируется в игру
а дай карту для 1.26, которая написана на луа и без жаса через супа пупа крутые dll интегрируется в игру
14

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

Vlod: на lua нет такого лимита
каким же образом?
это религия альтернативно-кодеров?
каким образом можно писать что lua hrua cjass vjass ...{вставить ещё сотню языков} могут больше чем оригинал?
если они в конце компиляции тупо конвертят свой личный код в обычный жас
фактически это не больше чем обёртка от конфеты, только конфета остаётся всё той же
14

» WarCraft 3 / String split, shuffle

	call Split("some text, можно на русском, можно и так и сяк, можно что-то такое даже")
    loop
        exitwhen(i >= 500)
какая же классика
что за мода у этих кодописарей задавать границы чисел на свой рандомный лад?
что тут 500 кусков вместо 8192, доступных в жасе
что в 99,9999% камерахаков вечно от 1650 до 3300 вместо 0-10000
я уж молчу, что такой код сплита благополучно загнётся на первом же оплимите, это база
ещё интереснее, что автору пришлось самому пилить сплит в 2к21, ведь до него никто этого для джаса не делал? иначе зачем
14

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

quq_CCCP: потому что вы что то не то делайте, сами себе создаёте проблему
ах да, это я такой криворукий, а не оплимит в варике
только вот сегодня утром опять наткнулся, уже в 3й раз в карте, на проблему оплимита в цикле, когда цикл тупо не доходит до конца и молча прерывается посередине
первый раз было с координатами юнитов - ладно, создал триггер вместо цикла - проблема решилась
вчера он аналогично не захотел обработать 50 строк длиннее 1000 символов - ну ладно, на тебе второй триггер
но нет же, сегодня во втором триггере заглох при обработке одной строки на 1400 символов (во время вызова доп функции) - пришлось делать триггер в триггере
итого 3 раза цикл из-за оплимита оборвался и не доработал, пока его на триггер не посадили
сидишь только и борешься с оплимитом в циклах сутками (а по пути на втором языке с нормальным отладчиком всё дублируешь),
действительно, никогда не было и вот опять
вместо работы над самой картой - для банальных вещей писать костыли к жасу, подпинывая эту калеку, чтобы он хоть как-то ходил
14

» WarCraft 3 / какие нативки не умеют работать с длинными string 1000-4000 ?

nazarpunk: StringLength возвращает количество символов или байтов?
call BJDebugMsg("privet - "+I2S(StringLength("privet")))
call BJDebugMsg("привет - "+I2S(StringLength("привет")))
call BJDebugMsg("priвет - "+I2S(StringLength("priвет")))
call BJDebugMsg("你好 - "+I2S(StringLength("你好")))
call BJDebugMsg("こんにちは - "+I2S(StringLength("こんにちは")))
call BJDebugMsg("안녕하세요 - "+I2S(StringLength("안녕하세요")))
call BJDebugMsg("☁❤♫✉ - "+I2S(StringLength("☁❤♫✉")))
возвращает количество символов/байтов после перевода из юникода в системный ANSI (тоже самое и с обрезкой)
я про это выше и писал при использовании мультиязыков в одном стринге (знаки препинания - то это англ)
иероглифы и смайлы кста по 3 а не по 4 занимают, англ 1, ру 2

вот например код из карты, когда картоделу приходится проверять локаль из чата и резать разным количеством, чтобы выполнить одну и ту же команду:
во второй -чатстроке сиди считай 1+3+3+3=10 при написании кода
	if SubString(s,0,6)=="-count" then
		call Command__CountMain(s,true)
	elseif SubString(s,0,10)=="-카운트" then
		call Command__CountMain(s,false)

function Command__CountMain takes string s,boolean Eng returns nothing
		if Eng==false then
			set time=S2I(SubString(s,11,13))
		else
			set time=S2I(SubString(s,7,9))
		endif
Загруженные файлы
14

» WarCraft 3 / какие нативки не умеют работать с длинными string 1000-4000 ?

IceFog: Запись строки в переменную не повлияла на работоспособность.
а ну да, я криво написал сверху
такое сработает:
	set slice = SubString(s, StringLength(s) - 20, StringLength(s)-1)
	call BJDebugMsg("«" + slice + "»")
а такое нет:
	set slice = SubString(s, 0, StringLength(s)-1)
	call BJDebugMsg("«" + slice + "»")
14

» WarCraft 3 / какие нативки не умеют работать с длинными string 1000-4000 ?

IceFog: Я не заметил проблем
если заменить
call BJDebugMsg
на
set s=SubString(s, StringLength(s) - 20, StringLength(s))
call BJDebugMsg(s)
то проблему можно увидеть
только вот вопрос - можно либо притворяться, что такой проблемы нет, либо открыто писать что она есть, но есть обходные пути

что, если у тебя УЖЕ есть готовая строка s - длиной 3500
и тебе нужно у неё обрезать последний символ?
при этом сохранив её в переменной, а не на экране в пропечатываемых 100 символах
как быть?
делить на 4 части по 1000, потом из последней отрезать , а потом опять сплюсовать s=s1+s2+s3+s4?
как это прекрасно, люблю жасы
особым бонусом будет смешанная строка из латиницы 1/1 + кириллицы 1/2 + иероглифов 1/4 - и сиди гадай, как бы тебе посередине иероглифа не разрезать во время попила на тысячные куски
хотя я уже днём это всё решил, это я так, бормочу после рутинного написания базовых функций, которые есть в нормальных языках
Загруженные файлы
14

» WarCraft 3 / какие нативки не умеют работать с длинными string 1000-4000 ?

ответ конечно же будет таким:
set s=SubString(s,0,>1000) - не работает
при этом забавно, что крит во время исполнения SubString не выдаётся, как это будет при загрузке карты с кодом set s="1100 знаков"
т.е. и не крит и не нормальная работа
в итоге - обязательно во все карты теперь надо вводить функцию разбивки длинных 4000 строк на 4 по 1000, чтобы без ошибок нормально можно было работать с ними
а при использовании юникодных кодировок (не англ язык) - вообще по 500 символов получится (по 1000 длине строки, но по 500 буков)
т.е. фактически макс длина строки даже не 1000/4000, а 500/2000
14

» WarCraft 3 / Спецэффекты в точке

Qulore: и перезапустил ноут
при пропадании эффектов это база
на вин 10 есть ещё это Win + Ctrl + Shift + B
14

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

quq_CCCP: ни одной задачи, где бы были такие циклы
а я вот встретился с оплимитом в первой же карте, с которой работал - поэтому вообще без понятия - как за 20 лет вара челик 14го левела на хигаме - его ни разу не видел
и без подобных методов обхода оплимита - карта бы не работала как должна
классическое нинужна?
14

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

quq_CCCP: Мне вот интересно, а зачем?
классический вопрос от @ quq_CCCP
что, в картах не бывает циклов которые обрываются из-за оплимита?
бывают или нет?
если не бывает - то мы вам перезвоним
если бывает - то где статья с кодом и со всеми различными способами обхода оплимита ?
14

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

на хайве www.hiveworkshop.com/threads/executefunc.211792
и на xgm xgm.guru/forum/showthread.php?t=30152
пишут, что ExecuteFunc открывает новый поток
на практике же она не смогла даже пропечатать выше 20 000, вот вам и "отдельный поток". который не сравнится ни с таймером ни с триггером
Loop17 - через ExecuteFunc 18000/400000
function Loop17 takes nothing returns nothing
	local integer TOTAL = 400000
	set i1 = 0
	loop
		set i1 = i1 + 1
		call ExecuteFunc("Loop17_Actions")
		exitwhen i1 == TOTAL
	endloop
	call BJDebugMsg("----")
	call BJDebugMsg(I2S(i1))
endfunction
function Loop17_Actions takes nothing returns nothing
	call BJDebugMsg(I2S(i1))
endfunction
Загруженные файлы
14

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

уменьшенные коды, не такие громоздкие как Loop12 Loop13: (хотя чёт по колву строк такие же и получились)
Loop15 - через пошаговый локальный триггер - 400000 / 400000
globals
	hashtable ht = InitHashtable()
	integer TimerStop=1
endglobals

function Loop15_Actions takes nothing returns nothing
	local trigger localTrigger = CreateTrigger()
	local trigger oldTrigger = LoadTriggerHandle(ht, 0, StringHash("loop15"))
	call DisableTrigger(oldTrigger)
	call DestroyTrigger(oldTrigger)
	//call DestroyTrigger(GetTriggeringTrigger())
	call SaveTriggerHandle(ht, 0, StringHash("loop15"),localTrigger)
	set i1 = i1+1
	call BJDebugMsg(I2S(i1))
	if TimerStop==0 and i1<400000 then
		call TriggerRegisterTimerEvent(localTrigger, 0.001, false)
		call TriggerAddAction(localTrigger, function Loop15_Actions)
	else
		set TimerStop=1
		call DisableTrigger(oldTrigger)
		call DestroyTrigger(oldTrigger)
		call DisableTrigger(localTrigger)
		call DestroyTrigger(localTrigger)
		call BJDebugMsg("Timer Stop")
	endif
	set localTrigger = null
	set oldTrigger = null
endfunction

function Loop15 takes nothing returns nothing
	if TimerStop==0 then
		set TimerStop=1
	else
		set TimerStop=0
		call BJDebugMsg("Trigger Go")
		set i1=0
		call Loop15_Actions()
	endif
endfunction
Loop16 - через пошаговый локальный таймер - 400000 / 400000
globals
	hashtable ht = InitHashtable()
	integer TimerStop=1
endglobals

function Loop16_Actions takes nothing returns nothing
	local timer localTimer = CreateTimer()
	local timer oldTimer = LoadTimerHandle(ht, 0, StringHash("loop16"))
	call PauseTimer(oldTimer)
	call DestroyTimer(oldTimer)
	//call DestroyTimer(GetExpiredTimer())
	call SaveTimerHandle(ht, 0, StringHash("loop16"),localTimer)
	set i1 = i1+1
	call BJDebugMsg(I2S(i1))
	if TimerStop==0 and i1<400000 then
		call TimerStart(localTimer, 0.001, false, function Loop16_Actions)
	else
		set TimerStop=1
		call PauseTimer(oldTimer)
		call DestroyTimer(oldTimer)
		call PauseTimer(localTimer)
		call DestroyTimer(localTimer)
		call BJDebugMsg("Timer Stop")
	endif
	set localTimer = null
	set oldTimer = null
endfunction

function Loop16 takes nothing returns nothing
	if TimerStop==0 then
		set TimerStop=1
	else
		set TimerStop=0
		call BJDebugMsg("Timer Go")
		set i1=0
		call Loop16_Actions()
	endif
endfunction
Загруженные файлы
14

» WarCraft 3 / как загрузить строку из txt файла в переменную? load система

nazarpunk: Codeless Save and Load
вчера раз 10 пытался запустить и проверить работоспособность
Codeless Save Load v3.0.1 - карта не запускается на 1.26, не запускается на 1.28.5
Codeless Save Load v1.3.9 - на 1.26 не работают кнопки "Save Character" "Load Character" (при их нажатии ничего не происходит, ни загрузки ни текстовой лог надписи) , не работает -load <slot> , работает только -save <код> и -load <код> , но кодовая загрузка через чат это не по теме вопроса
Codeless Save Load v1.3.9 - на 1.28.5 заработали "Save Character" "Load Character", -load <slot> не работает, но вопрос был в основном про безкодовый -load 1.26, остальные версии так, до кучи в виде инфы
локал файлы конечно включены
и C:\!! AllowLocalFiles\AllowLocalFiles.bat.txt я тоже запускал
т.е. видимо вся эта система на 1.26 не работает
зато система из беглецов работает на 1.26 и даже в мультиплеере, что намного приоритетнее по разбору
в рефоргеде - вон вообще в тултип загружаются, там и разбирать особо нечего, т.к. оно работает
в 1.28.5 используют %USERPROFILE%\Documents\Warcraft III\CustomMapData
а вот найти систему для 1.26 - вот это задача
хотя Codeless Save Load v1.3.9 в 1.28.5 загружает код через string имя персонажа - такое должно работать и для 1.26, попробую
это должно быть проще чем работа с integer из примера выше про SetPlayerTechMaxAllowed
function PreloadFiles takes nothing returns nothing

	call Preload( "")
	call SetPlayerName(Player(0), " 0073Повелитель Зверей (Тагар Волк)|nFon8AfB0LaZUgCym")
//" )
	call Preload( "" )
endfunction
function AAA takes nothing returns nothing 
//" )
	call PreloadEnd( 0.0 )

endfunction
Загруженные файлы
14

» WarCraft 3 / как загрузить строку из txt файла в переменную? load система

Borodach: Событие, написания текста -load, виполняет код Preload()
Preload() это -save в текстовик а вопрос про загрузку из текстовика
set s = (file.txt).contents
в 1.26 беглецах кста есть автозагрузка вот таким костыльным способом:
Открыть
function PreloadFiles takes nothing returns nothing

	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),1,7)
call SetPlayerTechMaxAllowed(Player(14),1,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),2,536871112)
call SetPlayerTechMaxAllowed(Player(14),2,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),3,536870922)
call SetPlayerTechMaxAllowed(Player(14),3,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),4,536870922)
call SetPlayerTechMaxAllowed(Player(14),4,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),5,536870922)
call SetPlayerTechMaxAllowed(Player(14),5,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),6,536870912)
call SetPlayerTechMaxAllowed(Player(14),6,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),7,536870912)
call SetPlayerTechMaxAllowed(Player(14),7,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),8,536870912)
call SetPlayerTechMaxAllowed(Player(14),8,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),9,536870912)
call SetPlayerTechMaxAllowed(Player(14),9,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),10,536870912)
call SetPlayerTechMaxAllowed(Player(14),10,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),11,536870912)
call SetPlayerTechMaxAllowed(Player(14),11,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),12,536870912)
call SetPlayerTechMaxAllowed(Player(14),12,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),13,536870912)
call SetPlayerTechMaxAllowed(Player(14),13,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),14,1747989043)
call SetPlayerTechMaxAllowed(Player(14),14,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),15,536870912)
call SetPlayerTechMaxAllowed(Player(14),15,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),16,536870912)
call SetPlayerTechMaxAllowed(Player(14),16,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),17,536870912)
call SetPlayerTechMaxAllowed(Player(14),17,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),18,536870912)
call SetPlayerTechMaxAllowed(Player(14),18,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),19,536870912)
call SetPlayerTechMaxAllowed(Player(14),19,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),20,536870912)
call SetPlayerTechMaxAllowed(Player(14),20,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),21,536870913)
call SetPlayerTechMaxAllowed(Player(14),21,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),22,536870912)
call SetPlayerTechMaxAllowed(Player(14),22,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),23,536870912)
call SetPlayerTechMaxAllowed(Player(14),23,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),24,536870912)
call SetPlayerTechMaxAllowed(Player(14),24,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),25,536870912)
call SetPlayerTechMaxAllowed(Player(14),25,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),26,536870912)
call SetPlayerTechMaxAllowed(Player(14),26,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),27,536870912)
call SetPlayerTechMaxAllowed(Player(14),27,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),28,536870912)
call SetPlayerTechMaxAllowed(Player(14),28,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),29,536870912)
call SetPlayerTechMaxAllowed(Player(14),29,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),30,536870912)
call SetPlayerTechMaxAllowed(Player(14),30,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),31,536870912)
call SetPlayerTechMaxAllowed(Player(14),31,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),32,536870912)
call SetPlayerTechMaxAllowed(Player(14),32,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),33,536870912)
call SetPlayerTechMaxAllowed(Player(14),33,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),34,536870912)
call SetPlayerTechMaxAllowed(Player(14),34,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),35,536870912)
call SetPlayerTechMaxAllowed(Player(14),35,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),36,536870912)
call SetPlayerTechMaxAllowed(Player(14),36,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),37,536870912)
call SetPlayerTechMaxAllowed(Player(14),37,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),38,536870912)
call SetPlayerTechMaxAllowed(Player(14),38,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),39,536870912)
call SetPlayerTechMaxAllowed(Player(14),39,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),40,536870912)
call SetPlayerTechMaxAllowed(Player(14),40,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),41,536870912)
call SetPlayerTechMaxAllowed(Player(14),41,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),42,536870912)
call SetPlayerTechMaxAllowed(Player(14),42,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),43,536870912)
call SetPlayerTechMaxAllowed(Player(14),43,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),44,536870912)
call SetPlayerTechMaxAllowed(Player(14),44,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),45,536870912)
call SetPlayerTechMaxAllowed(Player(14),45,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),46,536870912)
call SetPlayerTechMaxAllowed(Player(14),46,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),47,536870912)
call SetPlayerTechMaxAllowed(Player(14),47,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),48,536870912)
call SetPlayerTechMaxAllowed(Player(14),48,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),49,536870912)
call SetPlayerTechMaxAllowed(Player(14),49,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),50,536870912)
call SetPlayerTechMaxAllowed(Player(14),50,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),51,536870912)
call SetPlayerTechMaxAllowed(Player(14),51,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),52,1747989291)
call SetPlayerTechMaxAllowed(Player(14),52,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),53,340408704)
call SetPlayerTechMaxAllowed(Player(14),53,2)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),54,236648666)
call SetPlayerTechMaxAllowed(Player(14),54,2)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),55,1280082494)
call SetPlayerTechMaxAllowed(Player(14),55,2)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),56,536870924)
call SetPlayerTechMaxAllowed(Player(14),56,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),57,1012600931)
call SetPlayerTechMaxAllowed(Player(14),57,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),58,536870912)
call SetPlayerTechMaxAllowed(Player(14),58,1)
  //" )
	call Preload( "" )
call SetPlayerTechMaxAllowed(Player(15),59,536870922)
call SetPlayerTechMaxAllowed(Player(14),59,1)
  //" )
	call Preload( "" )
endfunction
function recyclebin takes nothing returns nothing
//" )
	call PreloadEnd( 0.0 )

endfunction


(сохранение появляется на базе после прохождения 1го уровня)
пока систему подробно не разбирал эту через исследования
Загруженные файлы
14

» WarCraft 3 / как сделать стандартного юнита зданием? [WE GUI]

Берги: нельзя такое сделать
но у меня есть карта для обычного 1.26 WE, где такое уже сделано
слева стандарт, справа та карта
или это надо где-то в хексе вручную править файл w3u ?
Загруженные файлы
14

» WarCraft 3 / как сделать стандартного юнита зданием? [WE GUI]

Берги: надо ему назначить карту путей
но у него нету поля такого
сверху фут, снизу ферма
Загруженные файлы
14

» WarCraft 3 / Как сделать чтобы после постройки здания менялся ланшафт?

native SetTerrainType               takes real x, real y, integer terrainType, integer variation, integer area, integer shape returns nothing
14

» WarCraft 3 / как занулить возвращаемую локальную переменную юнита в функции ?

Волчачка: коли обмазаться так хочется:
причём тут хочется или нет?
а что, краши и тормоза по нехватке памяти - лучше?
такое зануление должно быть базой