多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
``` Unit QFunctionNpc; Interface Uses Classes, SysUtils, DefiniensConst, Math; //人物杀怪 Procedure Killmonster(Npc: TNormNpc; Player: TPlayObject; Monster: TActor); //宝宝杀怪触发 Procedure Slavekillmonster(Npc: TNormNpc; Player: TPlayObject; Slave, Monster: TActor); //杀人触发 Procedure Killplayer(Npc: TNormNpc; Killer, Player: TPlayObject); //宝宝杀人触发 Procedure Slavekillplayer(Npc: TNormNpc; Master: TPlayObject; Slave: TActor; Player: TPlayObject); //人物死亡触发 Procedure Playerdie(Npc: TNormNpc; Player: TPlayObject; Killer: TActor); //人物复活触发 Procedure Playerrealive(Npc: TNormNpc; Player: TPlayObject); //人物升级触发 Procedure Playerlevelup(Npc: TNormNpc; Player: TPlayObject; Const Level: Integer); //BB升级触发 Master:BB属于谁(可能是人形怪) Slave:当前升级的BB NewLevel:将要升到的级数 Accept:是否允许升级,默认为True,如果设置为False则BB不可升级 Procedure Slavelevelup(Npc: TNormNpc; Master, Slave: TActor; NewLevel: Integer; Var Accept: Boolean); //人物修习技能触发 Procedure Playaddskill(Npc: TNormNpc; Player: TPlayObject; Magic: TUserMagic; Var Accpet: Boolean); //人物改变PK模式时触发,OldMode为改变前的模式,NewMode为新模式 Procedure Changeattatckmode(Npc: TNormNpc; Player: TPlayObject; OldMode: TAttatckMode; Var NewMode: TAttatckMode); //人物攻击时触发: UserMagic为当前技能,可能为nil;Target为当前攻击的目标,可能为nil;Accept是否允许本次攻击,默认为是 Procedure Playerattack(Npc: TNormNpc; Player: TPlayObject; UserMagic: TUserMagic; Target: TActor; Var Accept: Boolean); //人物获得经验值时触发 Procedure Ongetexp(Npc: TNormNpc; Player: TPlayObject; Var Exp: Integer); //决斗结束 Procedure Duelend(Npc: TNormNpc; Winner, Loser: TPlayObject); //OnBagItemEvent:背包物品事件 //Item:和当前事件相关的物品 //EventType: 事件类型 // 0:增加到背包 // 1:从背包中移出 //EventID:事件ID { EventType:0, EventID: 0:捡取 1:怪物身上挖出 2:挖矿挖出 3:解包 4:从身上取下 5:商店购买 6:元宝商城购买 7:礼金商城购买 8:玩家交易获得 9:交易市场购买 10:交易市场下架 11:命令制造获得 12:取仓库 13:其他 EventType:1, EventID: 0:丢弃 1:死亡爆出 2:出售 3:正常使用 4:穿戴到身上 5:交易给其他玩家 6:到期销毁 7:破损销毁 8:上架到交易市场 9:用脚本执行销毁或拿走 10:存 11:其他 } Procedure Onbagitemevent(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; EventType, EventID: Byte); //人物掉落物品(扔物)触发(针对监视物品):Player:玩家,Item: 物品,ISUseItem:是否为身上穿戴的物品,Accept:是否允许掉落(当物品规则中指定死亡必掉物品此参数无效) Procedure Playerdropitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; Const MapX, MapY: Integer; ISUseItem: Boolean; Var Accept: Boolean); //人物扔物品触发(针对监视物品):Player:玩家,Item: 物品,Accept:是否允许扔出 Procedure Playerthrowitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; Const MapX, MapY: Integer; Var Accept: Boolean); //怪物掉落物品触发(针对监视物品):Owner:物品所属玩家,Monster:掉落怪物,item:物品,Accept:是否允许掉落 Procedure Mondropitem(Npc: TNormNpc; Owner: TPlayObject; Monster: TActor; Item: TUserItem; Map: TEnvirnoment; Const X, Y: Integer; Var Accept: Boolean); //根据怪物名称爆出物品触发(针对监视物品):Owner:物品所属玩家,Monster:怪物名称,item:物品,Accept:是否允许掉落 Procedure Dropitembymonname(Npc: TNormNpc; Owner: TPlayObject; Const Monster: String; Item: TUserItem; Var Accept: Boolean); //玩家从地上捡物品触发 Procedure Pickupitem(Npc: TNormNpc; Player: TPlayObject; Envir: TEnvirnoment; UserItem: TUserItem; Var Accept: Boolean); //挖矿时挖出物品触发: Player挖矿人 UserItem挖出的物品 Envir当前挖矿地图 Accept是否允许将该物品给玩家,默认为是 Procedure Minedropitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; Envir: TEnvirnoment; Const X, Y: Integer; Var Accept: Boolean); //当玩家点击采集物时执行 Player:当前进行采集的玩家 Monster:被采集的资源对象 Accept:是否允许执行采集 Procedure Onbeforecollect(Npc: TNormNpc; Player: TPlayObject; Monster: TActor; Var Accept: Boolean); //当玩家采集完成 Player:当前进行采集的玩家 Monster:被采集的资源对象 Accept:是否允许采集到物品 Procedure Oncollect(Npc: TNormNpc; Player: TPlayObject; Monster: TActor; Var Accept: Boolean); //从怪物升上挖掘道具触发:Accept表示该物品允许玩家拥有,默认为True Procedure Butchitem(Npc: TNormNpc; Player: TPlayObject; Monster: TActor; UserItem: TUserItem; Var Accept: Boolean); //购买商铺物品触发 Procedure Buyshopitem(Npc: TNormNpc; Player: TPlayObject; UserItem: TUserItem; Const Kind, ShopType, Count, Price: Integer); //商铺购买完成时触发 Procedure Buyshopitemend(Npc: TNormNpc; Player: TPlayObject; Const ItemName: String; Const Kind, ShopType, Count, ActualCount, Price: Integer); //使用物品时触发: StdMode=31,Accept:执行之后是否删除物品,默认为True,如果设置为False,则执行函数的同时不删除物品 Procedure Stdmodefunc(Npc: TNormNpc; Player: TPlayObject; UserItem: TUserItem; Var Accept: Boolean); //脱装备触发,Accept是否允许脱下,默认为True Procedure Ontakeoffitem(Npc: TNormNpc; Player: TPlayObject; UserItem: TUserItem; Const ItemWhere: TItemWhere; Var Accept: Boolean); //脱下装备且属性属性变化后触发 Procedure Onaftertakeoffitem (Player : TPlayObject; TakeOffItem : TUserItem; AItemWhere: TItemWhere); //穿装备触发,Accept是否允许穿戴,默认为True Procedure Ontakeonitem(Npc: TNormNpc; Player: TPlayObject; UserItem: TUserItem; Const ItemWhere: TItemWhere; Var Accept: Boolean); //穿戴装备且属性变化后触发,与OnTakeOnItem不同是 OnTakeOnItem 触发执行的时候装备附加的属性没有加到人身上。OnAfterTakeOnItem是属性已经附加到人物身上了。 //注意当穿戴位置 原先没有装备的时候 TakeOffItem 是为nil 的 请先判断 再做操作。 Procedure Onaftertakeonitem(Player : TPlayObject; TakeOnItem: TUserItem; TakeOffItem : TUserItem; AItemWhere: TItemWhere); //玩家使用物品点击目标物品触发, 使用物品的StdMode=33,Accept:执行后是否删除使用物品,默认为是 Procedure Itemclickitem(Npc: TNormNpc; Player: TPlayObject; Source, Dest: TUserItem; Var Accept: Boolean); //玩家使用物品点击身上穿戴的物品触发, 使用物品的StdMode=33,Accept:执行后是否删除使用物品,默认为是 Procedure Itemclickuseitem(Npc: TNormNpc; Player: TPlayObject; ItemWhere: TItemWhere; Source, Dest: TUserItem; Var Accept: Boolean); //释放魔法触发,Accpet:是否允许释放,默认为True Procedure Magicspell(Npc: TNormNpc; Player: TPlayObject; UserMagic: TUserMagic; nTargetX, nTargetY: Integer; Target: TActor; Var Accpet: Boolean); //点击了背包中淬炼装备按钮 Handled设置为True后客户端将不弹出默认的淬炼窗口,Handled默认为False;如果需要在点击淬炼按钮的时候执行其他处理则在此事件中执行,同时将Handled设置为True Procedure Onrefinebuttonclick(Npc: TNormNpc; Player: TPlayObject; Var Handled: Boolean); //淬炼装备 Procedure Refineitem(Npc: TNormNpc; Player: TPlayObject; Item1, Item2, Item3: TUserItem; Var Handled: Boolean); //加入行会前触发 Procedure Beforeguildaddmember(Npc: TNormNpc; Guild: TGuild; Player: TPlayObject; Var Accept: Boolean); //加入行会后触发 Procedure Guildaddedmember(Npc: TNormNpc; Guild: TGuild; Player: TPlayObject); //退出行会前触发 Procedure Beforeguildremovemember(Npc: TNormNpc; Guild: TGuild; Const Player: String; Var Accept: Boolean); //退出行会后触发 Procedure Guildremovedmember(Npc: TNormNpc; Guild: TGuild; Const Player: String); //队伍有角色加入时触发 Procedure Groupaddedmember(Npc: TNormNpc; Owner, Member: TPlayObject); //队伍有角色退出触发 Procedure Groupremovedmember(Npc: TNormNpc; Owner, Member: TPlayObject); //获取宝箱物品触发 Procedure Getboxitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; BoxID: Integer); //用户执行进度条事件触发,只有脚本调用ShowProgress函数且最终执行其事件才会触发本函数 Procedure Progressevent(Npc: TNormNpc; Player: TPlayObject; EventID: Integer); //用户角度条执行失败触发 Procedure Progressfaild(Npc: TNormNpc; Player: TPlayObject; EventID: Integer); //装备的魂炼等级提升时触发: Procedure Itemsoullevelup(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem); //角色称号系统当前称号发生变化后触发 Procedure Onactivetitlechanged(Npc: TNormNpc; Player: TPlayObject); //历史更新原因,自由市场和个人摊位都命名为Stall,勿喷 //自由市场 Procedure Stallputon(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; GoldPrice: Integer; GameGoldPrice: Integer; GamePoint: Integer; Var Accpet: Boolean);//上架之前 Procedure Stallputoff(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; GoldPrice: Integer; GameGoldPrice: Integer; GamePoint: Integer; Var Accpet: Boolean);//下架之前 Procedure Stallbuyitem(Npc: TNormNpc; Player: TPlayObject; Const StallName: String; Item: TUserItem; Gold: Integer; GameGold: Integer; GamePoint: Integer; Var Accpet: Boolean);//购买 Procedure Stallupdateitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; OldGold: Integer; OldGameGold: Integer; OldGamePoint: Integer; Gold: Integer; GameGold: Integer; GamePoint: Integer; Var Accpet: Boolean);//修改物品价格 Procedure Stallextractgold(Npc: TNormNpc; Player: TPlayObject; Gold: Integer; GameGold: Integer; GamePoint: Integer; Var Accpet: Boolean);//提取货款 //个人摊位 Procedure Onbeforeopenstall(Npc: TNormNpc; Player: TPlayObject; Var Accpet: Boolean); //玩家打开摊位前触发,如果Accpet设置为false则不允许打开摊位界面 Procedure Onbeforestartstall(Npc: TNormNpc; Player: TPlayObject; Var Accpet: Boolean); //玩家在摊位界面点击开始摆摊时触发,如果Accpet设置为false则不允许摆摊 Procedure Onafterstopstall(Npc: TNormNpc; Player: TPlayObject); //玩家在摊位界面点击停止摆摊后触发 //邮件系统 Procedure Mailbeforesend(Npc: TNormNpc; Player: TPlayObject; Const SendTo: String; Item: TUserItem; Var Accept: Boolean); Procedure Mailaftersend(Npc: TNormNpc; Player: TPlayObject; Const SendTo: String); //坐骑 RideOn是骑马还是下马,True表示骑马;Accept表示是否允许本次骑马操作 Procedure Rideonhorse(Npc: TNormNpc; Player: TPlayObject; RideOn: Boolean; Var Accept: Boolean); //客户端点击感叹号图标 Procedure Clicksighicon(Npc: TNormNpc; Player: TPlayObject; MethodID: Integer); //Alt+左键点击背包物品触发,Item为被点击的物品 Procedure Altandlbuttonclickbagitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem); //Alt+左键点击穿戴物品触发,Item为被点击的物品,AItemWhere为穿戴位置 Procedure Altandlbuttonclickuseitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; AItemWhere: TItemWhere); //客户端骰子动画播放完毕触发处理事件 ATag:骰子标志 APoint: 骰子点数 Procedure Ondiceevent(Npc: TNormNpc; Player: TPlayObject; ATag, APoint1, APoint2, APoint3: Integer); //自定义UI中通过脚本发送的命令 Procedure Oncustommessage(Npc: TNormNpc; Player: TPlayObject; AMessageToken, AParam1, AParam2, AParam3: Integer; Const AData: String); //变身开始触发函数 Procedure Onchangetomonsterstart(Actor:TActor; sMonName:String; nSec:Integer); //变身的Actor,变成目标的怪物名称 ,变身的时长(单位秒) //变身结束触发函数 Procedure Onchangetomonsterend(Actor:TActor; sMonName:String); //变身的Actor,变成目标的怪物名称 //PickSender 拾取者, Item 拾取的物品. Gold . 金币数量(如果物品是金币 那么 此变量 不等于 0 否则 此变量等于0.可根据此变量是否为 0 判断拾取的是物品还是金币) WhoPicker .最终拾取者(通过改变此值 可实现 A拾取 到B背包的功能) //ItemState 0: 可以继续拾取 1.不允许继续拾取物品还在地图上 2.不允许继续拾取直接从地图删除物品 Procedure Onpickupitemchangepicker(PickSender:TPlayObject;Item:TUserItem; Var Gold : Integer ; Var WhoPicker:TPlayObject; Var ItemState:Byte); //是否允许引擎对人物进行升级。通过操作Allow 进行 True 表示允许升级 False 表示不允许升级 Procedure Onqueryallowlevelup(Player:TPlayObject;Var Allow:Boolean); // 用于获取每个等级的经验配置数据。此函数由引擎在人物需要改变人物升级经验时引擎触发。 Procedure Ongetlevelexp(Level:Integer;Var Exp:Int64); //自定义热键触发(Akey的值代表按下的按键字符值,KeyCtrl,KeyAlt 代表 Ctrl,Alt按键的状态 False为没有按下 True为按下。ATargetActor代表客户端鼠标指向的TActor,X,Y代表TActor所在位置坐标,如果TActor为nil,则X,Y代表客户端鼠标指向的坐标。) Procedure Onsendhotkey(Npc: TNormNpc; Player: TPlayObject; Akey:Byte; KeyCtrl,KeyAlt: Boolean; ATargetActor:TActor; X,Y:Integer); //PlayerAction函数,可以用来脚本封挂。Accept值为True 则执行动作,反之则不执行。默认为True。Action值代表不同的动作: { 1 攻击 2 魔法 3 骑马跑动 4 跑动 5 走路 6 转向 7 挖肉 8 点击脚本 } Procedure Playeraction(Npc: TNormNpc; Player: TPlayObject; Action :Byte; Var Accept: Boolean); //时装界面勾选是否显示时装触发 Procedure Onshowfashionclick(Npc: TNormNpc; Player: TPlayObject); //点击点击弹出任务侧边栏按钮时触发,默认Accept为True,当Accept为True的时候将弹出默认的任务侧边栏。 Procedure Onshowmissionclick(Npc: TNormNpc; Player: TPlayObject; Var Accept: Boolean ); //玩家聊天触发,可进行消息过滤和特殊指令实现 Procedure OnChatMessage(PlayObject:TPlayObject;const Message:String;var Accept:Boolean); //添加Buff时触发,通过修改 Accept := False 可以禁止此Buff添加到怪物或者玩家身上 procedure OnAddBuff(Actor:TActor;Buff:TBuff;var Accept:Boolean); //移除Buff时触发 procedure OnRemoveBuff(Actor:TActor;Buff:TBuff); //自定义间隔作用类Buff触发(当添加自定义间隔作用类Buff之后 在间隔设定时间后) procedure OnCustomBuffAffect(Actor:TActor;Buff:TBuff); Implementation Uses G_HelpService, ReAlive_Service, G_RefineItem, g_Nation, uLvlup, Q38, QCustomMessage; Procedure Killmonster(Npc: TNormNpc; Player: TPlayObject; Monster: TActor); Begin Checkkillmontask(Player, Monster); Checknationmonnpcdie(Monster, Player); End; Procedure Slavekillmonster(Npc: TNormNpc; Player: TPlayObject; Slave, Monster: TActor); Begin Checkkillmontask(Player, Monster); Checknationmonnpcdie(Monster, Player); End; Procedure Playerdie(Npc: TNormNpc; Player: TPlayObject; Killer: TActor); Begin Checknationplayerdie(Player, Killer); //调用“国家相关”单元处理和国家有关的玩家死亡事件 Showrealivedialog(Npc, Player); //显示复活界面 End; Procedure Playerrealive(Npc: TNormNpc; Player: TPlayObject); Begin End; Procedure Playerlevelup(Npc: TNormNpc; Player: TPlayObject; Const Level: Integer); Begin Case Level Of 10:Begin //升级到10级 If Not Player.AllowSendMessage Then Begin Player.AllowSendMessage := True; Player.Sendmessage('你已被解除禁言!!!', 0); End; End; 20:Begin //升级到20级 Npc.Give(Player, '乌木剑'); End; End; End; Procedure Slavelevelup(Npc: TNormNpc; Master, Slave: TActor; NewLevel: Integer; Var Accept: Boolean); Begin If Master.ISPlayer Then Tplayobject(Master).Sendmessage(Format('你的下属[%s]升级了!!!', [Slave.Name])); End; Procedure Playaddskill(Npc: TNormNpc; Player: TPlayObject; Magic: TUserMagic; Var Accpet: Boolean); Begin End; Procedure Changeattatckmode(Npc: TNormNpc; Player: TPlayObject; OldMode: TAttatckMode; Var NewMode: TAttatckMode); Begin End; Procedure Killplayer(Npc: TNormNpc; Killer, Player: TPlayObject); Begin End; Procedure Slavekillplayer(Npc: TNormNpc; Master: TPlayObject; Slave: TActor; Player: TPlayObject); Begin End; Procedure Playerattack(Npc: TNormNpc; Player: TPlayObject; UserMagic: TUserMagic; Target: TActor; Var Accept: Boolean); Begin End; Procedure Ongetexp(Npc: TNormNpc; Player: TPlayObject; Var Exp: Integer); Begin End; Procedure Duelend(Npc: TNormNpc; Winner, Loser: TPlayObject); Begin End; Procedure Onbagitemevent(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; EventType, EventID: Byte); Begin End; Procedure Playerdropitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; Const MapX, MapY: Integer; ISUseItem: Boolean; Var Accept: Boolean); Begin End; Procedure Playerthrowitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; Const MapX, MapY: Integer; Var Accept: Boolean); Begin End; Procedure Mondropitem(Npc: TNormNpc; Owner: TPlayObject; Monster: TActor; Item: TUserItem; Map: TEnvirnoment; Const X, Y: Integer; Var Accept: Boolean); Begin Gamelib.Broadcast(Format('%s在地图%s(%d,%d)掉落了[{U=%s;C=250}]', [Monster.Name, Map.Name, X, Y, Item.MakeString])); End; Procedure Dropitembymonname(Npc: TNormNpc; Owner: TPlayObject; Const Monster: String; Item: TUserItem; Var Accept: Boolean); Begin End; Procedure Minedropitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; Envir: TEnvirnoment; Const X, Y: Integer; Var Accept: Boolean); Begin End; Procedure Onbeforecollect(Npc: TNormNpc; Player: TPlayObject; Monster: TActor; Var Accept: Boolean); Begin End; Procedure Oncollect(Npc: TNormNpc; Player: TPlayObject; Monster: TActor; Var Accept: Boolean); Begin End; Procedure Butchitem(Npc: TNormNpc; Player: TPlayObject; Monster: TActor; UserItem: TUserItem; Var Accept: Boolean); Begin Player.Sendmessage(Format('恭喜你从%s身上挖到了一个{U=%s}', [Monster.Name, UserItem.MakeString])); End; Procedure Buyshopitem(Npc: TNormNpc; Player: TPlayObject; UserItem: TUserItem; Const Kind, ShopType, Count, Price: Integer); Begin End; Procedure Buyshopitemend(Npc: TNormNpc; Player: TPlayObject; Const ItemName: String; Const Kind, ShopType, Count, ActualCount, Price: Integer); Begin End; Procedure Ontakeoffitem(Npc: TNormNpc; Player: TPlayObject; UserItem: TUserItem; Const ItemWhere: TItemWhere; Var Accept: Boolean); Begin End; Procedure Ontakeonitem(Npc: TNormNpc; Player: TPlayObject; UserItem: TUserItem; Const ItemWhere: TItemWhere; Var Accept: Boolean); Begin End; Procedure Memberservice(Npc: TNormNpc; Player: TPlayObject); Begin G_HelpService.Showhelp(Npc, Player); End; Procedure Stdmodefunc(Npc: TNormNpc; Player: TPlayObject; UserItem: TUserItem; Var Accept: Boolean); Var Actor : TActor; Begin Case UserItem.StdMode Of 31: Begin If UserItem.Name = '金条' Then Begin Actor := Player.TargetActor; If Actor <> Nil Then Begin Player.Magicattack(Actor,225); End Else Begin Accept := False; Exit; End; Npc.Give(Player, '金币', 998000); Exit; End; Case UserItem.AniCount Of 100: Begin Memberservice(Npc, Player); Accept := False; End; End; End; End; End; Procedure Pickupitem(Npc: TNormNpc; Player: TPlayObject; Envir: TEnvirnoment; UserItem: TUserItem; Var Accept: Boolean); Begin If UserItem.NeverDrop Then Begin Accept := False; Player.Sendmessage('该物品不可拾取', 1); Exit; End; Player.Sendmessage(Format('你在%s拾取了一个%s', [Envir.Name, UserItem.Name]), 0); End; Procedure Itemclickitem(Npc: TNormNpc; Player: TPlayObject; Source, Dest: TUserItem; Var Accept: Boolean); Begin Case Source.Shape Of 1: Begin Gamelib.Randomupgrade(Dest); Player.Updateitem(Dest); Player.RecalcAbilitys; End; Else Begin Accept := False; End; End; End; Procedure Itemclickuseitem(Npc: TNormNpc; Player: TPlayObject; ItemWhere: TItemWhere; Source, Dest: TUserItem; Var Accept: Boolean); Begin End; Procedure Magicspell(Npc: TNormNpc; Player: TPlayObject; UserMagic: TUserMagic; nTargetX, nTargetY: Integer; Target: TActor; Var Accpet: Boolean); Begin End; Procedure Onrefinebuttonclick(Npc: TNormNpc; Player: TPlayObject; Var Handled: Boolean); Begin //if Random(3) = 0 then //begin // Handled := True; // Player.Messagebox('屏蔽了淬炼!!!'); //end; End; Procedure Refineitem(Npc: TNormNpc; Player: TPlayObject; Item1, Item2, Item3: TUserItem; Var Handled: Boolean); Begin Clientrefineitem(Npc, Player, Item1, Item2, Item3, Handled); End; Procedure Beforeguildaddmember(Npc: TNormNpc; Guild: TGuild; Player: TPlayObject; Var Accept: Boolean); Begin End; Procedure Guildaddedmember(Npc: TNormNpc; Guild: TGuild; Player: TPlayObject); Begin End; Procedure Beforeguildremovemember(Npc: TNormNpc; Guild: TGuild; Const Player: String; Var Accept: Boolean); Begin End; Procedure Guildremovedmember(Npc: TNormNpc; Guild: TGuild; Const Player: String); Begin End; Procedure Groupaddedmember(Npc: TNormNpc; Owner, Member: TPlayObject); Begin End; Procedure Groupremovedmember(Npc: TNormNpc; Owner, Member: TPlayObject); Begin End; Procedure Getboxitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; BoxID: Integer); Begin End; Procedure Progressevent(Npc: TNormNpc; Player: TPlayObject; EventID: Integer); Begin Player.Messagebox('执行进度条事件,事件ID:' + Inttostr(EventID)); End; Procedure Progressfaild(Npc: TNormNpc; Player: TPlayObject; EventID: Integer); Begin Player.Messagebox('执行进度条事件失败,事件ID:' + Inttostr(EventID)); End; Procedure Itemsoullevelup(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem); Begin //Item.SoulLevel:当前等级 //Item.SoulExp:当前经验值 //Item.SoulMaxExp:当前等级的最大经验值 End; Procedure Onactivetitlechanged(Npc: TNormNpc; Player: TPlayObject); Begin End; Procedure Stallputon(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; GoldPrice: Integer; GameGoldPrice: Integer; GamePoint: Integer; Var Accpet: Boolean); Begin End; Procedure Stallputoff(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; GoldPrice: Integer; GameGoldPrice: Integer; GamePoint: Integer; Var Accpet: Boolean); Begin End; Procedure Stallbuyitem(Npc: TNormNpc; Player: TPlayObject; Const StallName: String; Item: TUserItem; Gold: Integer; GameGold: Integer; GamePoint: Integer; Var Accpet: Boolean); Begin End; Procedure Stallupdateitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; OldGold: Integer; OldGameGold: Integer; OldGamePoint: Integer; Gold: Integer; GameGold: Integer; GamePoint: Integer; Var Accpet: Boolean); Begin End; Procedure Stallextractgold(Npc: TNormNpc; Player: TPlayObject; Gold: Integer; GameGold: Integer; GamePoint: Integer; Var Accpet: Boolean); Begin End; Procedure Onbeforeopenstall(Npc: TNormNpc; Player: TPlayObject; Var Accpet: Boolean); Begin If (Player.ReNewLevel = 0) And (Player.Level < 30) Then Begin Accpet := False; Player.Messagebox('30级后才可以使用此功能!!!'); End; End; Procedure Onbeforestartstall(Npc: TNormNpc; Player: TPlayObject; Var Accpet: Boolean); Begin Accpet := True; End; Procedure Onafterstopstall(Npc: TNormNpc; Player: TPlayObject); Begin End; Procedure Mailbeforesend(Npc: TNormNpc; Player: TPlayObject; Const SendTo: String; Item: TUserItem; Var Accept: Boolean); Begin End; Procedure Mailaftersend(Npc: TNormNpc; Player: TPlayObject; Const SendTo: String); Begin End; Procedure Rideonhorse(Npc: TNormNpc; Player: TPlayObject; RideOn: Boolean; Var Accept: Boolean); Begin If RideOn And Player.Map.Duplicate Then Begin Accept := False; Player.Sendmessage('在副本里是不允许骑马的!'); End; End; Procedure Clicksighicon(Npc: TNormNpc; Player: TPlayObject; MethodID: Integer); Begin Case MethodID Of ICON_Award: Begin Getonlinereward(Player); End; End; End; Procedure Altandlbuttonclickbagitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem); Begin End; Procedure Altandlbuttonclickuseitem(Npc: TNormNpc; Player: TPlayObject; Item: TUserItem; AItemWhere: TItemWhere); Begin End; Procedure Ondiceevent(Npc: TNormNpc; Player: TPlayObject; ATag, APoint1, APoint2, APoint3: Integer); Begin Player.Messagebox(Format('骰子事件:标志%d, 点数1%d,点数2%d,点数3%d', [ATag, APoint1, APoint2, APoint3])); End; Procedure Oncustommessage(Npc: TNormNpc; Player: TPlayObject; AMessageToken, AParam1, AParam2, AParam3: Integer; Const AData: String); Begin Try QCustomMessage.Handlecustommessage(Npc, Player, AMessageToken, AParam1, AParam2, AParam3, AData); Except End; End; //变身开始触发函数 Procedure Onchangetomonsterstart(Actor:TActor; sMonName:String; nSec:Integer); Begin End; //变身结束触发函数 Procedure Onchangetomonsterend(Actor:TActor; sMonName:String); Begin End; Procedure Onpickupitemchangepicker(PickSender:TPlayObject;Item:TUserItem; Var Gold : Integer ; Var WhoPicker:TPlayObject; Var ItemState:Byte); Begin End; Procedure Onclickgameshop(Npc: TNormNpc; Player: TPlayObject; Var OpenDefalut:Boolean); Begin End; Procedure Onqueryallowlevelup(Player:TPlayObject;Var Allow:Boolean); Begin End; Procedure Ongetlevelexp(Level:Integer; Var Exp:Int64); Begin //如 以下示例 将所有等级的升级经验 设置为引擎配置的120% //Exp := Trunc(Exp * 1.2); //再如:以下1000级以前的经验 以引擎配置配置 1000级以上的经验 采用 等级 * 10000的公式进行计算 //if Level >= 1000 then //begin // Exp := Level * 10000; //end; End; //自定义热键触发 Procedure Onsendhotkey(Npc: TNormNpc; Player: TPlayObject; Akey:Byte; KeyCtrl,KeyAlt: Boolean; ATargetActor:TActor; X,Y:Integer); Begin End; //人物动作触发 Procedure Playeraction(Npc: TNormNpc; Player: TPlayObject; Action :Byte; Var Accept: Boolean); Begin End; Procedure Onshowfashionclick(Npc: TNormNpc; Player: TPlayObject); Begin End; Procedure Onshowmissionclick(Npc: TNormNpc; Player: TPlayObject; Var Accept: Boolean ); Begin End; //玩家聊天触发,可进行消息过滤和特殊指令实现 Procedure OnChatMessage(PlayObject:TPlayObject;const Message:String;var Accept:Boolean); Begin End; //添加Buff时触发,通过修改 Accept := False 可以禁止此Buff添加到怪物或者玩家身上 procedure OnAddBuff(Actor:TActor;Buff:TBuff;var Accept:Boolean); Begin End; //移除Buff时触发 procedure OnRemoveBuff(Actor:TActor;Buff:TBuff); Begin End; //自定义间隔作用类Buff触发(当添加自定义间隔作用类Buff之后 在间隔设定时间后) procedure OnCustomBuffAffect(Actor:TActor;Buff:TBuff); Begin End; End. ```