[wizs] 幾個東西
看板mud_sanc (Sanctuary - 聖殿)作者laechan (揮淚斬馬雲)時間3周前 (2025/02/02 10:34)推噓0(0推 0噓 7→)留言7則, 2人參與討論串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
02/02 12:57, 1F
→
02/02 13:03,
3周前
, 2F
02/02 13:03, 2F
→
02/03 13:11,
3周前
, 3F
02/03 13:11, 3F
→
02/03 13:12,
3周前
, 4F
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
02/03 21:04, 7F
討論串 (同標題文章)
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章