/cmds/wiz/_war.c - 聖殿英雄傳說 MUD

By William
at 2017-02-07T16:10
at 2017-02-07T16:10
Table of Contents
以前有寫一部份了(然後就因為一些緣故停寫,原因之前有提到)。
既然有寫了,就以線上 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"
}
--
既然有寫了,就以線上 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"
}
--
Tags:
線上
All Comments
Related Posts
應援活動生慘系要拿什麼徽章比較好?

By Victoria
at 2017-02-07T16:06
at 2017-02-07T16:06
新星招攬的問題

By Noah
at 2017-02-07T10:13
at 2017-02-07T10:13
不確定符不符合首購 首儲身份

By Doris
at 2017-02-07T04:57
at 2017-02-07T04:57
中信兄弟

By Eden
at 2017-02-07T01:52
at 2017-02-07T01:52
二天一流太刀勢法 的學法

By Poppy
at 2017-02-06T23:09
at 2017-02-06T23:09