Ошибка - ожидалось значение ключа атрибута вместо конца файла 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
После публикации - игра не прогружаетсяв доцке, лобби создается, но сервер сбрасывает, когда нажимаешь начать игру.
1 - увеличь радиус агра у криповВозможно не полностью та тема, но все же. Есть несколько вопросов:
1) Одна из волн ходит медленно. Здесь уже писали об этом и говорилось, что они бегут быстрее как на кого-нибудь сагрятся, но вот у меня они, повторяюсь, совсем пассивные
2) (Возможно не в тему) Как по простому подогнать модель под крипов? Дело в том, что единственный пункт контроля модели - "ModelScale", то есть ничего больше в самом редакторе изменить нельзя. У меня вот например крипы бегут боком. Понятно что дело только в экспортируемой модели, ее тупа нужно ставить под другим углом, но вот чтобы это все на деле проверить нужно потратить кучу времени. Повернуть в одну сторону, затем в другую, и так до того момента пока они не встанут как надо, а между этими поворотами следует нудный этап импорта в model editor. Может есть способ проще?
3) (Возможно не в тему) Как сделать строения(колодцы, бараки) с поддержкой анимации модели? Если с колодцами +- понятно, задать тип юнита, то вот с бараками как быть? Как задать зависимость этих вот юнитов=бараков с появлением супер и мега крипов?
Скорее всего вопросы нубские, не исключаю, просто поиск по темам невероятно затруднен всяким мусором, либо банально устаревшей инфой
1) Не думаю что это правильно повлияет на баланс. Как-то глупо будет, если крипы будут через пол карты агриться. Половина сути доты теряется.1 - увеличь радиус агра у крипов
2 - запомни front координату и всегда поворачивай модель по ней, в чем проблема?
3 - какая анимация тебе требуется?
4 - зарутить1) Не думаю что это правильно повлияет на баланс. Как-то глупо будет, если крипы будут через пол карты агриться. Половина сути доты теряется.
2) Это лишь одна из возможных проблем, суть вопроса в том, есть ли возможность редачить положение модели в пространстве в редакторе моделей?
3) Любая. Суть в том, что сам тип строений не поддерживает анимацию, по крайней мере без каких-либо волшебных кнопочек. Дак вот, есть ли они?
Можно подробнее?3 - разве AddGesture не работает?
Можно подробнее?
StartGesture | void StartGesture(int nActivity) | Add the given gesture activity. |
StartGestureWithPlaybackRate | void StartGestureWithPlaybackRate( nActivity, flRate ) | Add the given gesture activity with custom playback rate. |
На 17 строке поищи ошибку. Тебе же тыкает на 17 строке ошибкаСделал все по этому гайду , но ничего не происходит, в консоле ошибка :
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"
Такая же проблема, помогите девушкеСделал все как в данном гайде, ничего не работает, ошибки не выдает, помогите пожалуйста
Сделал все как в данном гайде, ничего не работает, ошибки не выдает, помогите пожалуйста
'ничего не работает' - можно поподробнее? несколько сотен вариантов, что же можно было сделать не такТакая же проблема, помогите девушке
Функция OnGameInProgress() или устарели, или изначально не работала. Неудивительно, что все пользователи выше жаловались.Переходим в самый низ нашего 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
'npc_dota_creep_badguys_melee' в кавычкиlocal unit = CreateUnitByName( npc_dota_creep_badguys_melee, point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, 4 )
Значит у тебя не был создан на карте объект с именем "way1"Прочитал все страницы, и у всех разные ошибки. Я при повторении этого гайда в консоли получаю .
\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 пустой?