Помогите пожалуйста я не понимаю как сделать так чтобы улучшение от шарда давалось не шардом а скипетром
Для изменения местами шарда и аганима в DotA 2 без полного изменения способностей, вам потребуется использовать Lua-скриптинг и работать с соответствующими функциями и переменными.
Вот примерный алгоритм, который вы можете использовать:
1. Создайте новую переменную для хранения информации о шарде и аганиме. Например, вы можете использовать таблицу, где ключами будут идентификаторы героев, а значениями будут булевы переменные, указывающие, есть ли у героя шард или аганим.
Lua:
local heroShard = {}
local heroAghanim = {}
2. При создании героя или при изменении его инвентаря, проверьте, есть ли у него шард или аганим. Если есть, установите соответствующие значения в таблице.
Lua:
function OnHeroSpawned(event)
local hero = event.hero
local playerID = hero:GetPlayerID()
-- Проверяем наличие шарда и аганима у героя
if hero:HasModifier("modifier_item_aghanims_shard") then
heroShard[playerID] = true
else
heroShard[playerID] = false
end
if hero:HasModifier("modifier_item_ultimate_scepter_consumed") then
heroAghanim[playerID] = true
else
heroAghanim[playerID] = false
end
end
3. Создайте функцию, которая будет менять местами шард и аганим для конкретного героя. В этой функции вы должны проверить текущее состояние героя (имеет ли он шард или аганим), а затем изменить его инвентарь и таблицу с соответствующими значениями.
Lua:
function SwapShardAndAghanim(playerID)
local hero = PlayerResource:GetSelectedHeroEntity(playerID)
-- Проверяем текущее состояние героя
local hasShard = heroShard[playerID]
local hasAghanim = heroAghanim[playerID]
-- Меняем местами шард и аганим
if hasShard then
hero:RemoveModifierByName("modifier_item_aghanims_shard")
hero:AddNewModifier(hero, nil, "modifier_item_ultimate_scepter_consumed", {})
heroShard[playerID] = false
heroAghanim[playerID] = true
elseif hasAghanim then
hero:RemoveModifierByName("modifier_item_ultimate_scepter_consumed")
hero:AddNewModifier(hero, nil, "modifier_item_aghanims_shard", {})
heroShard[playerID] = true
heroAghanim[playerID] = false
end
end
Вы можете вызывать функцию
SwapShardAndAghanim для конкретного игрока, чтобы поменять местами шард и аганим у его героя.
Обратите внимание, что это только примерный алгоритм, и вам может потребоваться дополнительная настройка в зависимости от вашей конкретной игры и требований.
Полный код:
Lua:
local heroShard = {}
local heroAghanim = {}
function OnHeroSpawned(event)
local hero = event.hero
local playerID = hero:GetPlayerID()
-- Проверяем наличие шарда и аганима у героя
if hero:HasModifier("modifier_item_aghanims_shard") then
heroShard[playerID] = true
else
heroShard[playerID] = false
end
if hero:HasModifier("modifier_item_ultimate_scepter_consumed") then
heroAghanim[playerID] = true
else
heroAghanim[playerID] = false
end
end
function SwapShardAndAghanim(playerID)
local hero = PlayerResource:GetSelectedHeroEntity(playerID)
-- Проверяем текущее состояние героя
local hasShard = heroShard[playerID]
local hasAghanim = heroAghanim[playerID]
-- Меняем местами шард и аганим
if hasShard then
hero:RemoveModifierByName("modifier_item_aghanims_shard")
hero:AddNewModifier(hero, nil, "modifier_item_ultimate_scepter_consumed", {})
heroShard[playerID] = false
heroAghanim[playerID] = true
elseif hasAghanim then
hero:RemoveModifierByName("modifier_item_ultimate_scepter_consumed")
hero:AddNewModifier(hero, nil, "modifier_item_aghanims_shard", {})
heroShard[playerID] = true
heroAghanim[playerID] = false
end
end
Пример сгенерирован ChatGPT , суть : свапнуть местами модификаторы шарда и аганима , нужно использовать слушатель наличия аганима или шарда у игрока и вызвать функцию свапа
Так же модификатор аганима выглядит:
HasScepter()
Пример:
if self:GetCaster():HasScepter() then