Дроп с мобов

shizik1_shizik2

Активный
5 Июн 2023
82
3
Ты полностью либу скопировал или частчино ?
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

CreateItemOnPositionForLaunch( killedEntity:GetAbsOrigin(), newItem )



end
end

вот
 

iia3uk666

Друзья CG
18 Дек 2021
411
70
Проект
Ушел с CG
я не знаю как сделать чтобы один выпадал а не 2
Ты точно только один предмет заложил в дроп, а не 2? Может у тебя где то двоится код с дропом или цифра где х1 стала х2 дропа , закрепи файл где у тебя код с дропом
 

shizik1_shizik2

Активный
5 Июн 2023
82
3
Ты точно только один предмет заложил в дроп, а не 2? Может у тебя где то двоится код с дропом или цифра где х1 стала х2 дропа , закрепи файл где у тебя код с дропом
Всмысле код с дропом у меня всё в аддон гейм мод там сразу написано в самой функции какой предмет выпадет
 

iia3uk666

Друзья CG
18 Дек 2021
411
70
Проект
Ушел с CG
Хорошо, давай мы не будем тупить и ты приложишь сюда

Lua:
-- Весь код связанный с Item Drop
-- И как ты его вызываешь и прочее
 

shizik1_shizik2

Активный
5 Июн 2023
82
3
Хорошо, давай мы не будем тупить и ты приложишь сюда

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

вот
 

iia3uk666

Друзья CG
18 Дек 2021
411
70
Проект
Ушел с CG
Все же.. ты затупил.. ну есть же кнопка вставки кода...

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
 

shizik1_shizik2

Активный
5 Июн 2023
82
3
Все же.. ты затупил.. ну есть же кнопка вставки кода...

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
Извини
 

iia3uk666

Друзья CG
18 Дек 2021
411
70
Проект
Ушел с CG
Зачем так много слушателей на 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 юзать нужно у "ForLaunch" есть доп свойство LaunchLootInitialHeight - это откуда и куда полетит предмет
 
Последнее редактирование:

shizik1_shizik2

Активный
5 Июн 2023
82
3
Зачем так много слушателей на 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 юзать нужно
Я знаю просто я для удобства сделал для каждого босса отдельно чтобы если что отдельно с ним работать
 

iia3uk666

Друзья CG
18 Дек 2021
411
70
Проект
Ушел с CG
Я знаю просто я для удобства сделал для каждого босса отдельно чтобы если что отдельно с ним работать
Для такого удобства просто создается дочерний lua файл подключенный через require и там уже подключается вся логика с боссами
В самый верх файла addon_game_mode.lua
require ("boss")

И просто в той же папке рядом с addon_game_mode создается boss.lua

Выдается отдельный класс и функцией InitGameMode() вызывается все слушатели
 

shizik1_shizik2

Активный
5 Июн 2023
82
3
Для такого удобства просто создается дочерний lua файл подключенный через require и там уже подключается вся логика с боссами
В самый верх файла addon_game_mode.lua
require ("boss")

И просто в той же папке рядом с addon_game_mode создается boss.lua

Выдается отдельный класс и функцией InitGameMode() вызывается все слушатели
Я понимаю но у меня проблема с тем что предмета 2 выпадает
 

iia3uk666

Друзья CG
18 Дек 2021
411
70
Проект
Ушел с CG
Пропиши
local limit = drop.limit or nil
if limit then
drop.limit = drop.limit - 1
end
 

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,149
196
www.dotabuff.com
Проект
Roshan defense
Дело в том, что ты два раза вызываешь метод

Код:
function Activate()
GameRules.AddonTemplate = nestle()
GameRules.AddonTemplate:InitGameMode()
nestle:InitGameMode()
end
Получается что GameRules.AddonTemplate:InitGameMode() и nestle:InitGameMode()
Это одно и тоже
 
  • Нравится
Реакции: iia3uk666

iia3uk666

Друзья CG
18 Дек 2021
411
70
Проект
Ушел с CG
Дело в том, что ты два раза вызываешь метод

Код:
function Activate()
GameRules.AddonTemplate = nestle()
GameRules.AddonTemplate:InitGameMode()
nestle:InitGameMode()
end
Получается что GameRules.AddonTemplate:InitGameMode() и nestle:InitGameMode()
Это одно и тоже
Странно обычно нормальные движки за такое дают по жопе, но дота это вечное исключение
 
Реклама: