1. Почти никак.Нужно, чтобы какие-то предметы можно было купить только за дайр, а какие-то только за редиант. Как так сделать? И как сделать предмет доступным только для 1 героя или запретить предмет для определённого героя?
1. Почти никак.
2. Почти никак.
Если у тебя был скрипт "если 1-ый герой, то нельзя. если 3-ий герой, то нельзя", то почему бы не сделать наоборот?:Через что?
item_class_table = {
["Knight"] = {
["item_name_1"] = 1,
["item_name_2"] = 1,
}
}
if item_class_table[my_hero_class][item_name] then
давать бонус
else
не давать бонус
end
_G.class_items = {}
local kv_table= LoadKeyValues('scripts/npc/npc_items_custom.txt')
_G.class_items["Knight"] = _G.class_items["Knight"] or {}
for item_name, item_data in pairs(kv_table) do
if item_name and item_data and type(item_data ) == "table" then
if item_data['MyClass'] == "Knight" then
print("item name = ", item_name, " is for Knight class");
_G.class_items["Knight"][item_name] = 1;
end
end
end
ListenToGameEvent('dota_item_purchased', Dynamic_Wrap(GameMode, 'OnPlayerBuyItem'), self)
function GameMode:OnPlayerBuyItem(event)
local playerid = event.PlayerID
local item_name = event.itemname
local itemcost = event.itemcost
local player = PlayerResource:GetPlayer(playerid)
local hero = player:GetAssignedHero()
local item
for i = 0, 11 do -- посмотрим нет ли в стеше
local item_slot = hero:GetItemInSlot(i)
if item_slot and item_slot :GetName() == item_name and (item_slot :GetPurchaseTime() <= 10 and item_slot :GetPurchaseTime() >= 9.5) then
item = item_slot
end
end
if not _G.class_items[GetMyHeroPersonalClass(hero)][item_name] then
UTIL_Remove(item);
print("wrong hero class");
end
end