作者laechan (小太保)
看板mud_sanc
标题Re: [wizs] 问题请教
时间Tue May 27 19:18:33 2008
※ 引述《aiggkimd (口古月)》之铭言:
: 我一开始实验单样物品n个,用hlead贴的结果没反应..复制贴上改掉道具也不能..痾
: int return_obj(string str)
: {
: object ob,ppl=this_player();
: mixed obs=all_inventory(ppl);
: int i,u;
: i=0;
: foreach(ob in obs)
: if(ob->query("mushroom"))
: i++;
你可以在这里加个 write("i="+i+"\n"); 判断一下 i 是多少.
: if (i<2)
: {
: write("你要收集满两个才能兑换唷!!\n");
: return 1;
: }
: for(u=0;u<3;u++)
: {
: ob=present("mushroom",ppl);
: ob->remove();
: }
: write("这是你要的东西,拿去吧!!!\n");
: return 1;
: }
: 结果都显示"你要收集满两个才能兑换唷"...没成功.
: 测试2,我拿蘑菇跟骨头来实验,用小保贴的改2样各n个来试
: int return_obj(string str)
: {
: object ob,ppl=this_player();
: mixed obs=all_inventory(ppl);
: int i,j;
: i=0;
: j=0;
: foreach(ob in obs)
: {
在这里加个 write(ob->query("short")+"\n"); 看看 foreach
是不是会玩家身上的每个物品都 write 出来.
: if(ob->query("mushroom"))
: i++;
: if(ob->query("bone"))
: j++;
: }
这里加个 write("i,j="+i+","+j+"\n");
我是觉得你 data mushroom 跟 data bone 一下, 我猜应该
是 mushroom 的 data 中没有 mushroom 这个参数, 或者是
bone 的 data 中没有 bone 这个参数.
应该是这个原因.
: if(i>=2 && j>=2)
: write("这是你要的东西,拿去吧!!!\n");
: else write("你东西要收集满才能兑换唷!!\n");
: return 1;
: }
: 结果只会显示"你东西要收集满才能兑换唷"....都失败了..
: 请问哪边要修正?
: 还有一次移除两种东西
: ob=present("mushroom",ppl) && ob=present("bone",ppl)
ob=present("mushroom",ppl) 当你执行这个判断时 ob 就是
mushroom 了, 以致於当你又执行 ob=present("bone",ppl)
的判断时, ob 就变成了 bone.
也就是说 ob = XXXX 时, 放左边的变数永远是右边去 cover
的.
但是用这种方法, 道具必须要有特殊的 ID, 因为在圣殿里头
叫 mushroom 跟叫 bone 的道具很多.
: ob->remove();
: 这样写可以??
: 但是这样好像只会移除一组而已..假如npc各要2组的话
: for(k=0;k<3;k++)
: {
: ob=present("mushroom",ppl) && ob=present("bone",ppl)
: ob->remove();
: 这样不晓得行不行..
: 小保贴的方法2就可以用,但是成功後的移除不晓得怎写比较好
: 像蘑菇跟骨头各两个都移除掉..试不出来
: 目前就这样..移除的部分还在研究
: int return_obj(string str)
: {
: object ob1,ob2,ppl=this_player();
: if(ob1=present("mushroom 2",ppl) &&
: ob2=present("bone 2",ppl))
: {
: write("这是你要的东西,拿去吧!!!\n");
: }
: else write("你东西要收集满才能兑换唷!!\n");
: return 1;
: }
: 现在有点混乱..请示一下,谢谢..
要顺便移除的话就要两个 foreach, 第二个 foreach...
// 上面已经做完判断, 确定玩家身上有这些东西
foreach(ob in obs)
{
if(ob->query("mushroom") && i-->0)
ob->remove();
if(ob->query("bone") && j-->0)
ob->remove();
}
这样删完 i 个 mushroom 及 j 个 bone 後它就不会再删了.
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.170.109.82
1F:→ aiggkimd :thx 05/27 23:06