Столкнулся с проблемой. В моей кастомке кобольд слишком часто бросает монетки. Иногда доходит до того, что он не успел еще выкинуть коин как начинается сразу анимация другого коина, и так по 2-3 раза.
Где файл или скрипт отвечающий за шанс дропа коина. (Нашёл эту абилку в файлах: (npc_abilities_custom, overboss.lua , items.lua)
Не нашёл строчку с шансом, то ли я слепой, то ли шанса и в помине не было.(хотя я помню когда только создавал кастомку где-то я менял шанс этого дропа коина)
Где файл или скрипт отвечающий за шанс дропа коина. (Нашёл эту абилку в файлах: (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