|
发表于 2007-11-18 16:19:21
|
显示全部楼层
|阅读模式
来自 中国–北京–北京
message_begin相关函数的疑问
这是函数定义: MESSAGE_BEGIN(msgDest, msgType, msgOrigin, msgpEntity);
Msg.Send();
MESSAGE_END();
在使用中 msgType用get_user_msgid( "SayText" )等来填充
//get_user_msgid - Returns id of client message 其中 SayText是一个event
这里的疑问是msgType为什么会和user相关?
难道它和client_print定义的enum:
print_chat - chat text
print_console - console message
print_notify - console in dev mode
print_center - center say 不同吗?
难道每个人触发SayText的msgid不同?
此外对于msgOrigin也是一头雾水 这咚咚到底是做什么用的...
如果msgEntity我设置为 player那末:write_byte ( player ); 到底起什么作用呢? 不写不可以吗
//write_byte - Writes a single byte to a message.
另外参考了Rulzy斑斑的颜色说明写了如下代码:
format(Message, 163, "^x01[AMXX] ^x03%s ^x01杀死 ^x03%s ^x01获得 ^x04%d ^x01点HP奖励", nameAttacker, nameVictim, gainedHp );
//^x03后对应队伍颜色,即colorid为土匪时显示为红色,colorid为警察时显示为蓝色,colorid为观察员时显示为灰色
首先假设message是群发 则经过测试效果是这样的: 匪徒会看到 killer 和victim的颜色均为红色警察会看到 killer 和victim均为蓝色字体 而我的目的是无论警匪活人看到的message都应该统一成 killer是警-蓝 否则-红 victim相同。不知道改如何写。
R斑斑的代码
public client_color(playerid, colorid, msg[])
{
message_begin(playerid?MSG_ONE:MSG_ALL,get_user_msgid("SayText"),_,playerid)
write_byte(colorid)
write_string(msg)
message_end()
}
client_color(0, id, msg)其中colorid 是玩家的index值吧(1-32) 那么通过write_byte(colorid)的作用是什么?实在没法顾名思义,难道是通过id判断^x03后该显示什么颜色的函数?
另外 我用的是MSG_ONE_UNRELIABLE 它和MSG_ONE 有什么区别?难道前者是UDP发送后者是TCP包发送? 另外后者发送失败好像会踢人(未证实,老外说的) |
|