Re: [系統] 關於虛擬物品系統支援怪物收集品掉落系統

看板mud_sanc (Sanctuary - 聖殿)作者 (高等妖精)時間17年前 (2008/12/09 20:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《laechan (小太保)》之銘言: : 這部份我打算加入新方案.. : 一、全怪物的一般掉落物(虛擬物品),不可離線儲存,可給予其它 : 玩家(在給予時會通過一個函數判斷能不能給,大部份都可給) : 二、玩家可透過專賣店將身上的虛擬物品賣掉,所得會存為新手基 : 金性質(只能拿來買藥水、練技能等)。 : 三、部份虛擬物品則可以找專門的 npc 去兌換金錢 or 其它東西, : 這類物品將會設為「無法給予他人 or 限制性給予」。 : 這樣一來,以老手協助新手為例,老手就可將自己打到的收集品給 : 新手,增加新手的新手基金;甚至可將打到的特殊物品給新手,讓 : 新手拿去兌換聲望 or 學點 or 經驗值等。 : (當然這裡一定是以新手打到東西可拿去兌換上述為主) : 上面點出一個重要設定:npc 也要設定可讓玩家拿虛擬物品做兌換 : 的動作,而它又指向一個根本設定:城鎮要夠多=>npc 才會夠多 : =>將來的兌換就可以多樣化、同時現存的 npc 就能方便取得其存 : 在價值。 : Laechan 就現有架構上,我目前研究出同件物品在數量多數的話可以虛擬的方 法,這樣子就可以方便的寫出讓玩家收集同種類物品的謎了。目前聖 殿內的謎要收集物品,不是讓玩家收集一件,亦或是不同種類單件的 物品,例如收集掠奪者的尖牙 100顆這一類謎,就還沒出現過,因為 虛擬物品尚末實裝的關係。 不過由於我程式尚差,目前也只能夠把程式碼寫在 npc身上,還無法 直接只修改 obj就能達到這個效果。 釋出物品的 npc程式碼 void die() { object ob,ppl=this_player(); if(!ob=present("plunderer fang",ppl)) //如果玩家沒有牙,就給它一顆牙 { ob=clone_object(EO"fang"); ob->move_to(ppl); } ob->add("fang_num",1); //在此為牙的數量加1,所以原本的物品並沒設此參數 ob->set("short",chinese_number(ob->query("fang_num"))+"顆掠奪者的尖牙(Plunderer Fang)"NOR); ob->set("mass",ob->query("fang_num")); //物品的short,mass,還有value也隨之增加 ob->set("value",ob->query("fang_num") * 10); //假設此物品價值10元 ::die(); //設定的價值的話才能夠賣商店還不會只是一個的價錢 } 收取物品的 npc程式碼 int give_fang(string str) { int num; string what; object ppl,ob; ppl=this_player(); if(!ppl->query_temp("Pleas_of_Pixies")) return 0; //基本上是有參數的人才能給 if(!str || str == "" ) return notify_fail("用法: give <item> to <who>\n"); if (sscanf(str,"%s to monika",what)!=1) return 0; if(!ob=present(what,ppl) ) return 0; if(ob->query("highelf_plunderer_fang")) //查詢物品有無此參數 { num=query("fang_num"); //統計物品內的數量 if( num > 0) { num -= (int)ob->query("fang_num"); //對 npc內自建所需要收集的數量做相加減 ob->remove(); if(num > 0) { write(NAME+GRN"說道: "HIY"還差"+chinese_number(num)+"顆尖牙。\n"NOR); set("fang_num",num); //統計後的數量 return 1; } 基本上這個 obj的原始檔還是和原本的 obj一樣,只是都在 npc的身 上做文章而已。 -- 不歸之森的名稱似乎早就在說明其不歸著含意 落入塵世的妖精再也無法回去他的故鄉了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.125.227.125
文章代碼(AID): #19FcLnQb (mud_sanc)
文章代碼(AID): #19FcLnQb (mud_sanc)