Re: [程式]可以一次做大量eq的指令
43
我寫的另一個...
你是用write_file()方式寫的...
我則是用儲存變數的的方法儲存在玩家身上....
就像玩家的資料是用dbase這個變數去儲存一樣:
好處唷, 就是隨時可以改eq資料內容:
檔案妳只要自己寫一個:
之後再載入之後再set就行了:
下列是最基本的eq code:
#include <armor.h>
inherit CLOTH;
void create()
{
set_name("EQ", ({ "cloth" }) );
set_weight(3000);
set("unit", "件");
set("material", "cloth");
set("value",1);
}
setup();
}
string autoload(){ return 1; }
如果你是wiz, 你想改eq的name:
call this_object()->set("name","衣服");
改它能力:
call this_object()->set("armor_prop/armor",1);
這裡我還多給eq一個暫存檔, 簡單就是說讓eq也有像玩家一樣有set_temp個功能...
有耐心的自己看一下吧...
其實code還有很多地方可以修....
================以下是code=========================
/* /feature/save_random.c
* create by luk 2003/8/22
* 功能:儲存玩家身上改變物件能力值
* modify by luk 2003/10/25
*/
mapping my_inv;
static string *str=({}); //str將檔案排列...
void clean_up_value(){ my_inv = 0; }
void save_random_value()
{
int i,count;
object *all_inv;
string save_string;
mapping map;
all_inv = all_inventory();
my_inv = allocate_mapping(sizeof(all_inv));
for(i=0; i<sizeof(all_inv); i++){
//只讓武器or防具可以有儲存效果
if( !all_inv[i]->query("weapon_prop") && !all_inv[i]->query("armor_prop") ) continue;
save_string = explode(file_name(all_inv[i]), "#")[0];
while(!undefinedp(my_inv[save_string])){
save_string = base_name(all_inv[i]);
save_string = save_string + "#" + (++ count);
}
my_inv[save_string] = all_inv[i]->query_entire_dbase();
count = 0;
}
return;
}
void load_random_value()
{
mixed save_value;
int i,ii,j,jj,count,num = 0;
string load_string, value1, value2;
mapping map;
object *all_inv = all_inventory();
str = allocate(sizeof(all_inv));
if( !mapp(my_inv) || !my_inv ) return;
for(i=0; i<sizeof(all_inv); i++){
if( all_inv[i]->query_temp("load_string") ) continue;
load_string = base_name(all_inv[i]);
str[num] = load_string;
num++;
for(ii=i+1; ii<sizeof(all_inv); ii++){
if( base_name(all_inv[ii]) == base_name(all_inv[i]) ){
load_string = explode(file_name(all_inv[ii]), "#")[0];
load_string = load_string + "#" + (++count);
all_inv[ii]->set_temp("load_string",count); //設定標記, 只比較一次...
str[num] = load_string;
num++;
}
}
count = 0;
}
str -= ({ 0 });
for( j=0; j<sizeof(str); j++){
if(!undefinedp(my_inv[str[j]])){
map = my_inv[str[j]];
for( jj=0; jj<sizeof(all_inv); jj++ ){ //找尋相同檔案, 載入!!
if( all_inv[jj]->query_temp("over_load") ) continue;
if( base_name(all_inv[jj]) == explode(str[j], "#")[0] ){
if(save_value = map["name"]) //允許改name...
all_inv[jj]->set("name", save_value);
if(save_value = map["long"]) //允許改long...
all_inv[jj]->set("long", save_value);
if(save_value = map["tmp"]) //給予一個暫存檔....
all_inv[jj]->set("tmp", save_value);
if(save_value = map["weapon_prop"]){ //允許改武器屬性...
//將原有的資料先載入, 讓巫師使用call指令依然有效
all_inv[jj]->set("weapon_prop", copy(all_inv[jj]->query("weapon_prop")));
foreach( value1, value2 in save_value )
all_inv[jj]->set("weapon_prop/" + value1, value2);
}
if(save_value = map["armor_prop"]){ //允許改防具屬性...
//將原有的資料先載入
all_inv[jj]->set("armor_prop", copy(all_inv[jj]->query("armor_prop")));
foreach( value1, value2 in save_value )
all_inv[jj]->set("armor_prop/" + value1, value2);
}
all_inv[jj]->set_temp("over_load",1); //表示被載入完畢...
break;
}
}
}
}
return;
clean_up_value();
--
※ Origin: 摩卡小築 <moca.csie.chu.edu.tw>
◆ From: a145-23.me.chu.edu.tw
討論串 (同標題文章)
mud 近期熱門文章
13
23
PTT遊戲區 即時熱門文章
-1
33
6
12