Re: [問題] inherit的問題
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間12年前 (2013/10/29 17:00)推噓1(1推 0噓 7→)留言8則, 2人參與討論串2/2 (看更多)
※ 引述《justinj (黑旋風)》之銘言:
: 我在某一個檔案merc_room.c 有設定了一個動作finish
: add_action("cmd_finish","finish")
: int cmd_finish(string str)
: {
: ....
: }
: 那我另一個檔案069.c 去 inherit 上述檔
: 然後重新增加部分的資料
: int cmd_finish(string str)
: {
: ::cmd_finish(str);
: ...... //B區塊
: ......
: }
: 那我要怎麼樣寫才會讓我執行finish指令時
: 1.當我還未完成時,不去執行B區塊,但會吐出原訊息代表未完成的訊息
: 2.當我完成時,會去執行B區塊
我猜你並不想動 merc_room.c,在這情況下如何判斷
::cmd_finish(str); 的結果是「完成」或「未完成」
比方說防具店有 sell_it 函數,然後你自己的防具店
inherit 了樣本防具店然後自訂函數
int sell_it(string str)
{
::sell_it(str);
那你的意思就接近玩家賣東西時「有賣成功=完成」
才執行 B區塊,賣失敗時就不執行,然後產生原先賣
失敗的訊息。
「則以防具店為例」一般我會這樣做
int selling_it(string str)
{
if(this_object()->sell_it(str)>0) // return 1 時
{
B區段;
}
else
return sell_it(str);
}
會這樣寫是因為 this_object 本身 inherit 防具店
,所以 this_object 就能呼叫 sell_it。
而 >0 時它一定會出現賣出物品成功訊息同時執行 B
區段,<=0 時代表可能有 return notify_fail 的區
段代表賣出失敗,return notify_fail 有可能不會顯
示訊息,但是透過 return sell_it 該訊息就會出現
這前提是建立在
1.以防具店這個 case 為例
2.防具店的 sell_it 是用 return 1 及 return notify_fail
或是 return 0 來區別成功及失敗
假設不幸的不管它成功或失敗都是用 write + return 1
來寫,那一般我的做法是我必須先知道我繼承的 sell_it
函數本身是在執行哪些東西,這樣我才有辦法對它做
必要的判斷,例如
int sell_it(string str)
{
set("origin_objnum",objnum);
::sell_it(str);
if(obj_num!=query("origin_objnum")) // 當然實際上根本不會這樣寫
{
// 代表本次執行 ::sell_it(str) 後防具店的物品內容有改變
執行 B 區段;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.61.157.53
→
10/29 17:02, , 1F
10/29 17:02, 1F
→
10/29 17:03, , 2F
10/29 17:03, 2F
→
10/29 17:03, , 3F
10/29 17:03, 3F
→
10/29 17:04, , 4F
10/29 17:04, 4F
→
10/29 17:04, , 5F
10/29 17:04, 5F
→
10/29 17:04, , 6F
10/29 17:04, 6F
→
10/29 17:06, , 7F
10/29 17:06, 7F
推
10/29 18:05, , 8F
10/29 18:05, 8F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
26