Project1

标题: 请求修改柳柳殿的限制型魔法商店脚本 [打印本页]

作者: yzlsym    时间: 2008-3-5 02:01
标题: 请求修改柳柳殿的限制型魔法商店脚本
http://rpg.blue/web/htm/news175.htm
修改后的效果为进入购买界面时
根据各个不同的角色把所有该角色能学的技能通通列出来
就是这样
希望能尽快修改成功吧! [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: Iselia雪    时间: 2008-3-5 03:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 司马睿风    时间: 2008-3-5 04:16
你有VIP1我就帮你改
作者: windyone    时间: 2008-3-5 06:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-3-5 22:05
真巧啊……我刚刚改完= =
晚上回来发。
不过感觉LZ确实很伸手党……发了这么多帖都是求脚本的……自己一点都没有思考过吗?
作者: 水迭澜    时间: 2008-3-6 00:18
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. #==============================================================================
  5. # ■ 本脚本源自www.66rpg.com,转载与使用请保留此信息
  6. #==============================================================================

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

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

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

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

  11. $mShop_Window_Opacity = 160  #——这项是窗口透明度
  12. #==============================================================================
  13. # ■ RPG原装定义
  14. #==============================================================================
  15. module RPG
  16.   class Skill
  17.     def description
  18.       description = @description.split(/@/)[0]
  19.       return description != nil ? description : ''
  20.     end
  21.     def price
  22.       price = @description.split(/@/)[1]
  23.       return price != nil ? price.to_i : 0
  24.     end
  25.   end
  26. end

  27. #==============================================================================
  28. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  29. #==============================================================================

  30. #==============================================================================
  31. # ■ Window_MShopStatus
  32. #------------------------------------------------------------------------------
  33. #  特技商店画面、显示物品所持数与角色装备的窗口。
  34. #==============================================================================
  35. class Window_MShopStatus < Window_Selectable
  36.   #--------------------------------------------------------------------------
  37.   # ● 初始化对像
  38.   #--------------------------------------------------------------------------
  39.   def initialize
  40.     super(0, 64, 272, 352)
  41.     self.contents = Bitmap.new(width - 32, height - 32)
  42.     self.contents.font.size = 18
  43.     @skill = nil
  44.     self.index = 0
  45.     refresh
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 刷新
  49.   #--------------------------------------------------------------------------
  50.   def refresh
  51.     self.contents.clear
  52.     for i in 0...$game_party.actors.size
  53.       actor = $game_party.actors[i]
  54.       draw_actor_graphic(actor,12,80*i+64)
  55.       self.contents.font.color = system_color
  56.       self.contents.draw_text(44, 80*i, 240, 32, actor.name)
  57.       self.contents.draw_text(0, 80*i , 240-20,32,"等级",2)
  58.       self.contents.font.color = normal_color
  59.       self.contents.draw_text(0, 80*i, 240, 32, actor.level.to_s , 2)
  60.       self.contents.font.color = system_color
  61.       self.contents.draw_text(44, 80*i+22, 45, 32, $data_system.words.hp)
  62.       self.contents.font.color = normal_color
  63.       self.contents.draw_text(44, 80*i+22, 90, 32, actor.maxhp.to_s,2)
  64.       self.contents.font.color = system_color
  65.       self.contents.draw_text(150, 80*i+22, 45, 32, $data_system.words.sp)
  66.       self.contents.font.color = normal_color
  67.       self.contents.draw_text(150, 80*i+22, 90, 32, actor.maxsp.to_s,2)   
  68.       can_learn=false
  69.       for j in $data_classes[actor.class_id].learnings
  70.         if j.skill_id == @skill.id
  71.           can_learn=true
  72.         end
  73.       end
  74.       if can_learn == true
  75.         if actor.skill_learn?(@skill.id)
  76.           self.contents.font.color = Color.new(255,255,255,128)
  77.           self.contents.draw_text(44, 80*i+44, 196, 32, "⊙此项特技已经学习⊙",2)      
  78.         else
  79.           self.contents.font.color = Color.new(255,255,0,255)
  80.           self.contents.draw_text(44, 80*i+44, 240, 32, "★此项特技尚未学习★")
  81.         end
  82.       else
  83.         self.contents.font.color = Color.new(255,255,255,128)
  84.         self.contents.draw_text(44, 80*i+44, 196, 32, "◇此项特技无法学习◇",2)      
  85.       end
  86.     end
  87.     @item_max = $game_party.actors.size
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 设置物品
  91.   #     item : 新的物品
  92.   #--------------------------------------------------------------------------
  93.   def skill=(skill)
  94.     if @skill != skill
  95.       @skill = skill
  96.       refresh
  97.     end
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 刷新光标矩形
  101.   #--------------------------------------------------------------------------
  102.   def update_cursor_rect
  103.     if @index < 0
  104.       self.cursor_rect.empty
  105.     else
  106.       self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
  107.     end
  108.   end
  109. end

  110. #==============================================================================
  111. # ■ Window_MShopBuy
  112. #------------------------------------------------------------------------------
  113. #  特技商店画面、浏览显示可以购买的商品的窗口。
  114. #==============================================================================
  115. class Window_MShopBuy < Window_Selectable
  116.   #--------------------------------------------------------------------------
  117.   # ● 初始化对像
  118.   #     shop_goods : 商品
  119.   #--------------------------------------------------------------------------
  120.   def initialize(id)
  121.     super(272, 64, 368, 416)
  122.     @id = id
  123.     refresh
  124. #    self.index = 0
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 获取物品
  128.   #--------------------------------------------------------------------------
  129.   def skill
  130.     return @data[self.index]
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 刷新
  134.   #--------------------------------------------------------------------------
  135.   def refresh
  136.     if self.contents != nil
  137.       self.contents.dispose
  138.       self.contents = nil
  139.     end
  140.     @data = []
  141.     for skill_id in @id
  142.       skill = $data_skills[skill_id]
  143.       if skill != nil
  144.         @data.push(skill)
  145.       end
  146.     end
  147.     @item_max = @data.size
  148.     if @item_max > 0
  149.       self.contents = Bitmap.new(width - 32, row_max * 32)
  150.       for i in 0...@item_max
  151.         draw_item(i)
  152.       end
  153.     end
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 描绘羡慕
  157.   #     index : 项目编号
  158.   #--------------------------------------------------------------------------
  159.   def draw_item(index)
  160.     skill = @data[index]
  161.     # 除此之外的情况设置为无效文字色
  162.     if skill.price <= $mShop_gold
  163.       self.contents.font.color = normal_color
  164.     else
  165.       self.contents.font.color = disabled_color
  166.     end
  167.     x = 4
  168.     y = index * 32
  169.     rect = Rect.new(x, y, self.width - 32, 32)
  170.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  171.     bitmap = RPG::Cache.icon(skill.icon_name)
  172.     opacity = self.contents.font.color == normal_color ? 255 : 128
  173.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  174.     self.contents.draw_text(x + 28, y, 212, 32, skill.name, 0)
  175.     self.contents.draw_text(x + 240, y, 88, 32, skill.price.to_s, 2)
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 刷新帮助文本
  179.   #--------------------------------------------------------------------------
  180.   def update_help
  181.     @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  182.   end
  183. end

  184. #==============================================================================
  185. # ■ Window_MGold
  186. #------------------------------------------------------------------------------
  187. #  显示金钱的窗口。
  188. #==============================================================================
  189. class Window_MGold < Window_Base
  190.   #--------------------------------------------------------------------------
  191.   # ● 初始化窗口
  192.   #--------------------------------------------------------------------------
  193.   def initialize
  194.     super(0, 0, 272, 64)
  195.     self.contents = Bitmap.new(width - 32, height - 32)
  196.     refresh
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 刷新
  200.   #--------------------------------------------------------------------------
  201.   def refresh
  202.     self.contents.clear
  203.     self.contents.font.color = system_color
  204.     self.contents.draw_text(0, 0 , 240,32 ,$mShop_use_1)
  205.     self.contents.font.color = normal_color
  206.     self.contents.draw_text(0, 0, 240-contents.text_size($mShop_use_2).width-6, 32, $mShop_gold.to_s, 2)
  207.     self.contents.font.color = system_color
  208.     self.contents.draw_text(0, 0, 240, 32, $mShop_use_2, 2)
  209.   end
  210. end
  211. #==============================================================================
  212. # ■ Scene_MShop
  213. #------------------------------------------------------------------------------
  214. #  处理特技商店画面的类。
  215. #==============================================================================
  216. class Scene_MShop
  217.   #--------------------------------------------------------------------------
  218.   # ● 初始化
  219.   #--------------------------------------------------------------------------
  220.   def initialize(actor_id = 1)
  221.     @actor = $game_party.actors[actor_id - 1]
  222.     @id = []
  223.     if $mShop_use_variable[actor_id - 1] == 0
  224.       $mShop_gold = $game_party.gold
  225.     else
  226.       $mShop_gold = $game_variables[$mShop_use_variable[@actor.id - 1]]
  227.     end
  228.     for i in 0... $data_classes[@actor.class_id].learnings.size
  229.       @id[i] = $data_classes[@actor.class_id].learnings[i].skill_id
  230.     end
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 主处理
  234.   #--------------------------------------------------------------------------
  235.   def main
  236.     screen = Spriteset_Map.new
  237.     # 生成帮助窗口
  238.     @help_window = Window_Help.new
  239.     @help_window.opacity = $mShop_Window_Opacity
  240.     # 生成金钱窗口
  241.     @gold_window = Window_MGold.new
  242.     @gold_window.x = 0
  243.     @gold_window.y = 416
  244.     @gold_window.opacity = $mShop_Window_Opacity
  245.     # 生成购买窗口
  246.     @buy_window = Window_MShopBuy.new(@id)
  247.     @buy_window.active = false
  248.     @buy_window.visible = true
  249.     @buy_window.help_window = @help_window
  250.     @buy_window.opacity = $mShop_Window_Opacity
  251.     # 生成状态窗口
  252.     @status_window = Window_MShopStatus.new
  253.     @status_window.visible = true
  254.     @status_window.active = true
  255.     @status_window.opacity = $mShop_Window_Opacity
  256.     # 执行过渡
  257.     Graphics.transition
  258.     # 主循环
  259.     loop do
  260.       # 刷新游戏画面
  261.       Graphics.update
  262.       # 刷新输入信息
  263.       Input.update
  264.       # 刷新画面
  265.       update
  266.       # 如果画面切换的话就中断循环
  267.       if $scene != self
  268.         break
  269.       end
  270.     end
  271.     # 准备过渡
  272.     Graphics.freeze
  273.     # 释放窗口
  274.     @help_window.dispose
  275.     @gold_window.dispose
  276.     @buy_window.dispose
  277.     @status_window.dispose
  278.     screen.dispose
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 刷新画面
  282.   #--------------------------------------------------------------------------
  283.   def update
  284.     # 刷新窗口
  285.     @help_window.update
  286.     @gold_window.update
  287.     @buy_window.update
  288.     @status_window.update
  289.     # 购买窗口激活的情况下: 调用 update_buy
  290.     if @buy_window.active
  291.       update_buy
  292.       return
  293.     end
  294.     if @status_window.active
  295.       update_status
  296.       return
  297.     end
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 刷新画面 (右侧窗口激活的情况下)
  301.   #--------------------------------------------------------------------------
  302.   def update_buy
  303.     @status_window.skill = @buy_window.skill
  304.     if Input.trigger?(Input::B)
  305.       $game_system.se_play($data_system.cancel_se)
  306.         @buy_window.active = false
  307.         @buy_window.index = -1
  308.         @status_window.active = true
  309.        return
  310.     end
  311.     if Input.trigger?(Input::C)
  312.       @skill = @buy_window.skill
  313.       if @skill == nil or @skill.price > $mShop_gold
  314.         $game_system.se_play($data_system.buzzer_se)
  315.         return
  316.       end
  317.       can_learn=false
  318.       for j in $data_classes[$game_party.actors[@status_window.index].class_id].learnings
  319.         if j.skill_id == @skill.id
  320.           can_learn=true
  321.         end
  322.       end
  323.       if can_learn==false
  324.         $game_system.se_play($data_system.cancel_se)
  325.         return
  326.       end
  327.       if $game_party.actors[@status_window.index].skill_learn?(@skill.id)
  328.         $game_system.se_play($data_system.cancel_se)
  329.         return
  330.       else
  331.         $game_system.se_play($data_system.decision_se)
  332.         if $mShop_use_variable[@actor.id - 1] == 0
  333.           $game_party.gain_gold([email protected])
  334.           $mShop_gold -= @skill.price
  335.         else
  336.           $game_variables[$mShop_use_variable[@actor.id - 1]] -= @skill.price
  337.           $mShop_gold -= @skill.price
  338.         end
  339.         $game_party.actors[@status_window.index].learn_skill(@skill.id)
  340.         @gold_window.refresh
  341.         @buy_window.refresh
  342.         @status_window.refresh
  343.         $game_system.se_play($data_system.decision_se)
  344.         @buy_window.active = false
  345.         @buy_window.index = -1
  346.         @status_window.active = true
  347.       end
  348.     end
  349.   end
  350.   #--------------------------------------------------------------------------
  351.   # ● 刷新画面 (状态窗口激活的情况下)
  352.   #--------------------------------------------------------------------------
  353.   def update_status
  354.     if Input.trigger?(Input::B)
  355.       $game_system.se_play($data_system.cancel_se)
  356.       $scene = Scene_Map.new #---改成menu
  357.     end
  358.     if Input.trigger?(Input::C)
  359.       @actor = $game_party.actors[@status_window.index]
  360.       @id = []
  361.       for i in 0... $data_classes[@actor.class_id].learnings.size
  362.         @id[i] = $data_classes[@actor.class_id].learnings[i].skill_id
  363.       end
  364.       @buy_window.dispose
  365.       @buy_window = Window_MShopBuy.new(@id)
  366.       @buy_window.help_window = @help_window
  367.       if $mShop_use_variable[@actor.id - 1] == 0
  368.         $mShop_gold = $game_party.gold
  369.       else
  370.         $mShop_gold = $game_variables[$mShop_use_variable[@actor.id - 1]]
  371.       end
  372.       @buy_window.opacity = $mShop_Window_Opacity
  373.       @status_window.refresh
  374.       @status_window.active = false
  375.       @buy_window.active = true
  376.       @buy_window.index = 0
  377.       @gold_window.refresh
  378.     end
  379.   end
  380. end
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: yzlsym    时间: 2008-3-6 01:45
哎``你不是要下星期才有空么。。。
我倒想跟你学脚本来着。。。
作者: 水迭澜    时间: 2008-3-6 01:48
是啊,不过这个脚本是我先前就改好的{/hx}
P。S 其实学脚本,多看看F1、整合一下人家的脚本就有收获了
毕竟求人不如求己,不可能别人永远帮你的




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1