[Гайд] Создаем карту с раундами и волнами мобов

  • Автор темы Автор темы Slavko
  • Дата начала Дата начала
DOTAUnits, (*example_unit_2*), (*Creature*),
говорит же об ошибке внутри npc_units_custom.txt
 
KeyValues Error: RecursiveLoadFromBuffer: got EOF instead of keyname in file scripts/npc/npc_units_custom.txt
DOTAUnits, (*example_unit_2*), (*Creature*),

Такую ошибку выдает хаммер. Мб с этим связано. Полный тхт файл в конце не прикреплен, кстати, как это обещано в гайде. Но я и со стандартным гноллом пробовал, который автоматом идет при создании, ничерта не спавнится.

Да, сделал со стандартным гнолом, 0 результата.

Lua:
function GameMode:OnGameInProgress()
  print("[BAREBONES] The game has officially begun")

  Timers:CreateTimer(30, function() -- Start this timer 30 game-time seconds later
    --print("This function is called 30 seconds after the game begins, and every 30 seconds thereafter")
    return 30.0 -- Rerun this timer every 30 game-time seconds
  end)
local point = Entities:FindByName( nil, "spawnerino"):GetAbsOrigin() -- Записываем в переменную 'point' координаты нашего спавнера 'spawnerino'
local waypoint = Entities:FindByName( nil, "way1") -- Записываем в переменную 'waypoint' координаты первого бокса way1.
local return_time = 10 -- Записываем в переменную значение '10'
Timers:CreateTimer(15, function() -- Создаем таймер, который запустится через 15 секунд после начала матча и запустит следующую функцию.
GAME_ROUND = GAME_ROUND + 1 -- Значение GAME_ROUND увеличивается на 1.
if GAME_ROUND == MAX_ROUNDS -- Если GAME_ROUND равно MAX_ROUNDS, переменная return_time получит нулевое значение.
return_time = nil
end
Say(nil,"Wave №" .. GAME_ROUND, false) -- Выводим в чат сообщение 'Wave №', в конце к которому добавится значение GAME_ROUND.
for i=1, ROUND_UNITS do -- Произведет нижние действия столько раз, сколько указано в ROUND_UNITS. То есть в нашем случае создаст 2 юнита.
local unit = CreateUnitByName( "npc_dota_creature_gnoll_assassin", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS ) -- Создаем юнита 'example_unit_', в конце к названию добавится 1,2,3,4 или 5, в зависимости от раунда, и в итоге получатся наши example_unit_1, example_unit_2 и т.д.. Юнит появится в векторе point + RandomVector( RandomFloat( 0, 200 ) ) - point - наша переменная, а рандомный вектор добавляется для того, чтобы мобы не появлялись в одной точке и не застревали. Мобы будут за силы света.
unit:SetInitialGoalEntity( waypoint ) -- Посылаем мобов на наш way1, координаты которого мы записали в переменную 'waypoint'
end
return return_time -- Возвращаем таймеру время, через которое он должен снова сработать. Когда пройдет последний раунд таймер получит значение 'nil' и выключится.
end)
end


После публикации - игра не прогружаетсяв доцке, лобби создается, но сервер сбрасывает, когда нажимаешь начать игру.
Ошибка - ожидалось значение ключа атрибута вместо конца файла npc_units_custom.txt, т. Е там где-то скобки пропустили
 
Возможно не полностью та тема, но все же. Есть несколько вопросов:
1) Одна из волн ходит медленно. Здесь уже писали об этом и говорилось, что они бегут быстрее как на кого-нибудь сагрятся, но это не совсем балансно
2) (Возможно не в тему) Как по простому подогнать модель под крипов? Дело в том, что единственный пункт контроля модели - "ModelScale", то есть ничего больше в самом редакторе изменить нельзя. У меня вот например крипы бегут боком. Понятно что дело только в экспортируемой модели, ее тупа нужно ставить под другим углом, но вот чтобы это все на деле проверить нужно потратить кучу времени. Повернуть в одну сторону, затем в другую, и так до того момента пока они не встанут как надо, а между этими поворотами следует нудный этап импорта в model editor. Может есть способ проще?
3) (Возможно не в тему) Как сделать строения(колодцы, бараки) с поддержкой анимации модели? Если с колодцами +- понятно, задать тип юнита, то вот с бараками как быть? Как задать зависимость этих вот юнитов=бараков с появлением супер и мега крипов?
4) (Возможно не в тему) Как при типе передвижения DOTA_UNIT_CAP_MOVE_GROUND запретить юниту передвигаться? То есть нужна возможность поворота, но не передвижения. При значении MovementSpeed 0 и -1 движение остается

Скорее всего вопросы нубские, не исключаю, просто поиск по темам невероятно затруднен всяким мусором, либо банально устаревшей инфой
 
Последнее редактирование:
Возможно не полностью та тема, но все же. Есть несколько вопросов:
1) Одна из волн ходит медленно. Здесь уже писали об этом и говорилось, что они бегут быстрее как на кого-нибудь сагрятся, но вот у меня они, повторяюсь, совсем пассивные
2) (Возможно не в тему) Как по простому подогнать модель под крипов? Дело в том, что единственный пункт контроля модели - "ModelScale", то есть ничего больше в самом редакторе изменить нельзя. У меня вот например крипы бегут боком. Понятно что дело только в экспортируемой модели, ее тупа нужно ставить под другим углом, но вот чтобы это все на деле проверить нужно потратить кучу времени. Повернуть в одну сторону, затем в другую, и так до того момента пока они не встанут как надо, а между этими поворотами следует нудный этап импорта в model editor. Может есть способ проще?
3) (Возможно не в тему) Как сделать строения(колодцы, бараки) с поддержкой анимации модели? Если с колодцами +- понятно, задать тип юнита, то вот с бараками как быть? Как задать зависимость этих вот юнитов=бараков с появлением супер и мега крипов?

Скорее всего вопросы нубские, не исключаю, просто поиск по темам невероятно затруднен всяким мусором, либо банально устаревшей инфой
1 - увеличь радиус агра у крипов
2 - запомни front координату и всегда поворачивай модель по ней, в чем проблема?
3 - какая анимация тебе требуется?
 
1 - увеличь радиус агра у крипов
2 - запомни front координату и всегда поворачивай модель по ней, в чем проблема?
3 - какая анимация тебе требуется?
1) Не думаю что это правильно повлияет на баланс. Как-то глупо будет, если крипы будут через пол карты агриться. Половина сути доты теряется.
2) Это лишь одна из возможных проблем, суть вопроса в том, есть ли возможность редачить положение модели в пространстве в редакторе моделей?
3) Любая. Суть в том, что сам тип строений не поддерживает анимацию, по крайней мере без каких-либо волшебных кнопочек. Дак вот, есть ли они?
 
1) Не думаю что это правильно повлияет на баланс. Как-то глупо будет, если крипы будут через пол карты агриться. Половина сути доты теряется.
2) Это лишь одна из возможных проблем, суть вопроса в том, есть ли возможность редачить положение модели в пространстве в редакторе моделей?
3) Любая. Суть в том, что сам тип строений не поддерживает анимацию, по крайней мере без каких-либо волшебных кнопочек. Дак вот, есть ли они?
4 - зарутить
1 - никак тогда лол, как они будут агриться без радиуса агра?
2 - скорее всего нет, он не для этого, это не 3д редактор.
3 - разве AddGesture не работает?
 
Как вариант тем у кого крипы медленно движутся. Проверьте свои path_corner, там он ведь может скорость перезаписывать.

А теперь свой вопрос, без луа, можно ли сделать так что бы крипы не бегали за героем, а шли дальше по своему пути(если герой ушел от них далеко). нейтралов пробовал, тогда они вообще перестают двигаться)))
UPD:
Решил дальностью видимости у крипа.
А вот теперь да, крипы после того как перестают бегать за гером, некоторые замеюляются. В моем случаи 1 крипа только заметил...
 
Последнее редактирование:
Сделал все по этому гайду , но ничего не происходит, в консоле ошибка :
Script load error for script
@C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\game\dota_addons\dugeon_rpg\scripts\vscripts\addon_game_mode.lua:
...a_addons\dugeon_rpg\scripts\vscripts\addon_game_mode.lua:17: <name> or '...' expected near '"npc_defender_knight_village"'
LoadAndCompileScriptFile: Failed to compile script file "scripts/vscripts/addon_game_mode.lua"
 
Сделал все по этому гайду , но ничего не происходит, в консоле ошибка :
Script load error for script
@C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\game\dota_addons\dugeon_rpg\scripts\vscripts\addon_game_mode.lua:
...a_addons\dugeon_rpg\scripts\vscripts\addon_game_mode.lua:17: <name> or '...' expected near '"npc_defender_knight_village"'
LoadAndCompileScriptFile: Failed to compile script file "scripts/vscripts/addon_game_mode.lua"
На 17 строке поищи ошибку. Тебе же тыкает на 17 строке ошибка
 
Сделал все как в данном гайде, ничего не работает, ошибки не выдает, помогите пожалуйста
 
Сделал все как в данном гайде, ничего не работает, ошибки не выдает, помогите пожалуйста
Такая же проблема, помогите девушке
'ничего не работает' - можно поподробнее? несколько сотен вариантов, что же можно было сделать не так
 
  • Нравится
Реакции: DDSuper
Переходим в самый низ нашего addon_game_mode.lua и пишем туда следующее:
function GameMode:OnGameInProgress() // Функция начнет выполняться, когда начнется матч( на часах будет 00:00 ).
local point = Entities:FindByName( nil, "spawnerino"):GetAbsOrigin() // Записываем в переменную 'point' координаты нашего спавнера 'spawnerino'
local waypoint = Entities:FindByName( nil, "way1") // Записываем в переменную 'waypoint' координаты первого бокса way1.
local return_time = 10 // Записываем в переменную значение '10'
Timers:CreateTimer(15, function() // Создаем таймер, который запустится через 15 секунд после начала матча и запустит следующую функцию.
GAME_ROUND = GAME_ROUND + 1 // Значение GAME_ROUND увеличивается на 1.
if GAME_ROUND == MAX_ROUNDS // Если GAME_ROUND равно MAX_ROUNDS, переменная return_time получит нулевое значение.
return_time = nil
end
Say(nil,"Wave №" .. GAME_ROUND, false) // Выводим в чат сообщение 'Wave №', в конце к которому добавится значение GAME_ROUND.
for i=1, ROUND_UNITS do // Произведет нижние действия столько раз, сколько указано в ROUND_UNITS. То есть в нашем случае создаст 2 юнита.
local unit = CreateUnitByName( "example_unit_" .. GAME_ROUND, point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS ) // Создаем юнита 'example_unit_', в конце к названию добавится 1,2,3,4 или 5, в зависимости от раунда, и в итоге получатся наши example_unit_1, example_unit_2 и т.д.. Юнит появится в векторе point + RandomVector( RandomFloat( 0, 200 ) ) - point - наша переменная, а рандомный вектор добавляется для того, чтобы мобы не появлялись в одной точке и не застревали. Мобы будут за силы света.
unit:SetInitialGoalEntity( waypoint ) // Посылаем мобов на наш way1, координаты которого мы записали в переменную 'waypoint'
end
return return_time // Возвращаем таймеру время, через которое он должен снова сработать. Когда пройдет последний раунд таймер получит значение 'nil' и выключится.
end)
end
Функция OnGameInProgress() или устарели, или изначально не работала. Неудивительно, что все пользователи выше жаловались.
Также тут надо добавить слушателя, иначе событие просто не произойдёт

Во всех модах, что я смотрел используется другая функция: GameMode:OnGameRulesStateChange(keys)
В итоге такие правки:
function GameMode:InitGameMode()
-- body, тут нужный код мода

ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(GameMode, 'OnGameRulesStateChange'), self)
end
В этом же файле ниже добавляем:
function GameMode:OnGameRulesStateChange(keys)

--блок спавна волн

end
 
Функция OnGameInProgress() или устарели, или изначально не работала. Неудивительно, что все пользователи выше жаловались.
Также тут надо добавить слушателя, иначе событие просто не произойдёт

Во всех модах, что я смотрел используется другая функция: GameMode:OnGameRulesStateChange(keys)
В итоге такие правки:
function GameMode:InitGameMode()
-- body, тут нужный код мода

ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(GameMode, 'OnGameRulesStateChange'), self)
end
В этом же файле ниже добавляем:
function GameMode:OnGameRulesStateChange(keys)

--блок спавна волн

end
ага ещё бы проверку тот ли это стейт
 
Прочитал все страницы, и у всех разные ошибки. Я при повторении этого гайда в консоли получаю .
\scripts\vscripts\addon_game_mode.lua:72: attempt to index local 'unit' (a nil value)

function GameMode:OnGameInProgress()
local point = Entities:FindByName( nil, "spawnerino"):GetAbsOrigin()
local waypoint = Entities:FindByName( nil, "way1")
local return_time = 10
Timers:CreateTimer(10, function()
GAME_ROUND = GAME_ROUND + 1
if GAME_ROUND == MAX_ROUNDS then
return_time = nil
end
Say(nil,"Wave №" .. GAME_ROUND, false)
for i=1, ROUND_UNITS do
local unit = CreateUnitByName( npc_dota_creep_badguys_melee, point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, 4 )
unit:SetInitialGoalEntity( waypoint )
end
return return_time
end)
end

Кто-то может помочь почему waypoint пустой?
 
Прочитал все страницы, и у всех разные ошибки. Я при повторении этого гайда в консоли получаю .
\scripts\vscripts\addon_game_mode.lua:72: attempt to index local 'unit' (a nil value)

function GameMode:OnGameInProgress()
local point = Entities:FindByName( nil, "spawnerino"):GetAbsOrigin()
local waypoint = Entities:FindByName( nil, "way1")
local return_time = 10
Timers:CreateTimer(10, function()
GAME_ROUND = GAME_ROUND + 1
if GAME_ROUND == MAX_ROUNDS then
return_time = nil
end
Say(nil,"Wave №" .. GAME_ROUND, false)
for i=1, ROUND_UNITS do
local unit = CreateUnitByName( npc_dota_creep_badguys_melee, point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, 4 )
unit:SetInitialGoalEntity( waypoint )
end
return return_time
end)
end

Кто-то может помочь почему waypoint пустой?
Значит у тебя не был создан на карте объект с именем "way1"
Чтобы его сделать, тыкаешь на лампочку в hammer editor. Далее находишь info_target, ставишь на нужное место. После в свойствах этого info_target в поле"Name" пишешь "wa1".

Если хочешь, чтобы он у тебя ходил от одной точке к другой, то нужно сделать path_corner объект.
Есть вот гайд от одной пользователя с этого форума, я сделал по нему, вроде работает: урок по лайновым крипам
 
[U]Chernobl,[/U] я тоже сначала подумал что опечатка или еще что. Проверил он есть.
Если я правильно понимаю, то если закоментировать строку unit:SetInitialGoalEntity( waypoint ), то нейтралы все равно должны появится в spawnerino. Но их нет, как и никаких ошибок в консоли=)
П.с уже подумал попробовать по видео сделать.

1588005630969.png
 
Реклама: