Project1

标题: 成就系统的问题~ [打印本页]

作者: 露璐    时间: 2011-10-29 18:56
标题: 成就系统的问题~
本帖最后由 露璐 于 2011-11-3 12:11 编辑

怎么实现成就系统?最好还能在屏幕边缘显示获得成就的信息,谢谢大家
(战斗几次、打开XX开关,变量多少获得成就)dsu_plus_rewardpost_czw
作者: 暗黑骑士    时间: 2011-10-29 22:36
不懂写脚本就干脆拿事件做了……
比如当一个成就开启时就打开一个开关
然后用条件分歧判断是否出现成就
再用显示图片……
作者: zjd540921697    时间: 2011-11-2 21:51
lz是不是要这个
  1. #============================================================================
  2. # ☆ 仿传说称号系统。
  3. #    由feizhaodan制作。
  4. #    发布于66RPG
  5. #    http://rpg.blue/
  6. #    版本号: 1.2.2
  7. #    添加内容:
  8. #    1.2.2
  9. #     1.在升级时重新计算百分比增加的属性量。
  10. #     2.在失去称号时若失去的是当前装备,则将称号ID改回默认,并重设属性。
  11. #     3.增加新方法:refresh_appellation。
  12. #    1.2.1
  13. #     修正qwrffdtqfsd 提出的在满HPMP状态下降低HPMP上限会使
  14. #     HPMP超过上限。
  15. #    1.2.0
  16. #     修正若称号说明超过1行,显示不完整。
  17. #    1.1.0
  18. #     增加从状态画面进入各角色的称号装备界面的功能。
  19. #    2011/10/22
  20. #    转载时请连同这里一起转
  21. #============================================================================
  22. #==============================================================================
  23. # ■ Kien::Appellation
  24. #------------------------------------------------------------------------------
  25. #  称号系统。(新模块)(设置内容)
  26. #==============================================================================
  27. module Kien
  28. module Appellation
  29.   
  30.   
  31.   # 不要该这里。
  32.   APPELLATION = []
  33.   
  34.   # 从这里开始设置。
  35.   # 先在这里按例子添加。
  36.   # 格式:
  37.   # APPELLATION[actor_id] = []
  38.   # 在actor_id内填入你的角色ID。把所有你的游戏里的角色都添加一次。
  39.   APPELLATION[1] =[]
  40.   
  41.   # 这里开始一个一个设置。
  42.   # 格式: APPELLATION[actor_id][id] = ["STn[%]|STn[%]", "name", "str"]
  43.   # actor_id填入要设置的角色ID
  44.   # id填入要设置的称号ID。0为预设。
  45.   # ["ST=n|ST=n", "str"]
  46.   # ST表示装备此称号时增加的属性(ATK,DEF,AGI,SPI,HP,SP,EXP,GOLD)
  47.   # 用"|"隔开。可以填写多个。
  48.   # n表示增加量,%可填可不填,填的场合为百分比,不填为那个数量。可以是负数。
  49.   # 其中EXP和GOLD表示获取时增加的量,固定为%。
  50.   # name表示这个称号的名字
  51.   # str表示这个称号的说明。
  52.   # 三个内容的""要留着。
  53.   # 例:
  54.   # 一个没有属性加成的预设称号
  55.   APPELLATION[1][0] = ["", "见习剑士", "还在修炼中的剑士"]
  56.   
  57.   # 一个增加5点HP的一号称号
  58.   APPELLATION[1][1] = ["HP5", "强壮", "表示你拥有强壮体制的称号"]
  59.   
  60.   # 一个增加10点ATK,5点DEF的称号
  61.   APPELLATION[1][2] = ["ATK10|DEF5", "剑士", "已经完成修炼的剑士"]
  62.   
  63.   # 一个将所有属性乘10倍的称号。
  64.   APPELLATION[1][3] = ["HP1000%|MP1000%|ATK1000%|DEF1000%|SPI1000%|AGI1000%", "挑战者", "给敢于挑战未知的人的称号。"]
  65.   
  66.   
  67.   # 选项添加在哪,
  68.   # 1为菜单,2为状态窗口内,0为不使用。
  69.   ADD_APPELLATION_COMMAND = 2
  70.   
  71.   # 选项名称。
  72.   APPELLATION_COMMANDNAME = "称号"
  73.   
  74.   # 称号属性名
  75.   APPELLATION_NAME = "称号"
  76.   
  77.   # 未开放称号名
  78.   UNENABLE_NAME = "-------"
  79. end
  80. end

  81. #★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼
  82. # 已下为脚本。 不会编脚本的修改之前请备份。
  83. #★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼

  84. module Kien
  85. module Regexp
  86.   module Appellation
  87.     # 称号附加属性判定
  88.     STATUS = /(HP|MP|ATK|DEF|SPI|AGI|EXP|GOLD)?([\+\-]?\d+)([%])?/i
  89.   end # Appellation
  90. end # Regexp
  91. end # Kien

  92. module Kien::Appellation
  93.   
  94.   APPE_INFO = Struct.new("Appe_Info", :param, :name, :description, :enable)
  95.   
  96.   module_function
  97.   #--------------------------------------------------------------------------
  98.   # ● 获取称号属性
  99.   #     actor_id : 角色 ID
  100.   #     id       : 称号 ID
  101.   #--------------------------------------------------------------------------
  102.   def got_appe_param(actor_id, id)
  103.     param = []
  104.     APPELLATION[actor_id][id][0].split(/\|/).each{ |str|
  105.     case str
  106.     when Kien::Regexp::Appellation::STATUS
  107.       param.push [$1, $2.to_i, $3]
  108.     end
  109.     }
  110.     return param
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 将称号属性构建体化
  114.   #     actor_id : 角色 ID
  115.   #--------------------------------------------------------------------------
  116.   def construct_appe_data(actor_id)
  117.     appe = []
  118.     i = 0
  119.     APPELLATION[actor_id].each { |v|
  120.     info = APPE_INFO.new
  121.     info.param = got_appe_param(actor_id, i)
  122.     info.name = v[1]
  123.     info.description = v[2]
  124.     info.enable = (i == 0)
  125.     appe[i] = info
  126.     i += 1
  127.     }
  128.     return appe
  129.   end
  130. end # Kien
  131. module Kien
  132.   module Command
  133.     module_function
  134.     def get_appellation(actor_id, id)
  135.       $game_actors[actor_id].get_appellation(id)
  136.       return true
  137.     end
  138.    
  139.     def lose_appellation(actor_id, id)
  140.       $game_actors[actor_id].lose_appellation(id)
  141.       return true
  142.     end
  143.    
  144.     def call_equip_appellation(actor_index = 1)
  145.       $scene = Scene_Appellation.new(
  146.           actor_index,
  147.           0,
  148.           1)
  149.       return true
  150.     end
  151.    
  152.     def have_appellation(actor_id, id, sid = 0)
  153.       $game_switches[sid] = $game_actors[actor_id].appellation_list[id].enable
  154.       return $game_actors[actor_id].appellation_list[id].enable
  155.     end
  156.    
  157.     def equip_appellation(actor_id, id, sid = 0)
  158.       $game_switches[sid] = ($game_actors[actor_id].appellation_id == id)
  159.       return ($game_actors[actor_id].appellation_id == id)
  160.     end

  161.     def have_howmany_appellation(actor_id, vid = 0)
  162.       n = 0
  163.       for appe in $game_actors[actor_id].appellation_list
  164.         if appe.enable == true
  165.           n += 1
  166.         else
  167.           next
  168.         end
  169.       end
  170.       $game_variables[vid] = n
  171.       return n
  172.     end
  173.   end
  174. end
  175. #==============================================================================
  176. # ■ Game_Interpreter
  177. #------------------------------------------------------------------------------
  178. #  执行事件命令的解释器。本类在 Game_Map 类、Game_Troop 类、与
  179. # Game_Event 类的内部使用。
  180. #==============================================================================

  181. class Game_Interpreter
  182. include Kien::Command
  183. end

  184. #==============================================================================
  185. # ■ Vocab
  186. #------------------------------------------------------------------------------
  187. #  定义了用语和信息。将部分资料定义为常量。用语部分来自于$data_system。
  188. #==============================================================================

  189. module Vocab
  190.   def self.appellation
  191.     return Kien::Appellation::APPELLATION_NAME
  192.   end
  193.   
  194.   def self.appellation_command_name
  195.     return Kien::Appellation::APPELLATION_COMMANDNAME
  196.   end
  197. end
  198. #★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼
  199. # 华丽的分割线
  200. #★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼

  201. #==============================================================================
  202. # ■ Game_Actor
  203. #------------------------------------------------------------------------------
  204. #  处理角色的类。本类在 Game_Actors 类 ($game_actors) 的内部使用、
  205. # Game_Party 类请参考 ($game_party) 。
  206. #==============================================================================

  207. class Game_Actor < Game_Battler
  208.   
  209.     APPE_INFO = Struct.new("Appe_Info", :param, :name, :description, :enable)
  210.   alias appellation_setup setup
  211.   #--------------------------------------------------------------------------
  212.   # ● 定义实例变量
  213.   #--------------------------------------------------------------------------
  214.   attr_accessor :appellation_id
  215.   attr_reader   :appe_gold
  216.   #--------------------------------------------------------------------------
  217.   # ● 设置
  218.   #     actor_id : 角色 ID
  219.   #--------------------------------------------------------------------------
  220.   def setup(actor_id)
  221.     @appe_hp = 0
  222.     @appe_mp = 0
  223.     @appe_atk = 0
  224.     @appe_def = 0
  225.     @appe_spi = 0
  226.     @appe_agi = 0
  227.     @appe_gold = 0
  228.     @appe_exp = 0
  229.     appellation_setup(actor_id)
  230.     @appellation_list = Kien::Appellation.construct_appe_data(actor_id)
  231.     @appellation_id = 0
  232.     create_appe_param
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● 获取称号列表
  236.   #--------------------------------------------------------------------------
  237.   def appellation_list
  238.     return @appellation_list
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 获取称号内容
  242.   #--------------------------------------------------------------------------
  243.   def appellation
  244.     return @appellation_list[@appellation_id]
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ● 获取新称号
  248.   #--------------------------------------------------------------------------
  249.   def get_appellation(id)
  250.     @appellation_list[id].enable = true
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● 失去称号
  254.   #--------------------------------------------------------------------------
  255.   def lose_appellation(id)
  256.     return if id == 0
  257.     @appellation_list[id].enable = false
  258.     if @appellation_id == id
  259.       @appllation_id = 0
  260.       refresh_appellation
  261.     end
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● 更新称号
  265.   #--------------------------------------------------------------------------
  266.   def refresh_appellation
  267.     create_appe_param
  268.     @mp = [@mp, self.maxmp].min
  269.     @hp = [@hp, self.maxhp].min
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 更换称号
  273.   #--------------------------------------------------------------------------
  274.   def change_appellation(appe_id)
  275.     @appellation_id = appe_id
  276.     refresh_appellation
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 获取称号内容
  280.   #--------------------------------------------------------------------------
  281.   def create_appe_param
  282.     @appe_hp = 0
  283.     @appe_mp = 0
  284.     @appe_atk = 0
  285.     @appe_def = 0
  286.     @appe_spi = 0
  287.     @appe_agi = 0
  288.     @appe_gold = 0
  289.     @appe_exp = 0
  290.     if appellation.param.empty?
  291.     else
  292.       for i in appellation.param
  293.         case i[0]
  294.         when /HP/i
  295.           @appe_hp = i[1]
  296.           @appe_hpper = i[2] == nil ? false : true
  297.         when /MP/i
  298.           @appe_mp = i[1]
  299.           @appe_mpper = i[2] == nil ? false : true
  300.         when /ATK/i
  301.           @appe_atk = i[1]
  302.           @appe_atkper = i[2] == nil ? false : true
  303.         when /DEF/i
  304.           @appe_def = i[1]
  305.           @appe_defper = i[2] == nil ? false : true
  306.         when /SPI/i
  307.           @appe_spi = i[1]
  308.           @appe_spiper = i[2] == nil ? false : true
  309.         when /AGI/i
  310.           @appe_agi = i[1]
  311.           @appe_agiper = i[2] == nil ? false : true
  312.         when /GOLD/i
  313.           @appe_gold = i[1]
  314.           @appe_goldper = i[2] == nil ? false : true
  315.         when /EXP/i
  316.           @appe_exp = i[1]
  317.           @appe_expper = i[2] == nil ? false : true
  318.         else
  319.           next
  320.         end
  321.       end
  322.     end
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 获取基本体力最大值
  326.   #--------------------------------------------------------------------------
  327.   alias appellation_base_maxhp base_maxhp
  328.   def base_maxhp
  329.     n = appellation_base_maxhp
  330.     if @appe_hpper == true
  331.       n += actor.parameters[0, @level] * @appe_hp / 100
  332.     else
  333.       n += @appe_hp
  334.     end
  335.     return n
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 获取基本魔力最大值
  339.   #--------------------------------------------------------------------------
  340.   alias appellation_base_maxmp base_maxmp
  341.   def base_maxmp
  342.     n = appellation_base_maxmp
  343.     if @appe_mpper == true
  344.       n += actor.parameters[1, @level] * @appe_mp / 100
  345.     else
  346.       n += @appe_mp
  347.     end
  348.     return n
  349.   end
  350.   #--------------------------------------------------------------------------
  351.   # ● 获取基本攻击力
  352.   #--------------------------------------------------------------------------
  353.   alias appellation_base_atk base_atk
  354.   def base_atk
  355.     n = appellation_base_atk
  356.     if @appe_atkper == true
  357.       n += actor.parameters[2, @level] * @appe_atk / 100
  358.     else
  359.       n += @appe_atk
  360.     end
  361.     return n
  362.   end
  363.   #--------------------------------------------------------------------------
  364.   # ● 获取基本防御力
  365.   #--------------------------------------------------------------------------
  366.   alias appellation_base_def base_def
  367.   def base_def
  368.     n = appellation_base_def
  369.     if @appe_defper == true
  370.       n += actor.parameters[3, @level] * @appe_def / 100
  371.     else
  372.       n += @appe_def
  373.     end
  374.     return n
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # ● 获取基本精神力
  378.   #--------------------------------------------------------------------------
  379.   alias appellation_base_spi base_spi
  380.   def base_spi
  381.     n = appellation_base_spi
  382.     if @appe_spiper == true
  383.       n += actor.parameters[4, @level] * @appe_spi / 100
  384.     else
  385.       n += @appe_spi
  386.     end
  387.     return n
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # ● 获取基本敏捷
  391.   #--------------------------------------------------------------------------
  392.   alias appellation_base_agi base_agi
  393.   def base_agi
  394.     n = appellation_base_agi
  395.     if @appe_agiper == true
  396.       n += actor.parameters[5, @level] * @appe_agi / 100
  397.     else
  398.       n += @appe_agi
  399.     end
  400.     return n
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● 获取经验(获取双倍经验值用)
  404.   #     exp  : 经验值量
  405.   #     show : 显示等级提示标志
  406.   #--------------------------------------------------------------------------
  407.   alias appellation_gain_exp gain_exp
  408.   def gain_exp(exp, show)
  409.     exp += exp * @appe_exp / 100
  410.     appellation_gain_exp(exp, show)
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # ● 升级
  414.   #--------------------------------------------------------------------------
  415.   alias appellation_level_up level_up
  416.   def level_up
  417.     appellation_level_up
  418.     refresh_appellation
  419.   end
  420. end
  421. #==============================================================================
  422. # ■ Game_Troop
  423. #------------------------------------------------------------------------------
  424. #  处理敌人队伍和战斗相关资料的类,也可执行如战斗事件管理之类的功能。
  425. # 本类的实例请参考 $game_troop。
  426. #==============================================================================

  427. class Game_Troop < Game_Unit
  428.   alias appellation_gold_total gold_total
  429.   #--------------------------------------------------------------------------
  430.   # ● 计算金钱总数
  431.   #--------------------------------------------------------------------------
  432.   def gold_total
  433.     gold = appellation_gold_total
  434.     per = $game_party.appe_gold_per
  435.     gold += gold * per / 100
  436.     return gold
  437.   end
  438. end
  439. #==============================================================================
  440. # ■ Game_Party
  441. #------------------------------------------------------------------------------
  442. #  处理同伴的类。包含金钱以及物品的信息。本类的实例请参考 $game_party。
  443. #==============================================================================

  444. class Game_Party < Game_Unit
  445.   #--------------------------------------------------------------------------
  446.   # ● 计算称号金钱获得影响量
  447.   #--------------------------------------------------------------------------
  448.   def appe_gold_per
  449.     per = 0
  450.     for member in members
  451.       per += member.appe_gold
  452.     end
  453.     return per
  454.   end
  455. end

  456. #★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼
  457. # 华丽的分割线2
  458. # 以下插入指令的方法从KGC的脚本内取出。版权归KGC
  459. #★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼
  460. #==============================================================================
  461. # ■ Window_Command
  462. #==============================================================================

  463. class Window_Command < Window_Selectable
  464.   unless method_defined?(:add_command)
  465.   #--------------------------------------------------------------------------
  466.   # ○ コマンドを追加
  467.   #    追加した位置を返す
  468.   #--------------------------------------------------------------------------
  469.   def add_command(command)
  470.     @commands << command
  471.     @item_max = @commands.size
  472.     item_index = @item_max - 1
  473.     refresh_command
  474.     draw_item(item_index)
  475.     return item_index
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ○ コマンドをリフレッシュ
  479.   #--------------------------------------------------------------------------
  480.   def refresh_command
  481.     buf = self.contents.clone
  482.     self.height = [self.height, row_max * WLH + 32].max
  483.     create_contents
  484.     self.contents.blt(0, 0, buf, buf.rect)
  485.     buf.dispose
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ○ コマンドを挿入
  489.   #--------------------------------------------------------------------------
  490.   def insert_command(index, command)
  491.     @commands.insert(index, command)
  492.     @item_max = @commands.size
  493.     refresh_command
  494.     refresh
  495.   end
  496.   #--------------------------------------------------------------------------
  497.   # ○ コマンドを削除
  498.   #--------------------------------------------------------------------------
  499.   def remove_command(command)
  500.     @commands.delete(command)
  501.     @item_max = @commands.size
  502.     refresh
  503.   end
  504.   end
  505. end
  506. #==============================================================================
  507. # ■ Scene_Menu
  508. #==============================================================================

  509. class Scene_Menu < Scene_Base
  510.   if Kien::Appellation::ADD_APPELLATION_COMMAND == 1
  511.   #--------------------------------------------------------------------------
  512.   # ● コマンドウィンドウの作成
  513.   #--------------------------------------------------------------------------
  514.   alias create_command_window_appellation create_command_window
  515.   def create_command_window
  516.     create_command_window_appellation
  517.     @command_appellation_index =
  518.       @command_window.add_command(Vocab.appellation_command_name)
  519.     if @command_window.oy > 0
  520.       @command_window.oy -= Window_Base::WLH
  521.     end
  522.     @command_window.index = @menu_index
  523.   end
  524.   end
  525.   #--------------------------------------------------------------------------
  526.   # ● コマンド選択の更新
  527.   #--------------------------------------------------------------------------
  528.   alias update_command_selection_appellation update_command_selection
  529.   def update_command_selection
  530.     call_distribute_parameter_flag = false
  531.     if Input.trigger?(Input::C)
  532.       case @command_window.index
  533.       when @command_appellation_index  # パラメータ振り分け
  534.         call_appellation_flag = true
  535.       end
  536.     end

  537.     # パラメータ振り分け画面に移行
  538.     if call_appellation_flag
  539.       if $game_party.members.size == 0
  540.         Sound.play_buzzer
  541.         return
  542.       end
  543.       Sound.play_decision
  544.       start_actor_selection
  545.       return
  546.     end

  547.     update_command_selection_appellation
  548.   end
  549.   #--------------------------------------------------------------------------
  550.   # ● アクター選択の更新
  551.   #--------------------------------------------------------------------------
  552.   alias update_actor_selection_appellation update_actor_selection
  553.   def update_actor_selection
  554.     if Input.trigger?(Input::C)
  555.       $game_party.last_actor_index = @status_window.index
  556.       Sound.play_decision
  557.       case @command_window.index
  558.       when @command_appellation_index  # 更换称号。
  559.         $scene = Scene_Appellation.new(
  560.           @status_window.index,
  561.           @command_appellation_index,
  562.           Kien::Appellation::ADD_APPELLATION_COMMAND)
  563.         return
  564.       end
  565.     end

  566.     update_actor_selection_appellation
  567.   end
  568. end
  569. #★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼
  570. # 华丽的分割线3号
  571. # 以下回归原创
  572. #★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼★☆●○▲△■□▼
  573. #==============================================================================
  574. # ■ Window_Base
  575. #------------------------------------------------------------------------------
  576. #  游戏中全部窗口的超级类。
  577. #==============================================================================

  578. class Window_Base < Window
  579.   #--------------------------------------------------------------------------
  580.   # ● 绘制角色称号
  581.   #     actor : 角色
  582.   #     x     : 描画目标 X 坐标
  583.   #     y     : 描画目标 Y 坐标
  584.   #--------------------------------------------------------------------------
  585.   def draw_actor_appellation(actor, x, y)
  586.     self.contents.font.color = normal_color
  587.     self.contents.draw_text(x, y, 108, WLH, actor.appellation.name)
  588.   end
  589. end
  590. #==============================================================================
  591. # ■ Window_AppellationStatus
  592. #------------------------------------------------------------------------------
  593. #  更换称号时显示角色能力值变化的窗口。
  594. #==============================================================================

  595. class Window_AppellationStatus < Window_Base
  596.   #--------------------------------------------------------------------------
  597.   # ● 初始化对像
  598.   #     x      : 窗口 X 座标
  599.   #     y      : 窗口 Y 座标
  600.   #     actor  : 角色
  601.   #--------------------------------------------------------------------------
  602.   def initialize(actor)
  603.     super(0, 0, 208, 316)
  604.     @actor = actor
  605.     refresh
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● 刷新
  609.   #--------------------------------------------------------------------------
  610.   def refresh
  611.     self.contents.clear
  612.     draw_actor_name(@actor, 4, 0)
  613.     draw_actor_face(@actor, 0, WLH * 1)
  614.     draw_actor_appellation(@actor, 0, WLH * 2 + 72)
  615.     draw_parameter(0, WLH * 3 + 72, 4)
  616.     draw_parameter(0, WLH * 4 + 72, 5)
  617.     draw_parameter(0, WLH * 5 + 72, 0)
  618.     draw_parameter(0, WLH * 6 + 72, 1)
  619.     draw_parameter(0, WLH * 7 + 72, 2)
  620.     draw_parameter(0, WLH * 8 + 72, 3)
  621.   end
  622.   #--------------------------------------------------------------------------
  623.   # ● 设置装备後的能力值
  624.   #     new_atk : 装备後的攻击力
  625.   #     new_def : 装备後的防御力
  626.   #     new_spi : 装备後的精神力
  627.   #     new_agi : 装备後的敏捷
  628.   #--------------------------------------------------------------------------
  629.   def set_new_parameters(new_atk, new_def, new_spi, new_agi, new_hp, new_mp)
  630.     if @new_atk != new_atk or @new_def != new_def or
  631.        @new_spi != new_spi or @new_agi != new_agi
  632.       @new_atk = new_atk
  633.       @new_def = new_def
  634.       @new_spi = new_spi
  635.       @new_agi = new_agi
  636.       @new_hp = new_hp
  637.       @new_mp = new_mp
  638.       refresh
  639.     end
  640.   end
  641.   #--------------------------------------------------------------------------
  642.   # ● 获取装备後的能力值文字颜色
  643.   #     old_value : 装备前的能力值
  644.   #     new_value : 装备後的能力值
  645.   #--------------------------------------------------------------------------
  646.   def new_parameter_color(old_value, new_value)
  647.     if new_value > old_value      # 增强
  648.       return power_up_color
  649.     elsif new_value == old_value  # 不变
  650.       return normal_color
  651.     else                          # 减弱
  652.       return power_down_color
  653.     end
  654.   end
  655.   #--------------------------------------------------------------------------
  656.   # ● 绘制能力值
  657.   #     x    : 绘制点 X 座标
  658.   #     y    : 绘制点 Y 座标
  659.   #     type : 能力值 (0:攻击力、1:防御力、2:精神力、3:敏捷)
  660.   #--------------------------------------------------------------------------
  661.   def draw_parameter(x, y, type)
  662.     case type
  663.     when 0
  664.       name = Vocab::atk
  665.       value = @actor.atk
  666.       new_value = @new_atk
  667.     when 1
  668.       name = Vocab::def
  669.       value = @actor.def
  670.       new_value = @new_def
  671.     when 2
  672.       name = Vocab::spi
  673.       value = @actor.spi
  674.       new_value = @new_spi
  675.     when 3
  676.       name = Vocab::agi
  677.       value = @actor.agi
  678.       new_value = @new_agi
  679.     when 4
  680.       name = "最大" + Vocab::hp
  681.       value = @actor.maxhp
  682.       new_value = @new_hp
  683.     when 5
  684.       name = "最大" + Vocab::mp
  685.       value = @actor.maxmp
  686.       new_value = @new_mp
  687.     end
  688.     self.contents.font.color = system_color
  689.     self.contents.draw_text(x + 4, y, 80, WLH, name)
  690.     self.contents.font.color = normal_color
  691.     self.contents.draw_text(x + 90, y, 30, WLH, value, 2)
  692.     if new_value != nil
  693.       self.contents.font.color = system_color
  694.       self.contents.draw_text(x + 122, y, 20, WLH, ">", 1)
  695.       self.contents.font.color = new_parameter_color(value, new_value)
  696.       self.contents.draw_text(x + 142, y, 30, WLH, new_value, 2)
  697.     end
  698.   end
  699. end
  700. #==============================================================================
  701. # ■ Window_SelectAppellation
  702. #------------------------------------------------------------------------------
  703. #  选择称号的窗口。
  704. #==============================================================================

  705. class Window_SelectAppellation < Window_Selectable
  706.   #--------------------------------------------------------------------------
  707.   # ● 初始化对像
  708.   #     actor  : 角色
  709.   #--------------------------------------------------------------------------
  710.   def initialize(actor)
  711.     @actor = actor
  712.     super(208, 0, 336, 316)
  713.     @column_max = 2
  714.     self.index = 0
  715.     self.active = true
  716.     refresh
  717.   end
  718.   #--------------------------------------------------------------------------
  719.   # ● 刷新
  720.   #--------------------------------------------------------------------------
  721.   def refresh
  722.     @appellation_list = @actor.appellation_list
  723.     @item_max = @appellation_list.size
  724.     create_contents
  725.     for i in 0...@item_max
  726.       draw_item(i)
  727.     end
  728.   end
  729.   #--------------------------------------------------------------------------
  730.   # ● 获取称号
  731.   #--------------------------------------------------------------------------
  732.   def appellation
  733.     return @appellation_list[self.index]
  734.   end
  735.   #--------------------------------------------------------------------------
  736.   # ● 描绘项目
  737.   #     index : 项目编号
  738.   #--------------------------------------------------------------------------
  739.   def draw_item(index)
  740.     rect = item_rect(index)
  741.     self.contents.clear_rect(rect)
  742.     appe = @appellation_list[index]
  743.     if appe.enable == true
  744.       self.contents.font.color = normal_color
  745.       self.contents.font.color.alpha = 255
  746.       self.contents.draw_text(rect, appe.name, 1)
  747.     else
  748.       self.contents.font.color = normal_color
  749.       self.contents.font.color.alpha = 128
  750.       self.contents.draw_text(rect, Kien::Appellation::UNENABLE_NAME, 1)
  751.     end
  752.   end
  753. end
  754. #==============================================================================
  755. # ■ Window_AppellationData
  756. #------------------------------------------------------------------------------
  757. #  称号说明。
  758. #==============================================================================

  759. class Window_AppellationData < Window_Base
  760.   #--------------------------------------------------------------------------
  761.   # ● 初始化对像
  762.   #--------------------------------------------------------------------------
  763.   def initialize
  764.     super(0, 316, 544, 100)
  765.     @appe = nil
  766.   end
  767.   #--------------------------------------------------------------------------
  768.   # ● 更新画面
  769.   #--------------------------------------------------------------------------
  770.   def update(appe)
  771.     super()
  772.     if appe != @appe
  773.       @appe = appe
  774.       self.contents.clear
  775.       if @appe.enable == true
  776.         self.contents.draw_text(0, WLH * 0, 544, WLH, @appe.description)
  777.         draw_effect
  778.       else
  779.         self.contents.draw_text(0, WLH * 0, 544, WLH, "你还没有得到这个称号")
  780.       end
  781.     end
  782.   end
  783.   #--------------------------------------------------------------------------
  784.   # ● 更新画面
  785.   #--------------------------------------------------------------------------
  786.   def draw_effect
  787.     if @appe.param == nil
  788.       self.contents.draw_text(0, WLH * 1, 544, WLH, "无属性")
  789.     else
  790.       x = 0
  791.       line = 1
  792.       for effect in @appe.param
  793.         case effect[0]
  794.         when /HP/i
  795.           param = "最大" + Vocab::hp
  796.         when /MP/i
  797.           param = "最大" + Vocab::mp
  798.         when /ATK/i
  799.           param = Vocab::atk
  800.         when /DEF/i
  801.           param = Vocab::def
  802.         when /AGI/i
  803.           param = Vocab::agi
  804.         when /SPI/i
  805.           param = Vocab::spi
  806.         when /EXP/i
  807.           param = "获得经验"
  808.         when /GOLD/i
  809.           param = "获得金钱"
  810.         end
  811.         word = effect[1] > 0 ? "+" + effect[1].to_i.to_s : effect[1].to_i.to_s
  812.         word = effect[2] == nil ? word : word + "%"
  813.         width = contents.text_size(param).width
  814.         width += contents.text_size(word).width
  815.         if x + width > 544 and line == 1
  816.           line = 2
  817.           x = 0
  818.         end
  819.         if x + width > 544 and line == 2
  820.           break
  821.         end
  822.         self.contents.draw_text(x, WLH * line, width, WLH, param)
  823.         self.contents.draw_text(x, WLH * line, width, WLH, word, 2)
  824.         x += width + 32
  825.       end
  826.     end
  827.   end
  828. end

  829. #==============================================================================
  830. # ■ Window_Status
  831. #------------------------------------------------------------------------------
  832. #  显示状态画面、完全规格的状态窗口。
  833. #==============================================================================

  834. class Window_Status < Window_Base
  835.   alias appellation_refresh refresh
  836.   #--------------------------------------------------------------------------
  837.   # ● 刷新
  838.   #--------------------------------------------------------------------------
  839.   def refresh
  840.     appellation_refresh
  841.     draw_actor_appellation(@actor, 256, 0)
  842.   end
  843. end

  844. #==============================================================================
  845. # ■ Scene_Status
  846. #------------------------------------------------------------------------------
  847. #  处理状态画面的类。
  848. #==============================================================================

  849. class Scene_Status < Scene_Base
  850. if Kien::Appellation::ADD_APPELLATION_COMMAND == 2
  851.   alias appellation_start start
  852.   #--------------------------------------------------------------------------
  853.   # ● 开始处理
  854.   #--------------------------------------------------------------------------
  855.   def start
  856.     appellation_start
  857.     create_command_window
  858.   end
  859.   #--------------------------------------------------------------------------
  860.   # ● 生成命令窗口
  861.   #--------------------------------------------------------------------------
  862.   def create_command_window
  863.     s1 = "变更称号"
  864.     s2 = "取消"
  865.     @command_window = Window_Command.new(128, [s1, s2])
  866.     @command_window.active = false
  867.     @command_window.openness = 0
  868.     @command_window.x = 544 / 2 - 128 / 2
  869.     @command_window.y = 416 / 2 - (Window_Base::WLH * 2 + 32) / 2
  870.   end
  871.   alias appellation_terminate terminate
  872.   #--------------------------------------------------------------------------
  873.   # ● 结束处理
  874.   #--------------------------------------------------------------------------
  875.   def terminate
  876.     appellation_terminate
  877.     @command_window.dispose
  878.   end
  879.   alias appellation_update update
  880.   #--------------------------------------------------------------------------
  881.   # ● 更新画面
  882.   #--------------------------------------------------------------------------
  883.   def update
  884.     @command_window.update
  885.     if @command_window.active
  886.       if Input.trigger?(Input::C)
  887.         Sound.play_decision
  888.         $scene = Scene_Appellation.new(@actor_index)
  889.       elsif Input.trigger?(Input::B)
  890.         Sound.play_cancel
  891.         @command_window.close
  892.         @command_window.active = false
  893.         return
  894.       end
  895.     else
  896.       if Input.trigger?(Input::C)
  897.         Sound.play_decision
  898.         @command_window.open
  899.         @command_window.active = true
  900.       return
  901.       end
  902.       appellation_update
  903.     end
  904.   end
  905. end
  906. end
  907. #==============================================================================
  908. # ■ Scene_Appellation
  909. #------------------------------------------------------------------------------
  910. #  处理更换称号的类。
  911. #==============================================================================

  912. class Scene_Appellation < Scene_Base
  913.   #--------------------------------------------------------------------------
  914.   # ● 初始化对像
  915.   #     actor_index : 角色 ID
  916.   #     menu_index  : 命令窗口光标初始位置
  917.   #     host_scene  : 上个场景(0..地图, 1..菜单, 2..状态画面)
  918.   #--------------------------------------------------------------------------
  919.   def initialize(actor_index = 1, menu_index = 0, host_scene = Kien::Appellation::ADD_APPELLATION_COMMAND)
  920.     @actor_index = actor_index
  921.     @menu_index = menu_index
  922.     @host_scene = host_scene
  923.   end
  924.   #--------------------------------------------------------------------------
  925.   # ● 开始处理
  926.   #--------------------------------------------------------------------------
  927.   def start
  928.     create_menu_background
  929.     @actor = $game_party.members[@actor_index]
  930.     @appellation_status = Window_AppellationStatus.new(@actor)
  931.     @appellation_select = Window_SelectAppellation.new(@actor)
  932.     @appellation_data = Window_AppellationData.new
  933.     create_command_window
  934.   end
  935.   #--------------------------------------------------------------------------
  936.   # ● 生成命令窗口
  937.   #--------------------------------------------------------------------------
  938.   def create_command_window
  939.     s1 = "装备称号"
  940.     s2 = "取消"
  941.     @command_window = Window_Command.new(128, [s1, s2])
  942.     @command_window.active = false
  943.     @command_window.openness = 0
  944.   end
  945.   #--------------------------------------------------------------------------
  946.   # ● 更新画面
  947.   #--------------------------------------------------------------------------
  948.   def update
  949.     @appellation_status.update
  950.     @appellation_select.update
  951.     @appellation_data.update(@appellation_select.appellation)
  952.     @command_window.update
  953.     if @appellation_select.active
  954.       if Input.trigger?(Input::B)
  955.         Sound.play_cancel
  956.         return_scene
  957.       elsif Input.trigger?(Input::C)
  958.         Sound.play_decision
  959.         show_command_window
  960.       end
  961.     elsif @command_window.active
  962.       if Input.trigger?(Input::B)
  963.         Sound.play_cancel
  964.         close_command_window
  965.       elsif Input.trigger?(Input::C)
  966.         case @command_window.index
  967.         when 0
  968.           if @appellation_select.index == @actor.appellation_id or @appellation_select.appellation.enable == false
  969.             Sound.play_buzzer
  970.             return
  971.           else
  972.             Sound.play_decision
  973.             change_appellation
  974.           end
  975.         when 1
  976.           Sound.play_decision
  977.           close_command_window
  978.         end
  979.       end
  980.     end
  981.   end
  982.   #--------------------------------------------------------------------------
  983.   # ● 结束处理
  984.   #--------------------------------------------------------------------------
  985.   def terminate
  986.     @appellation_status.dispose
  987.     @appellation_select.dispose
  988.     @appellation_data.dispose
  989.     @command_window.dispose
  990.   end
  991.   #--------------------------------------------------------------------------
  992.   # ● 显示命令窗口
  993.   #--------------------------------------------------------------------------
  994.   def show_command_window
  995.     @command_window.x = @appellation_select.index % 2 == 0 ? 208 : 376
  996.     @command_window.y = @appellation_select.item_rect(@appellation_select.index).y
  997.     if @command_window.y > Window_Base::WLH * 2 + 32
  998.       @command_window.y -= Window_Base::WLH * 2 + 32
  999.     else
  1000.       @command_window.y += Window_Base::WLH
  1001.     end
  1002.     @command_window.open
  1003.     if @appellation_select.index == @actor.appellation_id or @appellation_select.appellation.enable == false
  1004.       @command_window.draw_item(0, false)
  1005.     else
  1006.       @command_window.draw_item(0, true)
  1007.     end
  1008.     @command_window.active = true
  1009.     @appellation_select.active = false
  1010.   end
  1011.   #--------------------------------------------------------------------------
  1012.   # ● 关闭命令窗口
  1013.   #--------------------------------------------------------------------------
  1014.   def close_command_window
  1015.     @command_window.close
  1016.     @command_window.active = false
  1017.     @appellation_select.active = true
  1018.   end
  1019.   #--------------------------------------------------------------------------
  1020.   # ● 更换称号
  1021.   #--------------------------------------------------------------------------
  1022.   def change_appellation
  1023.     @actor.change_appellation(@appellation_select.index)
  1024.     @appellation_status.refresh
  1025.     close_command_window
  1026.   end
  1027.   #--------------------------------------------------------------------------
  1028.   # ● 回到原画面
  1029.   #--------------------------------------------------------------------------
  1030.   def return_scene
  1031.     if @host_scene == 1
  1032.       $scene = Scene_Menu.new(@menu_index)
  1033.     elsif @host_scene == 2
  1034.       $scene = Scene_Status.new(@actor_index)
  1035.     else
  1036.       $scene = Scene_Map.new
  1037.     end
  1038.   end
  1039. end
  1040. #============================================================================
  1041. # ☆ 仿传说称号系统。
  1042. #    由feizhaodan制作。
  1043. #    发布于66RPG
  1044. #    http://rpg.blue/
  1045. #    版本号: 1.2.2
  1046. #    2011/10/22
  1047. #    转载时请连同这里一起转
  1048. #============================================================================
复制代码

作者: 露璐    时间: 2011-11-3 12:10
忘说了,我想要有成就点数的成就系统
作者: zjd540921697    时间: 2011-11-3 13:08
没打听懂lz的意思,我说说做成就系统的思路吧
首先,必须自己建立个专门个游戏类,比如叫game_get,用来存放成就的
然后,再在scene_title类里添加定义,使得刚加载游戏的时候读取这个game_get类的实例$game_get,当然,如果第一次玩游戏的话,需要初始化这个$game_get。
以上都是脚本
然后……就看你在什么时候需要添加你的成就了,每次需要添加成就的时候就需要对$game_get进行操作,并及时储存,这部分可以事件+脚本混用。
能想到的操作就这点了,至于怎么显示这个成就,定义window_get类啊或者scene_get类(如果有必要的话),这里就不说了……
lz也可以搜索一下
作者: 竹轩轩    时间: 2011-11-3 21:12
可以地图显示变量修改 成就.rar (210.46 KB, 下载次数: 293)
作者: zjd540921697    时间: 2011-11-3 21:25
lz搜索一下成就或者是称号这一类的词吧
作者: 竹轩轩    时间: 2011-11-4 21:10
成就2.rar (210.35 KB, 下载次数: 468)




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