CustomGames.ru - Dota 2 пользовательские игры

[Помогите]Настройка каманд(dire(персонажи))

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SanyaDuizFX

  • 37
  • Мощь: 0
У меня есть 2 команды я хочю чтоб за радиант были все кто есть в списки но если ты зашол за dire то утя только 2 перса на выбор. Как так сделать?!
« Последнее редактирование: 21-10-2015, 18:37:09 от SanyaDuizFX »

Оффлайн Илья

  • Супермодератор
  • 1906
  • Мощь: 16
У меня есть 2 команды я хочю чтоб за радиант были все кто есть в списки но если ты зашол за dire то утя только 2 перса на выбор. Как так сделать?!

На выбор пока никак, только если жестко задавать. Почему ты не читаешь форум, все твои вопросы уже рассматривались.

Оффлайн SanyaDuizFX

  • 37
  • Мощь: 0
На выбор пока никак, только если жестко задавать. Почему ты не читаешь форум, все твои вопросы уже рассматривались.
Стой ты кинул сылку я посмотрел, сделал как там но чёт не работает захожу за dire и всеровно тоже самое обычный список просто могу всех выбрать. Можно подробнее.

Оффлайн Илья

  • Супермодератор
  • 1906
  • Мощь: 16
Стой ты кинул сылку я посмотрел, сделал как там но чёт не работает захожу за dire и всеровно тоже самое обычный список просто могу всех выбрать. Можно подробнее.

Ты выложи свой код, куда ты вставил мой код)

Оффлайн SanyaDuizFX

  • 37
  • Мощь: 0
Ты выложи свой код, куда ты вставил мой код)
scripts\vscripts\addon_game_mode.lua

Оффлайн Илья

  • Супермодератор
  • 1906
  • Мощь: 16
scripts\vscripts\addon_game_mode.lua

Я имел в виду содержание этого файла.

Оффлайн SanyaDuizFX

  • 37
  • Мощь: 0
Я имел в виду содержание этого файла.
-- Generated from template

if CAddonTemplateGameMode == nil then
   CAddonTemplateGameMode = class({})
end

function Precache( context )
   --[[
      Precache things we know we'll use.  Possible file types include (but not limited to):
         PrecacheResource( "model", "*.vmdl", context )
         PrecacheResource( "soundfile", "*.vsndevts", context )
         PrecacheResource( "particle", "*.vpcf", context )
         PrecacheResource( "particle_folder", "particles/folder", context )
   ]]
end

-- Create the game mode when we activate
function Activate()
   GameRules.AddonTemplate = CAddonTemplateGameMode()
   GameRules.AddonTemplate:InitGameMode()
end

function CAddonTemplateGameMode:InitGameMode()
   print( "Template addon is loaded." )
   GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
end

-- Evaluate the state of the game
function CAddonTemplateGameMode:OnThink()
   if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
      --print( "Template addon script is running." )
   elseif GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then
      return nil
   end
   return 1
end

 function Precache( context )
    PrecacheResource("particle", "particles/units/heroes/hero_leshrac/leshrac_lightning_bolt.vpcf" , context)
    PrecacheResource("particle", "particles/econ/courier/courier_golden_roshan/golden_roshan_ambient.vpcf" , context)
 end
 
 -- Quest entity that will contain the quest data so it can be referenced later
local entQuestKillBoss = nil

 
-- Call this function from Hammer to start the quest.  Checks to see if the entity has been created, if not, create the entity
-- See "adventure_example.vmap" for syntax on accessing functions
function QuestKillBoss()
   if entQuestKillBoss == nil then
      entQuestKillBoss = SpawnEntityFromTableSynchronous( "quest", { name = "KillBoss", title = "#quest_boss_kill" } )
   end
end


-- Call this function to end the quest.  References the previously created quest if it has been created, if not, should do nothing
function QuestKillBossComplete()
   if entQuestKillBoss ~= nil then
      entQuestKillBoss:CompleteQuest()
   end
end

Оффлайн Илья

  • Супермодератор
  • 1906
  • Мощь: 16
Мгм

Теперь скинь содержимое твоего  CAddonTemplateGameMode.lua

Оффлайн SanyaDuizFX

  • 37
  • Мощь: 0
Мгм

Теперь скинь содержимое твоего  CAddonTemplateGameMode.lua
мм у меня нет такого файла!

Оффлайн Илья

  • Супермодератор
  • 1906
  • Мощь: 16
мм у меня нет такого файла!

Почему-то, я об этом догадывался....


У тебя в "vscripts" только лишь "addon_game_mode.lua" ?

Думаю что да. Тогда, откуда ты его взял? С какого-то примера? И что ты туда самостоятельно вписывал, если вписывал?

Оффлайн Илья

  • Супермодератор
  • 1906
  • Мощь: 16
Чтобы тебе стало понятно: я пытаюсь узнать твой уровень в программировании и твой уровень понимания скрипта lua, чтобы построить дальнейший наш с тобой диалог.

Сдается мне, что ты с программированием на "дрожащее вы" и поэтому, т.к. я все же хочу тебе помочь, мне придется сделать что-то вроде такого же гайда, только для аудитории, не знакомой с программированием (ибо для них то, что там написано, это ад).

Я напишу этот мини гайд в ближайший час, если мои догадки на твой счет верны. Если же нет, то хо-хо, читай вышеуказанный гайд и мы продолжим беседу.

Оффлайн SanyaDuizFX

  • 37
  • Мощь: 0
Почему-то, я об этом догадывался....


У тебя в "vscripts" только лишь "addon_game_mode.lua" ?

Думаю что да. Тогда, откуда ты его взял? С какого-то примера? И что ты туда самостоятельно вписывал, если вписывал?
Когда создаёш аддон поевляется addon_game_mode.lua

Оффлайн Илья

  • Супермодератор
  • 1906
  • Мощь: 16
Когда создаёш аддон поевляется addon_game_mode.lua

Все,  я все понял.

В общем, жди, я сейчас тебе дам базовые знания и ты почувствуешь себя Гарри Поттером или Дэвидом Блэйном, кто тебе больше нравится.
« Последнее редактирование: 22-10-2015, 17:43:23 от Илья »

Оффлайн SanyaDuizFX

  • 37
  • Мощь: 0
Чтобы тебе стало понятно: я пытаюсь узнать твой уровень в программировании и твой уровень понимания скрипта lua, чтобы построить дальнейший наш с тобой диалог.

Сдается мне, что ты с программированием на "дрожащее вы" и поэтому, т.к. я все же хочу тебе помочь, мне придется сделать что-то вроде такого же гайда, только для аудитории, не знакомой с программированием (ибо для них то, что там написано, это ад).

Я напишу этот мини гайд в ближайший час, если мои догадки на твой счет верны. Если же нет, то хо-хо, читай вышеуказанный гайд и мы продолжим беседу.
Да ты прав я не дружу с программированием, но не много понимаю по этому я сижу на формах и читай как, что сделать, будь добар написать для меня гайд и отписатся когда напишешь.

Оффлайн Илья

  • Супермодератор
  • 1906
  • Мощь: 16
Так как я воспринимаю мир через конкретные примеры, то и когда просят объяснить в свободной форме, изъясняю конкретными примерами.

Когда вы создаете свой проект в workshope, в папочке
Цитировать
...\Steam\SteamApps\common\dota 2 beta\game\dota_addons\your_addon\scripts\vscripts
у вас появляется файл с расширением addon_game_mode.lua.  Как можно заметить, расширение у него .lua. Это говорит нам о том, что он написан на языке lua, что является скриптовым языком.

Вот его исходное содержание:

жмяк
Код

if CAddonTemplateGameMode == nil then
CAddonTemplateGameMode = class({})
end

function Precache( context )
--[[
Precache things we know we'll use.  Possible file types include (but not limited to):
PrecacheResource( "model", "*.vmdl", context )
PrecacheResource( "soundfile", "*.vsndevts", context )
PrecacheResource( "particle", "*.vpcf", context )
PrecacheResource( "particle_folder", "particles/folder", context )
]]
end

-- Create the game mode when we activate
function Activate()
GameRules.AddonTemplate = CAddonTemplateGameMode()
GameRules.AddonTemplate:InitGameMode()
end

function CAddonTemplateGameMode:InitGameMode()
print( "Template addon is loaded." )
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
end

-- Evaluate the state of the game
function CAddonTemplateGameMode:OnThink()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
--print( "Template addon script is running." )
elseif GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then
return nil
end
return 1
end

[свернуть]

Я могу взять и просто рассказать, что к чему тут, но мне так дико лень разбирать этот мелкий код по деталям , да и есть более простой способ все объяснить.

Что же мы с этим кодом делаем?  А вот что:

ням
Код
function Precache( context )
--[[
Precache things we know we'll use.  Possible file types include (but not limited to):
PrecacheResource( "model", "*.vmdl", context )
PrecacheResource( "soundfile", "*.vsndevts", context )
PrecacheResource( "particle", "*.vpcf", context )
PrecacheResource( "particle_folder", "particles/folder", context )
]]
end


function Activate()

end

[свернуть]

УДАЛЯЕМ ДОФИГА ЛИШНЕГО.

Так же спешу сообщить,  что если написать две черточки  "--", не помню их названия, то все, что далее в строке последует после этих черточек - комментарий. То есть участок кода, который не будет выполняться. Это как пометки на полях в тетрадке - делаешь чисто для себя, или для кого-то, кто ее будет читать в дальнейшем.

Так же все, что помещено в блок "--[[  ]]"  -так же считается комментарием. Но это супер-пупер коммент, когда вы решили написать стихотворение на полях.

Поэтому, сам компилятор теперь видит лишь это:

Код
function Precache( context )

end

function Activate()

end

Вот теперь я начну объяснять. 
Куски кода вроде этого
Код
function Precache( context )

end

Называются функцией, или методом, кому как удобно.  Начинаются все они в lua с ключевого слова "function", за которым следует название функции, здесь это "Precache" и списком переменных (атрибутов, неизвестных, иероглифов, символов для обозначения чего-либо), которые заключают в круглые скобки. У нас вот, к примеру, в функцию передается какая-то переменная context. Заканчиваются функции ключевым словом "end". Все, что лежит между началом и концом функции - тело функции. Собственно, внутри тела функции и происходит уличная магия.


В данном примере, функция "Precache()" - это вынесенная разработчиками программисту в помощь функция, в которой происходит подгрузка указанных им там моделей.  А функция  "Activate()" так же вынесенная программисту в помощь функция, которая что-нибудь запускает, что ей скажут.

Что делаем дальше? Дальше можем либо быдлокодить в этом файле, либо постараться сделать свой мод красивее, с точки зрения "прозрачности кода", программиста, программы и т.д.
Мы будем стараться делать красиво. Для этого создаем файл с расширением lua и любым удобным вам именем, например сокращением от имени вашего аддона или же полностью имя вашего аддона. Только без пробелов максимум с подчеркиваниями. Если не знаете как создать файл с расширением lua, то создайте текстовый файл (.txt) и поменяйте ему расширение на .lua.

Допустим, у меня теперь в папочке
Цитировать
...\Steam\SteamApps\common\dota 2 beta\game\dota_addons\your_addon\scripts\vscripts
лежат два файла: "addon_game_mode.lua" и "ForTest.lua"

Что творим дальше? Дальше идем в "addon_game_mode.lua" и меняем его:

жмяк жмяк
Код

if ForTest == nil then
_G.ForTest = class({})
end


function Precache( context )

end


function Activate()

end
[свернуть]

 - Что мы сделали?
- Мы сделали так, чтобы наш новый "ForTest.lua" стал восприниматься компилятором, программой.
- А как мы это сделали?
- Очень просто дружок-пирожок, заклинанием

Код
if ForTest == nil then
_G.ForTest = class({})
end

- Ой, а что оно делает?
- Оно, мой сладенький, дает пи......й пассажирам вагона и усаживает нашего "ForTest" на свободное место.

В общем, занесли файл в базу глобальных переменных. Забейте, просто надо так писать. Можно и так, по идеи

Код
if ForTest == nil then
   ForTest = class({})
end

Но я не проверял, работает или нет.

Итак, теперь наш "addon_game_mode.lua" и "ForTest.lua" ходят рядом. Но мы хотим под ручку! Поэтому надо писать это

Код
require( 'ForTest' )

Без этого компилятор не сможет найти путь к вашему "ForTest.lua". Он как бы о нем слышал, из-за того что мы писали выше, но дороги к нему не знает. 
Заклинание "require(  )" тоже является функцией, но ее тело уже описано разработчиками. Она просто берет и подключает ваш "ForTest.lua", который обязан лежать в той же папочке, что и "addon_game_mode.lua". Можно и в другую папочку, но тогда надо писать что-то вроде
Код
require('/другая папочка/ForTest' )

В общем, забейте, мне лень об этом писать.


В итоге, что имеем:

жамк
Код
if ForTest == nil then
_G.ForTest = class({})
end

require( 'ForTest' )


function Precache( context )

end


function Activate()

end
[свернуть]

Теперь они ходят под ручку, ой как здорово!
Теперь давайте залезем в пещеру что мы создали , ForTest.lua.

Файл пустой. Естественно, ведь мы в него ничего не писали. Давайте напишем что-нибудь. Например всеми любимый метод "init":

Код

function ForTest:InitGameMode()
end



Внимание, внимание,  "InitGameMode" - всего лишь имя придуманной нами функции. Можно сделать, например:

Код

function ForTest:AvadaCedavra()
end


И все так же будет работать. Только в дальнейшем я буду писать "InitGameMode", а вы, если назвали функцию по другому, пишите ее.


Опишем тело нашего метода, например, добавим туда функцию, что выводит что-нибудь в консоль:

Код

function ForTest:InitGameMode()

print("------------------------------------game init----------------------------------------")

end


Ути-пути, функция "print()" пишет в консоль то, что в нее помещают. В данном случае в консоли можно будет увидеть "------------------------------------game init----------------------------------------".

Но мы не увидим этого сейчас. Почему? Да потому, что хоть мы и за ручку ходим с "addon_game_mode.lua", она нас все равно не слышит, ибо она глухая на ... . Надо ей записочки разные там оставлять в кармашках. Мы сейчас сделаем одну записочку и тогда наш "ForTest.lua" вдруг заработает:


опля
Код
if ForTest == nil then
_G.ForTest = class({})
end

require( 'ForTest' )


function Precache( context )

end


function Activate()
ForTest:InitGameMode()
end
[свернуть]

 - Ура, вы великолепны.
- Идеальная партия.
- Спасибо, спасибо, хочу передать привет моей маме, моему папе и всем моим родным.

Что мы сделали? Компилятор  начинает компилировать. Доходит до нашего "addon_game_mode.lua". По потребностям выполняет в нем метод "Precache" где-то в тот момент, когда грузится ваш loadscreen на экране. Затем берет и запускает функцию "Activate()". И тут мы ему такие "Опа! Чупа-чупса полижи!".
В общем, говорим ему выполнить метод ForTest:InitGameMode().
И он такой: "опа, а что такое "ForTest"? "  А мы ему об этом говорим тут:

Код
if ForTest == nil then
_G.ForTest = class({})
end

Он такой: "А, да, слышал. А где он спрятался?"

А мы ему об этом как раз тут говорим:
Код
require( 'ForTest' )

И тогдаааа, он берет и лезет к нам в "ForTest.lua" и спрашивает:

"А где тут у вас InitGameMode() ?" 

А мы ему как раз это, уже в "ForTest.lua", сообщаем:


Код

function ForTest:InitGameMode()

print("------------------------------------game init----------------------------------------")

end


И тут мы накрываем поляну, устраиваем пирушку, пьем винцо, вы пьете пивко, все довольны, все восхитительны.


Еще раз содержимое обоих файлов:

addon_game_mode.lua
Код

if ForTest == nil then
_G.ForTest = class({})
end

require( 'ForTest' )


function Precache( context )
--[[
Precache things we know we'll use.  Possible file types include (but not limited to):
PrecacheResource( "model", "*.vmdl", context )
PrecacheResource( "soundfile", "*.vsndevts", context )
PrecacheResource( "particle", "*.vpcf", context )
PrecacheResource( "particle_folder", "particles/folder", context )
]]
end


function Activate()
ForTest:InitGameMode()
end
[свернуть]


ForTest.lua
Код

function ForTest:InitGameMode()

print("------------------------------------game init----------------------------------------")

end
[свернуть]
« Последнее редактирование: 22-10-2015, 19:29:45 от Илья »