Этот параметр отвечает за передачу предмета между игроками.Укажи параметр
"ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" //Consumables
Этот параметр отвечает за передачу предмета между игроками.
Как правило эти 3 параметра отвечают за стаки
1) предмет можно стакать
2) предмет уничтожается, когда стаков меньше 0. Например у ботла этот параметр 1, тк использовав все стаки предмет остается у тебя на руках.
3) начальное количество стаков
"ItemStackable" "1"
"ItemPermanent" "0"
"ItemInitialCharges" "1
проблема в том что предмет который стакается становится серым(отключается) продать нельзя, выкладываешь на землю и подымаешь обратно, стаки слетают. Да и хотелось бы что б цифры были. По анологии как у Танго.Этот параметр отвечает за передачу предмета между игроками.
Как правило эти 3 параметра отвечают за стаки
1) предмет можно стакать
2) предмет уничтожается, когда стаков меньше 0. Например у ботла этот параметр 1, тк использовав все стаки предмет остается у тебя на руках.
3) начальное количество стаков
"ItemStackable" "1"
"ItemPermanent" "0"
"ItemInitialCharges" "1"
"item_rock"Закинь сюда предмет в чем сложность?
Ну это просто пустая шмотка. Лан попробую. Иконка уже и так есть ток размеры другие правда.1) Убери ID
2) Добавь
"ItemStackable" "1"
"ItemPermanent" "0"
"ItemInitialCharges" "1"
3) Что ты вообще хочешь видеть в итоге ибо "BaseClass" "item_datadriven" обрезок с которым невозможно работать, разве что пассивные и не очень дохуя чего активные предметы делать
4) Размер иконки 88x88 формата png путь до которых game\dota_addons\АДДОН\resource\flash3\images\items\тут свои папки или png
есть проблема. Шмот если стакается то отключается. Суть в том, что б, игрок смог продавать эти айтемы. Приходится выкладывать на землю и тогда срабатывает. Я так понял лучьше код писать?1) Убери ID
2) Добавь
"ItemStackable" "1"
"ItemPermanent" "0"
"ItemInitialCharges" "1"
3) Что ты вообще хочешь видеть в итоге ибо "BaseClass" "item_datadriven" обрезок с которым невозможно работать, разве что пассивные и не очень дохуя чего активные предметы делать
4) Размер иконки 88x88 формата png путь до которых game\dota_addons\АДДОН\resource\flash3\images\items\тут свои папки или png
ковырни код выпаденияпоправ очка. Если шмот выпадает из нпс на землю то тогда такая беда. а если покупаешь то все четенько
цена стакается. Но все равботате только если выкладывать на землю а потом подымать. Шмот выпадает из нпс. когда берешь 1 то все норм когда больше 1 то предмет заглушаетсяТебе получается надо цену за 1 предмет, если их 1+ то цена что бы увеличивалась эквиваленту количества?
Так же что бы работала с системой дропа из существ
Насчет заглушки могу подсказать, но так и не понял, как позволить застаканый предмет продавать если его поднимать подрядцена стакается. Но все равботате только если выкладывать на землю а потом подымать. Шмот выпадает из нпс. когда берешь 1 то все норм когда больше 1 то предмет заглушается
Работает ?Это ты используешь либу видимо item_drop.lua которая часто используется в примерах Виталика
Насчет заглушки могу подсказать, но так и не понял, как позволить застаканый предмет продавать если его поднимать подряд
Добавить в функцию function ItemDrop:RollItemDrop(unit)
newItem:SetOwner(nil)
newItem:SetPurchaser(nil)
newItem:SetShareability(ITEM_PARTIALLY_SHAREABLE)
Да там овнера на предмет при дропе убирает и предмет ничейный становится и его можно взять в стак сразу и он будет без заглушения , но без возможности продать если это стакающийся предмет и его больше чем 1 зарядРаботает ?
Просто насколько я знаю помню это старая тема, даже у меня в кастомке она не пофикшена (
if ItemDrop == nil then
_G.ItemDrop = class({})
end
-- items - список предметов, которые могут выпасть
-- chance - шанс выпадения (если не определен, то равен 100%) список юнитов из которых могут выпасть предметы ( если не определен, то выпадает с любого юнита)
-- duration - длительность жизни предмета на полу( если не определен, то предмет лежит бесконечно)
-- limit - лимит предметов - количество предметов, которые могут выпасть( если не определен, то количество не ограничено)
-- units - список юнитов, из которых падает предмет
ItemDrop.item_drop = {
-- {items = {"item_branches"}, chance = 5, duration = 5, limit = 3, units = {"npc_name"} },
{items = {"item_enchanted_mango"}, duration = 5},-- глобальный дроп манго со всех NPC
}
-- point_name - название таргета
-- item_name - название предмета
ItemDrop.secret_items = {
-- ["point_name"] = "item_name",
}
function ItemDrop:InitGameMode()
ListenToGameEvent('entity_killed', Dynamic_Wrap(self, 'OnEntityKilled'), self)
ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(self, 'OnGameRulesStateChange'), self)
end
function ItemDrop:OnGameRulesStateChange()
local newState = GameRules:State_Get()
if newState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
ItemDrop:SpawnItems()
end
end
function ItemDrop:SpawnItems()
local items = self.secret_items
for point_name,item_name in pairs(items) do
local point = Entities:FindByName(nil, point_name)
if point then
point = point:GetAbsOrigin()
local newItem = CreateItem( item_name, nil, nil )
local drop = CreateItemOnPositionSync( point, newItem )
else
print("point with name "..point_name.." dont exist !")
end
end
end
function ItemDrop:OnEntityKilled( keys )
local killedUnit = EntIndexToHScript( keys.entindex_killed )
local name = killedUnit:GetUnitName()
local team = killedUnit:GetTeam()
local killerEntity = nil
if keys.entindex_attacker then
killerEntity = EntIndexToHScript(keys.entindex_attacker)
end
if team ~= DOTA_TEAM_GOODGUYS and name ~= "npc_dota_thinker" then
ItemDrop:RollItemDrop(killedUnit, killerEntity)
end
end
function ItemDrop:RollItemDrop(killedUnit, killerEntity)
local unit_name = killedUnit:GetUnitName()
for _,drop in ipairs(self.item_drop) do
local items = drop.items or nil
local items_num = #items
local units = drop.units or nil -- если юниты не были определены, то срабатывает для любого
local chance = drop.chance or 100 -- если шанс не был определен, то он равен 100
local loot_duration = drop.duration or nil -- длительность жизни предмета на земле
local limit = drop.limit or nil -- лимит предметов
local item_name = items[1] -- название предмета
local roll_chance = RandomFloat(0, 100)
if units then
for _,current_name in pairs(units) do
if current_name == unit_name then
units = nil
break
end
end
end
if units == nil and (limit == nil or limit > 0) and roll_chance < chance then
if limit then
drop.limit = drop.limit - 1
end
if items_num > 1 then
item_name = items[RandomInt(1, #items)]
end
local spawnPoint = killedUnit:GetAbsOrigin()
local newItem = CreateItem( item_name, nil, nil )
-- Устанавливаем свойства предмета
newItem:SetStacksWithOtherOwners(true)
newItem:SetPurchaser(killerEntity)
newItem:SetShareability(ITEM_PARTIALLY_SHAREABLE)
local drop = CreateItemOnPositionForLaunch( spawnPoint, newItem )
local dropRadius = RandomFloat( 50, 100 )
newItem:LaunchLootInitialHeight( false, 0, 150, 0.5, spawnPoint + RandomVector( dropRadius ) )
if loot_duration then
newItem:SetContextThink( "KillLoot",
function()
if drop:IsNull() then
return
end
local nFXIndex = ParticleManager:CreateParticle( "particles/items2_fx/veil_of_discord.vpcf", PATTACH_CUSTOMORIGIN, drop )
ParticleManager:SetParticleControl( nFXIndex, 0, drop:GetOrigin() )
ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 35, 35, 25 ) )
ParticleManager:ReleaseParticleIndex( nFXIndex )
-- EmitGlobalSound("Item.PickUpWorld")
UTIL_Remove( item )
UTIL_Remove( drop )
end, loot_duration )
end
end
end
end
function KillLoot( item, drop )
if drop:IsNull() then
return
end
local nFXIndex = ParticleManager:CreateParticle( "particles/items2_fx/veil_of_discord.vpcf", PATTACH_CUSTOMORIGIN, drop )
ParticleManager:SetParticleControl( nFXIndex, 0, drop:GetOrigin() )
ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 35, 35, 25 ) )
ParticleManager:ReleaseParticleIndex( nFXIndex )
-- EmitGlobalSound("Item.PickUpWorld")
UTIL_Remove( item )
UTIL_Remove( drop )
end
ItemDrop:InitGameMode()