gwizmsg.c

来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 164 行

C
164
字号
/* * File    : gwizmsg.c * Creator : Pinkfish@Discworld *         : Grendel@Tmi-2 * When    : 93-08-15 * * This file is part of the tmi mudlib.  Please keep this header intact. * * This protocol is used to broadcast a channel to other muds. */// Ported to ES2 mudlib by Annihilator (06/15/95)#undef DEBUG#include <net/macros.h>#include <net/dns.h>#include <net/daemons.h>#include <net/services.h>inherit F_CLEAN_UP;inherit F_DBASE;void create() { seteuid(ROOT_UID); }// This is the interface to the intermud channelsvoid send_msg(string channel, string id, string name, string msg, int emoted){	string *names;	int i;	mapping muds;	mapping svcs;	mapping minfo;	if( !this_player()		// Prevent from being called by ourself.	||	!ACCESS_CHECK(previous_object())) return;#ifdef DEBUG	set("channel_id", "网际巫师频道精灵");	CHANNEL_D->do_channel(this_object(), "sys", "prepare to send gwizmsg");#endif	muds = (mapping)DNS_MASTER->query_muds();	svcs = (mapping)DNS_MASTER->query_svc();	msg = replace_string(msg, "|", "");	msg = replace_string(msg, "@@@", "");	// use keys(svcs) because none of the muds not in svcs can possibley	// receive the message	names = keys(svcs);	i = sizeof(names);	while(i--)		if (names[i] != mud_nname()) {			minfo = muds[names[i]];			if(!mapp(minfo) || !mapp(svcs[names[i]])			|| !(svcs[names[i]]["gwizmsg"] & SVC_UDP))				continue;			DNS_MASTER->send_udp(minfo["HOSTADDRESS"], minfo["PORTUDP"],				"@@@" + DNS_GWIZMSG +				"||NAME:" + Mud_name() +				"||PORTUDP:" + udp_port() +				"||WIZNAME:" + capitalize(id) +				"||CNAME:" + name +				"||GWIZ:" + msg +				"||CHANNEL:" + channel +				(emoted?"||EMOTE:1":"") + "@@@\n");		}}void incoming_request(mapping info){	mapping minfo;	string tmsg;#ifdef DEBUG	set("channel_id", "网际巫师频道精灵");	CHANNEL_D->do_channel(this_object(), "sys", "gwizmsg received from " + info["NAME"]);#endif	if(!ACCESS_CHECK(previous_object())) return;	if (info["NAME"]) {		if (info["NAME"] == Mud_name()) return ;		minfo = DNS_MASTER->query_mud_info(info["NAME"]);		if (!minfo || !strlen(info["WIZNAME"])		|| !DNS_MASTER->dns_mudp(info["NAME"]))	{			// We don't accept the message.  But ping them anyway.			PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]);			return ;		}		if (info["HOSTADDRESS"] != minfo["HOSTADDRESS"]) {			if (info["EMOTE"])				tmsg = info["WIZNAME"]+"@"+info["NAME"]+" "+info["GWIZ"];			else				tmsg = info["WIZNAME"]+"@"+info["NAME"]+": "+info["GWIZ"];			// Faked.  sheeze... 			dns_log("dns_fake",sprintf( "Gwiz: %s %s\n%s", ctime(time()),				info["HOSTADDRESS"],tmsg));			DNS_MASTER->send_udp(info["HOSTADDRESS"], info["PORTUDP"],				"@@@"+DNS_WARNING+				"||NAME:"+Mud_name()+				"||MSG: Fake gwiz msg: "+tmsg+				"||FAKEHOST:"+info["HOSTADDRESS"]+				"@@@\n");			return;		}		if( undefinedp(info["CNAME"]) )			set("channel_id", sprintf("%s@%s", info["WIZNAME"], info["NAME"]));		else			set("channel_id", sprintf("%s(%s@%s)", info["CNAME"], info["WIZNAME"], info["NAME"]));		CHANNEL_D->do_channel(this_object(), "gwiz", info["GWIZ"], info["EMOTE"]);    } //if (info["NAME"])}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?