发新话题
打印

[魔力私服分享] 浅谈Event、WatchEvent和WatchEx的区别,以及动态NPC

浅谈Event、WatchEvent和WatchEx的区别,以及动态NPC

希望我没有火星吧……
" g" L% l* e8 r* U7 j1 z/ v魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表妖城在线论坛! E. ?2 d; ^; G7 z2 u
Event大家都很熟悉了,就不多说。妖城在线论坛. o; `6 k& K- q, f& E  h1 I
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート! V/ G2 N. ]7 p
而WatchEvent顾名思义就是“监控到一定条件后触发事件”。
" |3 S& D$ g$ e+ t# B, a* G- ?2 X# G妖城在线论坛可以监控的条件有很多,GM手册里有珊瑚大发的,包括玩家位置、玩家方向、玩家动作、玩家是否移动、是否丢了东西等等。妖城在线论坛* ?: j& ^# ]( h0 F
但是它最大的问题是它不像Event,它其实并不对应一个NPC。什么意思呢?bbs.mocwww.com* M, O  v  Y$ W3 ~9 @( X
例如你建立一个Event类型的NPC名字叫做“AA”,触发条件后的反应设定为“message 123(对应msg里的xxx)”,那么在游戏中触发条件后,消息栏里面会显示“AA:xxx”。
* o8 {8 `) {1 G8 k5 s, P5 p6 q—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート但是如果你建立一个WatchEvent类型的“NPC”叫做AA,触发条件后显示的则只是“xxx”。
5 ?. R& c. t8 v5 U# e$ M—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート这不仅仅是少一个名字的问题,它意味着你不能用StrCmpChat == R 或者StrCmpChat == 123 来对它“说话”来触发事件。' z1 p7 Y) j; }$ d
且由于不对应NPC,它不设定能window 123,yes,no GivePet这些反应。
2 A4 t. V0 \- ]3 S$ q' |魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表所以如果看npc.txt里面Watchevent类型的话,你会看到基本上是没有设定图档和名字的。作用一般都是迷宫中的毒气让你扣血,走到法阵中心传送到下一个地图,并且message提示,音效提示。魔力私服,最新魔力宝贝私服技术交流/ e! R+ {/ h* ^. o0 j+ E6 ]
妖城在线论坛: H+ s0 ^) G, L5 f0 U
然后WatchEx可以说是综合了Event和WatchEvent,它既对应一个NPC,可以StrCmpChat,又可以执行监控。
- x1 O, ^+ w7 W% _- B$ c& a( T但是有舍必有得,它能监控的条件并没有WatchEvent那么丰富,在我的测试中,玩家方向、玩家动作、玩家是否移动都是不能监测的。' Z+ N% m% l: c  M' F
换句话说——他只能监测你在哪,“对它”做了什么,而不能监测你在这个地图中做了什么其他事。魔力私服,最新魔力宝贝私服技术交流, H+ e. t1 [: D# W4 k
然而神奇且困扰我的就是当设定触发条件为StrCmpChat == R(即右键它)时,在地图上每走一步都会触发反应,而不只是右键触发反应。但是StrCmpChat == 123来对话则没问题。
) Y" K  g: v  E魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
- b, _# O9 T4 o% C) e- Y% X/ X魔力私服,最新魔力宝贝私服技术交流另外珊瑚大提到WatchEvent可设定Setaction反应(即让NPC做动作),其实是不行的,结合上面说的WatchEvent不对应NPC就不难理解了。
( c# I) o/ O- V; N: ]3 B—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
4 k4 x3 L/ F$ _& ]' n妖城在线论坛总结:
9 b& N1 P, a$ w' O5 R; w. U& s: r$ U—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートEvent判定丰富、反应丰富,不能监控
& D+ f. d: i: s3 Q' t, ?- r魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表WatchEx是Event的监控加强版(主要则是监控位置),除了右键有问题外,我没测试到什麽Event能判定能反应的,它不能(当然我没测试完所有,有不对的欢迎指出)。魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表" u' C. o9 b9 e# _  h. V
WatchEvent监控专家,因为不对应NPC所以反应局限。魔力私服,最新魔力宝贝私服技术交流! r7 A& y) {0 z- ^
bbs.mocwww.com  H$ j$ w; q% g$ H
当然你想取三者所长也是可以的,让他们叠加起来然后慢慢玩弄各种监控条件也可达到自己想要的效果噢。
- H/ j, @1 v1 h. m妖城在线论坛魔力私服,最新魔力宝贝私服技术交流; f3 J* W. i/ I, o* c
关于动态的NPC,不知道图会不会挂。
2 k' _( L9 M6 B妖城在线论坛
( Z) a3 Q; \# d- `8 |bbs.mocwww.com
9 G2 R( v! w6 u/ h, D[ 本帖最后由 弗兰吉 于 2014-8-16 14:19 编辑 ]

TOP

无论是玩家、NPC、怪物、宠物、地面上的道具都存在此效果。魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表: l, v, d' }8 W, T& K; Y# n

. r8 L* q" L! H! m2 ^那就是进入视线时所触发的函数—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート  a5 D" K  _/ o- T
bbs.mocwww.com$ x, C* I8 g, N7 D  J4 Y6 \
WatchEx这个类型,就包含了Watch的回调,因此他能在被玩家所看到的时候,做出所对应的表情之类的。) }, p- C* O. I8 |# l
魔力私服,最新魔力宝贝私服技术交流; X) Q0 K" o5 c' U+ H# _0 r8 b; v! L
你可以这么去尝试一下。
! e( h0 o+ q4 K; G4 b妖城在线论坛bbs.mocwww.com9 Q4 `0 Z# L6 c0 Y/ h
block
4 O+ _3 G$ I9 K% c5 k—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートmessage "1213123"
1 I: D+ Z, L$ l- J3 obbs.mocwww.com
! O% c8 Y( n& Qbbs.mocwww.com你就会发现,其实在你刚能看到他的一瞬间,就已经触发了"1213123"。" l! p2 }; A" w  b. a0 e+ s
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート8 O% I! L0 v8 j5 C1 z% n
因此,我们可以实现一个效果,当GM进入某区域时,区域内的所有玩家,将集体享受BUFF增益(属性增强?掉率提高?经验提高?),反正很多很多啦,见仁见智。
4 D+ z# \& u( v( W% d0 U妖城在线论坛1 D# o" [- X; t0 b: B3 S
具体可参考函数NPC_WatchExWatch,他是WatchEx类型的Watch回调。8 v. J. i" ^( t3 r5 L

7 \2 y/ o# `! P: a魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表除Watch回调外,还有很多未使用的回调,譬如
复制内容到剪贴板
代码:
typedef struct tagChar_functable {
  void *Init;
  void *PreWalk;  //个别使用
  void *PostWalk;  //个别使用
  void *Watch;  //只被部分类型NPC使用
  void *Loop;   //被使用最多的,人物的宠物邮件也是使用的这个,因此,有很多So的扩展者,在设计Loop循环时也破坏了原来的宠物邮件循环。
  void *Dying;  //未使用
  void *Talked;  //NPC使用
  void *Looked;  //未使用
  void *ItemPut; //丢弃物品时,返回1则本次丢弃失效
  void *SpecialTalked;  //未使用
  void *WindowTalked;  //NPC使用
}Char_functable;
在此处,我们可以明显的看到,如果有外部环境来操作的话,人物也可以实现类似于NPC之类的操作,也就是说,将一个玩家作为一种NPC。
4 U6 ]$ b/ `% f& P& Y5 o妖城在线论坛
' A; C- V4 \3 f. ]3 |: K+ H' Z妖城在线论坛但此处只提供思路,欢迎讨论。/ Z( J+ R- g9 c4 n' \! I/ i& [
妖城在线论坛8 O. J- o4 T3 U) ]0 w
[ 本帖最后由 ﹎▓ヾ僤莼べ 于 2014-8-16 15:23 编辑 ]
酱油师师范..

有事找请联系QQ:296050842,注明来意.

TOP

关于WatchEvent类型的脚本,他是独立于普通的Event和Item以外的脚本类型
; R3 R3 y+ m6 v
% E5 D1 l2 G0 i- L5 [; vbbs.mocwww.com仅支持如下指令:
复制内容到剪贴板
代码:
setobject
window
message
setaction
warp
setlp
leavegroup
playse
encount
systemmessage
本帖最近评分记录
酱油师师范..

有事找请联系QQ:296050842,注明来意.

TOP

回复 地板 的帖子

只是游戏内脚本啦,三者都是npc类型。不是lua

TOP

欢迎魔力自制图档
此工具使用的图档及文件数据版权归原游戏公司和开发团队所有,
本工具仅限于技术研究和交流,不得用于商业;
因此造成的后果本人概不负责。

TOP

发新话题