- 16 Авг 2023
- 14
- 4
- Проект
- дота 2 кастомка
Всем привет! Короче я хочу показать как совместить какую-нибудь функцию в js файле с lua.
И так, для начала если вы не знаете как сделать обычную панель с кнопкой ищете гайд на просторах кастом геймса
Предположим , что у вас уже есть кнопка , которая выполняет какую-то функцию(принтит в консоль что-то), давайте сделаем , чтобы эта функция например передавала сообщение в Lua скрипт и lua скрипт выведет его
да, где написано любое название это название самого сигнала(оно может быть любым) , поэтому это и будет название моего сигнала/
обязательно этот скрипт должен быть в файле , который подгружен через require, ибо не получится
ну что ж , а что там по сигналам из lua в Javascript, ведь клиентов может быть много, а сервер то один , как быть, а валвы молодцы, ведь сделали, что можно посылать сигнал как всем клиентам, так и определенной команде или вообще одному игроку, давай рассмотрим способ посылания сигнала всем игрокам.
не забываем вызывать эту функцию где-то в инициализации или активации
теперь примем его в js
Думаю вы разобрались как и что, давайте я попробую создать кнопку при которой дается +50 голды, как я создавал кнопку показывать не буду, покажу лишь место как я передавал это , чтобы вы усвоили знания
теперь луа
Мой первый гайдик, не судите строго, возможно для кого-то это покажется самой базой из всех баз, но когда я пытался сделать что-то подобное не было не одного гайда, думаю щас кому-то понадобится <3
И так, для начала если вы не знаете как сделать обычную панель с кнопкой ищете гайд на просторах кастом геймса
Предположим , что у вас уже есть кнопка , которая выполняет какую-то функцию(принтит в консоль что-то), давайте сделаем , чтобы эта функция например передавала сообщение в Lua скрипт и lua скрипт выведет его
JavaScript:
function test() {
$.Msg("da")
var data = {
key: "test"
}
GameEvents.SendCustomGameEventToServer( "любое_название", data ); -- сама штука, передающая сигнал из js в луа
}
Lua:
CustomGameEventManager:RegisterListener( "любое_название", test ) -- слушатель , который слушает сигнал в луа, ставьте в init , ибо иногда может тупить
function test(_,data)
print(data.key)
end
Lua:
CustomGameEventManager:Send_ServerToAllClients( "название сигнала", массив ) -- посылает всем клиентам
CustomGameEventManager:Send_ServerToTeam( team_number, "название сигнала", массив )-- посылает определенной команде
CustomGameEventManager:Send_ServerToPlayer(player_entity, "название сигнала", массив ) -- посылает определенному игроку
Lua:
function test()
local data = {
name = "test",
}
CustomGameEventManager:Send_ServerToAllClients( "любое_название", data)
end
теперь примем его в js
JavaScript:
GameEvents.Subscribe( "любое_значение", test); // что-то типо слушателя в lua только в js , test - функция которая вызовится
function test(data) {
$.Msg(data.name) // принтим значение из массива data(точнее name) которое мы указали в lua
}
JavaScript:
function OnButtonPressed() { // функция которая указана в кнопке
var data = {
playerID : Players.GetLocalPlayer() // передаем айди клиента, ибо как луа узнает кому давать 50 голды
}
GameEvents.SendCustomGameEventToServer( "сигнал", data ); // сама передача сигнала
}
Lua:
function test(_,data)
local playerID = data.playerID -- получаем айди из массива
local player = PlayerResource:GetPlayer(playerID) -- получаем игрока по айди
local hero = player:GetAssignedHero()-- не забываем получить героя игрока, а то не получися и будет ошибка
hero:ModifyGold(50, true, DOTA_ModifyGold_Unspecified) -- собственна даем голду
print("easy")
end
-- слушатель я поставил в initgamemode ибо почему-то он не хотел работать, но это не настолько важно
Последнее редактирование: