Как поменять шанс дропа коина(ThrowCoin) из кастомки Overthrow?

Noiz

Новичок
8 Авг 2019
6
0
Проект
Igra Bogov
Столкнулся с проблемой. В моей кастомке кобольд слишком часто бросает монетки. Иногда доходит до того, что он не успел еще выкинуть коин как начинается сразу анимация другого коина, и так по 2-3 раза.
Где файл или скрипт отвечающий за шанс дропа коина. (Нашёл эту абилку в файлах: (npc_abilities_custom, overboss.lua , items.lua)
Не нашёл строчку с шансом, то ли я слепой, то ли шанса и в помине не было.(хотя я помню когда только создавал кастомку где-то я менял шанс этого дропа коина)
C++:
"dota_ability_throw_coin"
    {
        "BaseClass"                            "ability_datadriven"
        "AbilityName"                        "dota_ability_throw_coin"
        "AbilityBehavior"                    "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
        "AbilityCastAnimation"                "ACT_DOTA_CAST_ABILITY_1"
        "AbilityCastPoint"                    "1.5"

        "OnSpellStart"
        {
            "RunScript"
            {
                "ScriptFile"            "overboss.lua"
                "Function"                "ThrowCoin"
            }
        }

        "Modifiers"
        {
            "modifier_dota_ability_throw_coin"
            {
                "IsHidden"                "1"
                "Passive"                "1"
                
                "States"
                {
                    "MODIFIER_STATE_UNSELECTABLE"    "MODIFIER_STATE_VALUE_ENABLED"
                    "MODIFIER_STATE_NO_HEALTH_BAR"    "MODIFIER_STATE_VALUE_ENABLED"
                    "MODIFIER_STATE_INVULNERABLE"    "MODIFIER_STATE_VALUE_ENABLED"
                    "MODIFIER_STATE_OUT_OF_GAME"    "MODIFIER_STATE_VALUE_ENABLED"
                }
            }
        }
    }
    
    "dota_ability_throw_coin_long"
    {
        "BaseClass"                            "ability_datadriven"
        "AbilityName"                        "dota_ability_throw_coin_long"
        "AbilityBehavior"                    "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
        "AbilityCastAnimation"                "ACT_DOTA_CAST_ABILITY_2"
        "AbilityCastPoint"                    "2.5"

        "OnSpellStart"
        {
            "RunScript"
            {
                "ScriptFile"            "overboss.lua"
                "Function"                "ThrowCoin"
            }
        }

        "Modifiers"
        {
            "modifier_dota_ability_throw_coin"
            {
                "IsHidden"                "1"
                "Passive"                "1"
                
                "States"
                {
                    "MODIFIER_STATE_UNSELECTABLE"    "MODIFIER_STATE_VALUE_ENABLED"
                    "MODIFIER_STATE_NO_HEALTH_BAR"    "MODIFIER_STATE_VALUE_ENABLED"
                    "MODIFIER_STATE_INVULNERABLE"    "MODIFIER_STATE_VALUE_ENABLED"
                    "MODIFIER_STATE_OUT_OF_GAME"    "MODIFIER_STATE_VALUE_ENABLED"
                }
            }
        }
    }


Lua:
function ThrowCoin( args )
--    print( "ThrowCoin" )
    local coinAttach = args.caster:ScriptLookupAttachment( "coin_toss_point" )
    local coinSpawn = Vector( 0, 0, 0 )
    if coinAttach ~= -1 then
        coinSpawn = args.caster:GetAttachmentOrigin( coinAttach )
    end
--    print( coinSpawn )
    GameRules:GetGameModeEntity().COverthrowGameMode:SpawnGoldEntity( coinSpawn )
end

Lua:
--[[ items.lua ]]

--Spawns Bags of Gold in the middle
function COverthrowGameMode:ThinkGoldDrop()
    local r = RandomInt( 1, 100 )
    if r > ( 100 - self.m_GoldDropPercent ) then
        self:SpawnGold()
    end
end

function COverthrowGameMode:SpawnGold()
    local overBoss = Entities:FindByName( nil, "@overboss" )
    local throwCoin = nil
    local throwCoin2 = nil
    if overBoss then
        throwCoin = overBoss:FindAbilityByName( 'dota_ability_throw_coin' )
        throwCoin2 = overBoss:FindAbilityByName( 'dota_ability_throw_coin_long' )
    end

    -- sometimes play the long anim
    if throwCoin2 and RandomInt( 1, 100 ) > 80 then
        overBoss:CastAbilityNoTarget( throwCoin2, -1 )
    elseif throwCoin then
        overBoss:CastAbilityNoTarget( throwCoin, -1 )
    else
        self:SpawnGoldEntity( Vector( 0, 0, 0 ) )
    end
end

function COverthrowGameMode:SpawnGoldEntity( spawnPoint )
    EmitGlobalSound("Item.PickUpGemWorld")
    local newItem = CreateItem( "item_bag_of_gold", nil, nil )
    local drop = CreateItemOnPositionForLaunch( spawnPoint, newItem )
    local dropRadius = RandomFloat( self.m_GoldRadiusMin, self.m_GoldRadiusMax )
    newItem:LaunchLootInitialHeight( false, 0, 500, 0.75, spawnPoint + RandomVector( dropRadius ) )
    newItem:SetContextThink( "KillLoot", function() return self:KillLoot( newItem, drop ) end, 20 )
end
 

DDSuper

Друзья CG
31 Май 2019
405
57
Если, я не ошибаюсь то отвечает за шанс, это:
local r = RandomInt(1,100)
if r > ( 100 - self.mGoldDropPercent ) then -- если шанс оказался 100 процентов то оно делает следуещее
self:SpawnGold() -- незнаю но можно попробовать задержку
вот так когда шанс 100 (удача) тогда напиши
wait(1)

local r = RandomInt(1,100)
if r > ( 1 - self.mGoldDropPercent ) then -- Вот например 1 шанс выпал значить оно спавнит его
wait(1) -- Я не думаю что это решение (можно и убрать если меняешь шанс)
self:SpawnGold()
 
Последнее редактирование:

Noiz

Новичок
8 Авг 2019
6
0
Проект
Igra Bogov
Спасибо и за такой ответ). Если не получится постараюсь сам разобраться.
 
Реклама: