cs模块与插件之间的参数传递-尊龙官方平台

cs模块与插件之间的参数传递

el/2024/3/25 15:38:28

cs 模块与插件之间的参数传递

2009 929 星期二

11:54

  一、整型参数的传递

写一个模块, 功能是动态存储一些数据, 以供插件调用

给插件的接口为 :

get_user_info(csid, &card, &money);

从模块中读取 card/money 数据

set_user_info(csid, card, money);

将信息保存到模块

 

// set_user_leave_info(csid, card, money)

static cell amx_native_call set_user_leave_info(amx *amx, cell *params)

{

int csid = params[1];

int card = params[2];

int money = params[3];

....
return 1;

}

 

: 参数params 即是插件调用set_user_leave_info(csid, card, money),

按顺序传递进来的参数 , 读取这些参数值比较简单 !

csid =params[1]

card = params[2]

money = params[3]

 

 

但是 , 将模块的值通过参数返回传递给插件, 就不能直接用params[1] = m_csid 的方法了:

static cell amx_native_call get_user_leave_info(amx *amx, cell *params)

{

int csid = params[1];

int card = 1;

int money = 2000;

params[2] = card;

// 错误 : 这样的赋值插件收不到

params[3] = money;

// 错误: 不能将money 的值传递给插件

return 0;

}

 

正确的方法是 :

先取得参数的地址 , 再将值赋值给该地址, 获取参数地址的函数为:

cell*   mf_getamxaddr( amx *amx, cell offset );

 

static cell amx_native_call get_user_leave_info(amx *amx, cell *params)

{

int csid = params[1];

int card = 1;

int money = 2000;

 

cell *pcard, *pmoney;

pcard =   mf_getamxaddr(amx,params[2]);

// 得到params[2] 的地址

pmoney =  mf_getamxaddr(amx,params[3]);

 

pcard[0] = card;

// 可以成功返回整型值给插件

pmoney[0] = money;

 

return 0;

}

 

 

注意 :

在插件的 inc 文件声明时 , 在接收返回数据的参数前要加上引用符号

native get_user_leave_info(csid, & card, & money)

native set_user_leave_info(csid, card, money)

 

 

  二、字符串参数的传递

如果接口函数的参数中涉及字符串 , 那么可以直接调用

char*        mf_getamxstring

( amx *amx, cell amxaddr, int bufferid, int *len );

// 从参数中读取字符串

char*        mf_getamxstring

( amx *amx, cell amxaddr, int bufferid, int *len );

// 将字符串设置给参数返回

 

假设模块与插件的接口函数如下 :

native get_cjp_data(id, data[], maxlen)

 

native set_cjp_data(id, data[])

 

在模块的实现如下 :

static cell amx_native_call get_cjp_data(amx *amx, cell *params)

{

int playerid = params[1];

char username [33] ;

 

// 赋值给字符串参数data[]

mf_setamxstring(amx, params[2], username , params[3]);     

 

return 1;

}

 

static cell amx_native_call set_cjp_data(amx *amx, cell *params)

{

int playerid = params[1];


int len = 0;

 

// 读取字符串参数data[]

char* data = mf_getamxstring(amx, params[2], 0, &len);

 

cstring myname(data);

return 1;

}

 

 

 


http://www.ngui.cc/el/5126768.html

相关文章

autohotkey运行程序的命令

本节视频展示autohotkey运行程序的命令run的妙用。 1、一键用指定程序打开所选文件。例如在资源管理器中选择文本文件, 按f8用emeditor打开编辑 2、一键上网搜索。例如:选中单词, 按winf9上爱词霸网站搜索该单词, 按appskeyf9用google搜索该单词. 3、快速启动程序的运行窗口。…

手动设置:自动登录windows xp操作系统

新装的windows xp,没有设置密码,每次登录时却会弹出登录窗口,空密码并点击确定登录。 空密码不如让他自动登录,这样更快速地进入系统。以前用过优化大师可以让xp自动登录, 那么有没有什么办法不用借助软件实现自动登…

mfc中基于对话框程序快捷键的实现

作者: 苍竹先生 --------------------------------------------------------------------------- mfc中基于sdi和mdi的程序,默认情况下有快捷键资源,直接建立快捷键与消息的映射,就能实现程序的快捷键,而基于对话框的…

vc6.0 实现 从pdf提取文本内容

本文摘录了vc6.0下,利用minidx extract-text com组件读取文本内容的方法的两篇文章,并做了一些自己的笔记 一、《利用minidx extract-text com组件从word,xls,pdf……等文件中读取文本内容》 http://blog.minidx.com/2008/01/10/373.html demo(vc…

ahk 切换/获取当前的输入法

用ahk代码实现输入法的切换,和获取当前的输入法,这只是一个示例,你可以发挥把它做成更有用的程序,例如对指定的窗口使用指定的输入法,可以为 每个输入法设置一个单独的快捷键等。不过有个 bug,当输入法切换…

让虚拟机可以无线上网而主机不能上网

我的要求比较变态,希望笔记本(主机)不能上网,而虚拟机客户机可以无线上网。这是因为自从用过华硕那 款可以8秒启动系统的上网本之后,就越来越对预装了vista操作系统的hp笔记本的速度,无法容忍!多…

设置 vim 自动缩进

我用vim编辑autohotkey脚本,写脚本也算写程序吧,但是发现不能自动缩进,于是寻找自动缩进的设置方法,找到如下: 在ahk的语法文件vim/vim72/syntax/autohotkey.vim中添加这行代码即可: set autoindent …

使用autohotkey分析日志文件,得到分析报告。

使用 autohotkey 分析日志文件,得到分析报告。 由程序自动生成的日志文件一般有固定的格式,而且文件大小通常比较大。当需要分析这样的日志文件,需要用肉眼在成千上万条记录里面寻找异常,那将是大海捞针,十分费力费时…

vc6、 bcb6 如何设置程序版本号?

今天突然忘记如何设置程序的版本号了,问过同事才记起来,于是把它记录下来,方便以后查阅! 一、 vc 设置版本号的方法: 在 vc 的资源窗口里有个 vs_version_info 的资源,在这个资源里可以修改版本号信…

去掉vim中的换行符^m

在 dos/windows 里, 文本文件的换行符为 /r/n ,而在*nix 系统里则为/n ,所以 dos/windows 里编辑过的文本文件到了 *nix 里,每一行都多了个 ^m 。在window 操作系统下使用gvim打开一些文本文件也经常遇到行末有^m的符号&…
网站地图