Это mini гайд как дать нашему герою хп и ману после убиства противника.
Данный гайд будет полезен для начинающего или любителя делать PvP кастомки.
0.1 Без помощи барбонов мы создали простой проект и назвали его YouProject.
0.2 <<Весь полноценный код я оставил в конце.>>
1. При создании с нуля у каждого проекта создаётся addon_game_mode.lua в папке game/dota_addons/YouProject/scripts/vscripts.
Внутри файла находиться стоковый код.
2. Для начала нам нужно создать нашу функцию.
CAddonTemplateGameMode - наш гейм мод.
OnEntityKilled - название функции.
3. Создаём 2 локальные переменные для убийцы и убитого.
eAttacker - убийца.
eKilled - тот кого убили.
4. Теперь прописываем само событие.
Я подробно описал каждое своё действие. Думаю здесь вопросов нет.
5. Если мы хотим что бы нам давало и ману и здоровье, то дополняем наше событие след. текстом.
5.1 Все значения можно изменять на ваш вкус. Если у героя будет 2000hp максимально а вы напишете допустим 100 000 в nHeal. То герой просто восстановит своё здоровье до максимума. Аналогично с маной.
Подробнее про то какие бываю API функции тут.
6. Ради интереса сделаем что бы при убийстве героя 2 над героем 1 писалось сколько он получил здоровья за его убийство.
Аналогично можно сделать и с маной.
7.Но это ещё не всё. Наша игра не будет знать что ей делать с данной функцией. Она просто её запустит но взаимодействовать с ней не будет. Это нужно исправить.
Выше нашего кода мы видим уже созданную функцию, она называется "InitGameMode".
Она запускается активатором (функция активирующая другую функцию для взаимодействия с игрой. Звучит как костыль, и всё это можно упростить, но мы делаем всё с 0 и забивать себе голову пока не стоит. )
InitGameMode по сути он пустой, и ничего того что нам нужно он не делает.
Для этого создаём так называемый Event handler. "Обработчик события " (Создавать его мы будем в InitGameMode)
Для удобства выводим print, что бы мониторить его в консоли. (Это нужно для того что бы понять запустилась функция или нет. Полезная штука для того что бы найти ошибку в коде. Вбейте её себе в привычку.)
Готово! Теперь наш код пустился в оборот игры.
Заходим в игру и проверяем наше чудо.
P.S. Сразу скажу что у себя в коде я поставил значение nHeal = 750 000. Поэтому оно отображает +750000. Мана также восстановилась.
Код для ленивых людей:
Гайд исключительно для начинающих кастомщиков. Просьба не агрится на то что я всё тщательно разжевываю.
Данный гайд будет полезен для начинающего или любителя делать PvP кастомки.
0.1 Без помощи барбонов мы создали простой проект и назвали его YouProject.
0.2 <<Весь полноценный код я оставил в конце.>>
1. При создании с нуля у каждого проекта создаётся addon_game_mode.lua в папке game/dota_addons/YouProject/scripts/vscripts.
Внутри файла находиться стоковый код.
2. Для начала нам нужно создать нашу функцию.
CAddonTemplateGameMode - наш гейм мод.
OnEntityKilled - название функции.
3. Создаём 2 локальные переменные для убийцы и убитого.
eAttacker - убийца.
eKilled - тот кого убили.
4. Теперь прописываем само событие.
Я подробно описал каждое своё действие. Думаю здесь вопросов нет.
5. Если мы хотим что бы нам давало и ману и здоровье, то дополняем наше событие след. текстом.
5.1 Все значения можно изменять на ваш вкус. Если у героя будет 2000hp максимально а вы напишете допустим 100 000 в nHeal. То герой просто восстановит своё здоровье до максимума. Аналогично с маной.
Подробнее про то какие бываю API функции тут.
6. Ради интереса сделаем что бы при убийстве героя 2 над героем 1 писалось сколько он получил здоровья за его убийство.
Аналогично можно сделать и с маной.
7.Но это ещё не всё. Наша игра не будет знать что ей делать с данной функцией. Она просто её запустит но взаимодействовать с ней не будет. Это нужно исправить.
Выше нашего кода мы видим уже созданную функцию, она называется "InitGameMode".
Она запускается активатором (функция активирующая другую функцию для взаимодействия с игрой. Звучит как костыль, и всё это можно упростить, но мы делаем всё с 0 и забивать себе голову пока не стоит. )
InitGameMode по сути он пустой, и ничего того что нам нужно он не делает.
Для этого создаём так называемый Event handler. "Обработчик события " (Создавать его мы будем в InitGameMode)
Для удобства выводим print, что бы мониторить его в консоли. (Это нужно для того что бы понять запустилась функция или нет. Полезная штука для того что бы найти ошибку в коде. Вбейте её себе в привычку.)
Готово! Теперь наш код пустился в оборот игры.
Заходим в игру и проверяем наше чудо.
P.S. Сразу скажу что у себя в коде я поставил значение nHeal = 750 000. Поэтому оно отображает +750000. Мана также восстановилась.
Код для ленивых людей:
Lua:
if CAddonTemplateGameMode == nil then
CAddonTemplateGameMode = class({})
end
function Precache( context )
end
function Activate()
GameRules.AddonTemplate = CAddonTemplateGameMode()
GameRules.AddonTemplate:InitGameMode()
end
function CAddonTemplateGameMode:InitGameMode()
print( "OnEntityKilled created!" )
ListenToGameEvent("entity_killed", Dynamic_Wrap(CustomGameMode, "OnEntityKilled"), self)
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
end
function CAddonTemplateGameMode:OnThink()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
elseif GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then
return nil
end
return 1
end
function CAddonTemplateGameMode:OnEntityKilled(keys)
local eAttacker = EntIndexToHScript(keys.entindex_attacker)
local eKilled = EntIndexToHScript(keys.entindex_killed)
if eAttacker and eAttacker:IsHero() and eKilled:IsHero() then --если герой 1 убил героя 2
--то добавить ему хп
local nHeal = 250 --захиленное здоровье в еденицах
eAttacker:SetHealth(eAttacker:GetHealth() + nHeal)
local nMana = 1000 --добавлено маны в еденицах
eAttacker:SetMana(eAttacker:GetMana() + nMana)
SendOverheadEventMessage(nil, OVERHEAD_ALERT_HEAL, eAttacker, nHeal, nil) --выводим видимое сообщение с отлеченным здоровьем
end
end
Вложения
Последнее редактирование: