Project1

标题: [子弹君翻译]技能商店脚本 [打印本页]

作者: 子弹君    时间: 2014-5-27 19:01
标题: [子弹君翻译]技能商店脚本
本帖最后由 子弹君 于 2014-5-27 19:59 编辑

CSCA Skill Shop
作者:Casper Gaming
翻译:by 子弹君
更多子弹君转载的外站脚本传送门:
https://rpg.blue/home.php?mod=space&uid=335626&do=blog&quickforward=1&id=13381
  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. 备注 :
  22. <cscaprice: X>
  23. 其中,x是技能的价格。例如,
  24. <cscaprice: 100>
  25. 技能将花费100金。
  26.  
  27. 如何设定哪些技能有的角色无法学习
  28. 默认情况下,角色可以不通过商店学习任何技能。这就需要在
  29. 角色的备注栏设置。
  30. 这样:
  31. <csca_ss_skills: X>
  32. 其中,x将是技能的ID角色可以学习。您可以输入多个技能的ID
  33. 通过使用逗号分离。
  34. 例如:
  35. <csca_ss_skills: x,y,z>
  36. 其中,x将是一个技能的ID ,Y将是另一个技能的ID ,Z将是另一个技能的
  37. ID等。例如,
  38. <csca_ss_skills: 1,2,3>
  39. 让角色来学习技能#1,#2,#3 。
  40. ============================= 结束=================================
  41. =end

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

  45.   def prepare(goods)
  46.     @goods = goods
  47.   end

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

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

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

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

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

  99.   def activate_buy_window
  100.     @buy_window.money = money
  101.     @buy_window.show.activate
  102.     @status_window.show.unselect
  103.   end

  104.   def command_buy
  105.     @dummy_window.hide
  106.     activate_buy_window
  107.   end

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

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

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

  128.   def on_number_cancel
  129.     Sound.play_cancel
  130.     end_input
  131.   end

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

  136.   def end_input
  137.     @status_window.unselect
  138.     activate_buy_window
  139.   end

  140.   def money
  141.     @gold_window.value
  142.   end

  143.   def currency_unit
  144.     @gold_window.currency_unit
  145.   end

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

  151.   def initialize(window_width)
  152.     @window_width = window_width
  153.     super(0, 0)
  154.   end

  155.   def window_width
  156.     @window_width
  157.   end

  158.   def col_max
  159.     return 2
  160.   end

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

  167.   attr_reader   :status_window

  168.   def initialize(x, y, height, shop_goods)
  169.     super(x, y, window_width, height)
  170.     @shop_goods = shop_goods
  171.     [url=home.php?mod=space&uid=26101]@Money[/url] = 0
  172.     refresh
  173.     select(0)
  174.   end

  175.   def window_width
  176.     return 304
  177.   end

  178.   def item_max
  179.     @data ? @data.size : 1
  180.   end

  181.   def item
  182.     @data[index]
  183.   end

  184.   def money=(money)
  185.     [url=home.php?mod=space&uid=26101]@Money[/url] = money
  186.     refresh
  187.   end

  188.   def current_item_enabled?
  189.     enable?(@data[index])
  190.   end

  191.   def price(item)
  192.     @price[item]
  193.   end

  194.   def enable?(item)
  195.     item && item.skill_price <= @money
  196.   end

  197.   def refresh
  198.     make_item_list
  199.     create_contents
  200.     draw_all_items
  201.   end

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

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

  220.   def status_window=(status_window)
  221.     @status_window = status_window
  222.     call_update_help
  223.   end

  224.   def update_help
  225.     @help_window.set_item(item) if @help_window
  226.     @status_window.item = item if @status_window
  227.   end
  228. end
  229. class CSCA_Window_SkillShopStatus < Window_Selectable
  230.   
  231.   def set(skill, price)
  232.     [url=home.php?mod=space&uid=260100]@skill[/url] = skill
  233.     @price = price
  234.     refresh
  235.   end

  236.   def initialize(x, y, width, height)
  237.     super(x, y, width, height)
  238.     [url=home.php?mod=space&uid=260100]@skill[/url] = nil
  239.     @page_index = 0
  240.     refresh
  241.     select(0)
  242.   end
  243.   
  244.   def item_max
  245.     @data ? @data.size : 1
  246.   end
  247.   
  248.   def item
  249.     @data[index]
  250.   end
  251.   
  252.   def item=(item)
  253.     @skill = item
  254.     refresh
  255.   end

  256.   def current_item_enabled?
  257.     enable?(@data[index])
  258.   end

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

  274.   def refresh
  275.     make_item_list
  276.     create_contents
  277.     draw_all_items
  278.   end

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

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

技能商店.jpg (59.03 KB, 下载次数: 19)

技能商店.jpg

作者: chd114    时间: 2014-5-28 04:19
不能卖差评。。。
作者: taroxd    时间: 2014-5-28 12:34
好多可爱的url……
作者: 化螺耕    时间: 2014-5-28 12:42
好厉害,膜拜一下再收藏
作者: 鑫晴    时间: 2014-5-28 12:52
我在想,如果把这个技能商店改一下,变成生活技能商店,就可以套进我那个坑咯!
作者: 永恒星你    时间: 2014-8-21 12:25
va?vx????




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