推 tenyfish :現在是不是貨幣尚未實裝呢? 114.37.59.169 06/24 22:22
還沒。如果要簡單點就是 ppl->query("balance") 是銀行存款,
ppl->query("wealth") 是身上現金,然後平常採單一貨幣,有需
要第二種貨幣比方 gold 時就是 ppl->query("gold")。
也就是說假設把底層的貨幣當成銀幣,那 balance 跟 wealth 就
是「銀幣」,而「金幣」另外放。
或者 wealth 是銀幣,balance 是金幣,也曾有 mud 這樣子做過
,例如假設做成 100:1 的比例,要存錢一定要 100 銀以上才能存
,存進去的就是金幣。
然後要做成泛用的呼叫就是函數化,也就是說例如
ppl->query_wealths(); // 預設讀銀幣
ppl->query_wealths("gold"); // 讀取身上的金幣
ppl->query_balances(); // 預設讀銀幣存款
ppl->query_balances("gold"); // 讀取金幣存款
ppl->add_wealths(100); // 身上的銀幣增加 100
ppl->add_wealths("gold",100); // 身上的金幣增加 100
.
.
然後玩家身上 wealth 與 balance 的欄位就用 "wealth" 與
"balance"。
> data me
balance : ({銀幣的量,金幣的量})
wealth : ({銀幣的量,金幣的量})
這是我預計要做的,沒排入優先事項,我猜是因為我不滿意這樣的
做法,然後我期望這段期間我有想到更好的做法這類的。
(我是有想過直接用 query_moneys 更簡潔一點)
※ 編輯: laechan (61.224.75.82), 06/24/2014 22:55:26
推 tenyfish :其實非歐美那種超多種族的舊式MUD 114.37.59.169 06/24 23:02
推 tenyfish :是不用太多語言和貨幣,我只是剛才 114.37.59.169 06/24 23:11
推 tenyfish :用TEST站時發現買東西都不用錢而己 114.37.59.169 06/24 23:25
推 tenyfish :有到到被註解掉的部份,正好研究一下 114.37.59.169 06/24 23:55
推 tenyfish :改過shop.c如何讓它可用?update無效 114.37.59.169 06/25 00:05
推 tenyfish :有指令可write(me->(query_"?"))嗎? 114.37.59.169 06/25 00:13
推 tenyfish :雖然我自己寫了一個指令出來用... 114.37.59.169 06/25 00:49
推 tenyfish :所以call me;query;xxx 這樣用嗎? 114.37.59.169 06/25 01:37
推 tenyfish :call成功了,謝謝 114.37.59.169 06/25 01:41
call 物件;函數;要帶的參數...
例如 call me;set;"level";10 相當於 me->set("level",10);
call me;query;"level" 相當於 me->query("level")
simul_efun 的 call 則可以這樣做
> call /adm/obj/simul_efun;atoi;"123"
房間(/adm/obj/simul_efun)-> atoi( "123" ) = 123
(more /adm/obj/simul_efun.c 就能發現它 include 了一堆檔案,
那些檔案就放在 /adm/simul_efun 下,因此 call simul_efun.c
就能呼叫被它 include 進來的所有 simul_efun)
但是要 call efun 呢?
running 指令就提供了更簡易的方法
> running
編輯結束並存檔(.). 中途放棄編輯(~q).訊息暫時中斷。
__________________________________________________________________
obs=users();
foreach(ob in obs)
if(ob && ob->query("level")>0)
tmp+=sprintf("%-12s 等級 %3d\n",
ob->query("name"),
ob->query("level"));
me->more(explode(tmp,"\n"),1,1);
.
========== 程式執行區 ==========
jana 等級 65
blancneige 等級 120
pss2 等級 120
teresa 等級 120
lannssssyy 等級 120
.
.
========== 程式執行區 ==========
簡易的 running code 及其執行結果就像底下
> running
編輯結束並存檔(.). 中途放棄編輯(~q).訊息暫時中斷。
__________________________________________________________________
write("hello, world!\n");
write("你的等級: "+me->query("level")+".\n");
.
========== 程式執行區 ==========
hello, world!
你的等級: 120.
========== 程式執行區 ==========
其中,me、ob、obs、i、j、tmp、.. 等等就是內建變數,內建了
哪些變數可自行 more /cmds/wiz/_running.c,若你懂了該指令
也可以視自己的需要擴充內建變數:
int running(object me,object env)
{ ^^^^^^^^^^連這個也是內建變數
// 變數可依需要自己新增
int i,j,k;
mixed obs=({});
object ob;
string tmp;
mapping data=([]);
// 注意:新增了什麼變數, 就要相對初始化什麼變數
ob=me;
obs=({});
i=0;j=0;k=0;
tmp="";
我會內建這些變數是因為大部份的情況通常用到這些變數就已足
夠,頂多再增加一個 mixed tmps=({}) 幾乎就夠用了。
running code 就是「所見即所執行」,它可以讓 wiz 橫空執行
一段程式碼,而不需藉助工具物件或 workroom 或其它指令的幫
助,只要靠 running 指令就夠了,而且它也會受到權限的限制.
因為 call 有它的極限,而總不能每每想要執行什麼,就得去改
workroom 來做或是寫物件,「如果有更方便的東西就好了」。
※ 編輯: laechan (61.224.75.82), 06/25/2014 06:33:25
推 tenyfish :那update後如何讓修改反應出來? 114.37.52.81 06/25 08:54
→ laechan :update後修改不是就更新了嗎 42.79.52.226 06/25 09:19
推 tenyfish :update shop.c後 買東西仍是舊訊息 114.37.39.235 06/25 09:40
推 dannielz :再update here試試看 14.216.16.91 06/25 10:53
推 tenyfish :好的,所以inherit的物件也需update 42.67.2.30 06/25 12:19
如果有 a b 兩個物件,a 裡面有函數這樣寫
void xxx()
{
b->xxx();
}
那只要 update b,呼叫 a 執行 xxx 的結果就會更新。
但如果 a inherit b:
void xxx()
{
::xxx();
}
那 update b 後 a 不會更新,因為 a 還騎在舊的 b 上面,
這時簡易的 update 方法是
update -R a
它會先對 a 所繼承的 b 做 update,做完才做 a 的 update
※ 編輯: laechan (210.61.157.53), 06/25/2014 12:47:05