这个指南不是我写的,而是一位国外的开发者,我只是将它翻译并搬运到这里
原文地址:https://forum.sa-mp.com/showthread.php?t=570927
免责声明
此插件由*****创建。由于他的主题被删除,我决定重新上传这个插件,因为很多服务器所有者都依赖它。
我还想澄清一下,我不相信他的任何工作,我也不打算复制它。
NPC模式
要在NPC模式下使用sscanf,请下载以下文件:
http://dl.dropbox.com/u/21683085/npcdll.rar
并将其解压缩到根服务器目录,即"amxscanf.dll"与"samp npc.exe"位于同一目录中。然后正常使用。唯一的细微差别是“u”、“r”和“q”不知道用户是否是机器人,所以假设他们都是玩家-相应地使用。
下载
项目被放置在GitHub上:https://github.com/maddinat0r/sscanf/releases
使用方法
在源文件中包含如下头文件:
#include <sscanf2>
如果服务端是Windows版的,在server.cfg中添加如下代码:
plugins sscanf
如果服务端是Linux版的,在server.cfg中添加如下代码:
plugins sscanf.so
这里有一个基本代码样例:
if (sscanf(params, "ui", giveplayerid, amount))
{
return SendClientMessage(playerid, 0xFF0000AA, "使用方法: /givecash <玩家ID/玩家昵称> <现金数量>");
//当params字符串为空或者sccanf失败时会执行这个语句块中的内容
}
他还有一个备用的函数名(unformat),目的是避免与C语言标准中的sscanf函数混淆:
if (unformat(params, "ui", giveplayerid, amount))
{
return SendClientMessage(playerid, 0xFF0000AA, "使用方法: /givecash <玩家ID/玩家昵称> <现金数量>");
//当params字符串为空或者sccanf失败时会执行这个语句块中的内容
}
标志字符
可用的标志字符如下:
标志字符 含义 距离
i, d 整形 1, 42, -10
c 字符型 a, o, c
l 布尔类型 true, false
b 二进制 01001, 0b1100
h, x 十六进制 1A, 0x23
o 八进制 045 12
n 通用数字 42, 0b010, 0xAC, 045
f 浮点型 0.7, -99.5
g IEEE浮点型 0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E
u NPC或玩家的名字或id FranciumBot,Tuise, 0
q NPC名字或id MengHaiTang, 27
r 玩家名字或id JianHan, 42
和以前一样,说明符“s”代表字符串,但现在它们更高级了。与以前一样,他们也能够从源字符串中获取一段字符串,因此如果这样做:
sscanf("hello 87", "si", str, val);
将会等同于如下代码:
str = "hello"
val = 27
尝试下面的代码:
sscanf("hello world 87", "si", str, val);
这样sscanf将会失败,因为"world"是一个字符串而非一个整形数字,所以不能被当作整形处理(但是反过来其实是可以的),但是尝试下面这个代码:
sscanf("hello world", "s", str);
将会等同于如下代码:
str = "hello world"
原文:https://www.cnblogs.com/FranciumKIKI/p/12806813.html