Простые вопросы #3

SniperX

Друзья CG
26 Фев 2018
534
92
steamcommunity.com
Проект
Dota 2 Classic 6.84
Как использовать кастомный магазин?
В хаммере триггеру выдал имя кастомного магазина, в shops.txt прописал этот магазин, предметам выдал "CustomShop" "1". Вызов GameRules:GetGameModeEntity():AddItemToCustomShop("item_aghanims_shard", "side_shop", "1") крашит доту.
KV:
"dota_shops"
{
    "custom"
    {
        "side_shop"
        {
            "1"
            {
                "item"        "item_aghanims_shard"
            }
            "2"
            {
            }
        }
    }
}

1633717646087.png 1633717725902.png
 

stranger568

Активный
7 Сен 2015
91
18
bmemov.ru
Проект
Birzha Memov
Как использовать кастомный магазин?
В хаммере триггеру выдал имя кастомного магазина, в shops.txt прописал этот магазин, предметам выдал "CustomShop" "1". Вызов GameRules:GetGameModeEntity():AddItemToCustomShop("item_aghanims_shard", "side_shop", "1") крашит доту.
KV:
"dota_shops"
{
    "custom"
    {
        "side_shop"
        {
            "1"
            {
                "item"        "item_aghanims_shard"
            }
            "2"
            {
            }
        }
    }
}

Посмотреть вложение 1422 Посмотреть вложение 1423
Тебе надо создать отдельную папку shops
и сделать для каждой карты имякарты.txt
и внутри уже инфа магазина
Чекни как это сделано в aghanim
 
  • Нравится
Реакции: SniperX

Сандаль

Новичок
15 Окт 2021
7
0
Контекст:
Есть у вещей такой ключ - "ItemCastOnPickup", он часто в кастомках используется для всяких томов аттрибутов и прочих моментально применяемых эффектов не связанных с инвентарём напрямую. У этого ключа есть некоторая особенность работы - если у героя все слоты инвентаря заняты, то предмет не поднять и не купить. Чисто для полноты картины также упомяну что в одной ситуации купить предмет с полным инвентарём всёже можно - если предмет продаётся в основном магазине - тогда он попадёт в тайник игрока, что считается как pickup, и предмет активируется.

Проблема:
Допустим я хочу сделать предмет, купив который игрок автоматом кастует ульту зевса. Должно быть всё равно есть ли у героя свободный слот в инвентаре, но предмет должен быть покупаем только в особом магазине.

Чтобы предмет можно было купить только в конкретном магазине, нужно пометить его либо ключем "SecretShop" либо "SideShop". Оба этих ключа не дадут купить предмет в основном магазине, но также запретят помещать предмет в тайник при покупке. Получается противоречивая ситуация - либо можно покупать только в конкретном магазине, но должен быть пустой слот в инвентаре, либо можно покупать предмет где угодно, но пустой слот инвентаря не требуется.

Как-то можно иcхитриться и сделать вещь, которая покупается не требуя слота, но купить её можно только находясь рядом с конкретным магазином?
 
Последнее редактирование:

tender322

Новичок
21 Окт 2021
9
0
QQ.
Ребят, в чем проблема?
Ошибка:"Entity I/O attempted to invoke unknown private script function "Creepsv1" on entity "tp_first"!"
Создал триггер на телепорт, герой телепортируется.
Добавил к триггеру появление крипов, крипы не появляются. Хотя по архитектуре одинаковые функции. Также триггеры одинаковые 1231.png
function tp_1(event)
print("start")
local unit = event.activator
local point = Entities:FindByName(nil, "tpp1"):GetAbsOrigin()
event.activator:SetAbsOrigin(point)
FindClearSpaceForUnit(event.activator, point, false)
event.activator:Stop()
end
function Creepsv1(event)
print("StartWave")
local SP1 = Entities:FindByName(nil, "spawner1")
local WP1 = Entities:FindByName(nil,"way1")
local count = 3
local repeat_interval = 10

Timers:CreateTimer(5, function()
For i=1, count do
Timers:CreateTimer(0.1,function()
local unit = CreateUnitByName("creepv1", SP1,true,nil,nil, DOTA_TEAM_NEUTRALS)
unit:SetInitialGoalEntity(WP1)
Timers:RemoveTimer(0.1)
end)
return repeat_interval
end)
print("EndWave")
end
 

Сандаль

Новичок
15 Окт 2021
7
0
QQ.
Ребят, в чем проблема?
Думаю тут недостаточно информации для того чтобы кто-то тебе помог. Чисто вилами по воде могу предложить проверить что функция Creepsv1 действительно лежит в нужном файле, и перезапустить инструменты разработки, на случай если они что-то кешируют и не видят изменений, которые внесены после запуска.
 

SniperX

Друзья CG
26 Фев 2018
534
92
steamcommunity.com
Проект
Dota 2 Classic 6.84
QQ.
Ребят, в чем проблема?
Ошибка:"Entity I/O attempted to invoke unknown private script function "Creepsv1" on entity "tp_first"!"
Создал триггер на телепорт, герой телепортируется.
Добавил к триггеру появление крипов, крипы не появляются. Хотя по архитектуре одинаковые функции. Также триггеры одинаковые Посмотреть вложение 1426
function tp_1(event)
print("start")
local unit = event.activator
local point = Entities:FindByName(nil, "tpp1"):GetAbsOrigin()
event.activator:SetAbsOrigin(point)
FindClearSpaceForUnit(event.activator, point, false)
event.activator:Stop()
end
function Creepsv1(event)
print("StartWave")
local SP1 = Entities:FindByName(nil, "spawner1")
local WP1 = Entities:FindByName(nil,"way1")
local count = 3
local repeat_interval = 10

Timers:CreateTimer(5, function()
For for i=1, count do
Timers:CreateTimer(0.1,function()
local unit = CreateUnitByName("creepv1", SP1,true,nil,nil, DOTA_TEAM_NEUTRALS)
unit:SetInitialGoalEntity(WP1)
Timers:RemoveTimer(0.1)
end)
end
return repeat_interval
end)
print("EndWave")
end
у тебя не хватает end для закрытия for. + For --> for
 

tender322

Новичок
21 Окт 2021
9
0
у тебя не хватает end для закрытия for. + For --> for
Все равно пишет "Entity I/O attempted to invoke unknown private script function "Creepsv1" on entity "tp_first"!"
function Creepsv1(event)
print("StartWave")
local SP1 = Entities:FindByName(nil, "spawner1")
local WP1 = Entities:FindByName(nil,"way1")
local count = 3

local repeat_interval = 10

Timers:CreateTimer(5, function()
for i=1, count do
Timers:CreateTimer(0.1,function()
local unit = CreateUnitByName("creepv1", SP1,true,nil,nil, DOTA_TEAM_NEUTRALS)
unit:SetInitialGoalEntity(WP1)
Timers:RemoveTimer(0.1)
end)
return repeat_interval
end
end)
print("EndWave")

end
 

tender322

Новичок
21 Окт 2021
9
0
Думаю тут недостаточно информации для того чтобы кто-то тебе помог. Чисто вилами по воде могу предложить проверить что функция Creepsv1 действительно лежит в нужном файле, и перезапустить инструменты разработки, на случай если они что-то кешируют и не видят изменений, которые внесены после запуска.
Создал отдельный lua для этой функции (управления спавна)
 

SniperX

Друзья CG
26 Фев 2018
534
92
steamcommunity.com
Проект
Dota 2 Classic 6.84
Создал отдельный lua для этой функции (управления спавна)
так в тот же файл функцию пропиши, на сколько я знаю, нельзя подключить 2 lua файла к 1му триггеру (без использования require)
 

tender322

Новичок
21 Окт 2021
9
0
так в тот же файл функцию пропиши, на сколько я знаю, нельзя подключить 2 lua файла к 1му триггеру (без использования require)
Спасибо, заработало, но теперь он не спавнит юнитов "Cannot create an entity because entity class is NULL -1"
 

SniperX

Друзья CG
26 Фев 2018
534
92
steamcommunity.com
Проект
Dota 2 Classic 6.84
Спасибо, заработало, но теперь он не спавнит юнитов "Cannot create an entity because entity class is NULL -1"
Это ошибка с юнитами, попробуй заспавнить npc_dota_neutral_alpha_wolf, если он спавнится, то проблема в юните, в ошибке написано, что с бейзклассом юнита что-то не то
 

tender322

Новичок
21 Окт 2021
9
0
Это ошибка с юнитами, попробуй заспавнить npc_dota_neutral_alpha_wolf, если он спавнится, то проблема в юните, в ошибке написано, что с бейзклассом юнита что-то не то
Да, спасибо, получилось. А когда скрипт меняешь не обязательно всё билдить? Можно же просто запустить?
 
Последнее редактирование:

tender322

Новичок
21 Окт 2021
9
0
В чем проблема? Юнит не идет по пути

local WP1 = Entities:FindByName(nil,"way0.5") или local WP1 = Entities:FindByName(nil,"way1") (2 точки)
unit:SetInitialGoalEntity(WP1)
 
Последнее редактирование:

Сандаль

Новичок
15 Окт 2021
7
0
В чем проблема? Юнит не идет по пути
я тоже не смог заставить SetInitialGoalEntity работать. В итоге брал позицию из сущности и использовал её для SetInitialGoalPosition. Этот вариант рабочий, но при условии что сущность у тебя никуда не ходит.

Есть ещё вариант что у тебя FindByName просто не находит ничего. Проверь не нулевой ли print(WP1).
 

tender322

Новичок
21 Окт 2021
9
0
я тоже не смог заставить SetInitialGoalEntity работать. В итоге брал позицию из сущности и использовал её для SetInitialGoalPosition. Этот вариант рабочий, но при условии что сущность у тебя никуда не ходит.

Есть ещё вариант что у тебя FindByName просто не находит ничего. Проверь не нулевой ли print(WP1).
Я вывожу коорды, там они есть.. Ты про info enitity?
 
Реклама: