[wizs] 如何簡易判斷玩家 a 與 b 在相同區域?
傳統做法很麻煩。
首先 a 與 b 必定有所在環境,假設叫 enva 及 envb。
那傳統做法就是判斷 enva 及 envb 是否位於相同的區域目錄,
這適用九成以上的同區域判斷。
問題是以前光是要做這樣的判斷就得寫不短的判斷式。
所以我決定在 /std/ob/room.c 新增一個新的函數
varargs string room_path(int c)
{
string f;
int s;
f=base_name(this_object());
s=strlen(f);
while(s-->0)
if(f[s..s]=="/")
break;
// 結尾要不要 /
return c ? f[0..s] : f[0..s-1];
}
測試結果
> look
[/u/l/laechan/workroom ]
= 天上界 =
朝霧盡散,合煦的朝陽掛在東方的高空中,大地一片欣欣向容。
天空中的雲全部消散了,只剩下一望無垠天空.
明顯出口有: 無
Lv255.副本管理員─綾兒(Instance manager, Satin)
> call here;room_path
房間(/u/l/laechan/workroom)-> room_path() =
"/u/l/laechan"
這樣要判斷 a 與 b 是否在相同區域時,可以這樣寫
envb=environment(b);
// a 通常是 this_player() 所以不需判斷 enva 是否存在
paths=environment(a)->room_path();
if(envb && paths==(string)envb->room_path())
以上在最近一次系統重開後即適用。
進一步來說,則可以讓 questing 支援這樣的判斷,例如
questing("room_path",...
但是這樣不會讓呼叫變簡單。
下次系統重開後將新增組隊打怪效益並測試。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.33.120.231 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1728782974.A.117.html
留言