[wizs] 如何簡易判斷玩家 a 與 b 在相同區域?

看板mud_sanc (Sanctuary - 聖殿)作者 (揮淚斬馬雲)時間2月前 (2024/10/13 09:29), 2月前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
傳統做法很麻煩。 首先 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 ※ 編輯: laechan (114.33.120.231 臺灣), 10/13/2024 09:36:17
文章代碼(AID): #1d2o9-4N (mud_sanc)
文章代碼(AID): #1d2o9-4N (mud_sanc)