Как Делить голду на всех за убийство моба.

GABRIEL

Новичок
26 Янв 2020
5
0
Проект
Dungeon_Adventure
Обшарил уже весь форум и сторонние сайты, везде нашел примерно это:

function GameMode:OnEntityKilled( keys )

local damagebits = keys.damagebits -- This might always be 0 and therefore useless -- хз зачем это
if killedUnit:GetUnitName() == npc_dota_neutral_kobold then -- "bat_1" имя юнита в npc_unit_custom.txt
for i = 0, PlayerResource:GetPlayerCount() - 1 do
local gold = 100 -- кол-во голды за убийство
local player = PlayerResource:GetSelectedHeroEntity(i)
if player:GetTeam() == killerEntity:GetTeam() then
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) -- над головой у игроков появится эффект голды
end
end
end

Но куда вписывать этот код?! Писал в Аддон гейм мод, ничего не получилось
 

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
надо слушателя подключить и npc_dota_neutral_kobold -это название твоего крипа
 

GABRIEL

Новичок
26 Янв 2020
5
0
Проект
Dungeon_Adventure
надо слушателя подключить и npc_dota_neutral_kobold -это название твоего крипа
Прости за мою неопытность. Слушатель это вообще что, и как его подключить? Ты имеешь в виду через OutPuts?

Кстати ты создатель Boss Survival Adventure?
Мне нравится твоя кастомка, благодаря твоему проекту я решился на создание своего, тебе за это спасибо чел)
 
Последнее редактирование:

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
Прости за мою неопытность. Слушатель это вообще что, и как его подключить? Ты имеешь в виду через OutPuts?

Кстати ты создатель Boss Survival Adventure?
Мне нравится твоя кастомка, благодаря твоему проекту я решился на создание своего, тебе за это спасибо чел)
да я автор BSA, спасибо)
слушатель это то, что отслеживает определенные события в игре
ListenToGameEvent( "entity_killed", Dynamic_Wrap( CAddonAdvExGameMode, 'OnEntityKilled' ), self ) - этот отслеживает событие убийства. где-то на форуме есть большой список слушателей.
 

GABRIEL

Новичок
26 Янв 2020
5
0
Проект
Dungeon_Adventure
да я автор BSA, спасибо)
слушатель это то, что отслеживает определенные события в игре
ListenToGameEvent( "entity_killed", Dynamic_Wrap( CAddonAdvExGameMode, 'OnEntityKilled' ), self ) - этот отслеживает событие убийства. где-то на форуме есть большой список слушателей.
Я так понимаю его вписывать в сам код? => ListenToGameEvent( "entity_killed", Dynamic_Wrap( CAddonAdvExGameMode, 'OnEntityKilled' ), self )
CAddonAdvExGameMode это название мода? Как задать название мода?

У меня получилось так:
-- Generated from template

if tutorial == nil then
tutorial = 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
function Activate()
tutorial:InitGameMode()
end

function tutorial:InitGameMode()
print( "Template addon is loaded." )
end

-----------------------------------------------------------------------------------------------------------------------------
function tutorial:OnEntityKilled( keys )
ListenToGameEvent( "entity_killed", Dynamic_Wrap( tutorial, 'OnEntityKilled' ), self )

local damagebits = keys.damagebits -- This might always be 0 and therefore useless
if killedUnit:GetUnitName() == npc_dota_neutral_kobold then
for i = 0, PlayerResource:GetPlayerCount() - 1 do
local gold = 60
local player = PlayerResource:GetSelectedHeroEntity(i)
if player:GetTeam() == killerEntity:GetTeam() then
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
end
end
Посмотреть вложение 866

Но вот ничего не работает(
 
Последнее редактирование:

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
Перемести в InitGameMode
 

GABRIEL

Новичок
26 Янв 2020
5
0
Проект
Dungeon_Adventure
Перемести в InitGameMode
function Activate()
GameRules.AddonAdventure = CAddonAdvExGameMode()
GameRules.AddonAdventure:InitGameMode()
ListenToGameEvent( "entity_killed", Dynamic_Wrap( CAddonAdvExGameMode, 'OnEntityKilled' ), self )

-------------------------------------------------------------------------DARK_KOBOLD----------------------------------------------------------------
if killed_unit:GetUnitName() == "npc_dota_neutral_kobold" then
local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1100, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false )
if #heroes == 1 then
for i = 1, #heroes do
local gold = 125 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 2 then
for i = 1, #heroes do
local gold = 62 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 3 then
for i = 1, #heroes do
local gold = 42 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 4 then
for i = 1, #heroes do
local gold = 31 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 5 then
for i = 1, #heroes do
local gold = 25 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
end

У меня получилась вот такая херня, ниче не работает((
Нужно ли удалять строчку

"BountyGoldMin" "60" // Gold earned min.
"BountyGoldMax" "60" // Gold earned max.
В npc_nits_custom?
 

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
function Activate()
GameRules.AddonAdventure = CAddonAdvExGameMode()
GameRules.AddonAdventure:InitGameMode()
ListenToGameEvent( "entity_killed", Dynamic_Wrap( CAddonAdvExGameMode, 'OnEntityKilled' ), self )

-------------------------------------------------------------------------DARK_KOBOLD----------------------------------------------------------------
if killed_unit:GetUnitName() == "npc_dota_neutral_kobold" then
local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1100, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false )
if #heroes == 1 then
for i = 1, #heroes do
local gold = 125 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 2 then
for i = 1, #heroes do
local gold = 62 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 3 then
for i = 1, #heroes do
local gold = 42 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 4 then
for i = 1, #heroes do
local gold = 31 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 5 then
for i = 1, #heroes do
local gold = 25 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
end
У меня получилась вот такая херня, ниче не работает((
Нужно ли удалять строчку

"BountyGoldMin" "60" // Gold earned min.
"BountyGoldMax" "60" // Gold earned max.
В npc_nits_custom?
если это весь код оно и не будет работать
где твое окончание одной функции и начало другой?
function Activate()
GameRules.AddonAdventure = CAddonAdvExGameMode()
GameRules.AddonAdventure:InitGameMode()
ListenToGameEvent( "entity_killed", Dynamic_Wrap( CAddonAdvExGameMode, 'OnEntityKilled' ), self )
end

function CAddonAdvExGameMode:OnEntityKilled( keys )
local killed_unit = EntIndexToHScript( keys.entindex_killed )
local killer = EntIndexToHScript( keys.entindex_attacker )
if killed_unit:GetUnitName() == "npc_dota_neutral_kobold" then
local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1100, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false )
if #heroes == 1 then
for i = 1, #heroes do
local gold = 125 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 2 then
for i = 1, #heroes do
local gold = 62 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 3 then
for i = 1, #heroes do
local gold = 42 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 4 then
for i = 1, #heroes do
local gold = 31 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 5 then
for i = 1, #heroes do
local gold = 25 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
end

end


и ты взял мой код, он своеобразно написан для определенных целей, ты можешь просто выдавать голду деля ее поровну на всех героев в радиусе, например 100\5=20 всем, а если 4 героя то по 25 и т.д., у меня же голда выдается немного по другому.
 
  • Нравится
Реакции: GABRIEL

GABRIEL

Новичок
26 Янв 2020
5
0
Проект
Dungeon_Adventure
если это весь код оно и не будет работать
где твое окончание одной функции и начало другой?
function Activate()
GameRules.AddonAdventure = CAddonAdvExGameMode()
GameRules.AddonAdventure:InitGameMode()
ListenToGameEvent( "entity_killed", Dynamic_Wrap( CAddonAdvExGameMode, 'OnEntityKilled' ), self )
end

function CAddonAdvExGameMode:OnEntityKilled( keys )
local killed_unit = EntIndexToHScript( keys.entindex_killed )
local killer = EntIndexToHScript( keys.entindex_attacker )
if killed_unit:GetUnitName() == "npc_dota_neutral_kobold" then
local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1100, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false )
if #heroes == 1 then
for i = 1, #heroes do
local gold = 125 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 2 then
for i = 1, #heroes do
local gold = 62 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 3 then
for i = 1, #heroes do
local gold = 42 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 4 then
for i = 1, #heroes do
local gold = 31 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
if #heroes == 5 then
for i = 1, #heroes do
local gold = 25 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)
end
return 0.5
end
end

end


и ты взял мой код, он своеобразно написан для определенных целей, ты можешь просто выдавать голду деля ее поровну на всех героев в радиусе, например 100\5=20 всем, а если 4 героя то по 25 и т.д., у меня же голда выдается немного по другому.
Шаблон бы..
Ну а что делать со значением золота за юнита? его обнулять?

--Нужно ли удалять строчку
"BountyGoldMin" "60" // Gold earned min.
"BountyGoldMax" "60" // Gold earned max.
В npc_nits_custom?

Сорри, я пиздец тупой валенок, уже пятый день ебусь с этим золотом и лоад скрином....
Сделал такой код,

function Activate()
GameRules.AddonAdventure = CAddonAdvExGameMode()
GameRules.AddonAdventure:InitGameMode()
ListenToGameEvent( "entity_killed", Dynamic_Wrap( CAddonAdvExGameMode, 'OnEntityKilled' ), self )
end

function CAddonAdvExGameMode:OnEntityKilled( keys )
local killed_unit = EntIndexToHScript( keys.entindex_killed )
local killer = EntIndexToHScript( keys.entindex_attacker )

if killed_unit:GetUnitName() == "npc_dota_neutral_kobold" then
local heroes = FindUnitsInRadius(killer:GetTeamNumber(),
killed_unit:GetAbsOrigin(),
nil,
1000,
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
DOTA_UNIT_TARGET_HERO,
DOTA_UNIT_TARGET_FLAG_NONE,
FIND_ANY_ORDER,
false )
for i = 1, #heroes == 1 do
local gold = 200 -- кол-во голды
local playerID = heroes:GetPlayerID()
local player = PlayerResource:GetSelectedHeroEntity(playerID )
player:ModifyGold( gold, true, 0 )
SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil)

end
end
end


VScript выдает ошибку
Script Runtime Error: ...ota_addons\tutorial\scripts\vscripts\addon_game_mode.lua:51: attempt to call method 'InitGameMode' (a nil value)
stack traceback:
...ota_addons\tutorial\scripts\vscripts\addon_game_mode.lua:51: in function <...ota_addons\tutorial\scripts\vscripts\addon_game_mode.lua:49>
1580569020396.png
 
Последнее редактирование:

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
там написано что у тебя ошибка при вызове InitGameMode и это в 51 строчке. я же не вижу весь твой addon_game_mode ищи. голд у крипов на 0 иначе будет голда тому кто убил+ голда на всех
 
Реклама: