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

[Мини-Гайд] Выпадение предметов . Item Drops .

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

Оффлайн vulkantsk

  • 179
  • Мощь: 4
  • Дотер - игрушка дьявола в руках Габена
Для того , чтобы у юнита была опция выпадения предметов , необходим базовый класс "Creature" :
"BaseClass"                                                        "Creature"
Все манипуляции следует проводить в файле "npc_units_custom.txt" в блоке "Creature"
Код
"Creature"
        {
            "ItemDrops"
            {
                "Consumables"
                {
                    "Item"
                    {
                        "1"             "item_health_potion"
                        "2"             "item_health_potion"
                        "3"             "item_mana_potion"
                        "4"             "item_mana_potion"
                        "5"             "item_enchanted_mango"
                    }
                    "Chance"            "12"
                }
                "StatTomes"
                {
                    "Item"
                    {
                        "1"             "item_book_of_strength"
                        "2"             "item_book_of_agility"
                        "3"             "item_book_of_intelligence"
                    }
                    "Chance"            "1"
                }
                "Trinkets"
                {
                    "Item"
                    {
                        "1"             "item_slippers"
                        "2"             "item_gauntlets"
                        "3"             "item_mantle"
                        "4"             "item_wind_lace"
                        "5"             "item_orb_of_venom"
                        "6"             "item_blight_stone"
                        "7"             "item_branches"
                        "8"             "item_branches"
                        "9"             "item_branches"
                        "10"            "item_ring_of_protection"
                        "11"            "item_sobi_mask"
                        "12"            "item_stout_shield"
                        "13"            "item_faerie_fire"
                    }
                    "Chance"            "8"
                }
            }
        }
"Consumables" , "StatTomes" и "Trinkets" являются названиями списков , которые могут быть абсолютно произвольными  .
"Chance" - шанс выпадения одного предмета из списка.
____________
Гайд является идейным продолжением этих двух гайдов : создание кастомного юнита и поведение юнита  т.к. является частью блока "Creature"
И является переводом части стастьи moddota.com/forum...tadriven-units/p1.
« Последнее редактирование: 21-07-2017, 18:33:33 от vulkantsk »
Денег нет, но вы держитесь !
G ??? ??? D Gabe , W :D LL Pay :D D !

Оффлайн Илья

  • Супермодератор
  • 2131
  • Мощь: 21
Хмм, впервые вижу подобный метод дропа.

Обычно используют такие варианты.

Ну и этот вполне годный для новичков.

Оффлайн I_GRIN_I

  • Продвинутый
  • 608
  • Мощь: 11
  • Научиться бы скриптить...
Илья, это из силтбрейкера, его ток добавили считай

Оффлайн Илья

  • Супермодератор
  • 2131
  • Мощь: 21
Может кто копался в их диалогах и по ним сделает мини-гайд? А то не охота самому в них разбираться, но скоро мне понадобится.

Оффлайн I_GRIN_I

  • Продвинутый
  • 608
  • Мощь: 11
  • Научиться бы скриптить...
Илья, ты про разговорные пузырьки?

Оффлайн Илья

  • Супермодератор
  • 2131
  • Мощь: 21
Илья, ты про разговорные пузырьки?

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

Оффлайн Son1cPr00wer

  • 22
  • Мощь: 0
  • H3110 W0Я1D
По теме - я долго мучался с выпадением, скрестил бульдога с носорогом (пример с форума, с моддб и с вольво), получилось не очень красиво, зато работает, может кому пригодится(как смотрю, на форуме новичков в кодинге много).

addon_game_mode.lua
Код: (addon_game_mode.lua)
-- Create the game mode when we activate
function Activate()
ListenToGameEvent("entity_killed", OnEntityKilled, nil)
ListenToGameEvent("dota_player_killed", OnHeroKilled, self)
        --В этом файле и есть список предметов
GameRules.DropTable = LoadKeyValues("scripts/kv/item_drops.kv")
end
 
--Если кого-либо убили на карте, выпадает шмот из списка
 function OnEntityKilled (event)
   local killedEntity = EntIndexToHScript(event.entindex_killed)
   if killedEntity ~= nil then
print("-----------------------------------Creature Killed--------------------------------------")
RollDrops(killedEntity)

end
end

--Если убили героя, выпадает весь его шмот
function OnHeroKilled(data)
print("----------------------------------------Hero Killed----------------------------------------")
local killedEntity = PlayerResource:GetSelectedHeroEntity(data.PlayerID)
   if killedEntity:GetNumItemsInInventory() ~=0 then
   for i=0,5 do
local item = killedEntity:GetItemInSlot(i);
if item ~= nil then
local position = killedEntity:GetAbsOrigin()
local name = item:GetAbilityName()
killedEntity:RemoveItem(item)
CreateDrop(name, position)
end
end
   end

end

--Обработка списка для крипов
 function RollDrops(unit)
    local DropInfo = GameRules.DropTable[unit:GetUnitName()]
    if DropInfo then
        for item_name,chance in pairs(DropInfo) do
            if RollPercentage(chance) then
                --Создание вещи
                local item = CreateItem(item_name, nil, nil)
                local pos = unit:GetAbsOrigin()
                local drop = CreateItemOnPositionSync( pos, item )
                item:LaunchLoot(false, 200, 0.75, pos+RandomVector(RandomFloat(150,200)))
            end
        end
    end
end

--Здесь выкидываем вещи героя
function CreateDrop (itemName, pos)
   local newItem = CreateItem(itemName, nil, nil)
   newItem:SetPurchaseTime(0)
   CreateItemOnPositionSync(pos, newItem)
   newItem:LaunchLoot(false, 300, 0.75, pos + RandomVector(RandomFloat(50, 350)))
 end   
[свернуть]

item_drops.kv
Код: (item_drops.kv)
--В этом файле прописал лут для самого большого крипа в стаке
"Drops"
{

    "MaxTime"        "60"
    "MaxDropsOnScreen"  "3"
 
    "ItemQualityColors"
    {
        "artifact"  "#FFA500" //Orange
        "epic"      "#8847FF" //Purple
        "rare"      "#4B69FF" //Blue
        "common"    "#00FF00" //Lime Green
        "component" "#FFFFFF" //White
        "consumable" "#FFFFFF" //White
    }


////For Small creep camps
"npc_dota_neutral_kobold_taskmaster"
    {
        "item_egg_shell" "20"
        "item_clarity" "20"
        "item_enchanted_mango" "18"
"item_faerie_fire" "25"
"item_flask" "15"
"item_branches" "18"
"item_circlet" "13"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
"item_slippers" "10"
"item_gauntlets" "10"
        "item_mantle" "10"
        "item_wind_lace" "11"
        "item_orb_of_venom" "9"
        "item_blight_stone" "9"
        "item_bottle" "1"
        "item_quelling_blade" "5"
        "item_ring_of_protection" "13"
        "item_sobi_mask" "13"
"item_stout_shield" "13"
    }
    "npc_dota_neutral_forest_troll_high_priest"
    {
        "item_egg_shell" "20"
        "item_clarity" "20"
        "item_enchanted_mango" "18"
"item_faerie_fire" "25"
"item_flask" "15"
"item_branches" "18"
"item_circlet" "13"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
"item_slippers" "10"
"item_gauntlets" "10"
        "item_mantle" "10"
        "item_wind_lace" "11"
        "item_orb_of_venom" "9"
        "item_blight_stone" "9"
        "item_bottle" "1"
        "item_quelling_blade" "5"
        "item_ring_of_protection" "13"
        "item_sobi_mask" "13"
"item_stout_shield" "13"
    }
    "npc_dota_neutral_gnoll_assassin"
    {
        "item_egg_shell" "15"
        "item_clarity" "16"
        "item_enchanted_mango" "12"
"item_faerie_fire" "20"
"item_flask" "12"
"item_branches" "14"
"item_circlet" "10"
"item_book_of_strength" "1"
        "item_book_of_agility" "1"
        "item_book_of_intelligence" "1"
"item_slippers" "8"
"item_gauntlets" "8"
        "item_mantle" "8"
        "item_wind_lace" "9"
        "item_orb_of_venom" "7"
        "item_blight_stone" "7"
        "item_bottle" "1"
        "item_quelling_blade" "3"
        "item_ring_of_protection" "9"
        "item_sobi_mask" "9"
"item_stout_shield" "9"
    }
    "npc_dota_neutral_ghost"
    {
        "item_egg_shell" "20"
        "item_clarity" "20"
        "item_enchanted_mango" "18"
"item_faerie_fire" "25"
"item_flask" "15"
"item_branches" "18"
"item_circlet" "13"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
"item_slippers" "10"
"item_gauntlets" "10"
        "item_mantle" "10"
        "item_wind_lace" "11"
        "item_orb_of_venom" "9"
        "item_blight_stone" "9"
        "item_bottle" "1"
        "item_quelling_blade" "5"
        "item_ring_of_protection" "13"
        "item_sobi_mask" "13"
"item_stout_shield" "13"
    }
    "npc_dota_neutral_harpy_storm"
    {
        "item_egg_shell" "20"
        "item_clarity" "20"
        "item_enchanted_mango" "18"
"item_faerie_fire" "25"
"item_flask" "15"
"item_branches" "18"
"item_circlet" "13"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
"item_slippers" "10"
"item_gauntlets" "10"
        "item_mantle" "10"
        "item_wind_lace" "11"
        "item_orb_of_venom" "9"
        "item_blight_stone" "9"
        "item_bottle" "1"
        "item_quelling_blade" "5"
        "item_ring_of_protection" "13"
        "item_sobi_mask" "13"
"item_stout_shield" "13"
    }
////For Medium creep camps

    "npc_dota_neutral_centaur_khan"
    {
        "item_egg_shell" "10"
        "item_clarity" "11"
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_circlet" "6"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
        "item_wind_lace" "5"
        "item_orb_of_venom" "9"
        "item_blight_stone" "9"
        "item_bottle" "1"
        "item_quelling_blade" "5"
        "item_ring_of_protection" "5"
        "item_sobi_mask" "5"
"item_stout_shield" "6"
"item_tome_of_knowledge" "1"
"item_belt_of_strength" "10"
"item_robe" "10"
        "item_boots_of_elves" "10"
"item_chainmail" "9"
"item_gloves" "9"
"item_cloak" "9"
"item_magic_wand" "10"
"item_candle" "3"
"item_spirit" "3"
"item_bracer" "3"
"item_soul_ring" "3"
"item_wraith_band" "3"
"item_poor_mans_shield" "3"
"item_null_talisman" "3"
    }
    "npc_dota_neutral_alpha_wolf"
    {
        "item_egg_shell" "10"
        "item_clarity" "11"
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_circlet" "6"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
        "item_wind_lace" "5"
        "item_orb_of_venom" "9"
        "item_blight_stone" "9"
        "item_bottle" "1"
        "item_quelling_blade" "5"
        "item_ring_of_protection" "5"
        "item_sobi_mask" "5"
"item_stout_shield" "6"
"item_tome_of_knowledge" "1"
"item_belt_of_strength" "10"
"item_robe" "10"
        "item_boots_of_elves" "10"
"item_chainmail" "9"
"item_gloves" "9"
"item_cloak" "9"
"item_magic_wand" "10"
"item_candle" "3"
"item_spirit" "3"
"item_bracer" "3"
"item_soul_ring" "3"
"item_wraith_band" "3"
"item_poor_mans_shield" "3"
"item_null_talisman" "3"
    }
    "npc_dota_neutral_satyr_soulstealer"
    {
        "item_egg_shell" "10"
        "item_clarity" "11"
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_circlet" "6"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
        "item_wind_lace" "5"
        "item_orb_of_venom" "9"
        "item_blight_stone" "9"
        "item_bottle" "1"
        "item_quelling_blade" "5"
        "item_ring_of_protection" "5"
        "item_sobi_mask" "5"
"item_stout_shield" "6"
"item_tome_of_knowledge" "1"
"item_belt_of_strength" "10"
"item_robe" "10"
        "item_boots_of_elves" "10"
"item_chainmail" "9"
"item_gloves" "9"
"item_cloak" "9"
"item_magic_wand" "10"
"item_candle" "3"
"item_spirit" "3"
"item_bracer" "3"
"item_soul_ring" "3"
"item_wraith_band" "3"
"item_poor_mans_shield" "3"
"item_null_talisman" "3"
    }
    "npc_dota_neutral_ogre_magi"
    {
        "item_egg_shell" "10"
        "item_clarity" "11"
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_circlet" "6"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
        "item_wind_lace" "5"
        "item_orb_of_venom" "9"
        "item_blight_stone" "9"
        "item_bottle" "1"
        "item_quelling_blade" "5"
        "item_ring_of_protection" "5"
        "item_sobi_mask" "5"
"item_stout_shield" "6"
"item_tome_of_knowledge" "1"
"item_belt_of_strength" "10"
"item_robe" "10"
        "item_boots_of_elves" "10"
"item_chainmail" "9"
"item_gloves" "9"
"item_cloak" "9"
"item_magic_wand" "10"
"item_candle" "3"
"item_spirit" "3"
"item_bracer" "3"
"item_soul_ring" "3"
"item_wraith_band" "3"
"item_poor_mans_shield" "3"
"item_null_talisman" "3"
    }    
"npc_dota_neutral_mud_golem"
    {
        "item_egg_shell" "10"
        "item_clarity" "11"
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_circlet" "6"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
        "item_wind_lace" "5"
        "item_orb_of_venom" "9"
        "item_blight_stone" "9"
        "item_bottle" "1"
        "item_quelling_blade" "5"
        "item_ring_of_protection" "5"
        "item_sobi_mask" "5"
"item_stout_shield" "6"
"item_tome_of_knowledge" "1"
"item_belt_of_strength" "10"
"item_robe" "10"
        "item_boots_of_elves" "10"
"item_chainmail" "9"
"item_gloves" "9"
"item_cloak" "9"
"item_magic_wand" "10"
"item_candle" "3"
"item_spirit" "3"
"item_bracer" "3"
"item_soul_ring" "3"
"item_wraith_band" "3"
"item_poor_mans_shield" "3"
"item_null_talisman" "3"
"item_banana" "1"
    }

////For Hard creep camps

"npc_dota_neutral_satyr_hellcaller"
    {
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
        "item_bottle" "1"
"item_tome_of_knowledge" "1"
"item_oblivion_staff" "8"
"item_void_stone" "8"
"item_ring_of_health" "8"
"item_lifesteal" "3"
"item_candle" "3"
"item_spirit" "3"
"item_banana" "1"
    }
"npc_dota_neutral_polar_furbolg_ursa_warrior"
    {
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
        "item_bottle" "1"
"item_tome_of_knowledge" "1"
"item_oblivion_staff" "8"
"item_void_stone" "8"
"item_ring_of_health" "8"
"item_lifesteal" "3"
"item_candle" "3"
"item_spirit" "3"
"item_banana" "1"
    }  
"npc_dota_neutral_enraged_wildkin"
    {
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
        "item_bottle" "1"
"item_tome_of_knowledge" "1"
"item_oblivion_staff" "8"
"item_void_stone" "8"
"item_ring_of_health" "8"
"item_lifesteal" "3"
"item_candle" "3"
"item_spirit" "3"
"item_banana" "1"
    }
"npc_dota_neutral_dark_troll_warlord"
    {
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
        "item_bottle" "1"
"item_tome_of_knowledge" "1"
"item_oblivion_staff" "8"
"item_void_stone" "8"
"item_ring_of_health" "8"
"item_lifesteal" "3"
"item_candle" "3"
"item_spirit" "3"
"item_banana" "1"
    }  

////For Ancient creep camps

"npc_dota_neutral_black_dragon"
    {
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
"item_platemail" "5"
"item_tome_of_knowledge" "1"
"item_talisman_of_evasion" "5"
"item_hyperstone" "3"
"item_ultimate_orb" "3"
"item_demon_edge" "3"
"item_candle" "3"
"item_spirit" "3"
"item_banana" "1"
"item_ogre_axe" "5"
"item_blade_of_alacrity" "5"
"item_staff_of_wizardry" "5"
"item_mithril_hammer" "5"
"item_javelin" "5"
"item_broadsword" "7"
    }  
"npc_dota_neutral_granite_golem"
    {
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
"item_platemail" "5"
"item_tome_of_knowledge" "1"
"item_talisman_of_evasion" "5"
"item_hyperstone" "3"
"item_ultimate_orb" "3"
"item_demon_edge" "3"
"item_candle" "3"
"item_spirit" "3"
"item_banana" "1"
"item_ogre_axe" "5"
"item_blade_of_alacrity" "5"
"item_staff_of_wizardry" "5"
"item_mithril_hammer" "5"
"item_javelin" "5"
"item_broadsword" "7"
    }  
"npc_dota_neutral_big_thunder_lizard"
    {
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
"item_platemail" "5"
"item_tome_of_knowledge" "1"
"item_talisman_of_evasion" "5"
"item_hyperstone" "3"
"item_ultimate_orb" "3"
"item_demon_edge" "3"
"item_candle" "3"
"item_spirit" "3"
"item_banana" "1"
"item_ogre_axe" "5"
"item_blade_of_alacrity" "5"
"item_staff_of_wizardry" "5"
"item_mithril_hammer" "5"
"item_javelin" "5"
"item_broadsword" "7"
    }  
"npc_dota_neutral_prowler_shaman"
{
        "item_enchanted_mango" "9"
"item_flask" "7"
"item_book_of_strength" "3"
        "item_book_of_agility" "3"
        "item_book_of_intelligence" "3"
"item_platemail" "5"
"item_tome_of_knowledge" "1"
"item_talisman_of_evasion" "5"
"item_hyperstone" "5"
"item_ultimate_orb" "3"
"item_demon_edge" "3"
"item_candle" "3"
"item_spirit" "3"
"item_banana" "8"
"item_ogre_axe" "5"
"item_blade_of_alacrity" "5"
"item_staff_of_wizardry" "5"
"item_mithril_hammer" "5"
"item_javelin" "5"
"item_broadsword" "7"
    }
}
[свернуть]
Форматирование съехало куда-то  ;D
Пишу в Notepad++, привык просто)

Оффлайн Son1cPr00wer

  • 22
  • Мощь: 0
  • H3110 W0Я1D
хахха, да, про speechBubble. Стандартные же перестали работать.
А тут смотрел на ютюбе прохождение этой компании и увидел, что они там были.
Взял на заметку себе глянуть в будущем, но может кто-то уже глянул и разобрался с ними.
Сегодня лазил по файлам силта, обнаружил, что на крипов вешается модифаер на старте modifier_npc_dialog или modifier_npc_dialog_notify (он вроде как при принятии квеста, если таковой имеется, или наоборот)
Вот например кусок кода одного из солдат на ограх, которого надо было спасти
modifier_imprisoned_soldier.lua
Код
function modifier_imprisoned_soldier:OnTeleported( params )
if IsServer() then
if params.unit == self:GetParent() then
self:GetParent():RemoveAbility( self:GetAbility():GetAbilityName() )
self:GetParent():Interrupt()
self:GetParent():AddNewModifier( self:GetParent(), nil, "modifier_npc_dialog", { duration = -1 } )
self:Destroy()

local hAnimationBuff = self:GetParent():FindModifierByName( "modifier_stack_count_animation_controller" )
if hAnimationBuff ~= nil and self:GetParent():GetUnitName() ~= "npc_dota_radiant_captain" and self:GetParent():GetUnitName() ~= "npc_dota_creature_friendly_ogre_tank" then
local nRandomAnim = RandomInt( 0, 3 )
if nRandomAnim == 0 then
hAnimationBuff:SetStackCount( ACT_DOTA_IDLE_SLEEPING )
self:GetParent():RemoveModifierByName( "modifier_npc_dialog" )
end
if nRandomAnim == 1 then
hAnimationBuff:SetStackCount( ACT_DOTA_LOOK_AROUND )
end
if nRandomAnim == 2 then
hAnimationBuff:SetStackCount( ACT_DOTA_SHARPEN_WEAPON )
end
end
end
end
end
[свернуть]

Также в файле events.lua был обнаружен кусок кода. Как я понимаю, записки, которые нужно было читать и собирать для ачивки в этом ивенте работают на том же принципе, просто выглядят покрасочнее.
events.lua
Код
function CDungeon:OnDialogBegin( hPlayerHero, hDialogEnt )
local Dialog = self:GetDialog( hDialogEnt )
if Dialog == nil then
print( "CDungeon:OnDialogBegin - ERROR: No Dialog found for " .. hDialogEnt:GetUnitName() )
return
end

if self.bConfirmPending == true then
print( "CDungeon:OnDialogBegin - Cannot dialog, a confirm dialog is pending." )
return
end

if Dialog.szRequireQuestActive ~= nil then
if self:IsQuestActive( Dialog.szRequireQuestActive ) == false then
print( "CDungeon:OnDialogBegin - Required Active Quest for dialog line not active." )
return
end
end

local bShowAdvanceDialogButton = true
local NextDialog = self:GetDialogLine( hDialogEnt, hDialogEnt.nCurrentLine + 1 )
if Dialog.bPlayersConfirm == true or NextDialog == nil or NextDialog.bPlayersConfirm == true or Dialog.bForceBreak == true then
bShowAdvanceDialogButton = false
end

local netTable = {}
netTable["DialogEntIndex"] = hDialogEnt:entindex()
netTable["PlayerHeroEntIndex"] = hPlayerHero:entindex()
netTable["DialogText"] = Dialog.szText
netTable["DialogAdvanceTime"] = Dialog.flAdvanceTime
netTable["DialogLine"] = hDialogEnt.nCurrentLine
netTable["ShowAdvanceButton"] = bShowAdvanceDialogButton
netTable["SendToAll"] = Dialog.bSendToAll
netTable["DialogPlayerConfirm"] = Dialog.bPlayersConfirm
netTable["ConfirmToken"] = Dialog.szConfirmToken
netTable["JournalEntry"] = hDialogEnt:FindAbilityByName( "ability_journal_note" ) ~= nil
netTable["WardenNote"] = hDialogEnt:FindAbilityByName( "ability_warden_note" ) ~= nil

--print("removing modifier from unit")
hDialogEnt:RemoveModifierByName( "modifier_npc_dialog_notify" )

for _,zone in pairs( self.Zones ) do
zone:OnDialogBegin( hDialogEnt )
end

if Dialog.bPlayersConfirm == true then
self.bConfirmPending = true
end

if Dialog.bSkipFacePlayer ~= true then
hDialogEnt.vOriginalFaceDir = hDialogEnt:GetOrigin() + hDialogEnt:GetForwardVector() * 50
hDialogEnt:FaceTowards( hPlayerHero:GetOrigin() )
end

if Dialog.Gesture ~= nil then
hDialogEnt:StartGesture( Dialog.Gesture )
end

if Dialog.Sound ~= nil then
hDialogEnt:EmitSoundParams( Dialog.Sound, 0, VOICE_VOLUME, 0 )
end

if Dialog.bAdvance == true then
hDialogEnt.nCurrentLine = hDialogEnt.nCurrentLine + 1
end

if Dialog.szGiveItemName ~= nil then
local newItem = CreateItem( Dialog.szGiveItemName, nil, nil )
if hPlayerHero:HasAnyAvailableInventorySpace() then
hPlayerHero:AddItem( newItem )
else
if newItem ~= nil then
local drop = CreateItemOnPositionSync( hPlayerHero:GetAbsOrigin(), newItem )
local dropTarget = hPlayerHero:GetAbsOrigin() + RandomVector( RandomFloat( 50, 150 ) )
newItem:LaunchLoot( false, 150, 0.75, dropTarget )
end
end
end

if Dialog.bDialogStopsMovement == true then
hDialogEnt:SetMoveCapability( DOTA_UNIT_CAP_MOVE_NONE )
end

if hDialogEnt:FindAbilityByName( "ability_journal_note" ) ~= nil then
local szJournalNumber = string.match( Dialog.szText, "chef_journal_(%d+)" )
if szJournalNumber ~= nil then
local nJournalNumber = tonumber( szJournalNumber );
local nPlayerID = hPlayerHero:GetPlayerID()
self:OnPlayerFoundChefNote( nPlayerID, nJournalNumber )
end
end

if hDialogEnt:FindAbilityByName( "ability_warden_note" ) ~= nil then
local szWardenNoteNumber = string.match( Dialog.szText, "warden_log_(%d+)" )
if szWardenNoteNumber ~= nil then
local nWardenNoteNumber = tonumber( szWardenNoteNumber );
local nPlayerID = hPlayerHero:GetPlayerID()
self:OnPlayerFoundWardenNote( nPlayerID, nWardenNoteNumber )
end
end

if Dialog.bSendToAll == true then
CustomGameEventManager:Send_ServerToAllClients( "dialog", netTable )
else
CustomGameEventManager:Send_ServerToPlayer( hPlayerHero:GetPlayerOwner(), "dialog", netTable )
end
end
[свернуть]
Причем для этих записок есть пустые скиллы вроде, но модифаеры в них не прописаны. Скорее всего для навешивания тупо используется фильтр по юнитам с параметрами
Код
"MODIFIER_STATE_NO_HEALTH_BAR"              "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_INVULNERABLE"               "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_BLIND"                      "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_NOT_ON_MINIMAP"             "MODIFIER_STATE_VALUE_ENABLED"
Я в скриптинге и панорамах не силен, но может поможет чем.

Оффлайн Илья

  • Супермодератор
  • 2131
  • Мощь: 21
Да, спасибо, благодаря этому нашел на гитхабе их репозиторий.