Подмодуль mod.game.me описывает текущего персонажа. Загружается по умолчанию; сведения о персонаже имеют смысл после входа в игру.
Проверка персонажа
mod.game.me.is(gameId) проверяет принадлежность ID текущему персонажу. Используйте результат как условие: текущая реализация возвращает this.gameId && this.gameId === gameId, поэтому до входа результат может быть null, а не строго false.
Свойства
| Свойство | Описание |
|---|---|
gameId |
ID текущего игрового объекта до выхода/возврата к выбору персонажа |
templateId |
Шаблон персонажа из UserData |
serverId |
ID сервера |
playerId |
Постоянный ID персонажа на сервере; пара serverId/playerId различает персонажей региона |
name, level |
Имя и уровень |
class, race, gender |
Строковые значения из DataCenter; например fighter, а не brawler |
zone |
ID текущей зоны |
alive |
Жив ли персонаж |
mounted |
Находится ли на обычном транспорте |
mountId, mountSkill |
Данные текущего транспорта |
status |
Статус из S_USER_STATUS |
inCombat |
Находится ли в бою |
onPegasus |
Выполняется ли перелет на пегасе |
inOpenWorld |
Открытый мир |
inBattleground |
Поле боя |
inDungeon |
Подземелье |
inCivilUnrest |
Civil Unrest |
Не путайте gameId и playerId: первый относится к игровому объекту в текущем подключении, второй — к персонажу на сервере.
События
| Событие и аргументы | Когда вызывается |
|---|---|
change_template(templateId, className, race, gender) |
S_LOGIN или смена героя TBA |
change_zone(zone, quick) |
Изменение зоны на S_LOAD_TOPO; quick: false означает экран загрузки |
die() |
Смерть персонажа |
resurrect() |
Воскрешение |
mount(id, skill) |
Посадка на обычный транспорт; не пегас/NPC |
dismount() |
Сход с обычного транспорта |
change_name(name) |
Изменение имени в игре |
change_level(level) |
Изменение уровня |
enter_combat(), leave_combat() |
Вход/выход из боя |
start_pegasus(), finish_pegasus() |
Начало/конец перелета |
change_zone не срабатывает при смене канала или телепортации внутри той же зоны. Подписка: mod.game.me.on('change_level', (level) => { ... }). Имя аргумента className в JavaScript используется вместо зарезервированного слова class.
Abnormalities
Включите дополнительную функцию в конструкторе:
mod.game.initialize('me.abnormalities');
mod.game.me.abnormalities — объект с ID эффектов в ключах. Значения содержат id, число стаков stacks, время окончания until (timestamp в миллисекундах, BigInt), оставшееся время remaining в миллисекундах и data — ссылку на справочник эффектов. В текущей реализации положительный remaining — BigInt, а истекший эффект возвращает число 0; для дальнейшей арифметики явно нормализуйте тип.
for (const abnormality of Object.values(mod.game.me.abnormalities)) {
mod.log(`${abnormality.data?.name ?? abnormality.id}: ${abnormality.stacks}`);
for (const effect of abnormality.data?.effects ?? []) {
mod.log(`Type ${effect.type}, method ${effect.method}, value ${effect.value}`);
}
}
Источники: mods/tera-game-state/doc/me.md, mods/tera-game-state/lib/me.js.