事件
# 您可以使用 [callbacks.Register()](doc:O2EcwsHc) 来追踪下列事件的触发
### Draw
每帧渲染都会被触发,经常配合 **[draw.*](doc:FEHo2RQL)** 函数使用
---
### CreateMove
每tick被触发,返回封装好的 UserCmd 类给回调方法。
键值索引 | 介绍
--- | -----------
**chokedcommands** | 当前已经被阻塞的 UserCmd 计数
**command_number** | 当前 UserCmd 的序号
**tick_count** | 当前 tick 计数
**viewangles** | 当前的视角(封装为 **[欧拉角](doc:g3sER7An)**)
**aimdirection** | 瞄准方向(封装为 **[三维向量](doc:cQ9pAMn4)**)
**forwardmove** | 向前 / 向后的移动速度(最大值为 450)
**sidemove** | 向左 / 向右的移动速度(最大值为 450)
**upmove** | 向上的移动速度
**buttons** | 当前按下的按钮(请使用 **位运算** 来计算和修改)
**impulse** | 当前的冲量(即末动量减去初动量)
**weaponselect** | 当前玩家的武器选择(武器 ID)
**weaponsubtype** | 当前玩家的武器副类型
**random_seed** | 当前 tick 的伪随机种子(CRC 使用)
**mousedx** | 鼠标在屏幕上的水平位置
**mousedy** | 鼠标在屏幕上的垂直位置
**hasbeenpredicted** | 当前是否吻合服务器的预测轨迹补偿
**headangles** | 头部视角(封装为 **[欧拉角](doc:g3sER7An)**)
**headoffset** | 头部补偿向量(封装为 [**三维向量**](doc:cQ9pAMn4))
**sendpacket** | 当前 UserCmd 是否被阻塞
---
### FireGameEvent
当 **监听的游戏事件被触发** 时触发,返回封装好的 GameEvent 类给回调方法。
可通过 **client.AllowListener('事件名')** 来监听。
[游戏事件 文档 (由 AlliedModders 维护)](https://wiki.alliedmods.net/Counter-Strike:_Global_Offensive_Events)
方法名 | 接受参数 |介绍
--- |------ |-----------
**GetName** | 空 | 获得被触发的当前 GameEvent 名称
**GetString** | 字段名称 | 以 **字符串** 的形式返回所请求 **字段名称** 的内容
**GetInt** | 字段名称 | 以 **整数** 的形式返回所请求 **字段名称** 的内容
**GetFloat** | 字段名称 | 以 **浮点数** 的形式返回所请求 **字段名称** 的内容
---
### DispatchUserMessage
每次服务器下发 UserMessage 时触发,返回封装好的 UserMessage 类给回调方法。
[UserMessage 文档 (由 Steam Database 维护)](https://github.com/SteamDatabase/Protobufs/blob/master/csgo/cstrike15_usermessages.proto)
方法名 | 接受参数 |介绍
--- |------ |-----------
**GetID** | 空 | 获得被触发的当前 UserMessage 类型 ID
**GetString** | 索引,重复索引 | 以 **字符串** 的形式返回所请求 **索引** 的内容
**GetInt** | 索引,重复索引 | 以 **整数** 的形式返回所请求 **索引** 的内容
**GetFloat** | 索引,重复索引 | 以 **浮点数** 的形式返回所请求 **索引** 的内容
---
### SendStringCmd
当 **控制台指令发送给服务器** 时触发,返回封装好的 StringCmd 类给回调方法。
方法名 | 接受参数 |介绍
--- |------ |-----------
**Get** | 空 | 获取发送给服务器的指令内容
**Set** | 字符串 | 设置发送给服务器的指令内容
---
### AimbotTarget
当 合法自瞄 / 暴力自瞄 **锁定/更换** 目标时触发,返回更换后的[玩家实体](doc:OCsAv1zG)。
---
### DrawESP
每次 **循环渲染 ESP** 时触发,返回封装好的 EspBuilder 类给回调方法。
方法名 | 接受参数 |介绍
--- |------ |-----------
**GetEntity** | 空 | 构建 ESP 的 **[玩家实体](doc:OCsAv1zG)**
**GetRect** | 空 | 构建 ESP 的 **[玩家实体](doc:OCsAv1zG)** 的方框 *x, y, w, h*
**Color** | 红,绿,蓝,透明 | 构建 ESP 的 **[玩家实体](doc:OCsAv1zG)** 的 ESP 颜色
**AddTextTop** | 字符串 | 在 **[玩家实体](doc:OCsAv1zG)** 的顶部渲染字符串
**AddTextBottom** | 字符串 | 在 **[玩家实体](doc:OCsAv1zG)** 的底部渲染字符串
**AddTextLeft** | 字符串 | 在 **[玩家实体](doc:OCsAv1zG)** 的左侧渲染字符串
**AddTextRight** | 字符串 | 在 **[玩家实体](doc:OCsAv1zG)** 的右侧渲染字符串
**AddBarTop** | 百分比 | 在 **[玩家实体](doc:OCsAv1zG)** 的顶部渲染进度条
**AddBarBottom** | 百分比 | 在 **[玩家实体](doc:OCsAv1zG)** 的底部渲染进度条
**AddBarLeft** | 百分比 | 在 **[玩家实体](doc:OCsAv1zG)** 的左侧渲染进度条
**AddBarRight** | 百分比 | 在 **[玩家实体](doc:OCsAv1zG)** 的右侧渲染进度条
**AddIconTop** | 材质 ID | 在 **[玩家实体](doc:OCsAv1zG)** 的顶部渲染指定材质
**AddIconBottom** | 材质 ID | 在 **[玩家实体](doc:OCsAv1zG)** 的底部渲染指定材质
**AddIconLeft** | 材质 ID | 在 **[玩家实体](doc:OCsAv1zG)** 的左侧渲染指定材质
**AddIconRight** | 材质 ID | 在 **[玩家实体](doc:OCsAv1zG)** 的右侧渲染指定材质
---
### DrawModel
每次 **模型渲染(例:玩家模型 / 武器模型)** 时触发,返回封装好的 DrawModelContext 类给回调方法。
方法名 | 接受参数 |介绍
--- |------ |-----------
**GetEntity** | 空 | 返回封装好的 **[当前实体](doc:OCsAv1zG)**
**ForcedMaterialOverride** | 材质 ID | 用 **[指定材质](doc:2IqAlUHf)** 覆盖 **[当前材质](doc:2IqAlUHf)**
**DrawExtraPass** | 空 | 再对 **[当前实体](doc:OCsAv1zG)** 进行一次渲染
---
### Unload
每次 **卸载当前 Lua** 时触发。
```lua
callbacks.Register("Unload", function ()
print("Unload")
end)
```