搜索
查看: 2182|回复: 4

初学pawn 遇到的小问题.想请各位大虾帮帮忙(三)

[复制链接]
发表于 2008-4-18 15:56:32 | 显示全部楼层 |阅读模式 来自 中国–广东–深圳–福田区
  1. // plugin's main information
  2. #define PLUGIN_NAME "Anti Silent Run"
  3. #define PLUGIN_VERSION "0.1.2"
  4. #define PLUGIN_AUTHOR "VEN"
  5. #include <amxmodx>        //包含 amxmode.inc 文件
  6. #include <fakemeta>       //包含 fakemeta.inc文件
  7. #define MAX_CLIENTS 32    //宏定义  用max_clients 代替 32
  8. new Float:g_view_ofs[MAX_CLIENTS + 1][3]  //定义全局浮点型二维数组 g_view_ofs[33][3]  个人理解它是一个存放视觉偏移量的二维数组
  9. #define VEC_VIEW 17.0       //初始高度为  17.0  不知理解是否正确
  10. #define VEC_DUCK_VIEW 12.0  //蹲下高度为  12.0  不知理解是否正确
  11. new const g_player_hull[] = {  //不知是什么意思.请大虾帮忙解释一下.
  12. HULL_HUMAN,
  13. HULL_HEAD
  14. }
  15. //初始化插件
  16. public plugin_init() {  
  17. register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)  //注册插件 其中的三个参数在宏定义时已经有定义过了.
  18. register_forward(FM_PlayerPreThink, "fwPlayerPreThink")      //注册消息响应函数...函数名为fwPlayerPreThink
  19. register_forward(FM_PlayerPostThink, "fwPlayerPostThink")    //注册消息响应函数...函数名为fwPlayerPostThink   
  20. }
  21. public fwPlayerPreThink(id) {            
  22. if (!is_user_alive(id) || !(pev(id, pev_button) & IN_DUCK))   //如果ID为id的玩家死亡状态 或  获取到ID为id玩家的按钮与IN_DUCK(理解为蹲键)不符
  23.   return FMRES_IGNORED                                  //这里的返回值不理解!应该是忽略掉还是直接返回?
  24. pev(id, pev_view_ofs, g_view_ofs[id])                         //返回视觉偏移量的值                     
  25. return FMRES_HANDLED
  26. }
  27. public fwPlayerPostThink(id) {
  28. //当ID为id玩家的视觉偏移量 不等于 17.0  或  玩家死亡状态  或  玩家的按钮与IN_DUCK(理解为蹲键)不符  或  第四个条件不明白是什么意思
  29. //这里为什么一定要g_view_ofs[id][2] 而不是 g_view_ofs[id][0]或g_view_ofs[id][1]??
  30. if (g_view_ofs[id][2] != VEC_VIEW || !is_user_alive(id) || !(pev(id, pev_button) & IN_DUCK) || pev(id, pev_fuser2))
  31.   return FMRES_IGNORED
  32. pev(id, pev_view_ofs, g_view_ofs[id])  //返回视觉偏移量的值  
  33. if (g_view_ofs[id][2] != VEC_DUCK_VIEW)
  34.   return FMRES_IGNORED
  35. static Float:vec1[3], Float:vec2[3], Float:size_z  //定义两个浮点型数组,一个浮点型变量
  36. pev(id, pev_size, vec1)   //返回vec1的大小?理解是否正确?
  37. size_z = vec1[2]          //将vec1[2]的值赋给size_z...此时size_z == 0 ?是否正确?
  38. pev(id, pev_origin, vec1) //返回vect1的初始值?理解是否正确?
  39. //下面代码应该是这个插件的关键,但是小弟就完全不能理解了,请大虾帮忙!
  40. vec2[0] = vec1[0]
  41. vec2[1] = vec1[1]
  42. vec2[2] = -9999.0
  43. engfunc(EngFunc_TraceHull, vec1, vec2, IGNORE_MONSTERS, g_player_hull[!!(pev(id, pev_flags) & FL_DUCKING)], id, 0)
  44. get_tr2(0, TR_vecEndPos, vec2)
  45. if (vec1[2] - vec2[2] > size_z)
  46.   return FMRES_IGNORED
  47. pev(id, pev_velocity, vec1)
  48. vec1[0] = 0.0
  49. vec1[1] = 0.0
  50. set_pev(id, pev_velocity, vec1)
  51. return FMRES_HANDLED
  52. }
复制代码
在各位大虾的帮助和提供的文档下,对编写插件有一点信心了.现在手头上拿到了一份朋友写的源码,让我看.但是小弟的能力实在有限,翻了N多文档,网上搜了很多资料,但是还是有很多地方不能理解.所以现在把源码COPY上来了.希望有好心的大虾帮忙看一下(我把我自己能看懂的代码全写上了注释,其中可能也有不对的地方,请大虾们指出.)

这个插件的作用是一个防止把蹲键绑定在鼠标上的,但是我还是不太理解为什么可以做到!!给各位添麻烦了...
发表于 2008-4-18 23:10:51 | 显示全部楼层 来自 中国–广东–中山

回复: 初学pawn 遇到的小问题.想请各位大虾帮帮忙(三)

我建议楼主还是从C语言基础开始学吧,先把根基打好了,办事自然事半功倍。
回复

使用道具 举报

 楼主| 发表于 2008-4-20 11:20:32 | 显示全部楼层 来自 中国–广东–深圳–福田区

回复: 初学pawn 遇到的小问题.想请各位大虾帮帮忙(三)

不是我不虚心接受你的建议..而是我觉得我现在遇到的不是C语言基础的问题.问题全是在pawn的一些函数使用上.说白了就是自己想到一些做法,但又不知道应该调用哪一类的函数...用C的时候,不知道的函数可以在搜索引擎上找.但是这个....真是找也不好找啊...只有自己慢慢研究了..
谢谢
回复

使用道具 举报

发表于 2008-4-20 12:09:32 | 显示全部楼层 来自 中国–广东–中山

回复: 初学pawn 遇到的小问题.想请各位大虾帮帮忙(三)

Post by nclsadidas
不是我不虚心接受你的建议..而是我觉得我现在遇到的不是C语言基础的问题.问题全是在pawn的一些函数使用上.说白了就是自己想到一些做法,但又不知道应该调用哪一类的函数...用C的时候,不知道的函数可以在搜索引擎上找.但是这个....真是找也不好找啊...只有自己慢慢研究了..
谢谢
http://www.amxmodx.org/funcwiki.php

这个网页是AMXX官方提供的函数查询页面,希望对你有用。
回复

使用道具 举报

 楼主| 发表于 2008-4-20 14:22:25 | 显示全部楼层 来自 中国–广东–深圳–福田区

回复: 初学pawn 遇到的小问题.想请各位大虾帮帮忙(三)

Post by apocalyptic
http://www.amxmodx.org/funcwiki.php

这个网页是AMXX官方提供的函数查询页面,希望对你有用。

嗯.网页我打开了.会有用的.谢了...
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表