nclsadidas 发表于 2008-4-18 15:56:32

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

// plugin's main information
#define PLUGIN_NAME "Anti Silent Run"
#define PLUGIN_VERSION "0.1.2"
#define PLUGIN_AUTHOR "VEN"
#include <amxmodx>      //包含 amxmode.inc 文件
#include <fakemeta>       //包含 fakemeta.inc文件
#define MAX_CLIENTS 32    //宏定义用max_clients 代替 32
new Float:g_view_ofs//定义全局浮点型二维数组 g_view_ofs个人理解它是一个存放视觉偏移量的二维数组
#define VEC_VIEW 17.0       //初始高度为17.0不知理解是否正确
#define VEC_DUCK_VIEW 12.0//蹲下高度为12.0不知理解是否正确
new const g_player_hull[] = {//不知是什么意思.请大虾帮忙解释一下.
HULL_HUMAN,
HULL_HEAD
}
//初始化插件
public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)//注册插件 其中的三个参数在宏定义时已经有定义过了.
register_forward(FM_PlayerPreThink, "fwPlayerPreThink")      //注册消息响应函数...函数名为fwPlayerPreThink
register_forward(FM_PlayerPostThink, "fwPlayerPostThink")    //注册消息响应函数...函数名为fwPlayerPostThink   
}
public fwPlayerPreThink(id) {            
if (!is_user_alive(id) || !(pev(id, pev_button) & IN_DUCK))   //如果ID为id的玩家死亡状态 或获取到ID为id玩家的按钮与IN_DUCK(理解为蹲键)不符
return FMRES_IGNORED                                  //这里的返回值不理解!应该是忽略掉还是直接返回?
pev(id, pev_view_ofs, g_view_ofs)                         //返回视觉偏移量的值                     
return FMRES_HANDLED
}
public fwPlayerPostThink(id) {
//当ID为id玩家的视觉偏移量 不等于 17.0或玩家死亡状态或玩家的按钮与IN_DUCK(理解为蹲键)不符或第四个条件不明白是什么意思
//这里为什么一定要g_view_ofs 而不是 g_view_ofs或g_view_ofs??
if (g_view_ofs != VEC_VIEW || !is_user_alive(id) || !(pev(id, pev_button) & IN_DUCK) || pev(id, pev_fuser2))
return FMRES_IGNORED
pev(id, pev_view_ofs, g_view_ofs)//返回视觉偏移量的值
if (g_view_ofs != VEC_DUCK_VIEW)
return FMRES_IGNORED
static Float:vec1, Float:vec2, Float:size_z//定义两个浮点型数组,一个浮点型变量
pev(id, pev_size, vec1)   //返回vec1的大小?理解是否正确?
size_z = vec1          //将vec1的值赋给size_z...此时size_z == 0 ?是否正确?
pev(id, pev_origin, vec1) //返回vect1的初始值?理解是否正确?

//下面代码应该是这个插件的关键,但是小弟就完全不能理解了,请大虾帮忙!
vec2 = vec1
vec2 = vec1
vec2 = -9999.0
engfunc(EngFunc_TraceHull, vec1, vec2, IGNORE_MONSTERS, g_player_hull[!!(pev(id, pev_flags) & FL_DUCKING)], id, 0)
get_tr2(0, TR_vecEndPos, vec2)
if (vec1 - vec2 > size_z)
return FMRES_IGNORED
pev(id, pev_velocity, vec1)
vec1 = 0.0
vec1 = 0.0
set_pev(id, pev_velocity, vec1)
return FMRES_HANDLED
}在各位大虾的帮助和提供的文档下,对编写插件有一点信心了.现在手头上拿到了一份朋友写的源码,让我看.但是小弟的能力实在有限,翻了N多文档,网上搜了很多资料,但是还是有很多地方不能理解.所以现在把源码COPY上来了.希望有好心的大虾帮忙看一下(我把我自己能看懂的代码全写上了注释,其中可能也有不对的地方,请大虾们指出.)

这个插件的作用是一个防止把蹲键绑定在鼠标上的,但是我还是不太理解为什么可以做到!!给各位添麻烦了...

apocalyptic 发表于 2008-4-18 23:10:51

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

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

nclsadidas 发表于 2008-4-20 11:20:32

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

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

apocalyptic 发表于 2008-4-20 12:09:32

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

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

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

nclsadidas 发表于 2008-4-20 14:22:25

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

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

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

嗯.网页我打开了.会有用的.谢了...
页: [1]
查看完整版本: 初学pawn 遇到的小问题.想请各位大虾帮帮忙(三)