Project1

标题: 这个技能商店脚本怎么一直报错啊? [打印本页]

作者: zxc123a4s5d6    时间: 2015-6-12 21:39
标题: 这个技能商店脚本怎么一直报错啊?
如题,我是按正确的设置的
  1. =begin
  2. CSCA技能商店
  3. 版本: 1.0 (发行时间: 2012年5月24日)
  4. 作者:Casper Gaming( http://www.caspergaming.com/ )
  5. 汉化:by 子弹君

  6. 重要提示:所有CSCA脚本应该是相互兼容的,除非另有说明。

  7. 该脚本可以让您轻松地创建一个卖技能的商店。

  8. ================================说明===================================

  9. 创建一个技能商店的事件:
  10. 要创建一个技能商店,你需要在事件处做一些脚本调用。

  11. 在脚本窗口中,你需要输入3行脚本:
  12. goods= [1,2,3,4 ]
  13. SceneManager.call(CSCA_Scene_Skill_Shop)
  14. SceneManager.scene.prepare(goods)
  15. 第一行可以更改ID。该数字对应技能的ID 。
  16. 在这个例子中,#1,# 2,#3 ,#4将被出售。
  17. 最后两个脚本代码不需要变动

  18. 如何设置技能价格
  19. 技能的价格通过技能备注设置。在技能备注框中,输入此
  20. 备注 :
  21. <cscaprice: X>
  22. 其中,x是技能的价格。例如,
  23. <cscaprice: 100>
  24. 技能将花费100金。

  25. 如何设定哪些技能有的角色无法学习
  26. 默认情况下,角色可以不通过商店学习任何技能。这就需要在
  27. 角色的备注栏设置。
  28. 这样:
  29. <csca_ss_skills: X>
  30. 其中,x将是技能的ID角色可以学习。您可以输入多个技能的ID
  31. 通过使用逗号分离。
  32. 例如:
  33. <csca_ss_skills: x,y,z>
  34. 其中,x将是一个技能的ID ,Y将是另一个技能的ID ,Z将是另一个技能的
  35. ID等。例如,
  36. <csca_ss_skills: 1,2,3>
  37. 让角色来学习技能#1,#2,#3 。
  38. ============================= 结束=================================
  39. =end

  40. $imported = {} if $imported.nil?
  41. $imported["CSCA-SkillShop"] = true
  42. class CSCA_Scene_Skill_Shop < Scene_MenuBase

  43.   def prepare(goods)
  44.     @goods = goods
  45.   end

  46.   def start
  47.     super
  48.     create_help_window
  49.     create_gold_window
  50.     create_command_window
  51.     create_dummy_window
  52.     create_status_window
  53.     create_buy_window
  54.   end

  55.   def create_gold_window
  56.     @gold_window = Window_Gold.new
  57.     @gold_window.viewport = @viewport
  58.     @gold_window.x = Graphics.width - @gold_window.width
  59.     @gold_window.y = @help_window.height
  60.   end

  61.   def create_command_window
  62.     @command_window = CSCA_Window_SkillShopCommand.new(@gold_window.x)
  63.     @command_window.viewport = @viewport
  64.     @command_window.y = @help_window.height
  65.     @command_window.set_handler(:buy,    method(:command_buy))
  66.     @command_window.set_handler(:cancel, method(:return_scene))
  67.   end

  68.   def create_dummy_window
  69.     wy = @command_window.y + @command_window.height
  70.     wh = Graphics.height - wy
  71.     @dummy_window = Window_Base.new(0, wy, Graphics.width, wh)
  72.     @dummy_window.viewport = @viewport
  73.   end

  74.   def create_buy_window
  75.     wy = @dummy_window.y
  76.     wh = @dummy_window.height
  77.     @buy_window = CSCA_Window_SkillShopBuy.new(0, wy, wh, @goods)
  78.     @buy_window.viewport = @viewport
  79.     @buy_window.help_window = @help_window
  80.     @buy_window.status_window = @status_window
  81.     @buy_window.hide
  82.     @buy_window.set_handler(:ok,     method(:on_buy_ok))
  83.     @buy_window.set_handler(:cancel, method(:on_buy_cancel))
  84.   end
  85.   
  86.   def create_status_window
  87.     wx = 304
  88.     wy = @dummy_window.y
  89.     ww = Graphics.width - wx
  90.     wh = @dummy_window.height
  91.     @status_window = CSCA_Window_SkillShopStatus.new(wx, wy, ww, wh)
  92.     @status_window.viewport = @viewport
  93.     @status_window.hide
  94.     @status_window.set_handler(:ok,     method(:on_number_ok))
  95.     @status_window.set_handler(:cancel, method(:on_number_cancel))
  96.   end

  97.   def activate_buy_window
  98.     @buy_window.money = money
  99.     @buy_window.show.activate
  100.     @status_window.show.unselect
  101.   end

  102.   def command_buy
  103.     @dummy_window.hide
  104.     activate_buy_window
  105.   end

  106.   def on_buy_ok
  107.     @item = @buy_window.item
  108.     @buy_window.deactivate
  109.     @status_window.set(@item, buying_price)
  110.     @status_window.show.activate.select(0)
  111.   end

  112.   def on_buy_cancel
  113.     @command_window.activate
  114.     @dummy_window.show
  115.     @buy_window.hide
  116.     @status_window.hide
  117.     @help_window.clear
  118.   end

  119.   def on_number_ok
  120.     Sound.play_shop
  121.     do_buy(@status_window.item,@buy_window.item)
  122.     end_input
  123.     @gold_window.refresh
  124.     @status_window.refresh
  125.   end

  126.   def on_number_cancel
  127.     Sound.play_cancel
  128.     end_input
  129.   end

  130.   def do_buy(actor, skill)
  131.     $game_party.lose_gold(buying_price)
  132.     $game_actors[actor.id].learn_skill(skill.id)
  133.   end

  134.   def end_input
  135.     @status_window.unselect
  136.     activate_buy_window
  137.   end

  138.   def money
  139.     @gold_window.value
  140.   end

  141.   def currency_unit
  142.     @gold_window.currency_unit
  143.   end

  144.   def buying_price
  145.     @buy_window.price(@item)
  146.   end
  147. end
  148. class CSCA_Window_SkillShopCommand < Window_HorzCommand

  149.   def initialize(window_width)
  150.     @window_width = window_width
  151.     super(0, 0)
  152.   end

  153.   def window_width
  154.     @window_width
  155.   end

  156.   def col_max
  157.     return 2
  158.   end

  159.   def make_command_list
  160.     add_command(Vocab::ShopBuy,    :buy)
  161.     add_command(Vocab::ShopCancel, :cancel)
  162.   end
  163. end
  164. class CSCA_Window_SkillShopBuy < Window_Selectable

  165.   attr_reader   :status_window

  166.   def initialize(x, y, height, shop_goods)
  167.     super(x, y, window_width, height)
  168.     @shop_goods = shop_goods
  169.     @Money = 0
  170.     refresh
  171.     select(0)
  172.   end

  173.   def window_width
  174.     return 304
  175.   end

  176.   def item_max
  177.     @data ? @data.size : 1
  178.   end

  179.   def item
  180.     @data[index]
  181.   end

  182.   def money=(money)
  183.     @Money = money
  184.     refresh
  185.   end

  186.   def current_item_enabled?
  187.     enable?(@data[index])
  188.   end

  189.   def price(item)
  190.     @price[item]
  191.   end

  192.   def enable?(item)
  193.     item && item.skill_price <= @money
  194.   end

  195.   def refresh
  196.     make_item_list
  197.     create_contents
  198.     draw_all_items
  199.   end

  200.   def make_item_list
  201.     @data = []
  202.     @price = {}
  203.     for i in 0...@shop_goods.size
  204.       item = $data_skills[@shop_goods[i]]
  205.       if item
  206.         @data.push(item)
  207.         @price[item] = item.skill_price
  208.       end
  209.     end
  210.   end

  211.   def draw_item(index)
  212.     item = @data[index]
  213.     rect = item_rect(index)
  214.     draw_item_name(item, rect.x, rect.y, enable?(item))
  215.     rect.width -= 4
  216.     draw_text(rect, price(item), 2)
  217.   end

  218.   def status_window=(status_window)
  219.     @status_window = status_window
  220.     call_update_help
  221.   end

  222.   def update_help
  223.     @help_window.set_item(item) if @help_window
  224.     @status_window.item = item if @status_window
  225.   end
  226. end
  227. class CSCA_Window_SkillShopStatus < Window_Selectable
  228.   
  229.   def set(skill, price)
  230.     @skill = skill
  231.     @price = price
  232.     refresh
  233.   end

  234.   def initialize(x, y, width, height)
  235.     super(x, y, width, height)
  236.     @skill = nil
  237.     @page_index = 0
  238.     refresh
  239.     select(0)
  240.   end
  241.   
  242.   def item_max
  243.     @data ? @data.size : 1
  244.   end
  245.   
  246.   def item
  247.     @data[index]
  248.   end
  249.   
  250.   def item=(item)
  251.     @skill = item
  252.     refresh
  253.   end

  254.   def current_item_enabled?
  255.     enable?(@data[index])
  256.   end

  257.   def enable?(actor)
  258.     for i in 0...actor.skills.size
  259.       if actor.skills[i] == @skill
  260.         return false
  261.       end
  262.     end
  263.     for i in 0...actor.csca_learnable_skills.size
  264.       unless @skill.nil?
  265.         if actor.csca_learnable_skills[i] == @skill.id
  266.           return true
  267.         end
  268.       end
  269.     end
  270.     return false
  271.   end

  272.   def refresh
  273.     make_item_list
  274.     create_contents
  275.     draw_all_items
  276.   end

  277.   def make_item_list
  278.     @data = []
  279.     $game_party.members.each do |actor|
  280.       item = actor
  281.       if !item.nil?
  282.         @data.push(item)
  283.       end
  284.     end
  285.   end

  286.   def draw_item(index)
  287.     item = @data[index]
  288.     rect = item_rect(index)
  289.     change_color(normal_color, enable?(item))
  290.     draw_text(rect.x, rect.y, contents.width, line_height, item.name)
  291.     change_color(normal_color)
  292.   end
  293. end
  294. class RPG::Skill < RPG::UsableItem
  295.   def skill_price
  296.     if @note =~ /<cscaprice: (.*)>/i
  297.       return $1.to_i
  298.     else
  299.       return 0
  300.     end
  301.   end
  302. end
  303. class RPG::Actor < RPG::BaseItem
  304.   def learnable_skills
  305.     if @note =~ /<csca_ss_skills: (.*)>/i
  306.       ints = []
  307.       for x in $1.split(",")
  308.         ints.push(x.to_i)
  309.       end
  310.       return ints
  311.     else
  312.       return []
  313.     end
  314.   end
  315. end
  316. class Game_Actor < Game_Battler
  317.   def csca_learnable_skills
  318.     actor.learnable_skills
  319.   end
  320. end
复制代码

作者: taroxd    时间: 2015-6-12 21:42
把第200行和第218行改成小写试试看




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