Re: [系統] 虛擬物品系統 & 怪物掉落虛擬物品系統測試

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間17年前 (2009/01/18 22:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
第二階段的測試以怪物掉落物的部份可以掉「實體物品」,實作 方式如下... :::::::::::::: /d/obj/mob_drop/laechan/crazy1.c :::::::::::::: mapping mob_drop=([ // 毒刺棘 ORIGIN_MOB_PATH+"tree1": ({ "laechan_crazy1_treeroot", "45", // treeroot 掉落機率 45% "laechan_crazy1_treetentacle", "35", // treetentacle 掉落機率 30% "/d/crazy/1/obj/bone1", "10", // bone 的掉落機率 10% }), ]); 簡單的說就是以「第一個字元」是不是 "/" 來區分虛擬與實體, 因為虛擬物品的開頭都是 wiz_id,所以不會有 "/" 的情況,也 因此有 "/" 的情況就可以用來判斷這是在講實體物品。 /d/obj/mob_drop/mob_drop_d.c 的物品掉落判斷部份預定修改如 下... object ob; j=sizeof(drop_chance); total=1000; // 逐一判斷 for(i=0;i<j;i=i+2) { vobjs_name=drop_chance[i]; k=DROP_CHANCE[ drop_chance[i+1] ]; if(random(1000)<k) { if(vobjs_name[0..0]=="/" && // 指實體物品 file_exists(vobjs_name+".c")) // 而且檔案存在 { if(!catch(ob=clone_object(vobjs_name))) // 而且 clone 出來也沒問題 { ob->move_to(ppl); tell_object(ppl,"\n"HIW"[ 你得到了一個"+ob->query("short")+HIW+ "! ]"NOR"\n"); } } else { add_user_vobjs(ppl,vobjs_name,1); add_vobjs_msg(ppl,vobjs_name,1); // 這兩行可併為一行 } break; } total=total-k; } 由以上可以擴充到 vobjs_name 的其它設定... 一般名字 : 指虛擬物品 / 開頭 : 指實體物品 #xxx,oo : 指呼叫寫在 mob_drop_d.c 裡頭的函數,並把 oo 帶進去 #xxx,oo 是暫定的給法,以毒刺棘為例.. // 毒刺棘 ORIGIN_MOB_PATH+"tree1": ({ "#drop_int,200-300", "35", // 掉錢, 範圍 200~300 "laechan_crazy1_treeroot", "25", // treeroot 掉落機率 45% "laechan_crazy1_treetentacle", "15", // treetentacle 掉落機率 30% "/d/crazy/1/obj/bone1","10", // bone 的掉落機率 10% }), ]); 那麼,上面的 for 就改為... string tmp; mixed tmps; if(random(1000)<k) { if(vobjs_name[0..0]=="#") // 指呼叫函數 { tmp=vobjs_name[1..strlen(vobjs_name)-1]; tmps=explode(tmp,","); if(function_exists(tmps[0],ob) && sizoef(tmps)==2) // 而且有該函數也有參數 call_other(tmps[0],this_object(),ppl,tmps[1]); } else if ... 然後寫個 drop_int 函數.. void drop_int(object ppl,string var) { mixed tmps=explode(var,"-"); int a; a=atoi(tmps[0])+random(atoi(tmps[1])+1); // +1 避免 bug if(ppl) { ppl->add("wealth",a); tell_object(ppl,"你得到了 "+a+" 影特幣.\n"); } } 不過上面的程式算寫的比較複雜了,所以 "/" 與 "#" 的部份我再想 看看有沒有更適合的方式─當然,還是要以方便 wiz 設定較好。 (但反正至少是可以用的,初期不用設定太多,要盡量把系統弄完整了 再來擴大設定) Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.224.103.206
文章代碼(AID): #19Sq6jHX (mud_sanc)
文章代碼(AID): #19Sq6jHX (mud_sanc)