作者HighElf (高等妖精)
看板mud_sanc
标题Re: [系统] 关於虚拟物品系统支援怪物收集品掉落系统
时间Tue Dec 9 20:32:46 2008
※ 引述《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