``` Unit ManagerNpc; Interface Uses Classes, SysUtils, DateUtils, DefiniensConst, ExtendFuns; //玩家数据初始化完成触发,此时不可向角色发送消息(只初始化一次,离线挂机后重新上线不执行初始化) Procedure Playeroninitialization(Npc: TNormNpc; Player: TPlayObject); //玩家登陆触发 Procedure Playeronlogin(Npc: TNormNpc; Player: TPlayObject; OnlineAddExp: Boolean); //人物小退 OnlineAddExp:是否离线挂机 Procedure Playerreconnection(Npc: TNormNpc; Player: TPlayObject; OnlineAddExp: Boolean); //人物退出 Procedure Playeroffline(Npc: TNormNpc; Player: TPlayObject; OnlineAddExp: Boolean); //玩家提示信息处理 Procedure Linenoticemessage(Npc: TNormNpc; Player: TPlayObject; Var Message: String); //玩家输入命令 Procedure Processcommand(Npc: TNormNpc; Player: TPlayObject; Const Command: String; Args: TArgs; Var Handled: Boolean); //打开会员功能 Procedure Openmember(Npc: TNormNpc; Player: TPlayObject); //玩家打开帮助时内容 Procedure Playerhelp(Npc: TNormNpc; Player: TPlayObject); //玩家点击热点后触发 Procedure Playerhot(Npc: TNormNpc; Player: TPlayObject); //玩家点击商城在线充值时执行 Procedure Playerpayhome(Npc: TNormNpc; Player: TPlayObject); //怪物复活时触发: Envir地图环境,Actor怪物信息,Tag为怪物标志 Procedure Monitorrevival(Npc: TNormNpc; Envir: TEnvirnoment; Actor: TActor; Const Tag: Integer); //怪物死亡触发: Envir地图环境,Actor怪物信息,Killer击杀者,Tag为怪物标志 Procedure Monitordie(Npc: TNormNpc; Envir: TEnvirnoment; Actor, Killer: TActor; Const Tag: Integer); //怪物杀人触发: Envir地图环境,Actor怪物信息,Player被杀的玩家,Tag为怪物标志 Procedure Monitorkill(Npc: TNormNpc; Envir: TEnvirnoment; Actor: TActor; Player: TPlayObject; Const Tag: Integer); //怪物收到伤害触发: Actor怪物信息, ADamageSource造成目标掉血的对象,Tag为怪物标志,Value为掉血数量 该事件不区分物理攻击和魔法攻击 Procedure Monitordamage(Npc: TNormNpc; Actor, ADamageSource: TActor; Const Tag: Int64;Const Value: Int64); //行会初始化 Procedure Guildinitialize(Npc: TNormNpc; Guild: TGuild); //发现玩家游戏速度异常 Procedure Playerspeedexception(Player:TPlayObject;Var Kick:Boolean); { 参数意义说明: State : 状态码 。0:改名成功, -1:新的名字已经存在无法改名。-2,-3 DBServer异常(可能是数据库链接断开或者被关闭)。 -4:新的角色名字非法。 PlayObject :要改名的玩家对象 到此处可能有可能为nil OldName : 原名字 Newname :新名字 名字的额外说明: 脚本内使用玩家名字按原先的设置 Player.Name 写即可 系统会自动判定 Newname 为空则显示OldName 不为空则直接显示新名 OldName 为建人物的时候定死的 仅能修改 Newname 且该名字在服务器内不存在同名 OldName和Newname 这两个仅在写脚本界面给玩家看到的时候调用即可 } //改名成功。需要注意的是这个时候传递进来的PlayObject 可能为nil 。 Procedure Onplayerrenamesucess (State: Integer;PlayObject: TPlayObject; Const OldName, Newname: String); //改名失败。需要注意的是这个时候传递进来的PlayObject 可能为nil 。 Procedure Onplayerrenamefail (State: Integer;PlayObject: TPlayObject; Const OldName, Newname: String); //此触发函数 为 procedure MonitorDamage 的增强版本 会优先于 MonitorDamage执行。 Procedure MonitorDamageEx(Npc: TNormNpc; Actor, ADamageSource: TActor; Const Tag,MagicID,Level:Integer; Var Damage: int64); //当脚本引擎启动时 isReload 表示是否重载脚本 Procedure Onscriptengineinit(isReload:Boolean); //当脚本引擎销毁时 isReload 表示是否重载脚本 Procedure Onscriptenginefinal(isReload:Boolean); //自定义UI中脚本按钮触发函数, Flag参数 为 脚本按钮中 设置的 的标志字段 Procedure Onscriptbutton(Npc:TNormNpc;Player : TPlayObject ;Const Flag:String); //用于支持http提交json功能,结果触发函数,当成功或者失败会调用此函数。(异步模式 同步会导致引擎主线程逻辑卡) {参数说明 Ident : 请求标志 自定义数据 URL:远程服务器URL Response : 服务器返回的数据(失败 为 空字符串,但是服务器如果返回的就是空串那要根据 ErrorStr来判定成功与否) ErrorStr : 成功为空字符串 失败为失败的错误描述信息。可以根据是否为空串判定是否成功 } Procedure Onasynchttppostresult(Npc: TNormNpc; Const Ident:String ; Const URL:String; Const Response:String ; Const ErrorStr:String); //用于支持httpget功能,结果触发函数,当成功或者失败会调用此函数。(异步模式 同步会导致引擎主线程逻辑卡) { 参数说明 Ident : 请求标志 自定义数据 URL:远程服务器URL Response : 服务器返回的数据(失败 为 空字符串,但是服务器如果返回的就是空串那要根据 ErrorStr来判定成功与否) ErrorStr : 成功为空字符串 失败为失败的错误描述信息。可以根据是否为空串判定是否成功 } procedure OnAsyncHttpGetResult(Npc: TNormNpc; const Ident:String ; const URL:String; const Response:string ; const ErrorStr:String); Implementation Procedure Playeroninitialization(Npc: TNormNpc; Player: TPlayObject); Begin End; Procedure Playeronlogin(Npc: TNormNpc; Player: TPlayObject; OnlineAddExp: Boolean); Begin End; Procedure Playerreconnection(Npc: TNormNpc; Player: TPlayObject; OnlineAddExp: Boolean); Begin End; Procedure Playeroffline(Npc: TNormNpc; Player: TPlayObject; OnlineAddExp: Boolean); Begin End; Procedure Linenoticemessage(Npc: TNormNpc; Player: TPlayObject; Var Message: String); Begin End; Procedure Processcommand(Npc: TNormNpc; Player: TPlayObject; Const Command: String; Args: TArgs; Var Handled: Boolean); Begin End; Procedure Openmember(Npc: TNormNpc; Player: TPlayObject); Begin End; Procedure Playerhelp(Npc: TNormNpc; Player: TPlayObject); Begin End; Procedure Playerhot(Npc: TNormNpc; Player: TPlayObject); Begin End; Procedure Playerpayhome(Npc: TNormNpc; Player: TPlayObject); Begin End; Procedure Monitorrevival(Npc: TNormNpc; Envir: TEnvirnoment; Actor: TActor; Const Tag: Integer); Begin End; Procedure Monitordie(Npc: TNormNpc; Envir: TEnvirnoment; Actor, Killer: TActor; Const Tag: Integer); Begin End; Procedure Monitorkill(Npc: TNormNpc; Envir: TEnvirnoment; Actor: TActor; Player: TPlayObject; Const Tag: Integer); Begin End; Procedure Monitordamage(Npc: TNormNpc; Actor, ADamageSource: TActor; Const Tag: Int64;Const Value: Int64); Begin End; Procedure Guildinitialize(Npc: TNormNpc; Guild: TGuild); Begin End; Procedure Playerspeedexception(Player:TPlayObject;Var Kick:Boolean); Begin Kick := False; Player.Sendmessage('请不要开外挂,系统已经发现你速度异常了'); End; Procedure Onplayerrenamesucess (State: Integer;PlayObject: TPlayObject; Const OldName, Newname: String); Begin End; Procedure Onplayerrenamefail (State: Integer;PlayObject: TPlayObject; Const OldName, Newname: String); Begin End; //此触发函数 为 procedure MonitorDamage 的增强版本 会优先于 MonitorDamage执行。 Procedure MonitorDamageEx(Npc: TNormNpc; Actor, ADamageSource: TActor; Const Tag,MagicID,Level:Integer; Var Damage: int64); Begin //增加了技能ID 和技能等级 以及 伤害可以在脚本内修改的功能。 //参数说明: //NPC :指向QManagerNPC 的对象。 //Actor : 受攻击者. //ADamageSource: 攻击者, //Tag:标志值 //MagicID:魔法ID, //Level:魔法等级 //Damage:伤害值(修改此值即可改变本次伤害的数值 , 小<= 0 表示此次攻击无效,>= 0 则表示正常伤害。) End; Procedure Onscriptengineinit(isReload:Boolean); Begin If isReload Then Begin Debug('OnScriptEngineInit 重载'); End Else Begin Debug('OnScriptEngineInit 启动'); End; End; Procedure Onscriptenginefinal(isReload:Boolean); Begin If isReload Then Begin Debug('OnScriptEngineFinal 重载'); End Else Begin Debug('OnScriptEngineInit 关闭'); End; Procedure Onscriptbutton(Npc:TNormNpc;Player : TPlayObject ;Const Flag:String); Begin Player.Sendmessage('你点击了脚本按钮, 按钮标志:' + Flag); End; Procedure Onasynchttppostresult(Npc: TNormNpc; Const Ident:String ; Const URL:String; Const Response:String ; Const ErrorStr:String); Begin End; procedure OnAsyncHttpGetResult(Npc: TNormNpc; const Ident:String ; const URL:String; const Response:string ; const ErrorStr:String); Begin End; End. ```