Простые вопросы #3

kain

Активный
2 Окт 2015
125
63
steamcommunity.com
Проект
GreenCircleTD
Есть ли возможность запускать аддон на разных языках?
он всегда запускается на разных языках. (по умолчанию это язык на котором стим запускается)
но можно и принудительно указать язык запуска другой :
*:\Steam\steamapps\common\dota 2 beta\game\bin\win64\dota2cfg.exe" -addon test -novid -language english -toconsole
 
  • Нравится
Реакции: vulkantsk и fabio_longo

Prostack

Новичок
7 Окт 2022
1
0

Салют всем!


Столкнулся давно с этой проблемой, пытался решить как-то, не смог.
Вкратце, есть самые обычные кастомные крипы.
Всего существует 4 пачки кастомных крипов.
Все волны у меня записаны через переменную.​


Начинается Функция:​


Идет с горном первая пачка крипов она умирает об тавр.
=>Спавнится вторая пачка крипов она умирает об тавр.
=>Спавнится третья пачка крипов она умирает об тавр.
=>Спавнится четвертая пачка крипов она умирает об тавр.​


Потом стоит повтор этой функции​


Идет первая пачка крипов она умирает об тавр.​

=>Спавнится вторая пачка крипов она умирает об тавр, НО НЕ СПАВНИТСЯ ТРЕТИЯ ПАЧКА КРИПОВ, А СПАВНИТСЯ ТОГДА КОГДА УМИРАЕТ ЛЮБОЙ ДРУГОЙ КРИП НА КАРТЕ, БУДЬ ЭТО НЕЙТРАЛ ИЛИ ВРАЖЕСКИЙ КРИП..​

=>Спавнится третья пачка крипов она умирает об тавр.​

=>Спавнится четвертая пачка крипов она умирает об тавр.​


Идет повтор этой функции​

Идет первая пачка крипов она умирает об тавр.​

=>Спавнится вторая пачка крипов она умирает об тавр, НО НЕ СПАВНИТСЯ ТРЕТИЯ ПАЧКА КРИПОВ, А СПАВНИТСЯ ТОГДА КОГДА УМИРАЕТ ЛЮБОЙ ДРУГОЙ КРИП НА КАРТЕ, БУДЬ ЭТО НЕЙТРАЛ ИЛИ ВРАЖЕСКИЙ КРИП..​

=>Спавнится третья пачка крипов она умирает об тавр.​

=>Спавнится четвертая пачка крипов она умирает об тавр.

То есть, проблема именно в повторе функции во второй пачке и я не понимаю как это решить. (Крипы все гудгайс, все крипы нормальные и прописаны в npc_untits_custom и не повторяются в одном месте)
Сколько просил помочь, игнорили в дискорде.
Кот вот:​

Lua:
CREEP = 0 -- Переменная

function GameMode:OnGameInProgress() -- Спавнер первого крипа

  local waypoint = Entities:FindByName( nil, "wp_1") -- Куда идут крипы
  local point = Entities:FindByName( nil, "spawner"):GetAbsOrigin() -- спавнер крипов
  local unit1 = CreateUnitByName("npc_dota_creep_goodguys_melee1", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS) -- 1 крип
  local unit2 = CreateUnitByName("npc_dota_creep_goodguys_melee2", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS) -- 2 крип
  local unit3 = CreateUnitByName("npc_dota_creep_goodguys_melee3", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS) -- 3 крип
  local unit4 = CreateUnitByName("npc_dota_creep_goodguys_ranged1", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS) -- 4 крип
  unit1:SetInitialGoalEntity( waypoint ) -- Куда идет 1 крип
  unit2:SetInitialGoalEntity( waypoint ) -- Куда идет 2 крип
  unit3:SetInitialGoalEntity( waypoint ) -- Куда идет 3 крип
  unit4:SetInitialGoalEntity( waypoint ) -- Куда идет 4 крип

end

function GameMode:OnEntityKilled(keys)
local waypoint = Entities:FindByName( nil, "wp_1")
local killedUnit = EntIndexToHScript( keys.entindex_killed )
local point = Entities:FindByName( nil, "spawner"):GetAbsOrigin()

    if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee1" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee2" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee3" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_ranged1" then
    CREEP = CREEP + 1
  end

  if CREEP == 4 or CREEP == 36 then
      local unit5 = CreateUnitByName("npc_dota_creep_goodguys_melee4", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit6 = CreateUnitByName("npc_dota_creep_goodguys_melee5", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit7 = CreateUnitByName("npc_dota_creep_goodguys_ranged2", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit8 = CreateUnitByName("npc_dota_creep_goodguys_flagbearer1", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      unit5:SetInitialGoalEntity( waypoint )
    unit6:SetInitialGoalEntity( waypoint )
    unit7:SetInitialGoalEntity( waypoint )
    unit8:SetInitialGoalEntity( waypoint )

    CREEP = 4
    
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee4" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee5" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_ranged2" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_flagbearer1" then
    CREEP = CREEP + 1
  end

  if CREEP == 9 then
      local unit9 = CreateUnitByName("npc_dota_creep_goodguys_melee6", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit10 = CreateUnitByName("npc_dota_creep_goodguys_melee7", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit11 = CreateUnitByName("npc_dota_creep_goodguys_ranged3", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit12 = CreateUnitByName("npc_dota_creep_goodguys_melee8", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit13 = CreateUnitByName("npc_dota_goodguys_siege1", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      unit9:SetInitialGoalEntity( waypoint )
    unit10:SetInitialGoalEntity( waypoint )
    unit11:SetInitialGoalEntity( waypoint )
    unit12:SetInitialGoalEntity( waypoint )
    unit13:SetInitialGoalEntity( waypoint )

    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee6" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee7" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_ranged3" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee8" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_goodguys_siege1" then
    CREEP = CREEP + 1
  end

  if CREEP == 15 then
      local unit14 = CreateUnitByName("npc_dota_creep_goodguys_melee9", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit15 = CreateUnitByName("npc_dota_creep_goodguys_melee10", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit16 = CreateUnitByName("npc_dota_creep_goodguys_ranged4", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit17 = CreateUnitByName("npc_dota_creep_goodguys_flagbearer2", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit18 = CreateUnitByName("npc_dota_goodguys_siege2", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      unit14:SetInitialGoalEntity( waypoint )
    unit15:SetInitialGoalEntity( waypoint )
    unit16:SetInitialGoalEntity( waypoint )
    unit17:SetInitialGoalEntity( waypoint )
    unit18:SetInitialGoalEntity( waypoint )

    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee9" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee10" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_ranged4" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_flagbearer2" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_goodguys_siege2" then
    CREEP = CREEP + 1
  end

  if CREEP == 21 then

      local unit19 = CreateUnitByName("npc_dota_creep_goodguys_melee11", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit20 = CreateUnitByName("npc_dota_creep_goodguys_melee12", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit21 = CreateUnitByName("npc_dota_creep_goodguys_melee13", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      local unit22 = CreateUnitByName("npc_dota_creep_goodguys_ranged5", point + RandomVector( RandomFloat( 0, 200 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS)
      unit19:SetInitialGoalEntity( waypoint )
      unit20:SetInitialGoalEntity( waypoint )
      unit21:SetInitialGoalEntity( waypoint )
      unit22:SetInitialGoalEntity( waypoint )

      CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee11" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee12" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_melee13" then
    CREEP = CREEP + 1
  end

  if killedUnit:GetUnitName() == "npc_dota_creep_goodguys_ranged5" then
    CREEP = CREEP + 1
  end

  if CREEP == 26 then
      CREEP = CREEP + 10
  end

end
 

.фи

Активный
21 Мар 2018
108
13

Салют всем!

Столкнулся давно с этой проблемой, пытался решить как-то, не смог.​

Попробуй погулить циклы.
Или например выдавать при спауне юниту аттрибут принадлежности к пачке?

Вот примеры (на коленке):

local point = Entities:FindByName( nil, "spawner"):GetAbsOrigin()
for i = 1, 3 do -- тут цикл
local pointRandomizer = point + RandomVector( RandomFloat( 0, 200 ) // тут можно зарандомить крипу тёплое местечко перед тем как спаунить (ну ты понял)
local unitName= "npc_dota_creep_goodguys_melee"..i //-- конкатенация исходя из значения i, то есть имякрипа1 имякрипа2 имякрипа3 (ну ты понял)
local Melee = CreateUnitByName( unitName, pointRandomizer, true, nil, nil, DOTA_TEAM_GOODGUYS )
Melee.FirstPachka = true // при смерти просто проверь if killedUnit.FirstPachka == true then (ну ты понял)
end

Это поможет срезать длину кода и проще будет найти ошибку.
Скорее всего, она связана с тем что если у тебя переменная CREEP равна 36 то чуть ниже ты переписываешь её CREEP = 4. Но это не точно.
 
Последнее редактирование:

Lex

Новичок
13 Дек 2022
7
0
Проект
Angel Arena Black Star
Здрасте.

Короче говоря, у меня есть необходимость залезть внутрь произвольного модификатора, чтобы чекнуть его значения... Если попытаться объяснить понятнее, то нужно узнать, регенерирует ли модификатор хп в процентах. И да, с абилками, написанными на луа, проблем никаких нет. Проблемы начинаются с датаскриптом, ибо возвращает он не таблицы, а юзердату, с которой я хз что делать.
 

Вложения

  • Снимок экрана (7).png
    Снимок экрана (7).png
    254.8 KB · Просмотры: 10
  • Снимок экрана (8).png
    Снимок экрана (8).png
    163 KB · Просмотры: 10

kain

Активный
2 Окт 2015
125
63
steamcommunity.com
Проект
GreenCircleTD
Здрасте.

Короче говоря, у меня есть необходимость залезть внутрь произвольного модификатора, чтобы чекнуть его значения... Если попытаться объяснить понятнее, то нужно узнать, регенерирует ли модификатор хп в процентах. И да, с абилками, написанными на луа, проблем никаких нет. Проблемы начинаются с датаскриптом, ибо возвращает он не таблицы, а юзердату, с которой я хз что делать.
только переопределить функцию модификатора и там произвести нужные замеры, последовательность:
Код:
1 замер ХП до
2 применить модификатор
3 замер ХП после
4 посчитать в нужном виде итог работы модификатора.
почему переопределять, потому это максимальные гарантии близких последовательностей выполнения функций.
userdata это не объекты луа в обычном виде, если угодно проводники между доступным нам lua api и всем остальным функционалом движка.
 

Lex

Новичок
13 Дек 2022
7
0
Проект
Angel Arena Black Star
только переопределить функцию модификатора и там произвести нужные замеры, последовательность:
Код:
1 замер ХП до
2 применить модификатор
3 замер ХП после
4 посчитать в нужном виде итог работы модификатора.
почему переопределять, потому это максимальные гарантии близких последовательностей выполнения функций.
userdata это не объекты луа в обычном виде, если угодно проводники между доступным нам lua api и всем остальным функционалом движка.
Спасибо за фидбек, но я уже всё реализовал через костыль. Банально сделал список нужных абилок и ключей, отвечающих за нужный мне параметр.
 

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
У меня кастомка для одного игрока. Как сделать так, чтобы слотов в лобби было 1? Не максимальное количество игроков на карте, а именно слоты в лобби, чтобы если игрок нажал "Играть", его не закидывало в лобби, а сразу выскочило сообщение "Принять игру", как это сделано в трейнинг полигоне
 

AlexMakeSky

Пользователь
27 Мар 2021
12
3
Проект
Campion Dominion
У меня кастомка для одного игрока. Как сделать так, чтобы слотов в лобби было 1? Не максимальное количество игроков на карте, а именно слоты в лобби, чтобы если игрок нажал "Играть", его не закидывало в лобби, а сразу выскочило сообщение "Принять игру", как это сделано в трейнинг полигоне
GameRules:SetCustomGameTeamMaxPlayers(DOTA_TEAM_GOODGUYS, 1)
и AddonInfo тоже 1
 
  • Нравится
Реакции: fabio_longo

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
GameRules:SetCustomGameTeamMaxPlayers(DOTA_TEAM_GOODGUYS, 1)
и AddonInfo тоже 1
странно, но это не работает. Попробовал даже добавить DOTA_TEAM_BADGUYS, 0, всё равно, в лобби слотов ровно 10. мой addoninfo:
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->
"AddonInfo"
{
"PenaltiesEnabled" "0"
"CheckAFKPlayers" "0"
"TeamCount" "10"
"maps" "chen"
"IsPlayable" "1"
"chen"
{
"MinPlayers" "1"
"MaxPlayers" "1"
}
}
 

AlexMakeSky

Пользователь
27 Мар 2021
12
3
Проект
Campion Dominion
странно, но это не работает. Попробовал даже добавить DOTA_TEAM_BADGUYS, 0, всё равно, в лобби слотов ровно 10. мой addoninfo:
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->
"AddonInfo"
{
"PenaltiesEnabled" "0"
"CheckAFKPlayers" "0"
"TeamCount" "10"
"maps" "chen"
"IsPlayable" "1"
"chen"
{
"MinPlayers" "1"
"MaxPlayers" "1"
}
}
Мне кажется аддон инфо у тебя неправильно написан, чекни мой.
Я не помню, есть ли стандартно функция: function CAddonTemplateGameMode:InitGameMode() в addon_game_mode.lua
Без неё не работает GameRules:SetCustomGameTeamMaxPlayers
 

Вложения

  • 5.png
    5.png
    6.1 KB · Просмотры: 13
  • Нравится
Реакции: fabio_longo

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Мне кажется аддон инфо у тебя неправильно написан, чекни мой.
Я не помню, есть ли стандартно функция: function CAddonTemplateGameMode:InitGameMode() в addon_game_mode.lua
Без неё не работает GameRules:SetCustomGameTeamMaxPlayers
Спасибо! Залил обнову, жду одобрение модерации, сообщу об результате
 

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Мне кажется аддон инфо у тебя неправильно написан, чекни мой.
Я не помню, есть ли стандартно функция: function CAddonTemplateGameMode:InitGameMode() в addon_game_mode.lua
Без неё не работает GameRules:SetCustomGameTeamMaxPlayers
Странно, переделал по твоему примеру - всё так же, слотов в лобби 10. Видел похожую проблему на форуме, но на неё так же ответ не дали
 

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Странно, переделал по твоему примеру - всё так же, слотов в лобби 10. Видел похожую проблему на форуме, но на неё так же ответ не дали
Лол, зашёл в Dota 2 tools где идёт выбор аддонов, выбрал свой, нажал на шестерёнку, зашёл в настройки, а там стоит maxplayers - 10)) Пока не знаю точно, но возможно именно эта штука мешалась
P.S. В общем, эта настройка как-то пересоздаёт addoninfo так, что всё работает. А до этого, какие бы я вариации настройки не находил, ничего не работало
 
Последнее редактирование:

Lex

Новичок
13 Дек 2022
7
0
Проект
Angel Arena Black Star
Здрасте. Надо запилить встроенный в кастомку гайд, но очень впадлу делать всё с нуля. Мб у кого-то есть готовое решение? На гитхаб там ссылочка с проектом-шаблоном для создания подобных штук...
 
Реклама: