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

Project1

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

[已经解决] 如何让固定的一个魔法商店出售不同种类的技能?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
95
在线时间
24 小时
注册时间
2007-6-16
帖子
160
跳转到指定楼层
1
发表于 2009-8-27 13:41:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我想做一种魔法商店,会因主角找到的配方而研制出新的技能进行销售,呼唤商店后就出售找到配方的技能。
而不是这类要求卖几号的$scene = Scene_MShop.new([5,6,8,10,21])呼唤方法(请参考魔法商店脚本)。
我想问的是有没有$scene = Scene_MShop.new呼唤出魔法商店,店里按剧情中获得的技能配方种类出售相关ID技能的方法?
例:
游戏开始,默认出售1号法术,主角找到了3号法术的配方,魔法商店就出售1、3号技能,而2号一直没找到,是隐藏的,在完成某任务后商店里才出售2号技能。
本来想用条件分歧,初始变量1,当主角找到2号技能配方,变量+1。
当变量=1时,$scene = Scene_MShop.new([1]),
当变量=2时,$scene = Scene_MShop.new([1,2]),
当变量=3时,……
但是技能一多,这样的方法弊病很大,而且不好设置,比如有10个技能,主角找
到了1.3.5.6.7号技能,商店里就出售1.3.5.6.7号技能;主角找到了1.2.3.4.5号技能配方,商店里就出售1.2.3.4.5号技能。
那样用变量设置会让人残废的,哪位大大救救我!
喜欢玩游戏,更喜欢自己做游戏

Lv1.梦旅人

~琉璃の雪~<

梦石
0
星屑
49
在线时间
36 小时
注册时间
2008-11-6
帖子
3678
2
发表于 2009-8-27 14:02:07 | 只看该作者
  1. #==============================================================================
  2. # 本脚本来自http://rpg.blue/web/,使用和转载请保留此信息
  3. #==============================================================================

  4. #呼叫魔法商店的时候,在事件中使用脚本:$scene = Scene_MShop.new([魔法编号1,2])
  5. #在数据库的说明里,在说明文字后面加上@50 表示这个魔法价格为 50

  6. #==============================================================================

  7. #——以下是一些自定义的内容

  8. $mShop_use_1 = ""    #——这项是购买魔法特技的货币的名称,如“灵魄”、“金钱”

  9. $mShop_use_2 = "G"  #——这项是购买魔法特技的货币单位,如“点”、“¥”

  10. $mShop_use_variable = 0   #——这项是购买魔法特技时消耗的变量编号,如果=0 则是消耗金钱

  11. $mShop_Window_Opacity = 200  #——这项是窗口透明度

  12. #==============================================================================
  13. # ■ Window_MGold
  14. #------------------------------------------------------------------------------
  15. #  显示金钱的窗口。
  16. #==============================================================================
  17. class Window_MGold < Window_Base
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化窗口
  20.   #--------------------------------------------------------------------------
  21.   def initialize
  22.     super(0, 0, 272, 64)
  23.     self.contents = Bitmap.new(width - 32, height - 32)
  24.     refresh
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 刷新
  28.   #--------------------------------------------------------------------------
  29.   def refresh
  30.     self.contents.clear
  31.     self.contents.font.color = system_color
  32.     self.contents.draw_text(0, 0 , 240,32 ,$mShop_use_1)
  33.     self.contents.font.color = normal_color
  34.     self.contents.draw_text(0, 0, 240-contents.text_size($mShop_use_2).width-6, 32, $mShop_gold.to_s, 2)
  35.     self.contents.font.color = system_color
  36.     self.contents.draw_text(0, 0, 240, 32, $mShop_use_2, 2)
  37.   end
  38. end
  39. #==============================================================================
  40. # ■ Scene_MShop
  41. #------------------------------------------------------------------------------
  42. #  处理特技商店画面的类。
  43. #==============================================================================
  44. class Scene_MShop
  45.   #--------------------------------------------------------------------------
  46.   # ● 初始化
  47.   #--------------------------------------------------------------------------
  48.   def initialize(id)
  49.     @id = id
  50.   end  
  51.   #--------------------------------------------------------------------------
  52.   # ● 主处理
  53.   #--------------------------------------------------------------------------
  54.   def main
  55.     screen = Spriteset_Map.new
  56.     if $mShop_use_variable == 0
  57.       $mShop_gold = $game_party.gold
  58.     else
  59.       $mShop_gold = $game_variables[$mShop_use_variable]
  60.     end
  61.     # 生成帮助窗口
  62.     @help_window = Window_Help.new
  63.     @help_window.opacity = $mShop_Window_Opacity
  64.     @help_window.z = 10000
  65.     # 生成金钱窗口
  66.     @gold_window = Window_MGold.new
  67.     @gold_window.x = 368
  68.     @gold_window.y = 416
  69.     @gold_window.opacity = $mShop_Window_Opacity
  70.     @gold_window.z = 10000
  71.     # 生成购买窗口
  72.     @buy_window = Window_MShopBuy.new(@id)
  73.     @buy_window.active = true
  74.     @buy_window.visible = true
  75.     @buy_window.help_window = @help_window
  76.     @buy_window.opacity = $mShop_Window_Opacity
  77.     @buy_window.z = 10000
  78.     # 生成状态窗口
  79.     @status_window = Window_MShopStatus.new
  80.     @status_window.visible = true
  81.     @status_window.active = false
  82.     @status_window.opacity = $mShop_Window_Opacity
  83.     @status_window.z = 10000
  84.     # 执行过渡
  85.     Graphics.transition
  86.     # 主循环
  87.     loop do
  88.       # 刷新游戏画面
  89.       Graphics.update
  90.       # 刷新输入信息
  91.       Input.update
  92.       # 刷新画面
  93.       update
  94.       # 如果画面切换的话就中断循环
  95.       if $scene != self
  96.         break
  97.       end
  98.     end
  99.     # 准备过渡
  100.     Graphics.freeze
  101.     # 释放窗口
  102.     @help_window.dispose
  103.     #@mhelp_window.dispose
  104.     @gold_window.dispose
  105.     @buy_window.dispose
  106.     @status_window.dispose
  107.     screen.dispose
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 刷新画面
  111.   #--------------------------------------------------------------------------
  112.   def update
  113.     # 刷新窗口
  114.     @help_window.update
  115.     #@mhelp_window.update
  116.     @gold_window.update
  117.     @buy_window.update
  118.     @status_window.update
  119.     # 购买窗口激活的情况下: 调用 update_buy
  120.     if @buy_window.active
  121.       update_buy
  122.       return
  123.     end
  124.     if @status_window.active
  125.       update_status
  126.       return
  127.     end
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 刷新画面 (购买窗口激活的情况下)
  131.   #--------------------------------------------------------------------------
  132.   def update_buy
  133.     @status_window.skill = @buy_window.skill
  134.     if Input.trigger?(Input::B)
  135.       $game_system.se_play($data_system.cancel_se)
  136.       $scene = Scene_Map.new
  137.       return
  138.     end
  139.     if Input.trigger?(Input::C)
  140.       @skill = @buy_window.skill
  141.       if @skill == nil or @skill.price > $mShop_gold
  142.         $game_system.se_play($data_system.buzzer_se)
  143.         return
  144.       end
  145.       $game_system.se_play($data_system.decision_se)
  146.       @buy_window.active = false
  147.       @status_window.index = 0
  148.       @status_window.active = true
  149.     end
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 刷新画面 (状态窗口激活的情况下)
  153.   #--------------------------------------------------------------------------
  154.   def update_status
  155.     if Input.trigger?(Input::B)
  156.       $game_system.se_play($data_system.cancel_se)
  157.       @status_window.active = false
  158.       @status_window.index = -1
  159.       @buy_window.active = true
  160.     end
  161.     if Input.trigger?(Input::C)
  162.       if $game_party.actors[@status_window.index].skill_learn?(@skill.id)
  163.         $game_system.se_play($data_system.cancel_se)
  164.         return
  165.       else
  166.         $game_system.se_play($data_system.decision_se)
  167.         if $mShop_use_variable == 0
  168.           $game_party.gain_gold([email protected])
  169.           $mShop_gold -= @skill.price
  170.         else
  171.           $game_variables[$mShop_use_variable] -= @skill.price
  172.           $mShop_gold -= @skill.price
  173.         end
  174.         $game_party.actors[@status_window.index].learn_skill(@skill.id)
  175.         @gold_window.refresh
  176.         @buy_window.refresh
  177.         @status_window.refresh
  178.         @status_window.active = false
  179.         @status_window.index = -1
  180.         @buy_window.active = true
  181.       end      
  182.     end   
  183.   end
  184. end
  185. #==============================================================================
  186. # ■ Window_MShopStatus
  187. #------------------------------------------------------------------------------
  188. #  特技商店画面、显示物品所持数与角色装备的窗口。
  189. #==============================================================================
  190. class Window_MShopStatus < Window_Selectable
  191.   #--------------------------------------------------------------------------
  192.   # ● 初始化对像
  193.   #--------------------------------------------------------------------------
  194.   def initialize
  195.     super(368, 64, 272, 352)
  196.     self.contents = Bitmap.new(width - 32, height - 32)
  197.     self.contents.font.size = 18
  198.     @skill = nil
  199.     refresh
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● 刷新
  203.   #--------------------------------------------------------------------------
  204.   def refresh
  205.     self.contents.clear
  206.     for i in 0...$game_party.actors.size
  207.       actor = $game_party.actors[i]
  208.       draw_actor_graphic(actor,22,80*i+68)
  209.       self.contents.font.color = system_color
  210.       self.contents.draw_text(44, 80*i, 240, 32, actor.name)
  211.       self.contents.draw_text(0, 80*i , 200,32,"Lv",2)
  212.       self.contents.font.color = normal_color
  213.       self.contents.draw_text(0, 80*i, 230, 32, actor.level.to_s , 2)
  214.       self.contents.font.color = system_color
  215.       self.contents.draw_text(44, 80*i+22, 45, 32, $data_system.words.hp)
  216.       self.contents.font.color = normal_color
  217.       self.contents.draw_text(44, 80*i+22, 80, 32, actor.maxhp.to_s,2)
  218.       self.contents.font.color = system_color
  219.       self.contents.draw_text(150, 80*i+22, 45, 32, $data_system.words.sp)
  220.       self.contents.font.color = normal_color
  221.       self.contents.draw_text(150, 80*i+22, 80, 32, actor.maxsp.to_s,2)      
  222.       if actor.skill_learn?(@skill.id)
  223.         self.contents.font.color = Color.new(255,255,255,128)
  224.         self.contents.draw_text(44, 80*i+44, 196, 32, "已经学习",2)        
  225.       else
  226.         self.contents.font.color = Color.new(255,255,0,255)
  227.         self.contents.draw_text(44, 80*i+44, 240, 32, "没有学习")
  228.       end
  229.     end
  230.     @item_max = 4#$game_party.actors.size
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 设置物品
  234.   #     item : 新的物品
  235.   #--------------------------------------------------------------------------
  236.   def skill=(skill)
  237.     if @skill != skill
  238.       @skill = skill
  239.       refresh
  240.     end
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 刷新光标矩形
  244.   #--------------------------------------------------------------------------
  245.   def update_cursor_rect
  246.     if @index < 0
  247.       self.cursor_rect.empty
  248.     else
  249.       self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
  250.     end
  251.   end
  252. end
  253. #==============================================================================
  254. # ■ Window_MShopBuy
  255. #------------------------------------------------------------------------------
  256. #  特技商店画面、浏览显示可以购买的商品的窗口。
  257. #==============================================================================
  258. class Window_MShopBuy < Window_Selectable
  259.   #--------------------------------------------------------------------------
  260.   # ● 初始化对像
  261.   #     shop_goods : 商品
  262.   #--------------------------------------------------------------------------
  263.   def initialize(id)
  264.     super(0, 64, 368, 416)
  265.     @id = id
  266.     refresh
  267.     self.index = 0
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 获取物品
  271.   #--------------------------------------------------------------------------
  272.   def skill
  273.     return @data[self.index]
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 刷新
  277.   #--------------------------------------------------------------------------
  278.   def refresh
  279.     if self.contents != nil
  280.       self.contents.dispose
  281.       self.contents = nil
  282.     end
  283.     @data = []
  284.     for skill_id in @id
  285.       skill = $data_skills[skill_id]
  286.       if skill != nil
  287.         @data.push(skill)
  288.       end
  289.     end
  290.     @item_max = @data.size
  291.     if @item_max > 0
  292.       self.contents = Bitmap.new(width - 32, row_max * 32)
  293.       for i in 0...@item_max
  294.         draw_item(i)
  295.       end
  296.     end
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ● 描绘羡慕
  300.   #     index : 项目编号
  301.   #--------------------------------------------------------------------------
  302.   def draw_item(index)
  303.     skill = @data[index]
  304.     # 除此之外的情况设置为无效文字色
  305.     if skill.price <= $mShop_gold
  306.       self.contents.font.color = normal_color
  307.     else
  308.       self.contents.font.color = disabled_color
  309.     end
  310.     x = 4
  311.     y = index * 32
  312.     rect = Rect.new(x, y, self.width - 32, 32)
  313.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  314.     bitmap = RPG::Cache.icon(skill.icon_name)
  315.     opacity = self.contents.font.color == normal_color ? 255 : 128
  316.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  317.     self.contents.draw_text(x + 28, y, 212, 32, skill.name, 0)
  318.     self.contents.draw_text(x + 240, y, 88, 32, skill.price.to_s, 2)
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● 刷新帮助文本
  322.   #--------------------------------------------------------------------------
  323.   def update_help
  324.     @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  325.   end
  326. end
  327. #==============================================================================
  328. # ■ RPG原装定义
  329. #==============================================================================
  330. module RPG
  331.   class Skill
  332.     def description
  333.       description = @description.split(/@/)[0]
  334.       return description != nil ? description : ''
  335.     end
  336.     def price
  337.       price = @description.split(/@/)[1]
  338.       return price != nil ? price.to_i : 0
  339.     end
  340.   end
  341. end



  342. #==============================================================================
  343. # 本脚本来自http://rpg.blue/web/,使用和转载请保留此信息
  344. #==============================================================================
复制代码
~现在开始自绘头像~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
95
在线时间
24 小时
注册时间
2007-6-16
帖子
160
3
 楼主| 发表于 2009-8-27 14:33:14 | 只看该作者
$scene = Scene_MShop.new([魔法编号1,2])
这个,是呼唤商店界面,出售1,2号魔法。
如何在不新建事件的情况下,让商店多出第3号魔法?
比如合成脚本里就有“学会新的合成秘方”,学会后合成里就多了一个秘方,而不是新事件
我是想把魔法商店做进菜单,游戏中找到技能书(新添加一个魔法放进魔法商店),该技能就会在魔法商店中出现,就可以购买。
而不是多个事件用ID判断出售种类的$scene = Scene_MShop.new([魔法编号1,2])
喜欢玩游戏,更喜欢自己做游戏
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
95
在线时间
24 小时
注册时间
2007-6-16
帖子
160
4
 楼主| 发表于 2009-9-1 08:56:52 | 只看该作者
顶啊!没有人知道该怎么办吗?
喜欢玩游戏,更喜欢自己做游戏
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
5 小时
注册时间
2007-7-19
帖子
159
5
发表于 2009-9-1 13:19:45 | 只看该作者
好吧,貌似以前回复过你问题,我再提供一个方法,虽然这次更看不懂你什么意思了,如果你觉得答非所问就无视吧
充分利用数组吧
魔法书写成$scene = Scene_MShop.new($magic_can_learn)
如果就这样一进魔法书肯定报错,而且也不会有你想要的效果,
那么在开始游戏时先用一个并行处理给$magic_can_learn赋值(注意赋值完就把它关了,否则你永远学那么几号魔法),比如$magic_can_learn = [1,2,3]
就是初始可学1,2,3号魔法,什么都不学写成$magic_can_learn = []
接着就是你的技能书了,在技能书事件页里写上$magic_can_learn[$magic_can_learn.size] = 4
好了,接下来你的魔法书里就会添加4号技能了
然后,你想添加什么都是一样的方法
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
95
在线时间
24 小时
注册时间
2007-6-16
帖子
160
6
 楼主| 发表于 2009-9-1 16:33:45 | 只看该作者
5# fofolee
好牛B!佩服!真的很佩服!!你的出现让我眼前一亮!!问题完美解决!哇哈哈哈哈哈!太谢谢你了!!!!!!偶亲爱的大大
喜欢玩游戏,更喜欢自己做游戏
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-10 03:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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