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

Добавление предметов в игру

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

Оффлайн GGB.GG

  • 4
  • Мощь: 0
Привет, создал свой первый недопредмет, по гайду customgames.ru/fo...x.php?topic=165.0
Вроде всё правильно, а предмет даже в лавке не появился.
npc\npc_items_custom.txt\...
Спойлер
"item_bfury_datadriven"
   {
"BaseClass"                  "item_datadriven" //указываем класс предмета
"ID"                     "1145"  //У вольво предмет 145 ID, мы ставим 1145, для себя
"AbilityBehavior"            "DOTA_ABILITY_BEHAVIOR_PASSIVE" //пассивка (сплэш)
"Model"                     "models/props_gameplay/red_box.vmdl"  //красный ящик, модель
"Effect"                  "particles/generic_gameplay/dropped_item.vpcf"
"AbilityTextureName"         "item_bfury" //иконка предмета
     
      // Item Info
      //-------------------------------------------------------------------------------------------------------------
      "ItemCost"                  "10000" //сколько стоит предмет
      "ItemShopTags"               "damage;health_regen;mana_regen;hard_to_tag" //тэги для
      "ItemQuality"               "epic" //качество предмета стоит epic, значит предмет редкий
      "ItemAliases"               "bf;battle fury" //алиасы для предмета, позже скажу для чего
      "ItemDeclarations"            "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" //показывать союзникам что вы его купили, озвучивать героем предмет, показывать броадкастерам что он был куплен

//С подготовкой закончено, теперь сам datadriven-код.
         
      // Special   
      //-------------------------------------------------------------------------------------------------------------
      "AbilitySpecial" //Специальные значения предмета, чтобы мы могли их брать отсюда
      {
         "01"
         {
            "var_type"                  "FIELD_INTEGER"
            "bonus_damage"               "500" //Бонусный урон, пока что просто задается как параметр, если оставите его так, то он не будет давать урона
         }
         "02"
         {
            "var_type"                  "FIELD_INTEGER"
            "bonus_health_regen"         "100" //бонусная регенерация хп
         }
         "03"
         {
            "var_type"                  "FIELD_INTEGER"
            "bonus_mana_regen_percentage"   "300" //бонусная регенерация маны в процентах
         }
         "04"
         {
            "var_type"                  "FIELD_INTEGER"
            "cleave_damage_percent"         "150" //процент сплэша
         }
         "05"
         {
            "var_type"                  "FIELD_INTEGER"
            "cleave_radius"               "500" //радиус сплэша
         }
      }
     


      "Modifiers" //Секция модифиеры
      {
         "modifier_item_bfury_datadriven" //Модификатор баттлы
         {
            "Passive"         "1" //пассивный
            "IsHidden"         "1" //скрытый, не виден на панели статусов
            "Attributes"       "MODIFIER_ATTRIBUTE_MULTIPLE" //Мультипл тут означает что предмет усиливает сразу несколько параметров
           
            "Properties"
            {
               "MODIFIER_PROPERTY_BASEATTACK_BONUSDAMAGE"      "%bonus_damage" // Как вы видите, мы берем это значение из переменной которой мы указывали выше, в AbilitySpecial, там мы указали 65 урона, значит даваться будет 65). Но это всего лишь модификатор! Урон всё ещё не дается при поднятии предмета, мы обязательно должны "Дать" этот модификатор какому-либо юниту, в данном случае тому, кто поднимет предмет
               "MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT"      "%bonus_health_regen"
               "MODIFIER_PROPERTY_MANA_REGEN_PERCENTAGE"      "%bonus_mana_regen_percentage" //То же самое с регеном маны и хп.
            }



           
            "OnCreated" //СОБЫТИЕ: когда юнит поднимает предмет, мы запускаем скрипт
            {
               "RunScript" //вот тут секция запуска скрипта
               {
                  "ScriptFile"      "items/item_bfury.lua" //название скрипта
                  "Function"         "modifier_item_bfury_datadriven_on_created" //функция внутри скрипта
               }
            }
           
            "OnDestroy" //СОБЫТИЕ: когда предмет выкидывается
            {
               "RunScript" //запускаем скрипт)
               {
                  "ScriptFile"      "items/item_bfury.lua" //путь к скрипту)
                  "Function"         "modifier_item_bfury_datadriven_on_destroy" //функция
               }
            }
           
            //Итак теперь мы каждые .03 секунды будем проверять
            //вдруг герой ближнего боя поменял свой тип атаки на дальний бой, тогда мы заберем сплэш
            "ThinkInterval" ".03" //таймер, который будет выполняться каждые 0.03 сек.
            "OnIntervalThink" //СОБЫТИЕ: на каждое срабатывание таймера
            {
               "RunScript" //запустить скрипт
               {
                  "ScriptFile"      "items/item_bfury.lua"
                  "Function"         "modifier_item_bfury_datadriven_on_interval_think" //функция проверки
               }
            }
         }
         "modifier_item_bfury_datadriven_cleave"  //Вот теперь тот самый сплэш.
         {
            "Passive"         "0" //активная
            "IsHidden"         "1" //скрытый модификатор
            "Attributes"       "MODIFIER_ATTRIBUTE_MULTIPLE" //даёт аттрибуты
           
            "OnAttackLanded" //СОБЫТИЕ: когда юнит обладающий предметом атаковал
            {
               "CleaveAttack" //сделать сплэш атаку.
               {
                  "CleavePercent"      "%cleave_damage_percent" //процент сплэша, указан выше
                  "CleaveRadius"      "%cleave_radius" //радиус
                  "CleaveEffect"      "particles/items_fx/battlefury_cleave.vpcf" //эффект
               }
               
               "FireSound" //Так же воспроизвести звук
               {
                  "EffectName"            "DOTA_Item.BattleFury" //путь к звуку
                  "Target"               "TARGET" //на цель, обладателя предмета
               }
            }
           
            //Continually check to see if the hero this modifier is on is still melee
            //(since some units, like Troll Warlord, can switch between ranged/melee forms).
            "ThinkInterval" ".03"  //ещё одна доп. проверка на ближника/дальника
            "OnIntervalThink"
            {
               "RunScript"
               {
                  "ScriptFile"      "items/item_bfury.lua"
                  "Function"         "modifier_item_bfury_datadriven_cleave_on_interval_think"
               }
            }
         }
      }
   }
[свернуть]

vscripts\item_bfury.lua\...
Спойлер
--[[ ============================================================================================================
   Author: Rook
   Date: February 2, 2015
   Called when a Battle Fury is acquired.  Grants the cleave modifier if the caster is a melee hero.
================================================================================================================= ]]
function modifier_item_bfury_datadriven_on_created(keys)
   if not keys.caster:IsRangedAttacker() then
      keys.ability:ApplyDataDrivenModifier(keys.caster, keys.caster, "modifier_item_bfury_datadriven_cleave", {duration = -1})
   end
end


--[[ ============================================================================================================
   Author: Rook
   Date: February 2, 2015
   Called when a Battle Fury is removed from the caster's inventory.  Removes a cleave modifier if they are a melee hero.
================================================================================================================= ]]
function modifier_item_bfury_datadriven_on_destroy(keys)
   if not keys.caster:IsRangedAttacker() then
      keys.caster:RemoveModifierByName("modifier_item_bfury_datadriven_cleave")
   end
end


--[[ ============================================================================================================
   Author: Rook
   Date: February 2, 2015
   Called regularly while the caster has a Battle Fury in their inventory.  If the caster has switched from ranged
   to melee, give them cleave modifier(s).
================================================================================================================= ]]
function modifier_item_bfury_datadriven_on_interval_think(keys)
   if not keys.caster:IsRangedAttacker() and not keys.caster:HasModifier("modifier_item_bfury_datadriven_cleave") then
      for i=0, 5, 1 do
         local current_item = keys.caster:GetItemInSlot(i)
         if current_item ~= nil then
            if current_item:GetName() == "item_bfury_datadriven" then
               keys.ability:ApplyDataDrivenModifier(keys.caster, keys.caster, "modifier_item_bfury_datadriven_cleave", {duration = -1})
            end
         end
      end
   end
end


--[[ ============================================================================================================
   Author: Rook
   Date: February 2, 2015
   Called regularly while the caster has at least one cleave modifier from Battle Fury.  If the caster is no longer
   melee (which would be the case on, for example, Troll Warlord), remove the cleave modifiers from the caster.
================================================================================================================= ]]
function modifier_item_bfury_datadriven_cleave_on_interval_think(keys)
   if keys.caster:IsRangedAttacker() then
      while keys.caster:HasModifier("modifier_item_bfury_datadriven_cleave") do
         keys.caster:RemoveModifierByName("modifier_item_bfury_datadriven_cleave")
      end
   end
end
[свернуть]
В чём проблема данного кода? Или я тупень?

Оффлайн I_GRIN_I

  • Продвинутый
  • 636
  • Мощь: 11
  • Научиться бы скриптить...
Re: Добавление предметов в игру
« Ответ #1 : 10-10-2017, 12:17:15 »
GGB.GG, чтобы он появился в магазине, его нужно добавить в магазин. В поиске название предмета введи и увидишь его.

Оффлайн GGB.GG

  • 4
  • Мощь: 0
Re: Добавление предметов в игру
« Ответ #2 : 10-10-2017, 13:14:07 »
GGB.GG, чтобы он появился в магазине, его нужно добавить в магазин. В поиске название предмета введи и увидишь его.
Уже вводил, не нашёл

Оффлайн Son1cPr00wer

  • 23
  • Мощь: 0
  • H3110 W0Я1D
Re: Добавление предметов в игру
« Ответ #3 : 10-10-2017, 23:10:30 »
напиши в чат доты
Код
 -item item_bfury_datadriven
Если у тебя в инвентаре не появится, значит где-то ошибка.
И в npc_items_custom.txt у тебя указан путь items/item_bfury.lua, стало быть тебе надо создать папку items в папке vscripts, и туда кинуть луашку.