fabio_longo
Продвинутый
ага) напиши, если получитсяПрото вставить это заместо DropItemAtPosition(killedEntity:GetAbsOrigin(), item)?
ага) напиши, если получитсяПрото вставить это заместо DropItemAtPosition(killedEntity:GetAbsOrigin(), item)?
заработало но почему то падает 2 предметаПокопался в шаблоне Виталика, можешь сделать так
local newItem = CreateItem( "item_dagon_6", nil, nil )
local drop = CreateItemOnPositionForLaunch( killedEntity:GetAbsOrigin(), newItem )
ПолностьюТы полностью либу скопировал или частчино ?
function nestle:OnEntityKilled( data )Ты полностью либу скопировал или частчино ?
я не знаю как сделать чтобы один выпадал а не 2Ты полностью либу скопировал или частчино ?
Ты точно только один предмет заложил в дроп, а не 2? Может у тебя где то двоится код с дропом или цифра где х1 стала х2 дропа , закрепи файл где у тебя код с дропомя не знаю как сделать чтобы один выпадал а не 2
Всмысле код с дропом у меня всё в аддон гейм мод там сразу написано в самой функции какой предмет выпадетТы точно только один предмет заложил в дроп, а не 2? Может у тебя где то двоится код с дропом или цифра где х1 стала х2 дропа , закрепи файл где у тебя код с дропом
if nestle == nil thenХорошо, давай мы не будем тупить и ты приложишь сюда
Lua:-- Весь код связанный с Item Drop -- И как ты его вызываешь и прочее
if nestle == nil then
nestle = class({})
end
-- Create the game mode when we activate
function Activate()
GameRules.AddonTemplate = nestle()
GameRules.AddonTemplate:InitGameMode()
nestle:InitGameMode()
end
function nestle:InitGameMode()
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
GameRules:SetGoldTickTime(1)
GameRules:SetGoldPerTick(2)
GameRules:SetStartingGold(1500)
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 3)
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 3)
GameRules:GetGameModeEntity():SetFreeCourierModeEnabled(true)
GameRules:SetCreepSpawningEnabled(true)
GameRules:SetSafeToLeave(true)
GameRules:GetGameModeEntity():SetThink("OnThink", self, 1)
ListenToGameEvent( "entity_killed", Dynamic_Wrap(nestle, "OnEntityKilled" ), self )
ListenToGameEvent( "entity_killed", Dynamic_Wrap(nestle, "sdoh" ), self )
ListenToGameEvent( "entity_killed", Dynamic_Wrap(nestle, "sdohnight" ), self )
end
-- Evaluate the state of the game
function nestle:OnThink()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
--print( "Template addon script is running." )
elseif GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then
return nil
end
return 1
end
function nestle:OnThink()
if GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then
return nil
elseif GameRules:State_Get() ~= DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
return 1
end
for _, hero in pairs(HeroList:GetAllHeroes()) do
self:eek:nThinkHero(hero)
end
return 1
end
function nestle:eek:nThinkHero(hero)
local team = hero:GetTeamNumber()
hero:AddExperience(10, DOTA_ModifyXP_Unspecified, false, true)
end
function nestle:OnEntityKilled( data )
local killedEntity = EntIndexToHScript( data.entindex_killed )
local newItem = CreateItem( "item_vitality", nil, nil )
if killedEntity:GetUnitName() == "npc_dota_neutral_ice_shaman" then
local drop = CreateItemOnPositionForLaunch( killedEntity:GetAbsOrigin(), newItem )
end
end
function nestle:sdoh( data )
local killedEntity = EntIndexToHScript( data.entindex_killed )
local newItem = CreateItem( "item_platemail_dag", nil, nil )
if killedEntity:GetUnitName() == "npc_dota_neutral_black_dragon" then
local drop = CreateItemOnPositionForLaunch( killedEntity:GetAbsOrigin(), newItem )
end
end
function nestle:sdohnight( data )
local killedEntity = EntIndexToHScript( data.entindex_killed )
local newItem = CreateItem( "item_energy", nil, nil )
if killedEntity:GetUnitName() == "npc_dota_neutral_granite_golem" then
local drop = CreateItemOnPositionForLaunch( killedEntity:GetAbsOrigin(), newItem )
end
end
ИзвиниВсе же.. ты затупил.. ну есть же кнопка вставки кода...
Lua:if nestle == nil then nestle = class({}) end -- Create the game mode when we activate function Activate() GameRules.AddonTemplate = nestle() GameRules.AddonTemplate:InitGameMode() nestle:InitGameMode() end function nestle:InitGameMode() GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 ) GameRules:SetGoldTickTime(1) GameRules:SetGoldPerTick(2) GameRules:SetStartingGold(1500) GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 3) GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 3) GameRules:GetGameModeEntity():SetFreeCourierModeEnabled(true) GameRules:SetCreepSpawningEnabled(true) GameRules:SetSafeToLeave(true) GameRules:GetGameModeEntity():SetThink("OnThink", self, 1) ListenToGameEvent( "entity_killed", Dynamic_Wrap(nestle, "OnEntityKilled" ), self ) ListenToGameEvent( "entity_killed", Dynamic_Wrap(nestle, "sdoh" ), self ) ListenToGameEvent( "entity_killed", Dynamic_Wrap(nestle, "sdohnight" ), self ) end -- Evaluate the state of the game function nestle:OnThink() if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then --print( "Template addon script is running." ) elseif GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then return nil end return 1 end function nestle:OnThink() if GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then return nil elseif GameRules:State_Get() ~= DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then return 1 end for _, hero in pairs(HeroList:GetAllHeroes()) do self:eek:nThinkHero(hero) end return 1 end function nestle:eek:nThinkHero(hero) local team = hero:GetTeamNumber() hero:AddExperience(10, DOTA_ModifyXP_Unspecified, false, true) end function nestle:OnEntityKilled( data ) local killedEntity = EntIndexToHScript( data.entindex_killed ) local newItem = CreateItem( "item_vitality", nil, nil ) if killedEntity:GetUnitName() == "npc_dota_neutral_ice_shaman" then local drop = CreateItemOnPositionForLaunch( killedEntity:GetAbsOrigin(), newItem ) end end function nestle:sdoh( data ) local killedEntity = EntIndexToHScript( data.entindex_killed ) local newItem = CreateItem( "item_platemail_dag", nil, nil ) if killedEntity:GetUnitName() == "npc_dota_neutral_black_dragon" then local drop = CreateItemOnPositionForLaunch( killedEntity:GetAbsOrigin(), newItem ) end end function nestle:sdohnight( data ) local killedEntity = EntIndexToHScript( data.entindex_killed ) local newItem = CreateItem( "item_energy", nil, nil ) if killedEntity:GetUnitName() == "npc_dota_neutral_granite_golem" then local drop = CreateItemOnPositionForLaunch( killedEntity:GetAbsOrigin(), newItem ) end end
if nestle == nil then
nestle = class({})
end
function Activate()
nestle:InitGameMode()
end
function nestle:InitGameMode()
ListenToGameEvent( "entity_killed", Dynamic_Wrap(nestle, "OnEntityKilled" ), self )
end
function nestle:OnEntityKilled( data )
local killedEntity = EntIndexToHScript( data.entindex_killed )
local deathPos = killedEntity:GetAbsOrigin()
local item_vitality = CreateItem( "item_vitality", nil, nil )
local item_energy = CreateItem( "item_energy", nil, nil )
local item_platemail_dag = CreateItem( "item_platemail_dag", nil, nil )
if killedEntity:GetUnitName() == "npc_dota_neutral_ice_shaman" then
local drop = CreateItemOnPositionSync( deathPos, item_vitality )
end
if killedEntity:GetUnitName() == "npc_dota_neutral_black_dragon" then
local drop = CreateItemOnPositionSync( deathPos, item_energy )
end
if killedEntity:GetUnitName() == "npc_dota_neutral_granite_golem" then
local drop = CreateItemOnPositionSync( deathPos, item_platemail_dag )
end
end
Я знаю просто я для удобства сделал для каждого босса отдельно чтобы если что отдельно с ним работатьЗачем так много слушателей на OnEntityKilled - там достаточно одного
Код я не проверял ибо не дома
Lua:if nestle == nil then nestle = class({}) end function Activate() nestle:InitGameMode() end function nestle:InitGameMode() ListenToGameEvent( "entity_killed", Dynamic_Wrap(nestle, "OnEntityKilled" ), self ) end function nestle:OnEntityKilled( data ) local killedEntity = EntIndexToHScript( data.entindex_killed ) local deathPos = killedEntity:GetAbsOrigin() local item_vitality = CreateItem( "item_vitality", nil, nil ) local item_energy = CreateItem( "item_energy", nil, nil ) local item_platemail_dag = CreateItem( "item_platemail_dag", nil, nil ) if killedEntity:GetUnitName() == "npc_dota_neutral_ice_shaman" then local drop = CreateItemOnPositionSync( deathPos, item_vitality ) end if killedEntity:GetUnitName() == "npc_dota_neutral_black_dragon" then local drop = CreateItemOnPositionSync( deathPos, item_energy ) end if killedEntity:GetUnitName() == "npc_dota_neutral_granite_golem" then local drop = CreateItemOnPositionSync( deathPos, item_platemail_dag ) end end
Единсвенное, что там CreateItemOnPositionSync или CreateItemOnPositionForLaunch юзать нужно
Для такого удобства просто создается дочерний lua файл подключенный через require и там уже подключается вся логика с боссамиЯ знаю просто я для удобства сделал для каждого босса отдельно чтобы если что отдельно с ним работать
Я понимаю но у меня проблема с тем что предмета 2 выпадаетДля такого удобства просто создается дочерний lua файл подключенный через require и там уже подключается вся логика с боссами
В самый верх файла addon_game_mode.lua
require ("boss")
И просто в той же папке рядом с addon_game_mode создается boss.lua
Выдается отдельный класс и функцией InitGameMode() вызывается все слушатели
Странно обычно нормальные движки за такое дают по жопе, но дота это вечное исключениеДело в том, что ты два раза вызываешь метод
Получается что GameRules.AddonTemplate:InitGameMode() и nestle:InitGameMode()Код:function Activate() GameRules.AddonTemplate = nestle() GameRules.AddonTemplate:InitGameMode() nestle:InitGameMode() end
Это одно и тоже