# Коллбеки
Все события, которые обрабатывает чит, передаются в коллбеки скриптов, что позволяет понимать ситуацию в игре и делать определенные действия
# OnUpdate
Один из самых частоиспользуемых коллбеков. Вызывается каждый тик, каждый вызов обновляет данные и информацию на игровой карте.
ПОДСКАЗКА
Именно в этот коллбек мы рекомендуем класть ВСЮ "тяжёлую" логику скриптов, которая требует просчёта каждый тик.
Пример логики: автохук пуджа, автосанстрайк инвокера, все прокасты, просчёт инвентарей противника и прочее.
ПОДСКАЗКА
В этом коллбеке можно вызывать функции отрисовки, но из-за того, что он вызывается намного реже значения FPS отрисовка не будет плавной. Для всей отрисовки рекомендуем использовать коллбек OnDraw
Пример использования:
let exampleScript = {};
exampleScript.OnUpdate = () => {
console.log('OnUpdate works!');
};
RegisterScript(exampleScript);
GetElapsedTime
# OnDraw
Вызывается КАЖДЫЙ кадр, из-за этого в этом коллбеке не должно быть сложной логики, в противном случае у пользователей скриптов будут просадки FPS.
Обсуждение на форуме:
ВНИМАНИЕ
Никогда не используйте этот коллбек для сложной логики. Если у вас есть возможность перенести вычисления, то сделайте их в OnUpdate
Пример использования:
let exampleScript = {};
exampleScript.OnDraw = () => {
// Set white color
Renderer.SetDrawColor(255, 255, 255, 255);
// then draw the square
Renderer.DrawFilledRect(0, 0, 300, 300);
// and draw one more square, but with red color
Renderer.SetDrawColor(255, 0, 0, 255);
Renderer.DrawFilledRect(150, 150, 300, 300);
};
RegisterScript(exampleScript);
# OnUnitAnimation
Вызывается когда какой-то из юнитов атакует кого-либо даже в тумане войны, а также при анимации некоторых способностей (но это неточно).
Пример использования:
let exampleScript = {};
exampleScript.OnUnitAnimation = (animation) => {
console.log('OnUnitAnimation works!', JSON.stringify(animation));
};
RegisterScript(exampleScript);
// animation object declaration:
declare interface UnitAnimationCallbackObject {
unit: NPC | null;
sequenceVariant: number; // Attack animation index 2
playbackRate: number; // Animation speed scales
castpoint: number; // Time from start to the poke
type: number;
activity: number; // Dota 2 action variant
sequence: number; // Attack animation index
sequenceName: string; // Attack animation name
}
# OnUnitAnimationEnd
Вызывается при окончании анимации.
Пример использования:
let exampleScript = {};
exampleScript.OnUnitAnimationEnd = (animation) => {
console.log('OnUnitAnimationEnd works!', JSON.stringify(animation));
};
RegisterScript(exampleScript);
// animation object declaration:
declare interface UnitAnimationEndCallbackObject {
unit: NPC | null;
snap; // I don't really know
}
# OnProjectile
Вызывается при создании прожектайла.
Пример использования:
let exampleScript = {};
exampleScript.OnProjectile = (projectile) => {
console.log('OnProjectile works!', JSON.stringify(projectile));
};
RegisterScript(exampleScript);
// projectile object declaration:
declare class Projectile {
source: NPC | Hero | null;
target: NPC | Hero | null;
moveSpeed: number;
sourceAttachment: Enum.ParticleAttachment;
particleSystemHandle: number;
dodgeable: boolean;
isAttack: boolean;
isEvaded: boolean;
expireTime: number;
maxImpactTime: number;
colorGemColor: number;
fullName: string;
name: string;
handle: number;
}
# OnLinearProjectileCreate
Вызывается при создании линеарного прожектайла (Sacred Arrow и прочие способности).
Пример использования:
let exampleScript = {};
exampleScript.OnLinearProjectileCreate = (linearProjectile) => {
console.log('OnLinearProjectileCreate works!', JSON.stringify(projectile));
};
RegisterScript(exampleScript);
// linearProjectile object declaration:
declare class LinearProjectile {
maxDist: number;
fowRadius: number;
source: NPC | Entity | Hero | null;
origin: Vector;
velocity: Vector;
particleIndex: number;
handle: number;
acceleration: Vector;
latency: number;
maxSpeed: number;
fullName: string;
name: string;
}
# OnLinearProjectileCreate
Вызывается при создании линеарного прожектайла (Sacred Arrow и прочие способности).
ПОДСКАЗКА
Для связи с объектами из OnLinearProjectileCreate используйте handle
Пример использования:
let exampleScript = {};
exampleScript.OnLinearProjectileDestroy = (handle /* <-- integer */) => {
console.log('OnLinearProjectileDestroy works!', handle);
};
RegisterScript(exampleScript);
# OnParticleCreate
Вызывается при создании партикла.
Пример использования:
let exampleScript = {};
exampleScript.OnLinearProjectileDestroy = (particle) => {
console.log('OnParticleCreate works!', JSON.stringify(particle));
};
RegisterScript(exampleScript);
// particle object declaration:
declare interface CreatedParticle {
index: number;
entity: NPC | Entity | Hero | null;
particleNameIndex: number;
attachType: number;
entityForModifiers: NPC | Hero | null;
fullName: string;
name: string;
}
# OnParticleUpdate
Вызывается при обновлении партикла (например, обновление позиции).
Пример использования:
let exampleScript = {};
exampleScript.OnParticleUpdate = (particle) => {
console.log('OnParticleUpdate works!', JSON.stringify(particle));
};
RegisterScript(exampleScript);
// particle object declaration:
declare interface UpdatedParticle {
index: number;
position: Vector;
controlPoint: number;
}
# OnParticleUpdateEntity
Вызывается когда к партиклю привязывается или обновляется Entity.
Пример использования:
let exampleScript = {};
exampleScript.OnParticleUpdateEntity = (particle) => {
console.log('OnParticleUpdateEntity works!', JSON.stringify(particle));
};
RegisterScript(exampleScript);
// particle object declaration:
declare interface ParticleUpdateEntity {
index: number;
controlPoint: number;
entity: NPC | Entity | Hero | null;
attachType: number;
attachment: Enum.ParticleAttachment;
position: Vector;
includeWearables: boolean;
}
# OnParticleDestroy
Вызывается при удалении партикля.
Пример использования:
let exampleScript = {};
exampleScript.OnParticleDestroy = (particle) => {
console.log('OnParticleDestroy works!', JSON.stringify(particle));
};
RegisterScript(exampleScript);
// particle object declaration:
declare interface DestroyedParticle {
index: number;
destroyImmediately: boolean;
}
# OnParticleDestroy
Вызывается при удалении партикля.
Пример использования:
let exampleScript = {};
exampleScript.OnParticleDestroy = (particle) => {
console.log('OnParticleDestroy works!', particle);
};
RegisterScript(exampleScript);
// particle object declaration:
declare interface DestroyedParticle {
index: number;
destroyImmediately: boolean;
}
# OnEntityCreate
Вызывается при создании Entity.
ПРЕДУПРЕЖДЕНИЕ
Когда Entity только создался, у него не заполнена информация о Unit Name и многие другие поля. Чтобы избежать этого необходимо ставить таймаут внутри коллбека, см. пример использования.
Пример использования:
let exampleScript = {};
exampleScript.OnEntityCreate = (entity) => {
console.log('OnEntityCreate works!', entity);
// GetUnitName будет работать только лишь в следующем тике!!!
console.log(entity.GetClassName());
setTimeout(() => {
// Так как тик прошёл, GetUnitName уже будет работать :)
console.log(entity.GetUnitName());
}, 33);
};
RegisterScript(exampleScript);
# OnModifierCreate
Вызывается при создании модификатора.
Пример использования:
let exampleScript = {};
exampleScript.OnModifierCreate = (entity, modifier) => {
console.log('OnModifierCreate works!',
entity.GetUnitName(),
modifier.GetName());
};
RegisterScript(exampleScript);
# OnModifierDestroy
Вызывается при удалении модификатора.
Пример использования:
let exampleScript = {};
exampleScript.OnModifierDestroy = (entity, modifier) => {
console.log('OnModifierDestroy works!',
entity.GetUnitName(),
modifier.GetName());
};
RegisterScript(exampleScript);
# OnStartSound
Вызывается когда начинает проигрываться звук. Работает не со всеми звуками Dota 2.
Пример использования:
let exampleScript = {};
exampleScript.OnStartSound = (sound) => {
console.log('OnStartSound works!', JSON.stringify(sound));
};
RegisterScript(exampleScript);
// sound object declaration:
declare class Sound {
source: Entity | null;
name: string;
hash: number;
guid: number;
seed: number;
}
# OnPrepareUnitOrders
Вызывается когда игрок отправил приказ персонажу либо любому другому подконтрольному юниту.
ВНИМАНИЕ
Этот коллбек НЕ работает на приказы, которые были отданы скриптами.
Пример использования:
let exampleScript = {};
exampleScript.OnPrepareUnitOrders = (order) => {
console.log('OnPrepareUnitOrders works!', JSON.stringify(order));
};
RegisterScript(exampleScript);
// order object declaration:
declare interface PreparedOrder {
player: Player;
order: Enum.UnitOrder;
target: NPC | null;
position: Vector | null;
ability: Ability | null;
abilityIndex: Number | null;
orderIssuer: Enum.PlayerOrderIssuer;
npc: NPC | null;
queue: boolean;
showEffects: boolean;
}
# OnGameStart
Вызывается сразу после появление персонажей на карте, либо же после переподключения в игру.
ВНИМАНИЕ
Данный коллбек пока что не отрабатывает при начале просмотра игры.
Пример использования:
let exampleScript = {};
exampleScript.OnGameStart = () => {
console.log('OnGameStart works!');
};
RegisterScript(exampleScript);
# OnGameEnd
Вызывается после окончания игры после выхода в главное меню.
ВНИМАНИЕ
Данный коллбек пока что не отрабатывает при начале просмотра игры.
Пример использования:
let exampleScript = {};
exampleScript.OnGameEnd = () => {
console.log('OnGameEnd works!');
};
RegisterScript(exampleScript);
# OnScriptLoad
Вызывается после полной загрузки скрипта.
Пример использования:
let exampleScript = {};
exampleScript.OnScriptLoad = () => {
console.log('OnScriptLoad works!');
};
RegisterScript(exampleScript);
# OnScriptUnload
Вызывается после перед выгрузкой скрипта.
Пример использования:
let exampleScript = {};
exampleScript.OnScriptUnload = () => {
console.log('OnScriptUnload works!');
};
RegisterScript(exampleScript);
# OnKeyEvent
Вызывается при нажатии кнопок, а также скролле.н
Пример использования:
let exampleScript = {};
exampleScript.OnKeyEvent = (keyEvent) => {
console.log('OnKeyEvent works!');
if(keyEvent.event === Enum.KeyEvent.SCROLL_DOWN) {
console.log('Mousewheel scrolled down!');
} else if(keyEvent.event === Enum.KeyEvent.SCROLL_UP) {
console.log('Mousewheel scrolled up!');
}
};
RegisterScript(exampleScript);
// keyEvent object declaration:
declare interface KeyEventObject {
event: Enum.KeyEvent;
key: Enum.ButtonCode;
}
← Hero TypeScript →