[節慶] 聖誕節任務開放重新接取

看板mud_sanc (Sanctuary - 聖殿)作者 (揮淚斬馬雲)時間7年前 (2017/12/19 12:27), 7年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/4 (看更多)
以下也供 wiz 參考。 在我的寫法裡頭,我讓 quest_data.c 控制 36 個 quest_data_X.c (X=0~9, a~z),在 /open/cmds/quest/quest_data 目錄。 quest_data.c 僅做控制,實際上各玩家的 quest 資料就是依玩家的 ID 開頭,存放在各自所屬的 quest_data_X.c 裡頭。 quest_data_X.c 裡面某一玩家的儲存資料內容如下 quest_data ([ "XXX": ({ ({"n000",0,1,"2011/10/02",}), ({"l001",0,1,"2011/09/23",}), ({"n001",0,1,"2011/10/09",}), }), ↑↑ ]) │└玩家已解過幾次 └─玩家該任務已解到第幾步驟 知道了資料結構,就可以額外寫函數來處理資料,quest_data_X.c 都是 inherit sample.c,而 sample.c 已經有這樣的函數存在: // 對所有玩家的『特定任務』資料錄做共同的設定 // types 有兩種 // "times": 則 v = 欲重置的次數 // "remove": 則不用加 v, 代表將所有玩家解過該任務的資料清除 varargs void clean_quest_data_by_nums(string quest_num,string types,int v) { mixed tmps,tmps2=({}); int i,j,ii,jj; string names; if(sizeof(quest_data)<1) return ; tmps=keys(quest_data); j=sizeof(tmps); if(types=="times") { for(i=0;i<j;i++) { // quest_data 下每一筆鍵值 = 玩家的id names=tmps[i]; //2維陣列, "玩家id" : ({ ({任務資料串列}),({任務資料串列}),.. }) tmps2=quest_data[names]; jj=sizeof(tmps2); for(ii=0;ii<jj;ii++) // 對每一個資料串列 if((string)tmps2[ii][0]==quest_num) // 只要串列的第0元素=任務標記 quest_data[names][ii][2]=v; // 就將串列的第2元素修改為 v 值 } save_room(); } // remove 的寫法應該是有問題還得修改 by laechan 10/18 else if(types=="remove") { for(i=0;i<j;i++) { names=tmps[i]; //2維陣列 tmps2=quest_data[names]; jj=sizeof(tmps2); for(ii=0;ii<jj;ii++) // 對每一個資料串列 if((string)tmps2[ii][0]==quest_num) // 只要串列的第0元素=任務標記 tmps2[ii]=({0}); // 就將該串列直接以 0 值取代 tmps2-=({0}); // 最後再對 2維陣列 做 -({0}} 的動作就能消掉所有 0 元素 quest_data[names]=tmps2; // 然後再把處理過後的 2維陣列 設回 quest_data 中 } save_room(); } return ; } 有問題的那一段我用 running 測過,應該是沒問題才對,可能我有修正 過了 tmps=({({"1","2"}),0,0,({3,4}),0}); tmps-=({0}); write(identify(tmps)+"\n"); ========== 程式執行區 ========== ({ ({ "1", "2" }), ({ 3, 4 }) }) // 它確實將 0 消除了, 有幾個 0 就消幾個 ========== 程式執行區 ========== 也就是說,當我要清除的任務標記是: ─────────────────────────────────────── l/l008 聖誕禮物兌換任務 聖誕禮物, xmas 聖誕老人(Santa Claus) /u/p/ppl/hiei/rocky/mob/santa_claus ─────────────────────────────────────── 我只要使用 wiz 指令 call 去做就可以了,指令是 cd /open/cmds/quest/quest_data call quest_data_0;clean_quest_data_by_nums;"l008";"remove" call quest_data_1;clean_quest_data_by_nums;"l008";"remove" call quest_data_2;clean_quest_data_by_nums;"l008";"remove" call quest_data_3;clean_quest_data_by_nums;"l008";"remove" call quest_data_4;clean_quest_data_by_nums;"l008";"remove" call quest_data_5;clean_quest_data_by_nums;"l008";"remove" call quest_data_6;clean_quest_data_by_nums;"l008";"remove" call quest_data_7;clean_quest_data_by_nums;"l008";"remove" call quest_data_8;clean_quest_data_by_nums;"l008";"remove" call quest_data_9;clean_quest_data_by_nums;"l008";"remove" call quest_data_a;clean_quest_data_by_nums;"l008";"remove" call quest_data_b;clean_quest_data_by_nums;"l008";"remove" call quest_data_c;clean_quest_data_by_nums;"l008";"remove" call quest_data_d;clean_quest_data_by_nums;"l008";"remove" call quest_data_e;clean_quest_data_by_nums;"l008";"remove" call quest_data_f;clean_quest_data_by_nums;"l008";"remove" call quest_data_g;clean_quest_data_by_nums;"l008";"remove" call quest_data_h;clean_quest_data_by_nums;"l008";"remove" call quest_data_i;clean_quest_data_by_nums;"l008";"remove" call quest_data_j;clean_quest_data_by_nums;"l008";"remove" call quest_data_k;clean_quest_data_by_nums;"l008";"remove" call quest_data_l;clean_quest_data_by_nums;"l008";"remove" call quest_data_m;clean_quest_data_by_nums;"l008";"remove" call quest_data_n;clean_quest_data_by_nums;"l008";"remove" call quest_data_o;clean_quest_data_by_nums;"l008";"remove" call quest_data_p;clean_quest_data_by_nums;"l008";"remove" call quest_data_q;clean_quest_data_by_nums;"l008";"remove" call quest_data_r;clean_quest_data_by_nums;"l008";"remove" call quest_data_s;clean_quest_data_by_nums;"l008";"remove" call quest_data_t;clean_quest_data_by_nums;"l008";"remove" call quest_data_u;clean_quest_data_by_nums;"l008";"remove" call quest_data_v;clean_quest_data_by_nums;"l008";"remove" call quest_data_w;clean_quest_data_by_nums;"l008";"remove" call quest_data_x;clean_quest_data_by_nums;"l008";"remove" call quest_data_y;clean_quest_data_by_nums;"l008";"remove" call quest_data_z;clean_quest_data_by_nums;"l008";"remove" 這樣就能清除所有玩家解過 l008 這個任務的紀錄。 做完後下底下指令 > grep -n l008 * Grep: No pattern matches found. 這樣就確定了所有玩家解過 l008 的紀錄均已清除。 > look mirror 請輸入次元鏡密碼: rocky > l [/u/p/ppl/hiei/rocky/027 ] 洛奇村─中央廣場 村裡的房子沿著道路整齊地排列著,常常看到有冒險者出入於這 裡的旅店,石板鋪成的道路則結著薄薄的冰霜。 明顯出口有: south, north, east, 和 west. (!quest)Lv200.聖誕老人(Santa Claus) 這樣所有玩家就都能再接聖誕老人給的任務。 > quest claus about ? quest: 與 claus 有關的關鍵字有「聖誕禮物、xmas」等。 > quest claus about xmas 聖誕老人: 最近有一群邪惡聖誕老人,用我的名義四處欺騙小孩子 聖誕老人: 我本來想親自去抓他們的,可是我老了,跑不動了 你: 我也覺得他們很可惡,交給我吧! 聖誕老人用慈藹的眼神仔細地端詳了你一下。 聖誕老人: 好吧,那就拜託你了,他們雖然看起來模樣兇惡,其實很弱的 聖誕老人: 因為其實他們是聖誕襪變成的,話說,很久很久以前... 你: 故事不重要啦,告訴我怎麼換禮物就好。 聖誕老人: 呵呵....好吧,只要集滿 3 雙聖誕襪就可以了。 聖誕老人: 只要集滿了 3 雙就可以再來 quest 我。 聖誕老人: 每 3 雙的聖誕襪,可以換一個聖誕禮物喔。 > quest claus about xmas 聖誕老人幫你施了強力法術。「聖誕節快樂唷 ^_^」 你還沒集滿三雙聖誕襪喔。 > a 第[120]級 摳頂機器(Laechan:進階刀客) 主要武器:砂鍋大的拳頭 攻擊力:603X 戰鬥速度:1500X 命中力:673X 躲避力:862X 防禦力:1934X 如果你有發現數值是負的情況,就請 quit 再進來一次。 1.聖誕buff:魔力(9X) 力量(9X) 氣勁(9X) 敏捷(9X) 理性(9X) 感性(9X) 30 分鐘 目前開放所有等級 20 以上的玩家可至 rocky 村接任務並讓 聖誕老人可以幫你上 buff。 邪惡聖誕老人待接近聖誕節時再開放。 該任務最多可接三次的樣子。 完成任務會執行以下兩行程式: ppl->vobjs("add","f801",-3); // 清除 3 雙聖誕襪 ppl->vobjs("add","f802",1); // 拿到 f802 虛擬物品 > ob view f802 -------------------------------------------------------- 聖誕節禮物箱(物品編號: f802) -------------------------------------------------------- 單位:個 型態:節慶物 攜帶:9 / 10 價格:10 掉落:無 販賣:不可 交換:不可 一個禮物箱,你可以使用 ob use 聖誕節禮物箱 指令來開啟它。 -------------------------------------------------------- 物品資訊:虛擬物品 > ob use 聖誕節禮物箱 你開啟了禮物箱,裡面裝了一顆藍寶石。 > ob view 藍寶石 -------------------------------------------------------- 藍寶石(物品編號: m814) -------------------------------------------------------- 單位:顆 型態:怪掉落 攜帶:1 / 99 價格:1000 掉落:無 販賣:可 交換:可 一顆藍寶石,可向收集品商人購買。 -------------------------------------------------------- > 10 ob use 聖誕節禮物箱 你開啟了禮物箱,結果裡面又裝了一個禮物箱。 你: ...... 你開啟了禮物箱,裡面裝了一顆綠寶石。 你開啟了禮物箱,結果裡面又裝了一個禮物箱。 你: ...... 你開啟了禮物箱,裡面裝了一顆紅寶石。 你開啟了禮物箱,結果裡面又裝了一個禮物箱。 你: ...... 你開啟了禮物箱,裡面裝了一顆%敏捷大補丸%(Dex Pill)。 你開啟了禮物箱,結果裡面又裝了一個禮物箱。 你: ...... 你開啟了禮物箱,結果裡面又裝了一個禮物箱。 你: ...... 你開啟了禮物箱,結果箱子裡是空的。 你: ...... 你開啟了禮物箱,結果裡面又裝了一個禮物箱。 你: ...... 10連開大概是這樣,禮物箱裝的東西,我有空再改,改完會 公告(同時公告開放打邪惡聖誕老人)。 LAechan -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.106.224 ※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1513657666.A.7D6.html 補充一下,如果不想清除 quest_data_X.c 所儲存的玩家已解過 某任務的資料,也有變通做法,就是直接改任務腳本,把裡頭的 date 日期換一下,然後再重新 quest read 腳本檔 載入修改後 的腳本,這樣當玩家去 quest ooo about xxx,它會比對腳本的 date 與玩家的 date,若不一致時就會重置玩家解過該任務的紀 錄。 date 我通常做為腳本檔撰寫日期,所以若是不想動 date,才去 清除所有玩家解過該任務的標記。 ※ 編輯: laechan (122.117.106.224), 12/24/2017 20:16:09
文章代碼(AID): #1QE9L2VM (mud_sanc)
文章代碼(AID): #1QE9L2VM (mud_sanc)