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

Project1

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

[已经过期] 有dalao帮忙修改这个脚本吗?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
209
在线时间
23 小时
注册时间
2018-3-10
帖子
31
跳转到指定楼层
1
发表于 2018-4-6 17:31:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x

某天.我打开了 原创发布区 其中这样一个东西吸引了我.(可以先看后面再看脚本)
#==============================================================================
# 地图菜单插件 - 技能商店
#==============================================================================
# 作者:guoxiaomi
# 鸣谢:66RPG 叶子 任务界面
#==============================================================================
class Interpreter
  #----------------------------------------------------------------------------
  # 常量
  #----------------------------------------------------------------------------
  # 每个角色可以学习的技能  
  Skill_Shop_Actor_Data = {1=>[1,2,3], 2=>[1,2,4], 3=>[2,4,6], 4=>[1,2,3,4,5,6]}
  # 每个技能的需求
  # 数组里分别是[所需金钱, 所需等级, 先决技能]
  # 先决技能 = 0 说明不需要先决技能
  Skill_Shop_Skill_Data = {1=>[0,0,0], 2=>[0,0,0], 3=>[0,0,0], 4=>[10,0,0], 5=>[0,5,0], 6=>[0,0,1]}
  
  #----------------------------------------------------------------------------
  # 初始化方法
  #----------------------------------------------------------------------------
  def init_skill_shop(i = 0)
    # 设置商店调用标记
    $skill_shop_index = 0
    # 全局变量数组 v
    v = $game_variables
    # 如果 v[i] 已经是 Hash,那么不操作后面的赋值
    if i != 0
      return if v[i].is_a?(Hash)
    end
    # 技能商店库存   
    # v[商店ID] = {技能1_ID => 技能1_库存, 技能2_ID => 技能2_库存...}
    v[1] = {1=>2, 2=>2, 3=>2}
    v[2] = {2=>1, 4=>1, 6=>1}
    v[3] = {1=>4, 2=>4, 3=>4, 4=>4, 5=>4, 6=>4}
  end
  
  #----------------------------------------------------------------------------
  # 呼叫菜单方法
  #----------------------------------------------------------------------------
  def call_skill_shop(i)
    # 第一次调用时自动初始化
    init_skill_shop(i) if !$skill_shop_index
    # 将 shop 的数据记录到全局变量里
    $skill_shop_index = i
    # 设置 1 个 Show Window 用来展示菜单
    help_window = Window_Show.new (96, 32, 448, 64)
    help_window.back_opacity = 192
    help_window.contents.font.size = 32
    help_window.set_text('技能商店', 1)
    # 设置 3 个 Show Window 用来展示框架
    help_window1 = Window_Show.new (96,96,160,160)
    help_window1.back_opacity = 192
    help_window2 = Window_Show.new (96,256,160,160)
    help_window2.back_opacity = 192
    help_window3 = Window_Show.new (256,96,288,320)
    help_window3.back_opacity = 192
    # 读取队伍里的所有成员名
    ary = []   
    $game_party.actors.each do |actor|
      ary.push actor.name
    end
    # 设置窗口位置
    $wmm_position = {1=>[96,96,160,160], 2=>[96,256,160,160], 3=>[256,96,288,320]}
    # 设置窗口透明度为 0
    $wmm_backopacity = 0
    # 呼叫菜单窗口
    call_mapmenu(*ary)
    # 调用商店标志归零
    $skill_shop_index = 0
    # 释放help_window
    help_window.dispose   
    help_window1.dispose
    help_window2.dispose
    help_window3.dispose
    # 刷新地图
    $game_map.need_refresh = true
  end  
end

class Game_Party
  alias _Skill_Shop_set_mapwindow_task set_mapwindow_task
  def set_mapwindow_task
    # 继承之前的定义
    _Skill_Shop_set_mapwindow_task
    # 只有在 $skill_shop_index 不为 0 的时候才读取内容
    if $skill_shop_index && $skill_shop_index != 0
      # 队伍里的每个角色循环一遍
      $game_party.actors.each do |actor|
        # name 的第一部分
        name_main = actor.name
        # 从此角色的 id 中得到对应的可以学习的技能
        skill_actor = Interpreter::Skill_Shop_Actor_Data[actor.id]
        # 从 $skill_shop_index 得到该商店售卖的技能
        skill_shop = $game_variables[$skill_shop_index].keys
        # 交集就是所有的技能 id ,循环一遍
        (skill_actor & skill_shop).sort.each do |skill_id|
          # 读取技能的名称作为子菜单名
          name_sub = $data_skills[skill_id].name
          # 将角色 ID 和 技能 ID 记入 '@' 选项中方便后面识别         
          name_setting = "Refresh-Actor[#{actor.id}]-Skill[#{skill_id}]"
          # name 读取完毕,添加 'refresh' 选项使得页面可以实时刷新
          name = name_main + ':' + name_sub + '@' + name_setting
          # 下面是 text 内容,首先初始化数组,最后会把数组拼起来
          text = []         
          # 技能名
          text.push($data_skills[skill_id].name + "\n")
          # 库存余量
          text.push("库存 \\c[4]" + $game_variables[$skill_shop_index][skill_id].to_s + "\\c[0] 个\n")
          # 技能描述
          text.push($data_skills[skill_id].description + "\n\n")
          # 判断学习显示 遗忘 or 学习
          text.push("按空格  ")
          if actor.skill_learn?(skill_id)
            text.push "\\c[2]遗忘"
          else
            text.push "\\c[4]学习"
          end
          text.push "\\c[0]\n"
          # 获取学习限制是数据
          limit_ary = Interpreter::Skill_Shop_Skill_Data[skill_id]
          limit_gold, limit_level, limit_skill = *limit_ary
          # 判断金钱
          text.push("所需金钱: #{limit_gold} ")
          text.push("\\c[2]金钱不足\\c[0]") if $game_party.gold < limit_gold
          # 判断等级
          text.push("\n所需等级: #{limit_level} ")
          text.push("\\c[2]等级不足\\c[0]") if actor.level < limit_level
          # 判断技能
          if limit_skill != 0 && !actor.skill_learn?(limit_skill)
            text.push("\n需要先学会 \\c[2]#{$data_skills[limit_skill].name}\\c[0]\n")
          end
          # 添加此任务到菜单
          @tasks_info.push Game_Task.new(name, text.join(""))
        end
      end
    end
  end
end

class Window_MapMenu < Window_Command  
  alias _Skill_Shop_run_confirm run_confirm
  def run_confirm(ary)
    # 先进行原来的处理
    _Skill_Shop_run_confirm(ary)
    # 只有在 $skill_shop_index 不为 0 的时候才响应判断
    if $skill_shop_index && $skill_shop_index != 0
      # 从 '@' 选项中获得 actor id 和 skill id
      if ary[2] =~ /Actor\[(\d+)\]/
        actor_id = $1.to_i
      end
      if ary[2] =~ /Skill\[(\d+)\]/
        skill_id = $1.to_i
      end
      # 获取 actor
      actor = $game_party.actors.find{|actor| actor.id == actor_id}
      # 获取技能学习限制
      limit_ary = Interpreter::Skill_Shop_Skill_Data[skill_id]
      limit_gold, limit_level, limit_skill = *limit_ary
      # 如果 actor 已经学会此技能
      if actor.skill_learn?(skill_id)
        # 遗忘技能
        actor.forget_skill(skill_id)
        # 返回一半金钱
        $game_party.gain_gold(limit_gold / 2)
        # 播放冻结 SE
        $game_system.se_play($data_system.load_se)
      else
        # 如果商店有存货
        if $game_variables[$skill_shop_index][skill_id] > 0
          # 如果金钱和等级都没有问题
          if $game_party.gold >= limit_gold && actor.level >= limit_level
            # 如果未设置 先决技能 或 先决技能已学习
            if limit_skill == 0 || actor.skill_learn?(limit_skill)            
              # 学会此技能
              actor.learn_skill(skill_id)
              # 损失金钱
              $game_party.lose_gold(limit_gold)
              # 修改库存对应的全局变量
              $game_variables[$skill_shop_index][skill_id] -= 1
              # 播放成功 SE
              $game_system.se_play($data_system.shop_se)
            else
              # 播放冻结 SE
              $game_system.se_play($data_system.buzzer_se)
            end
          else
            # 播放冻结 SE
            $game_system.se_play($data_system.buzzer_se)
          end
        else
          # 播放冻结 SE
          $game_system.se_play($data_system.buzzer_se)
        end
      end
    end
  end
end
#==============================================================================
# 作者:guoxiaomi
# 鸣谢:66RPG 叶子 任务界面
#==============================================================================
  像这样的学习技能脚本早就满大街了.不过让我吸引的是 技能数量库存 .
  我就想:如果这个存 技能 的地方变为 存 物品 的地方.拿东西(学习技能)需要钱再改为需要 变量 特定物品 等级 等等.这样游戏里执行对应的脚本后就随机放入 物品 后就实现了 交换 等级奖励 刷新点等等.用途非常广泛!
  所以...有脚本帝帮忙么 (本人脚本盲一枚).
只能做成火柴人的了.

Lv5.捕梦者

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

开拓者

2
发表于 2018-4-6 17:47:40 | 只看该作者
把技能改成物品,差不多可以重新写了。
@guoxiaomi
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
209
在线时间
23 小时
注册时间
2018-3-10
帖子
31
3
 楼主| 发表于 2018-4-6 17:59:42 | 只看该作者
芯☆淡茹水 发表于 2018-4-6 17:47
把技能改成物品,差不多可以重新写了。
@guoxiaomi

................
只能做成火柴人的了.
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
4
发表于 2018-4-6 21:41:57 | 只看该作者
物品仓库的意思吗...
拿VX的物品仓库移植一下应该可以实现吧。
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39034
在线时间
5725 小时
注册时间
2006-11-10
帖子
6622
5
发表于 2018-4-6 23:48:05 | 只看该作者
其实我一直想不通, 拥有一个无限容量的背包, 还要仓库干嘛呢?

点评

有99的数量上限,但是你可以自己加条件改  发表于 2018-4-7 00:31
背包容量不是无限的,物品持有数上限是99  发表于 2018-4-7 00:27
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23206
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

6
发表于 2018-4-7 00:27:08 | 只看该作者
如果只是物品仓库的话,纯事件就可以http://rpg.blue/forum.php?mod=vi ... eid%26typeid%3D1337
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

7
发表于 2018-4-7 00:31:19 | 只看该作者
在游戏开始数据初始化部分和存读档的部分加新的Game_Party
存取物品就是不同PartyPY交易同时做物品增减
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39034
在线时间
5725 小时
注册时间
2006-11-10
帖子
6622
8
发表于 2018-4-7 01:05:48 | 只看该作者
本帖最后由 灯笼菜刀王 于 2018-4-7 01:13 编辑

  单品99那也是因为被gain_item限制了嘛.....   再说,99和9999又没啥区别.......


咱是觉得, 仓库的意义应该是要限制携带的物品才是, 所以仓库系统的大头不应该先限制包包的容积么?

限定身上携带的药品数量, 避免嗑药硬啃BOSS,  这样仓库的存在才有意义嘛


评分

参与人数 1+1 收起 理由
xp兔子徒弟 + 1 那么哪里能玩到你的舰R呢

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
910
在线时间
94 小时
注册时间
2005-10-22
帖子
397
9
发表于 2018-4-7 09:36:29 | 只看该作者
不是有现成的物品银行的脚本么?2006年的脚本

点评

已经重发,在魔力宝贝单机版1.15C中有专用版的银行和技能商店等各种有用的脚本。  发表于 2018-4-7 17:31
额,要是能附上链接就好了……06年的脚本估计楼主是找不到的  发表于 2018-4-7 13:26
做脚本先从修改脚本做起,我只修改自己觉得能用到的东西。
以后的任何作品都将不会进行分享。
Bilibili:https://space.bilibili.com/288814521
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-1 00:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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