[wizs] 幾個東西

看板mud_sanc (Sanctuary - 聖殿)作者 (揮淚斬馬雲)時間3周前 (2025/02/02 10:34), 3周前編輯推噓0(007)
留言7則, 2人參與, 3周前最新討論串1/3 (看更多)
首先是關於虛擬物品的回收再使用機制。 過去聚焦於如何有效地回收舊有的集字活動物品,讓新活動 展開時,玩家可以重新打新的集字物品。 那,在以前也曾想過是否利用 record_data 欄位來儲存特定 標記,後來沒採用是因為若 一個活動 就採用 一個標記 的 話,這樣 record_data 可能會儲存過多的標記。 但就目前來說,因為活動本來就不會很多,加上record_data 使用也普及,就決定使用這樣的方式。 比方,在某一次集字活動舉辦前,在 login 處,它會做如下 判斷 if(ppl->query("record_data/集字活動相關標記")<當次活動標記) { ppl->set("record_data/集字活動相關標記",當次活動標記); // 底下開始執行清除玩家所有集字物品 ppl->vobjs("del","f811"); ppl->vobjs("del","f811"); . . ppl->vobjs("del","f838"); } 目前 f 字頭的相關物品為主: f001 回憶花束 laechan 束 禮物類 3 10000 不可 f002 堅毅花束 laechan 束 禮物類 3 15000 不可 f301 月兔寶寶 justinj 個 節慶物 99 10 不可 f302 中秋月餅 justinj 塊 節慶物 99 10 不可 f303 節慶物_test1 justinj 塊 節慶物 1 10 不可 f304 節慶物_test2 justinj 塊 節慶物 1 10 不可 f305 節慶物_test3 justinj 塊 節慶物 1 10 不可 f801 聖誕襪 laechan 雙 節慶物 10 10 不可 不可 f802 聖誕節禮物箱 laechan 個 節慶物 10 10 不可 不可 f803 紅湯圓 laechan 顆 節慶類 10 10 不可 f804 白湯圓 laechan 顆 節慶類 10 10 不可 f805 金元寶 laechan 顆 節慶類 10 10000 不可 不可 f806 戳戳樂券 laechan 張 節慶類 1 10000 不可 不可 f807 挪布的遊戲券 laechan 張 節慶類 10 10 不可 不可 f811~f838 為集字 f8 目前是我在用,主要用在 節慶活動(festival) 上,f00 系列為花束系列(flower),我預計會將料理系列(food) 也 使用 f,可能是 f101 起。 不同的分類大致採用不同的大 項,後面如果滿了再從數字的縫隙塞即可。 ===================這裡是額外的部份================= 集字則以底下幾個為主: Sanctuary Hero Legend 這三個就用掉 acdeghlnorstuy,剩 bfijkmpqvwxz 過往的集字裡,還有搜集前代大神的 id Int 用掉 i 創站者 Nobu 用掉 b 國家 Satin 用掉 i 副本 Pence 用掉 p 線上排名 Epidba 用掉 p,i,b 科隆帝國,獸人大陸 Galaxy 用掉 x 次元鏡 這樣剩 fjkmqvwz。特定的單字則會包含這些: Festival 用掉 f,v 節慶 Kingdom 用掉 k,m 國家 Money 用掉 m 廣義的錢 Quest 用掉 q 任務 這樣剩 j,w,再把 Justinj 用掉 j,而且是兩個 j,並包括 i 通常我也會有 Laechan 這樣剩 w,w 可用的單字有 Taiwan 以上會當成集字活動的固定單字,然後視情況增加一些。 (有些比方☆的集字則是活動開始後會公告) 另外,集字活動每一項獎品也都會設定兌換上限,原則上就是 先換先贏,可換數量會參考最近一次擲筊大賽的發放數量。然 後會設定一個或一兩個無兌換上限的東西。 大部份的集字都可以 ob trade 但可能有 1~2 個不行。 ===================這裡是額外的部份================= 我在挪布的遊戲房新增了以下的東西 void init() { call_out("game_over",10,this_player()); get_char("get_char_ok"); return ; } int game_over(object ppl) { if(!ppl) return 1; else if(!environment(ppl)) return 1; else if(environment(ppl)!=this_object()) return 1; // 通過上面代表玩家還在遊戲房內 ppl->move_player("/d/wiz/room/disc"); // 顯示在 get_char 期間的 buff msg ppl->show_msg(); this_object()->remove(); return 1; } int get_char_ok(string str) { if(str=="q" || str=="Q") { game_over(this_player()); return 1; } . . return get_char("get_char_ok"); } get_char 類似 input_to,只是不需要按 enter,它一接收到 鍵盤所按的東西就會呼叫對應的函數,因此在該函數中只要繼 續 return get_char() 就會持續接收玩家敲鍵盤輸入的東西。 上面的缺點則是,玩家如果不是按 q (提早)離開的話,10 秒 過後它做的事是 房間->remove() 但玩家實際上不會脫離「處 於 msg buff 的輸入狀態」,比方玩家這時要再 who 一下才會 讓 msg_buff 狀態取消,如底下: 最近的訊息有:(太久的有可能會被濾掉。) . 靈力武器新增 wand 類、以及 depend 晶礦 功能。 Laechan 2013/07/26 14. 羅德斯小販處增設 ob routine 每日任務設定,可自行測試。 Laechan 2013/07/28 15. 新增 recall -record 及 party back 語法可參考指令說明。 Laechan 2013/08/13 16. 白川鄉開放測試。位於:recall,west,look mirror,shirakawa . . ppl->show_msg(); 則是讓玩家在脫離房間前先一步把get_char 期間的 msg buff 顯示出來而已。 不過這屬於小缺點因此可以無視。 那實際上遊戲房是 inherit MONSTER,叫出來再把玩家move_to 進去並觸發其 init(),時間一到 this_object()-remove(); 就 相當於移除,它的好處就是可保證其它玩家無法任意進入遊戲房 /open/wizs/log/nobu_point.txt 這個檔案約 8xxx 行,但我實際用 str=read_file("/open/wizs/log/nobu_point.txt"); tmps=explode(str,"\n"); write("sizeof(tmps)="+sizeof(tmps)+"\n"); 顯示的結果僅 28xx 行左右,代表雖然 read_file 沒顯示error 但實際上它無法完整讀取 8xxx 行的資料。 土法煉鋼的解決方法,就是將 nobu_point.txt 拆解成 nobu_point1.txt nobu_point2.txt . . 然後 for(i=1;i<=7;i++) { str=read_file("/open/wizs/log/nobu_point"+i+".txt"); tmps=explode(str,"\n"); foreach(tmp in tmps) { . . } } 實測結果,拆分成多個檔案,以 for 來迴圈讀取,是可以的, 代表處理效能也沒問題,純粹就是 read_file 有大小限制,而 且它不會產生 error。 另外,這也再次突顯 log 檔的重要性,挪布商店任何一筆買進 皆有紀錄,因此最近在做補發 nobu point 會員點數時就能辦得 到,紀錄時需注意 1. 這個紀錄檔,是從哪來的 2. 這個紀錄檔,能否符合設置它的目的 3. 以 2 為前提下盡量最小化紀錄 4. 盡可能讓紀錄檔存放在相同根目錄下 以 4 來說目前以 /open/wizs/log 為根目錄,wiz 若有需要可 於根目錄下設置紀錄檔,或創建像是 /open/wizs/log/laechan 這樣的子目錄來放自己的紀錄檔亦可。 舊的紀錄檔我目前規劃 /open/wizs/log/bak 來存放,最近就會 把所謂舊的放進去。 在玩家的天空城之家裡頭,有一個一直以來都沒有使用、但早已 創建的欄位 my_data : ([ ]) wiz 可將其視為像是 record_data 欄位般的存在,我最近用這個 欄位,處理玩家先前在天空城管理局使用 warehouse 指令增開倉 庫所花的挪布幣歸還事宜。 簡單的說,假設玩家去天空城管理局,下 warehouse 指令時: 1. 他已經有 warehouse2, warehouse3 但是 query("my_data/warehouse_return_nobu_money") 是空的 那就 set("my_data/warehouse_return_nobu_money",400); 2. 他已經有 warehouse2 但沒有 warehouse3 但是 query("my_data/warehouse_return_nobu_money") 是空的 那就 set("my_data/warehouse_return_nobu_money",200); 然後有以上兩個判斷時 ppl->add("record_data/nobu_money",200或400); myhome->save_room(); 這時 da 自己的家: my_data : ([ "warehouse_return_nobu_money" : 400 ]) 就會看到這行訊息。 可利用這個欄位,但參數盡量有識別性並避免欄位名為中文,可避 免掉很多問題。 (編輯中) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.33.120.231 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1738463661.A.605.html ※ 編輯: laechan (114.33.120.231 臺灣), 02/02/2025 10:42:40

02/02 12:57, 3周前 , 1F
不小心漏掉 z 了
02/02 12:57, 1F

02/02 13:03, 3周前 , 2F
候選有:zero, crazy, fuzzy, pizza
02/02 13:03, 2F

02/03 13:11, 3周前 , 3F
alias -g會有問題是因為print_aliases(XX,"g"),只要
02/03 13:11, 3F

02/03 13:12, 3周前 , 4F
用print_aliases(XX)就沒問題
02/03 13:12, 4F

02/03 21:03, 3周前 , 5F
那個先不開放,當初鎖住應該是有原因的,我忘記原因了
02/03 21:03, 5F

02/03 21:03, 3周前 , 6F
但我記得我是有基於什麼原因去鎖掉的
02/03 21:03, 6F

02/03 21:04, 3周前 , 7F
wiz則應該不受影響
02/03 21:04, 7F
文章代碼(AID): #1ddjcjO5 (mud_sanc)
討論串 (同標題文章)
文章代碼(AID): #1ddjcjO5 (mud_sanc)