查看: 2036|回复: 3

[已经解决] 我这个脚本这样写可以吗

[复制链接]
梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2015-12-14 22:41:40 | 显示全部楼层 |阅读模式

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

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

×
然后我只要在事件的脚本里输入def daojubianhua就可以执行了吧


[pre lang="ruby"]#由于使用了完美物品系统
#函数:gain_item(item_id, kind=1, n=true),给某角色增减物品。
#      item_id : 物品 ID;n: true是增加,false是减少;kind:种类,1是物品,2是武器,3是防具


class Window_Item
  def daojubianhua
    #变化前的物品ID
    a = [0,1,2,3,4]
    #变化后的物品ID
    b = [5,6,7,8,9]
    #队伍此物品的数量
    c = $game_party.item_number(a)
    #1号角色此物品的数量
    d = $game_actors[1].item_number(a)
    #2号角色此物品的数量
        e = $game_actors[2].item_number(a)
        #3号角色此物品的数量
    f = $game_actors[3].item_number(a)
    #4号角色此物品的数量
    g = $game_actors[4].item_number(a)
#队伍减去所有变化前物品
     $game_party.gain_item(a,-c)
     #队伍增加对应的变化后物品
     $game_party.gain_item(b,c)
     #1号角色此物品拥有时循环
     while d >= 1
       #减去1号角色此物品
     $game_actors[1].gain_item(a,1, false)
     #增加1号角色对应物品
      $game_actors[1].gain_item(b, 1, true)
    end
    #2号角色此物品拥有时循环
        while e >= 1
           #减去2号角色此物品
     $game_actors[2].gain_item(a, 1, false)
     #增加2号角色对应物品
           $game_actors[2].gain_item(b, 1, true)

         end
         #3号角色此物品拥有时循环
     while f >= 1
        #减去3号角色此物品
     $game_actors[3].gain_item(a, 1, false)
     #增加3号角色对应物品
           $game_actors[3].gain_item(b, 1, true)

         end
         #4号角色此物品拥有时循环
     while g >= 1
        #减去4号角色此物品
     $game_actors[4].gain_item(a, 1, false)
     #增加4号角色对应物品
           $game_actors[4].gain_item(b, 1, true)

   end
[/pre]

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2015-12-14 22:46:14 | 显示全部楼层
本帖最后由 cinderelmini 于 2015-12-16 14:31 编辑

目测少了两个end…………
然后这样并不能如愿召唤…………

试试看这样吧,这样可以在事件的【脚本】中召唤了。
点击展开/收起
  1. #由于使用了完美物品系统
  2. #函数:gain_item(item_id, kind=1, n=true),给某角色增减物品。
  3. #      item_id : 物品 ID;n: true是增加,false是减少;kind:种类,1是物品,2是武器,3是防具


  4. class Interpreter
  5.   def daojubianhua
  6.     # 变化列表
  7.     item_change = {
  8.     #变化前ID => 变化后ID
  9.     1 => 6,
  10.     2 => 7,
  11.     3 => 8,
  12.     4 => 9,
  13.     5 => 10,
  14.     }
  15.     # 遍历变化前的物品ID
  16.     for mae in item_change.keys
  17.       # 变化后的物品ID
  18.       after = item_change[mae]
  19.       # 队伍此物品的数量
  20.       party_num = $game_party.item_number(mae)
  21.       # 队伍减去所有变化前物品
  22.       $game_party.gain_item(mae,-party_num)
  23.       #队伍增加对应的变化后物品
  24.       $game_party.gain_item(after, party_num)
  25.       for i in 1..4
  26.         # 角色
  27.         actor = $game_actors[i]
  28.         # 如果角色持有变化前的物品
  29.         if actor.items.include?($data_items[mae])
  30.           # 减去角色变化前物品
  31.           actor.gain_item(mae, 1, false)
  32.           # 增加角色变化后物品
  33.           actor.gain_item(after, 1, true)
  34.         end
  35.       end
  36.     end
  37.   end
  38. end
复制代码


关于数组里删除一个相等元素的办法之一:
  1. Array.each do |a|
  2.   if a == something
  3.     a = nil
  4.     break
  5.   end
  6. end
  7. Array.delete(nil)
复制代码

点评

要删除一个的办法还是有的……啊……还是写楼里吧……  发表于 2015-12-16 14:27
Array.delete_at(index)是指删除index位置的东西,不是删除等于index的东西。  发表于 2015-12-16 14:26
为什么delete_at不行  发表于 2015-12-16 00:38
我发现物品系统的里面减少角色物品用的是 @items.delete($data_armors[item_id])那个delete是把所有都清楚了,而不是减少一个,有没有好用的代码,lose也不行  发表于 2015-12-16 00:00
试了下,语法错误。不是在事件脚本里输入def daojubianhua 吗  发表于 2015-12-15 20:46

评分

参与人数 1星屑 +200 收起 理由
RyanBern + 200 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

 楼主| 发表于 2015-12-15 20:38:08 | 显示全部楼层
cinderelmini 发表于 2015-12-14 22:46
目测少了两个end…………
然后这样并不能如愿召唤…………

试试看这样吧,这样可以在事件的【脚本】中 ...

原来大神有给出答案了。
我自己修改的是这样的。
我马上试试你给的脚本效果。
脚本[pre lang="ruby"]#由于使用了完美物品系统
#函数:gain_item(item_id, kind=1, n=true),给某角色增减物品。
#      item_id : 物品 ID;n: true是增加,false是减少;kind:种类,1是物品,2是武器,3是防具


class Window_Item
  def daojubianhua
    @a = []  
    @b = []
        #变化前
    @a[1] = [0,1,1]   
        #变化后
    @b[1] = [0,2,1]
            #变化前
    @a[2] = [0,3,1]   
        #变化后
    @b[3] = [0,4,1]
    #队伍变化前物品数大于1
while  $game_party.item_number(@a)>=1
  #队伍减去变化前物品
         $game_party.gain_item(@a,-1)
              #队伍增加变化后物品
     $game_party.gain_item(@b,1)
         end
    #1号角色变化前物品数大于1
   while $game_actors[1].item_number(@a)>=1
            #减去1号角色此物品
     $game_actors[1].gain_item(@a,1, false)
          #增加1号角色对应物品
      $game_actors[1].gain_item(@b, 1, true)

end
    #2号角色变化前物品数大于1
     while   $game_actors[2].item_number(@a)>=1
                  #减去2号角色此物品
     $game_actors[2].gain_item(@a, 1, false)
     #增加2号角色对应物品
           $game_actors[2].gain_item(@b, 1, true)
end
        #3号角色变化前物品数大于1
   while $game_actors[3].item_number(@a)>=1
             #减去3号角色此物品
     $game_actors[3].gain_item(@a, 1, false)
     #增加3号角色对应物品
           $game_actors[3].gain_item(@b, 1, true)

end
    #4号角色变化前物品数大于1
  while  $game_actors[4].item_number(@a)>=1
            #减去4号角色此物品
     $game_actors[4].gain_item(@a, 1, false)
     #增加4号角色对应物品
           $game_actors[4].gain_item(@b, 1, true)

end
end
end[/pre]
回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

 楼主| 发表于 2015-12-15 20:49:07 | 显示全部楼层
本帖最后由 yang1zhi 于 2015-12-15 20:50 编辑
cinderelmini 发表于 2015-12-14 22:46
目测少了两个end…………
然后这样并不能如愿召唤…………

试试看这样吧,这样可以在事件的【脚本】中 ...


1.png
事件脚本里直接输入daojubianhua  可以调用。
不过31行报错


角色(Game_Actor):
属性:max_size,最大负重,可在游戏更改。如$game_actors[1].max_size += 1
属性:items,物品列表,只可读取,不可修改。如$a = $game_actors[1].items[0]
函数:judge_equip,判断一下是否装备正确。如果不正确就把装备设置为空
函数:gain_item(item_id, kind=1, n=true),给某角色增减物品。
      item_id : 物品 ID;n: true是增加,false是减少;kind:种类,1是物品,2是武器,3是防具
函数:item_amount,返回现有负重物品数量
函数:have_item?(item),判断是否拥有某物
函数:item_full?,判断背包是不是满了


队伍(Game_Party):
属性:max_amount,最大背包中物品数量
属性:now_amount,背包中现有物品数量
函数:item_full?,判断背包是否放满
函数:refresh_item_amount,重新刷新背包中现有物品数量,发生意外的时候用

点评

现在可以了,真厉害,反正我看了好久都没看明白  发表于 2015-12-15 23:13
好像不能就这样删了,改了下,如果【属性:items,物品列表,只可读取,不可修改。】这个数组里面放的是物品的话,大概可以是现在那样写。  发表于 2015-12-15 22:36
噗……那个actor_number其实就是你1楼的defg……窝还以为你加的脚本里有那东西,既然这样31行直接删掉就是了。  发表于 2015-12-15 22:27
我记得是 一个变量.你要的方法  发表于 2015-12-15 20:51
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部