обновление:
работает только если закинуть mdx + blp всей кучей разом, причём 1й раз моргнёт и не покажет а если второй раз сразу перетащить всю кучу поверх первой то уже загрузится нормально модель
оставил Stand и Stand 3, остальные поменял на токены - при загрузке в WE стали чередоваться только Stand и Stand 3
оставил только Stand, остальные поменял на токены - при загрузке в WE чередование прекратилось
бонусом текст из картинки:
Appendix A - Animation Tokens
Primary Animations
Attack
Birth
Cinematic
Death
Decay
Dissipate
Morph
Portrait
Sleep
Spell
Stand
Walk
Animation Properties
Alternate
Alternateex
Chain
Channel
Complete
Critical
Defend
Drain
Eattree
Fast
Fill
Flail
Flesh
Fifth
Fire
First
Five
Four
Fourth
Gold
Hit
Large
Left
Light
Looping
Lumber
Medium
Moderate
Off
One
Puke
Ready
Right
Second
Severe
Slam
Small
Spiked
Spin
Swim
Talk
Third
Three
Throw
Two
Turn
Victory
Work
Wounded
Upgrade
рарити стоит везде 0, а есть 4 "Stand *" при этом проигрывается только одна из них при добавлении модельки на карту (а ведь должны тогда 4 сменяться)
хотя на тестовом переименовании модели из шапки из "Stand 12345" в "Stand abcd" - ничего не изменило и ротация всех стендов сохранилась, т.е. "Stand A-z" должно браться в авторотацию (а не только номерные "Stand 1-9"), но в этой модели из этого поста не берётся
poisoNDealer красава
не могу выбрать какой ответ из твоих трёх поставить в ответ - они все разные, правильные, и каждый друг друга дополняет
poisoNDealer: увидишь как у него периодически проигрываются Stand 1, Stand 2, Stand 3, с учётом редкости
так может как раз где то и выставляется дефолтный набор анимаций при добавлении на карту - и там можно выбрать или только одну или 10 любых с редкостью
если это зависит от названия - тогда почему в этой модели показывается только 1 из 4 стендов
на остальные 3 выставлена редкость 0/100 ? где выставлять эту редкость тогда?
poisoNDealer: Все анимации с названием Stand будут "дефолтными"
так там не "Stand"
а "Stand 12345"
анимация "Stand" только одна
тем более у меня есть модель, где 4 штуки "Stand*", но по дефолту проигрывается только первая (нулевая) (с двумя blp, как и указано на таймлайне)
переименовал в двух разных редакторах и сохранил в 2 разных файла - xgm.guru/files/100/316703/comments/521179/rename.zip
в обоих вариантах в WE и игре вообще пропали анимации кроме Stand и Death
а в обоих редакторах показываются все 7 анимаций как и ожидалось
какая же запара это ваше картоделание хосспаде
по итогу просмотровщик на сайте смог сделать больше чем спец софт предназначенный для редактирования моделей
надо было Stand и Death поставить в раскадровке перед всеми остальными анимациями
вариант 1 имеет кучу ограничений:
SetUnitState - сначала идёт проверка по свойствам юнита в WE, и нельзя поставить значения вне рамок заданных в WE
SetUnitMoveSpeed - от 25 до 400
SetHeroStr SetHeroAgi SetHeroInt SetHeroXP SetHeroLevel - только героям
SetResourceAmount - тоже зависит от WE вроде
т.е. наиболее простые и оптимальные это варианты 0 3 4
SAND: Также можно сохранять и Real и Group и Unit, Str и тд, что позволяет сохранять хештаблица
так LoadInteger returns integer - как ты там сохранишь что-то кроме целого числа?
это который вместо расширенной ASCII-256 показывает точки?
или который не даёт редактировать значения?
и при этом который занимает 150 метров?
круто круто, мы как нить без такой годноты лучше посидим
nazarpunk: для хранения данных именно на грибах идеально подойдут паралельные массивы по индексу игрока
ага, там изначально вся инфа (кроме координат) и хранится в таких массивах - направление, нажатые стрелки, ускорение, гравитация, цвет, имя, коды, наблюдение, статус финиша, фон, музыка
nazarpunk: Очищать глобальную группу G дешевле, чем дрочить создание/удаление локалки.
Глобальная группа очищается через ClearGroup
исправлено, на фпс не сказалось, но код стал на несколько строк меньше
nazarpunk: На каждого юнита вызывается UnitIndex. Тоесть лишний цикл на количество игроков. Можно просто каждому грибу записать его индекс через SetUnitUserData. Будет дешевле.
после переработки UnitIndex и переноса номера юнита в его хп - количество фпс увеличилось в разы
теперь можно с 30 коробками бегать в 64 фпс
и даже заспавнить 50 коробок двумя лесенками на 30 фпс
подробности на графике
nazarpunk: На каждого юнита вызывается UnitIndex. Тоесть лишний цикл на количество игроков. Можно просто каждому грибу записать его индекс через SetUnitUserData. Будет дешевле
в версии 1.5 не вылечил это место, т.к. через SetUnitUserData и GetUnitUserData можно хранить только 1 значение на каждого юнита
и это значение уже занято в функции Propelly__Main
Propelly__Main
function Propelly__Main takes nothing returns nothing
local integer i=1
local integer j=1
if GetUnitTypeId(GetTriggerUnit())=='orai' then
loop
exitwhen Propelly__CompareRect[i]==null
if GetTriggeringRegion()==Propelly__Rects[i]then
loop
exitwhen j>Stage_BoxsCount
if GetUnitTypeId(OrangeMushroom[PLAYER_MAXINUM+j])=='orai' and GetTriggerUnit()==OrangeMushroom[PLAYER_MAXINUM+j]and GetUnitUserData(GetTriggerUnit())!=i then
call SetUnitUserData(GetTriggerUnit(),i)
if Propelly__Angle[i]=="Left" then
if GravityChanger_State==false then
call SetUnitAnimation(GetTriggerUnit(),"Stand First")
else
call SetUnitAnimation(GetTriggerUnit(),"Stand Second")
endif
set LeftArrow[PLAYER_MAXINUM+j]=true
set RightArrow[PLAYER_MAXINUM+j]=false
elseif Propelly__Angle[i]=="Right" then
if GravityChanger_State==false then
call SetUnitAnimation(GetTriggerUnit(),"Stand Second")
else
call SetUnitAnimation(GetTriggerUnit(),"Stand First")
endif
set LeftArrow[PLAYER_MAXINUM+j]=false
set RightArrow[PLAYER_MAXINUM+j]=true
else
set LeftArrow[PLAYER_MAXINUM+j]=false
set RightArrow[PLAYER_MAXINUM+j]=false
endif
set gravity[PLAYER_MAXINUM+j]=Propelly__FlyGravity[i]
endif
set j=j+1
endloop
return
endif
set i=i+1
endloop
endif
endfunction
function Propelly__SetRect takes trigger t,integer i,rect r,real g,string a returns nothing
set Propelly__Rects[i]=CreateRegion()
call RegionAddRect(Propelly__Rects[i],r)
set Propelly__FlyGravity[i]=g
set Propelly__CompareRect[i]=r
set Propelly__Angle[i]=a
call TriggerRegisterEnterRegion(t,Propelly__Rects[i],null)
endfunction
function Propelly__init takes nothing returns nothing
local trigger t=CreateTrigger()
call Propelly__SetRect(t,1,gg_rct_PropellyMove001,10,"none")
call TriggerAddAction(t,function Propelly__Main)
set t=null
endfunction
буду искать какими способами можно хранить в юнитах числовую информацию
т.к. на тестах после замены UnitIndex(u) на GetUnitUserData(u) фпс поднялся в разы
например 40 фпс наступает не при -box1 20 , а уже при -box1 37
а если сделать две лесенки: -ladder2 20 + 30 раз -box - итого 50 коробок двумя лесенками - то будет 30 фпс
а в текущей версии на 50 коробках фпс упадёт до 0 из-за UnitIndex
nazarpunk: Очищать глобальную группу G дешевле, чем дрочить создание/удаление локалки.
потестировать это пока не удалось, т.к. коллизии всегда выдавали true и коробки проваливались - наверное неправильно очищал группу через дестрой, покурю ещё это место
nazarpunk: лучше перебирать группы не через удаление юнита, а через ForGroup. Она к тому же создаёт псевдопоток, что позволяет обойти оплимит
попробовал накалякать через ForGroup
Открыть код и видео
globals
integer MushroomMoving_CollisionCheck_i
real MushroomMoving_CollisionCheck_x
real MushroomMoving_CollisionCheck_y
boolean array MushroomMoving_CollisionCheck_boo
endglobals
function MushroomMoving_CollisionCheck_ForGroup takes nothing returns nothing
local unit u=GetEnumUnit()
local integer j=0
local real otherx
local real othery
local integer i = MushroomMoving_CollisionCheck_i
local real x = MushroomMoving_CollisionCheck_x
local real y = MushroomMoving_CollisionCheck_y
if u!=OrangeMushroom[i] then
set j=UnitIndex(u)
if (GetPlayerSlotState(GetOwningPlayer(OrangeMushroom[j]))==PLAYER_SLOT_STATE_PLAYING or j>PLAYER_MAXINUM) and LevelClearState[j]==false then
if MB_Frame_On==1 then
set MB_CollisionY = MB_CollisionY+1
endif
set otherx=GetUnitX(OrangeMushroom[j])
set othery=GetUnitY(OrangeMushroom[j])
if ContainsCoords(otherx-64,othery-64,otherx+64,othery+64,x,y)==true then
if PropellyCondition==true then
if GetUnitTypeId(OrangeMushroom[j])!='orai' then
set u=null
set Frame_MainPlayerY=j
set MushroomMoving_CollisionCheck_boo[i]=false
return
endif
else
set u=null
set Frame_MainPlayerY=j
set MushroomMoving_CollisionCheck_boo[i]=false
return
endif
endif
endif
endif
set u=null
set MushroomMoving_CollisionCheck_boo[i]=true
return
endfunction
function MushroomMoving_CollisionCheck takes integer i,real x,real y returns boolean
local group G = CreateGroup()
set MushroomMoving_CollisionCheck_i=i
set MushroomMoving_CollisionCheck_x=x
set MushroomMoving_CollisionCheck_y=y
call GroupEnumUnitsInRange(G, x,y, 128, null)
call ForGroup(G,function MushroomMoving_CollisionCheck_ForGroup)
return MushroomMoving_CollisionCheck_boo[i]
call DestroyGroup(G)
set G=null
endfunction
коллизии начали кашлять
особенно в конце видео где 3 коробки - там видна рандомность - то стоит на коробке то проваливается
сначала попробовал по аналогии с твоим кодом , только таймер в 100 раз меньше чем 0.02 = чтобы просчитать 100 коробок за 1 фрейм
call TriggerRegisterTimerEvent(t,0.0002,true)
и даже если коробок 10 а не 100, то просчитает всё за 10 тиков, а остальные 90 будет скипать
а call Frame__SquaresMoving(i) отключил, то есть Frame__SquaresMoving просчитывается отдельным кодом вообще
что должно сказаться на физике
Открыть код и скриншот
globals
integer playersCurrectFrameOffset = 1
endglobals
function Frame__SquaresMoving2 takes nothing returns nothing
local integer i
local real saveMaxG=-30
local integer j=1
if playersCurrectFrameOffset <= PLAYER_MAXINUM+Stage_BoxsCount then
set i = playersCurrectFrameOffset
set Frame__SpeedX=8
set Frame_MainPlayer=i
if LevelClearState[i]==false then
call Frame__MovingX(i,GetUnitX(OrangeMushroom[i]),GetUnitY(OrangeMushroom[i]))
call Frame__MovingY(i,GetUnitX(OrangeMushroom[i]),GetUnitY(OrangeMushroom[i]))
if s__StatusBorad_World[Status]>=6 then
if IsUnitInRegion(Water_Rects,OrangeMushroom[i])==true then
set saveMaxG=-10
endif
endif
if GetUnitTypeId(OrangeMushroom[i])!='orai' then
if Water_State[i]==true and DownArrow[i]==true then
set gravity[i]=-15
else
if gravity[i]>saveMaxG then
set gravity[i]=gravity[i]-2.0
elseif gravity[i]<saveMaxG then
set gravity[i]=saveMaxG
endif
endif
endif
if GetUnitTypeId(OrangeMushroom[i])!='orai' then
if Frame__AccelerationCheck[i]==false then
if Acceleration[i]!=0 then
if Acceleration[i]>60 then
set Acceleration[i]=60
elseif Acceleration[i]>1 then
set Acceleration[i]=Acceleration[i]-1
elseif Acceleration[i]<-60 then
set Acceleration[i]=-60
elseif Acceleration[i]<-1 then
set Acceleration[i]=Acceleration[i]+1
else
set Acceleration[i]=0
endif
endif
else
set Frame__AccelerationCheck[i]=false
endif
endif
endif
set playersCurrectFrameOffset = playersCurrectFrameOffset+1
endif
endfunction
function Frame__SquaresMoving2Init takes nothing returns nothing
local trigger t=CreateTrigger()
call TriggerRegisterTimerEvent(t,0.0002,true)
call TriggerAddAction(t,function Frame__SquaresMoving2)
endfunction
function Frame__PlayersGroup takes nothing returns nothing
local integer i=1
if GravityChanger_Loading==false then
set Frame__BoxState=false
loop
exitwhen i>PLAYER_MAXINUM
if GetPlayerSlotState(Player(i-1))==PLAYER_SLOT_STATE_PLAYING then
set Frame__OldX[i]=GetUnitX(OrangeMushroom[i])
set Frame__OldY[i]=GetUnitY(OrangeMushroom[i])
endif
set i=i+1
endloop
set i=1
loop
exitwhen i>PLAYER_MAXINUM+Stage_BoxsCount
if i<=PLAYER_MAXINUM then
if GetPlayerSlotState(Player(i-1))==PLAYER_SLOT_STATE_PLAYING then
if CinematicMode==false then
if Observer_ViewNumber[i]==0 then
if GravityChanger_State==false then
call SetCameraTargetControllerNoZForPlayer(Player(i-1),OrangeMushroom[i],0,128,false)
else
call SetCameraTargetControllerNoZForPlayer(Player(i-1),OrangeMushroom[i],0,-128,false)
endif
else
if GravityChanger_State==false then
call SetCameraTargetControllerNoZForPlayer(Player(i-1),OrangeMushroom[Observer_ViewNumber[i]],0,128,false)
else
call SetCameraTargetControllerNoZForPlayer(Player(i-1),OrangeMushroom[Observer_ViewNumber[i]],0,-128,false)
endif
endif
endif
//call Frame__SquaresMoving(i)
endif
else
set Frame__BoxState=true
//call Frame__SquaresMoving(i)
endif
set i=i+1
endloop
set Frame__BoxState=false
set i=1
loop
exitwhen i>PLAYER_MAXINUM+Stage_BoxsCount
if i<=PLAYER_MAXINUM then
if GetPlayerSlotState(Player(i-1))==PLAYER_SLOT_STATE_PLAYING then
if CinematicMode==false then
call BackGroundMove(i,Frame__OldX[i],Frame__OldY[i])
endif
set Frame__PropellyState[i]=false
set Frame__GravityState[i]=false
if NameTextTag[i]!=null then
if GravityChanger_State==false then
call SetTextTagPos(NameTextTag[i],GetUnitX(OrangeMushroom[i])-50,GetUnitY(OrangeMushroom[i])-120,0)
else
call SetTextTagPos(NameTextTag[i],GetUnitX(OrangeMushroom[i])+50,GetUnitY(OrangeMushroom[i])+120,0)
endif
endif
call Jumper_Main(i)
if s__StatusBorad_World[Status]==6 and IsPointInRegion(Arrow_AllRects,GetUnitX(OrangeMushroom[i]),GetUnitY(OrangeMushroom[i]))then
call Arrow_SecretAction(i)
endif
endif
else
if Stage_BoxsCount !=0 then
set Frame__PropellyState[i]=false
set Frame__GravityState[i]=false
call Jumper_Main(i)
if s__StatusBorad_World[Status]==6 and IsPointInRegion(Arrow_AllRects,GetUnitX(OrangeMushroom[i]),GetUnitY(OrangeMushroom[i]))then
call Arrow_SecretAction(i)
endif
endif
endif
set i=i+1
endloop
endif
endfunction
function main takes nothing returns nothing
call Frame__SquaresMoving2Init()
endfunction
но чё то не завелось, гриб на старте висит в воздухе и не ходит
зато твоя идея
+ этот пост:
nazarpunk: Условно хаотично бывает в асинхронных языках, где ты в жассе нашёл асинхронность?
натолкнули меня на ещё более простое и легко встраиваемое решение через TriggerEvaluate
Открыть код
globals
trigger Frame__SquaresMoving3Trg = CreateTrigger()
integer playersCurrectFrameOffset = 1
endglobals
function Frame__SquaresMoving3Act takes nothing returns boolean
local integer i=playersCurrectFrameOffset
local real saveMaxG=-30
local integer j=1
set Frame__SpeedX=8
set Frame_MainPlayer=i
if LevelClearState[i]==false then
call Frame__MovingX(i,GetUnitX(OrangeMushroom[i]),GetUnitY(OrangeMushroom[i]))
call Frame__MovingY(i,GetUnitX(OrangeMushroom[i]),GetUnitY(OrangeMushroom[i]))
if s__StatusBorad_World[Status]>=6 then
if IsUnitInRegion(Water_Rects,OrangeMushroom[i])==true then
set saveMaxG=-10
endif
endif
if GetUnitTypeId(OrangeMushroom[i])!='orai' then
if Water_State[i]==true and DownArrow[i]==true then
set gravity[i]=-15
else
if gravity[i]>saveMaxG then
set gravity[i]=gravity[i]-2.0
elseif gravity[i]<saveMaxG then
set gravity[i]=saveMaxG
endif
endif
endif
if GetUnitTypeId(OrangeMushroom[i])!='orai' then
if Frame__AccelerationCheck[i]==false then
if Acceleration[i]!=0 then
if Acceleration[i]>60 then
set Acceleration[i]=60
elseif Acceleration[i]>1 then
set Acceleration[i]=Acceleration[i]-1
elseif Acceleration[i]<-60 then
set Acceleration[i]=-60
elseif Acceleration[i]<-1 then
set Acceleration[i]=Acceleration[i]+1
else
set Acceleration[i]=0
endif
endif
else
set Frame__AccelerationCheck[i]=false
endif
endif
endif
return false
endfunction
function Frame__SquaresMoving3Init takes nothing returns nothing
call TriggerAddCondition(Frame__SquaresMoving3Trg, Condition(function Frame__SquaresMoving3Act))
endfunction
function Frame__PlayersGroup takes nothing returns nothing
local integer i=1
if GravityChanger_Loading==false then
set Frame__BoxState=false
loop
exitwhen i>PLAYER_MAXINUM
if GetPlayerSlotState(Player(i-1))==PLAYER_SLOT_STATE_PLAYING then
set Frame__OldX[i]=GetUnitX(OrangeMushroom[i])
set Frame__OldY[i]=GetUnitY(OrangeMushroom[i])
endif
set i=i+1
endloop
set i=1
loop
exitwhen i>PLAYER_MAXINUM+Stage_BoxsCount
set playersCurrectFrameOffset=i
if i<=PLAYER_MAXINUM then
if GetPlayerSlotState(Player(i-1))==PLAYER_SLOT_STATE_PLAYING then
if CinematicMode==false then
if Observer_ViewNumber[i]==0 then
if GravityChanger_State==false then
call SetCameraTargetControllerNoZForPlayer(Player(i-1),OrangeMushroom[i],0,128,false)
else
call SetCameraTargetControllerNoZForPlayer(Player(i-1),OrangeMushroom[i],0,-128,false)
endif
else
if GravityChanger_State==false then
call SetCameraTargetControllerNoZForPlayer(Player(i-1),OrangeMushroom[Observer_ViewNumber[i]],0,128,false)
else
call SetCameraTargetControllerNoZForPlayer(Player(i-1),OrangeMushroom[Observer_ViewNumber[i]],0,-128,false)
endif
endif
endif
call TriggerEvaluate(Frame__SquaresMoving3Trg)
endif
else
set Frame__BoxState=true
call TriggerEvaluate(Frame__SquaresMoving3Trg)
endif
set i=i+1
endloop
set Frame__BoxState=false
set i=1
loop
exitwhen i>PLAYER_MAXINUM+Stage_BoxsCount
if i<=PLAYER_MAXINUM then
if GetPlayerSlotState(Player(i-1))==PLAYER_SLOT_STATE_PLAYING then
if CinematicMode==false then
call BackGroundMove(i,Frame__OldX[i],Frame__OldY[i])
endif
set Frame__PropellyState[i]=false
set Frame__GravityState[i]=false
if NameTextTag[i]!=null then
if GravityChanger_State==false then
call SetTextTagPos(NameTextTag[i],GetUnitX(OrangeMushroom[i])-50,GetUnitY(OrangeMushroom[i])-120,0)
else
call SetTextTagPos(NameTextTag[i],GetUnitX(OrangeMushroom[i])+50,GetUnitY(OrangeMushroom[i])+120,0)
endif
endif
call Jumper_Main(i)
if s__StatusBorad_World[Status]==6 and IsPointInRegion(Arrow_AllRects,GetUnitX(OrangeMushroom[i]),GetUnitY(OrangeMushroom[i]))then
call Arrow_SecretAction(i)
endif
endif
else
if Stage_BoxsCount !=0 then
set Frame__PropellyState[i]=false
set Frame__GravityState[i]=false
call Jumper_Main(i)
if s__StatusBorad_World[Status]==6 and IsPointInRegion(Arrow_AllRects,GetUnitX(OrangeMushroom[i]),GetUnitY(OrangeMushroom[i]))then
call Arrow_SecretAction(i)
endif
endif
endif
set i=i+1
endloop
endif
endfunction
function main takes nothing returns nothing
call Frame__SquaresMoving3Init()
endfunction
теперь варик не захлёбывается, ник не отклеивается, и каждый гриб(ящик) просчитывается отдельным потоком с сохранением физики
макс количество коробок поднялось до 50+ и уже упирается всё в fps
-box1 поднялось с 11(v1.0) 14(v1.4) до 22 (выше тоже можно но фпс ниже 20)
-box3 поднялось с 11(v1.0) 25(v1.4) до 35 (20 фпс)
при отключении -pro режима фпс вырастет с 20 до 40
теперь осталось причесать код (указанные выше UnitIndex и global G) и опять обновлять версию
а если найти ошибки в 1 и 2 варианте выше в этом посте то и сравнить на скорость и фпс все 3 способа
Ред. host_pi
» WarCraft 3 / Visual Studio Code: WarCode
» WarCraft 3 / как открыть свойства звука? WE
» Survivor Challenge TD / Релиз в СТИМЕ
Ред. host_pi
» XGM Team / Онлайн-инструменты для геймдев и моддинг арта
работает только если закинуть mdx + blp всей кучей разом, причём 1й раз моргнёт и не покажет а если второй раз сразу перетащить всю кучу поверх первой то уже загрузится нормально модель
Ред. host_pi
» WarCraft 3 / как выключить(задать) анимацию при добавлении модели на ланд ?
Appendix A - Animation Tokens
Birth
Cinematic
Death
Decay
Dissipate
Morph
Portrait
Sleep
Spell
Stand
Walk
Alternateex
Chain
Channel
Complete
Critical
Defend
Drain
Eattree
Fast
Fill
Flail
Flesh
Fifth
Fire
First
Five
Four
Fourth
Gold
Hit
Large
Left
Light
Looping
Lumber
Medium
Moderate
Off
One
Puke
Ready
Right
Second
Severe
Slam
Small
Spiked
Spin
Swim
Talk
Third
Three
Throw
Two
Turn
Victory
Work
Wounded
Upgrade
Ред. host_pi
» WarCraft 3 / как выключить(задать) анимацию при добавлении модели на ланд ?
в этой модели
хотя на тестовом переименовании модели из шапки из "Stand 12345" в "Stand abcd" - ничего не изменило и ротация всех стендов сохранилась, т.е. "Stand A-z" должно браться в авторотацию (а не только номерные "Stand 1-9"), но в этой модели из этого поста не берётся
не могу выбрать какой ответ из твоих трёх поставить в ответ - они все разные, правильные, и каждый друг друга дополняет
Ред. host_pi
» WarCraft 3 / как выключить(задать) анимацию при добавлении модели на ланд ?
если это зависит от названия - тогда почему в этой модели показывается только 1 из 4 стендов
на остальные 3 выставлена редкость 0/100 ? где выставлять эту редкость тогда?
Ред. host_pi
» WarCraft 3 / как выключить(задать) анимацию при добавлении модели на ланд ?
а "Stand 12345"
анимация "Stand" только одна
в обоих вариантах в WE и игре вообще пропали анимации кроме Stand и Death
а в обоих редакторах показываются все 7 анимаций как и ожидалось
какая же запара это ваше картоделание хосспаде
Ред. host_pi
» WarCraft 3 / как починить? - blp текстура отображается полосами
Ред. host_pi
» WarCraft 3 / не отображается анимация в игре - как починить?
надо было Stand и Death поставить в раскадровке перед всеми остальными анимациями
Ред. host_pi
» XGM Team / Онлайн-инструменты для геймдев и моддинг арта
Ред. host_pi
» WarCraft 3 / Demon Retera Model Studio 0.4.5m PTR
версия ретеры 0.04.5h
помимо самих текстур - надо было ещё их из анимаций удалить
Ред. host_pi
» WarCraft 3 / WarCraft3 Viewer
Ред. host_pi
» WarCraft 3 / Как можно хранить значения в юнитах? Аналог SetUnitUserData
SetUnitState - сначала идёт проверка по свойствам юнита в WE, и нельзя поставить значения вне рамок заданных в WE
SetUnitMoveSpeed - от 25 до 400
SetHeroStr SetHeroAgi SetHeroInt SetHeroXP SetHeroLevel - только героям
SetResourceAmount - тоже зависит от WE вроде
Ред. host_pi
» XGM Team / Онлайн-инструменты для геймдев и моддинг арта
или который не даёт редактировать значения?
и при этом который занимает 150 метров?
круто круто, мы как нить без такой годноты лучше посидим
ректы добавляются хорошо
» WarCraft 3 / Всем привет. Как найти путь до модели *mdx ?
Ред. host_pi
» WarCraft 3 / Всем привет. Как найти путь до модели *mdx ?
Ред. host_pi
» WarCraft 3 / Как можно оптимизировать этот код с 2D коллизиями?
Ред. host_pi
» WarCraft 3 / Как можно оптимизировать этот код с 2D коллизиями?
теперь можно с 30 коробками бегать в 64 фпс
и даже заспавнить 50 коробок двумя лесенками на 30 фпс
подробности на графике
EN xgm.guru/files/100/315886/comments/520944/OMS_BoxLab_1.7_EN.w3x
RU xgm.guru/files/100/315886/comments/520944/OMS_BoxLab_1.7_RU.w3x
-
image_copy8.png
Полный списокРед. host_pi
» WarCraft 3 / Как можно оптимизировать этот код с 2D коллизиями?
и это значение уже занято в функции Propelly__Main
т.к. на тестах после замены UnitIndex(u) на GetUnitUserData(u) фпс поднялся в разы
например 40 фпс наступает не при -box1 20 , а уже при -box1 37
а если сделать две лесенки: -ladder2 20 + 30 раз -box - итого 50 коробок двумя лесенками - то будет 30 фпс
Ред. host_pi
» WarCraft 3 / Как можно оптимизировать этот код с 2D коллизиями?
теперь полноценно можно заспавнить 50 коробок и мерять свои фепосы
EN xgm.guru/files/100/315886/comments/520926/OMS_BoxLab_1.5_EN.w3x
RU xgm.guru/files/100/315886/comments/520926/OMS_BoxLab_1.5_RU.w3x
дальше уже только оптимизация кода для повышения фпс
Ред. host_pi
» WarCraft 3 / Текстовый редактор триггеров
они запускаются при старте карты через варик
F4 - клик триггер - правка - конвертировать в текст
» WarCraft 3 / Как можно оптимизировать этот код с 2D коллизиями?
Ред. host_pi
» WarCraft 3 / Как можно оптимизировать этот код с 2D коллизиями?
особенно в конце видео где 3 коробки - там видна рандомность - то стоит на коробке то проваливается
call TriggerRegisterTimerEvent(t,0.0002,true)
и даже если коробок 10 а не 100, то просчитает всё за 10 тиков, а остальные 90 будет скипать
а call Frame__SquaresMoving(i) отключил, то есть Frame__SquaresMoving просчитывается отдельным кодом вообще
что должно сказаться на физике
+ этот пост:
макс количество коробок поднялось до 50+ и уже упирается всё в fps
-box1 поднялось с 11(v1.0) 14(v1.4) до 22 (выше тоже можно но фпс ниже 20)
-box3 поднялось с 11(v1.0) 25(v1.4) до 35 (20 фпс)
при отключении -pro режима фпс вырастет с 20 до 40
а если найти ошибки в 1 и 2 варианте выше в этом посте то и сравнить на скорость и фпс все 3 способа