设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3327|回复: 5
打印 上一主题 下一主题

[已经解决] 如何设置随机失去玩家持有的某些道具

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
568 小时
注册时间
2012-9-7
帖子
611
跳转到指定楼层
1
 楼主| 发表于 2013-2-24 13:05:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 wingzeroplus 于 2013-2-24 23:29 编辑

比如数据库设置了道具ID有1-100号
玩家在游戏过程中获得了一些道具(不一定每个ID的道具都有)
然后执行一个事件,随机失去已经持有的5个道具
要求:ID重复可以,但数量不为0才会失去,必须累计失去5个,如果少于5个则全部失去。另外还要显示失去了哪些道具

这个事件应该怎么用脚本写?求助
FTM正式版已经发布,点击图片开启传送门

Lv5.捕梦者

梦石
0
星屑
33642
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2013-2-24 14:22:20 | 只看该作者
本帖最后由 芯☆淡茹水 于 2013-2-24 15:44 编辑

  搞了个未完成的脚本,试验了一下,不知道脚本那儿有问题,物品是一个一个随机减少。由于这两天在搞一个角色随机生成系统,想问题想得头疼,不想再想了,把脚本发出来,也许LZ能根据这个思路解决  

使用方法:事件脚本:$game_party.lose_items
  1. class Game_Party
  2.   def lose_items
  3.     items = []
  4.     if @items.size > 0 and @items.size <= 5
  5.       for i in @items
  6.         items.push(i)
  7.       end
  8.     else
  9.       loop do
  10.         a = rand (@items.size)
  11.         if a > 0
  12.           items.push(@items[a])
  13.         end
  14.         if items.size == 5
  15.           break
  16.         end
  17.       end
  18.     end
  19.     n = -1
  20.     for j in items
  21.       @items[j] = [[item_number(j) + n, 0].max, 99].min
  22.     end
  23.   end
  24. end
复制代码

评分

参与人数 1星屑 +7 收起 理由
wingzeroplus + 7 塞糖

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

万兽

梦石
0
星屑
597
在线时间
2271 小时
注册时间
2006-11-4
帖子
4868

贵宾

3
发表于 2013-2-24 17:27:20 | 只看该作者
本帖最后由 弗雷德 于 2013-2-24 17:28 编辑

精简了下。

调用方法$game_party.lose_item_rand(n) n为随机失去物品的最大个数。你测试下。
至于提示问题俺还没解决
  1. class Game_Party
  2. def lose_item_rand(n)
  3.     b = 0
  4.     loop do
  5.         a = rand(@items.size)
  6.         if a>0
  7.            b = (b+item_number(a))>n ? (n-b) : item_number(a)
  8.          end
  9.      gain_item(a, -b)
  10.       n -= b
  11.       if n < 1
  12.         break
  13.       end
  14.     end
  15.   end
  16. end
复制代码

点评

刚吃完火锅回来,发现问题大的……各种BUG,不好意思,俺在研究研究。  发表于 2013-2-24 20:43
另外能不能限制一下道具的丢弃范围 比如只随机丢弃ID为101-200内的道具(不然把剧情道具给扔了就不好办)  发表于 2013-2-24 20:16
我拿了ID分别为1、2、60、121、198合计6个道具(其中1号道具2个),运行了一下,为什么198号总是留下了……测试了10几次应该不是巧合吧  发表于 2013-2-24 20:10
其实也没啥变化……  发表于 2013-2-24 17:28
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
568 小时
注册时间
2012-9-7
帖子
611
4
 楼主| 发表于 2013-2-24 20:21:13 | 只看该作者
弗雷德 发表于 2013-2-24 17:27
精简了下。

调用方法$game_party.lose_item_rand(n) n为随机失去物品的最大个数。你测试下。

能不能解释一下这句的原理,就这句没看不太明白
b = (b+item_number(a))>n ? (n-b) : item_number(a)
我理解如果是(b+item_number(a))>n 就给给B赋值N-B 如果小于就给B赋值item_number(a)  是这样吗?


点评

呃……对,俺又错了……  发表于 2013-2-24 21:29
呵呵,rand(100)+100的和rand(300)-100不是一样的么。  发表于 2013-2-24 21:27
FTM正式版已经发布,点击图片开启传送门
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

万兽

梦石
0
星屑
597
在线时间
2271 小时
注册时间
2006-11-4
帖子
4868

贵宾

5
发表于 2013-2-24 21:04:52 | 只看该作者
本帖最后由 弗雷德 于 2013-2-24 21:29 编辑

更新了一下,这下不会陷入死循环了
其实俺在想,关于获取角色身上持有物品的数组是不是有更简短的语句呃?
n的意思是随机丢弃物品的数量,比如N为10,那么会一直丢弃物品直到丢够10个,当然身上不够10件物品就会中断循环。
  1. class Game_Party
  2. def lose_item_rand(n)
  3.     items = []
  4.     for i in [email protected]
  5.       if $game_party.item_number(i) > 0
  6.         items.push($data_items[i]) #获取角色身上拥有的物品
  7.       end
  8.     end
  9.     b = 0
  10.     loop do
  11.         a = (rand(100) + 100) #只从ID为100-200之间的物品抽取随机数
  12.         if  item_number(a)>0
  13.           b += (b+item_number(a))>n ? (n-b) : item_number(a)   
  14.           gain_item(a, -b) if b > 0
  15.         end
  16.         n -= b
  17.       if n < 1 or items.size < 1 #当丢弃数量达到N或者包裹物品为0时中断循环
  18.         break
  19.       end
  20.     end
  21.   end
  22. end
复制代码

点评

又犯低级错误了,羞羞。  发表于 2013-2-24 21:30
抽100—200之间的 道具应该是rand(100)+100吧  发表于 2013-2-24 21:25
之前光想着吃了……  发表于 2013-2-24 21:05

评分

参与人数 1星屑 +7 收起 理由
wingzeroplus + 7 感谢给出的思路

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
568 小时
注册时间
2012-9-7
帖子
611
6
 楼主| 发表于 2013-2-24 23:23:52 | 只看该作者
本帖最后由 wingzeroplus 于 2013-2-24 23:33 编辑
弗雷德 发表于 2013-2-24 21:04
更新了一下,这下不会陷入死循环了
其实俺在想,关于获取角色身上持有物品的数组是不是有更简短的 ...


参考弗雷德的内容 最后自己做了个公共事件
$game_variables[66] = 0
for i in 101...$data_items.size
$game_variables[66] += $game_party.item_number(i)
end

如变量66大于5则
变量68 = 0
LOOP
变量67 随机数100-200
if $game_party.item_number($game_variables[67]) > 0
if 变量68==4   (这位置IF必须反着来从4到0……)
失去ID为变量67的道具
将变量67值给其他变量A
给某变量68+1
end
然后if 变量67 ==3
将变量67值给其他变量B
给某变量68+1
…………end
最后if 变量68==5
跳出循环

小于就更简单了

最后根据取得的变量A,B,C……获得ID的NAME,来显示失去的名称
这样就OK了,再次感谢
FTM正式版已经发布,点击图片开启传送门
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-1 14:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表