作者laechan (挥泪斩马云)
看板mud_sanc
标题[抠顶] /cmds/wiz/_war.c
时间Tue Feb 7 16:10:51 2017
以前有写一部份了(然後就因为一些缘故停写,原因之前有提到)。
既然有写了,就以线上 coding 为主,不过今天大概写不完,分几
天写。
// 重写架构 by laechan 2016/02/08
// 战争脚本处理指令、战争控制物件呼叫指令
// Laechan@Sanc add in 2013/02/18
inherit DAEMON;
int cmd_war(string str,object me)
{
string t1,t2,tmp,tt1,tt2,pstr="",cstr,fstr="",estr="";
string files;
mixed tmps=({}),tmps2=({});
int i,j,ii,jj,l,k1,k2,s,a,r1,r2;
cstr=@LONG
#include "../war.h"
inherit WAR_SAMPLE;
void create()
{
::create();
seteuid(getuid(this_object()));
war_data=([]);
LONG
;
if(!str || str=="")
return notify_fail(@LONG
war(战争系统)指令说明:
===============================================
war read 脚本档 将战争脚本档转成战争物件
war regist 脚本名 登录脚本
脚本需经过登录,才能做为正式的战争物件
war start 脚本名 手动执行战争
war stop 脚本名 手动终止战争
war remove 脚本名 移除脚本的登录状态
war halt 脚本名 暂停执行脚本
war restart 脚本名 回复执行脚本
war check 脚本名 察看战争目前的执行状态
war show 脚本名 显示脚本的设定内容
===============================================
LONG
);
if(sscanf(str,"read %s",t1)==1)
{
t1=resolv_path(me->query("cwd"),t1);
if(!file_exists(t1))
return notify_fail("war read: 找不到 "+t1+" 这个档案.\n");
tmps=explode(read_file(t1),"##\n");
files=t1+".c";
j=sizeof(tmps);
for(i=0;i<j;i++)
{
str=tmps[i];
l=strlen(str);
if(l<6) continue;
k1=strsrch(str,"=");
switch(k1)
{
// date, mobs
case 4:
if(str[0..3]=="date")
cstr+=" war_data[\"date\"]=\""+str[5..l-1]+"\";\n";
else if(str[0..3]=="mobs")
{
pstr+="#define MOB ([\\\n";
tmps2=explode(str,"\n");
jj=sizeof(tmps2);
for(ii=0;ii<jj;ii++)
if(sscanf(tmps2[ii],"%s: %s",tt1,tt2)==2)
pstr+="\""+tt1+"\":"+tt2+",\\\n";
pstr+="])\n";
}
break;
// title, steps
case 5:
if(str[0..4]=="title")
cstr+=" war_data[\"title\"]=\""+str[6..l-1]+"\";\n";
else if(str[0..4]=="steps")
{
cstr+=" war_data[\"steps\"]="+str[6..l-1]+";\n";
for(ii=1;ii<=atoi(str[6..l-1]);ii++)
cstr+=" war_data[\""+ii+"\"]=([]);\n";
}
break;
// header
case 6:
if(str[0..5]=="auther")
cstr+=" war_data[\"auther\"]=\""+str[7..l-1]+"\";\n";
if(str[0..5]=="header")
pstr+=str[7..l-1]+"\n";
break;
// 剩下的再依 stepX_xxxx 来筛
default:
if(sscanf(str,"step%s_%s=%s",tmp,tt1,tt2)==3)
{
switch(tt1)
{
case "times":
cstr+=" war_data[\""+tmp+"\"][\"times\"]="+tt2+";\n";
break;
case "check":
case "plans":
fstr+="int step"+tmp+"_"+tt1+"()\n{"+tt2+"\n return 1;\n}\n\n";
break;
}
}
break;
} // end of switch
} // end of for
tmp=pstr+cstr+"}\n\n"+fstr+estr;
if(file_exists(files)) rm(files);
write_file(files,tmp);
this_player()->more(explode(tmp,"\n"),1,1);
return 1;
} // end of if sscanf "read"
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.223.250.36
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1486455055.A.7B7.html
※ 编辑: laechan (61.224.170.115), 02/09/2017 14:03:30