作者laechan (挥泪斩马云)
看板mud_sanc
标题[wizs] 如何简易判断玩家 a 与 b 在相同区域?
时间Sun Oct 13 09:29:31 2024
传统做法很麻烦。
首先 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://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1728782974.A.117.html
※ 编辑: laechan (114.33.120.231 台湾), 10/13/2024 09:36:17