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

Project1

 找回密码
 注册会员
搜索
查看: 9717|回复: 14

[RMVA发布] 称号震慑系统、

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2118
在线时间
740 小时
注册时间
2010-9-6
帖子
338
发表于 2014-7-11 14:49:01 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 804173948 于 2014-7-12 12:52 编辑

好像一直都没什么脚本关于称号这方面(如果有原谅我见识短浅、、、)
这是在做游戏时、、突然想到的系统-、
于是从“百忙”之中抽出了一段时间写了出来-、、、(由于某脚本的影响已经好久没接触过RM的默认界面了、、所以界面弄得不好额- -)

进入正题、、这系统作用就是通过更换称号来实现震慑的效果、、
简单地说就是增加了“震慑力”、“震慑抵抗力”这两个属性(角色与敌人都拥有)
所谓震慑效果就是向对方发起攻击时或被对方攻击时按一定比例减少对方属性
而震慑抵抗力能够减缓或者无视对方的震慑、之类的。

以下是称号更换界面(界面不好看请谅解- 、有时间再优化。。。有急需的联系QQ。。)、、
称号震慑系统 1.png

称号震慑系统 2.png

称号震慑系统 3.png

战斗界面还是默认的那个-、
称号震慑系统 4.png


脚本
RUBY 代码复制
  1. =begin
  2. ================================================
  3. 称号震慑系统 版本 1.0 By 804173948 QQ:同上
  4. ================================================
  5.   更新:
  6.     2014-7-11
  7.       发布
  8.     
  9.   注意:
  10.     本脚本编写时间仓促-、难免会有疏漏
  11.     
  12.   简介:
  13.     顾名思义,本系统通过更换称号实现对敌人的震慑作用
  14.     同时敌人也可以对角色产生震慑作用
  15.     如果喜欢,你也可以使某角色一开始就拥有一定的震慑力
  16.     
  17.     所谓震慑作用,是在a对b发起攻击时,若他们(a对b或b对a)之间有震慑力,
  18.     则会使对方在 发动攻击 或者 被攻击 的那一瞬间基本能力(mhp,mmp除外)降低一定百分比
  19.     
  20.     同时,角色与敌人也有震慑抵抗力这个属性,能够减弱或无视对方的震慑
  21.     
  22.   使用说明:
  23.     1、角色/敌人备注填写:
  24.     
  25.       1、[SP 数值]
  26.         说明:震慑力,取值为 -100~100(为负数就是起不到震慑作用反而使对方能力上升)
  27.         默认为 0
  28.         如:[SP 30]
  29.             [SP -5]
  30.             
  31.       2、[SD 数值]
  32.         说明:震慑抵抗力,取值为 -100~100(为负数就是起不到震慑抵抗作用反而使对方震慑力上升)
  33.         默认为 0
  34.         如:[SD 30]
  35.             [SD -5]
  36.             
  37.     2、角色备注填写:
  38.       
  39.       1、[IN 数值]
  40.         说明:角色的初始称号,后面数值表示 称号 id
  41.         默认为 -1 (即无称号)
  42.         如:[IN 0]
  43.             [IN 3]
  44.       
  45.     3、其他(用于 事件-脚本 ):
  46.       获得称号:
  47.         $game_actors[id].add_nicknames(nickname_id)
  48.         id => 角色 id
  49.         nickname_id => 称号 id
  50.        
  51.       强制放弃称号:
  52.         $game_actors[id].del_nicknames(nickname_id)
  53.         id => 角色 id
  54.         nickname_id => 称号 id
  55.        
  56.       强制装备称号:
  57.         $game_actors[id].set_nickname(nickname_id)
  58.         id => 角色 id
  59.         nickname_id => 称号 id
  60.        
  61.       强制卸下称号:
  62.         $game_actors[id].del_nickname
  63.         id => 角色 id
  64.        
  65.       增加人物震慑力(理论上还可以在战斗中用此方法增加敌人震慑力,来营造士气上升的效果)
  66.         $game_actors[id].add_shock_point(value)
  67.         id => 角色 id
  68.         value => 增加数值(负值为减少)
  69.         PS:其实这里可以不用考虑震慑力范围的
  70.        
  71.       增加人物震慑抵抗力(理论上还可以在战斗中用此方法增加敌人震慑抵抗力,来营造士气上升的效果)
  72.         $game_actors[id].add_shock_def(value)
  73.         id => 角色 id
  74.         value => 增加数值(负值为减少)
  75.         PS:其实这里可以不用考虑震慑力范围的
  76.        
  77.       增加敌人震慑力(战斗中)
  78.         $game_troop.members[id].add_shock_point(value)
  79.         id => 群组中怪物 id
  80.         value => 增加数值(负值为减少)
  81.         PS:其实这里可以不用考虑震慑力范围的
  82.        
  83.       增加敌人震慑抵抗力(战斗中)
  84.         $game_troop.members[id].add_shock_def(value)
  85.         id => 群组中怪物 id
  86.         value => 增加数值(负值为减少)
  87.         PS:其实这里可以不用考虑震慑力范围的
  88.        
  89.       称号更换界面呼叫方法:
  90.        
  91.         SceneManager.call(Scene_Nicknames)
  92.  
  93.   冲突与BUG:
  94.  
  95.     本脚本编写时间仓促-、难免会有冲突与BUG
  96.  
  97. =end
  98. #==============================================================================
  99. # ■ ShockSystem
  100. #------------------------------------------------------------------------------
  101. #  常量设置
  102. #==============================================================================
  103. module ShockSystem
  104.   # 人物称号设置
  105.   NickNames = {
  106.   # 称号名称
  107.   :name => ["预言之子","预言之孙子","国家炼金术师","海贼王","一米六","铠之巨人","忍术之神","七武海","八武海"],
  108.   # 称号描述
  109.   :description => ["预言的儿子",
  110.   "预言之子的儿子",
  111.   "也被称为军队的走狗",
  112.   "拥有世上一切财富、声望和权利的标志",
  113.   "人类最强兵器",
  114.   "不详",
  115.   "就是会很多忍术lo-、",
  116.   "王下七武海之一",
  117.   "没八武海这个称号",
  118.   ],
  119.   # 称号颜色
  120.   :color => [Color.new(255,128,128),
  121.   Color.new(64,64,255),
  122.   Color.new(255,0,0),
  123.   Color.new(176,176,176),
  124.   Color.new(128,128,255),
  125.   Color.new(255,0,255),
  126.   Color.new(128,255,128),
  127.   Color.new(255,255,128),
  128.   Color.new(128,128,128)],
  129.   # 图标(ID)
  130.   :icon => [14,12,501,523,387,121,143,523,99],
  131.   # 震慑力(范围为 -100~100 )
  132.   :shock => [20,2,15,70,50,15,60,30,-50],
  133.   # 震慑抵抗力(范围为 -100~100 )
  134.   :shock_def => [50,100,15,100,30,25,100,60,-10]
  135.   }
  136.   # 敌人/角色震慑力标志
  137.   ShockPointFlag = "SP"
  138.  
  139.   # 敌人/角色震慑抵抗力标志
  140.   ShockDefFlag = "SD"
  141.  
  142.   # 角色初始称号标志
  143.   InitNickname = "IN"
  144. end
  145. #==============================================================================
  146. # ■
  147. #------------------------------------------------------------------------------
  148. #  内部定义
  149. #==============================================================================
  150. class RPG::BaseItem
  151.   def shock_point
  152.     if /\[#{ShockSystem::ShockPointFlag} (\d+)\]/ =~ @note
  153.       return $1.to_i
  154.     elsif /\[#{ShockSystem::ShockPointFlag} (\d+)\]/ =~ @note
  155.       return -($1.to_i)
  156.     else
  157.       return 0
  158.     end
  159.   end
  160.   def shock_def
  161.     if /\[#{ShockSystem::ShockDefFlag} (\d+)\]/ =~ @note
  162.       return $1.to_i
  163.     elsif /\[#{ShockSystem::ShockDefFlag} -(\d+)\]/ =~ @note
  164.       return -($1.to_i)
  165.     else
  166.       return 0
  167.     end
  168.   end
  169. end
  170. class RPG::Actor < RPG::BaseItem
  171.   def nickname
  172.     if /\[#{ShockSystem::InitNickname} (\d+)\]/ =~ @note
  173.       return $1.to_i
  174.     else
  175.       return -1
  176.     end
  177.   end
  178. end
  179. class Game_BattlerBase
  180.  
  181.   def shock_point               # 震慑力
  182.     @shock_point = 0 unless @shock_point
  183.     return [[@shock_point,100].min,-100].max
  184.   end
  185.  
  186.   def shock_def                 # 震慑抵抗力
  187.     @shock_def = 0 unless @shock_def
  188.     return [[@shock_def,100].min,-100].max
  189.   end
  190.  
  191.   def add_shock_point(value)
  192.     @shock_point += value
  193.   end
  194.   def add_shock_def(value)
  195.     @shock_def += value
  196.   end
  197. end
  198. class Game_Battler
  199.   #--------------------------------------------------------------------------
  200.   # ● 计算最终震慑力
  201.   #--------------------------------------------------------------------------
  202.   def make_finally_shock_point(user)
  203.     usp = user.shock_point
  204.     usd = user.shock_def
  205.     ssp = self.shock_point
  206.     ssd = self.shock_def
  207.     if ssp > 0
  208.       ssp *= 1-(usd / 100.0)
  209.     end
  210.     if usp > 0
  211.       usp *= 1-(ssd / 100.0)
  212.     end
  213.     us = usp
  214.     ss = ssp
  215.     return ss,us
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 更改能力值
  219.   #--------------------------------------------------------------------------
  220.   def change_param(user,shock_point,param_id)
  221.     if user.is_a?(Game_Actor)
  222.       user.class.params[param_id, user.level] *= 1-(shock_point / 100.0)
  223.     elsif user.is_a?(Game_Enemy)
  224.       user.enemy.params[param_id] *= 1-(shock_point / 100.0)
  225.     end
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ● 重置能力值
  229.   #--------------------------------------------------------------------------
  230.   def reset_param(user,old_param,param_id)
  231.     if user.is_a?(Game_Actor)
  232.       user.class.params[param_id, user.level] = old_param
  233.     elsif user.is_a?(Game_Enemy)
  234.       user.enemy.params[param_id] = old_param
  235.     end
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ● 计算伤害
  239.   #--------------------------------------------------------------------------
  240.   alias old_make_damage_value make_damage_value
  241.   def make_damage_value(user, item)
  242.     if !item.damage.recover?
  243.       # ss => 被攻击者对攻击者的震慑力
  244.       # us => 攻击者对被攻击者的震慑力
  245.       ss,us = make_finally_shock_point(user)
  246.  
  247.       up = []
  248.       sp = []
  249.  
  250.       6.times do |i|
  251.         up.push(user.param(i+2))
  252.         sp.push(self.param(i+2))
  253.         change_param(user,ss,i+2)
  254.         change_param(self,us,i+2)
  255.       end
  256.     end
  257.  
  258.     old_make_damage_value(user, item)
  259.  
  260.     if !item.damage.recover?
  261.       6.times do |i|
  262.         reset_param(user,up[i],i+2)
  263.         reset_param(self,sp[i],i+2)
  264.       end
  265.     end
  266.   end
  267. end
  268. class Game_Actor
  269.   attr_reader :nicknames                 # 获得的称号
  270.   #--------------------------------------------------------------------------
  271.   # ● 设置
  272.   #--------------------------------------------------------------------------
  273.   alias old_setup setup
  274.   def setup(actor_id)
  275.     old_setup(actor_id)
  276.     @nicknames = []
  277.     @shock_point = actor.shock_point
  278.     @shock_def = actor.shock_def
  279.     set_nickname(@nickname)
  280.   end
  281.   def add_nicknames(id)
  282.     @nicknames.push(id) if !@nicknames.include?(id)
  283.   end
  284.   def del_nicknames(id)
  285.     del_nickname if @nickname == id
  286.     @nicknames.delete(id) if @nicknames.include?(id)
  287.   end
  288.   def set_nickname(id)
  289.     return unless id >= 0
  290.     add_nicknames(id) unless @nicknames.include?(id)
  291.     @nickname = id
  292.     @shock_point += ShockSystem::NickNames[:shock][@nickname]
  293.     @shock_def += ShockSystem::NickNames[:shock_def][@nickname]
  294.   end
  295.   def del_nickname
  296.     return unless @nickname >= 0
  297.     @shock_point -= ShockSystem::NickNames[:shock][@nickname]
  298.     @shock_def -= ShockSystem::NickNames[:shock_def][@nickname]
  299.     @nickname = -1
  300.   end
  301. end
  302. class Game_Enemy
  303.   alias old_initialize initialize
  304.   def initialize(index, enemy_id)
  305.     old_initialize(index, enemy_id)
  306.     @shock_point = enemy.shock_point
  307.     @shock_def = enemy.shock_def
  308.   end
  309. end
  310. class Window_Base
  311.   #--------------------------------------------------------------------------
  312.   # ● 绘制称号
  313.   #--------------------------------------------------------------------------
  314.   def draw_actor_nickname(actor, x, y, width = 180)
  315.     return unless actor
  316.     draw_nickname(actor.nickname, x, y, width)
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 绘制称号
  320.   #--------------------------------------------------------------------------
  321.   def draw_nickname(id, x, y, width = 180)
  322.     return unless id > -1
  323.     draw_icon(ShockSystem::NickNames[:icon][id], x, y)
  324.     change_color(ShockSystem::NickNames[:color][id])
  325.     draw_text(x + 24, y, width, line_height, ShockSystem::NickNames[:name][id])
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● 绘制填充矩形 (thick => Line 厚度)
  329.   #--------------------------------------------------------------------------
  330.   def draw_fill_rect(rect, fill_color, line_color = Color.new(255,255,255), thick = 1)
  331.     contents.fill_rect(rect, fill_color)
  332.     fill_out_line(rect,line_color, thick)
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ● 描绘边框
  336.   #--------------------------------------------------------------------------
  337.   def fill_out_line(rect,color = Color.new(255,255,255), thick = 1)
  338.     x = rect.x
  339.     y = rect.y
  340.     width = rect.width
  341.     height= rect.height
  342.     for i in 1..thick
  343.       contents.draw_line(x-i,y-i,x-i,y+height, color)
  344.       contents.draw_line(x-i,y-i,x+width,y-i,  color)
  345.       contents.draw_line(x+width,y-i,x+width,y+height, color)
  346.       contents.draw_line(x-i,y+height,x+width,y+height,color)
  347.     end
  348.   end
  349. end
  350. class Window_Status
  351.   #--------------------------------------------------------------------------
  352.   # ● 绘制区域 1
  353.   #--------------------------------------------------------------------------
  354.   def draw_block1(y)
  355.     draw_actor_name(@actor, 4, y)
  356.     draw_actor_class(@actor, 128, y)
  357.     draw_actor_nickname(@actor, 248, y)
  358.   end
  359. end
  360. class Window_MenuCommand
  361.   #--------------------------------------------------------------------------
  362.   # ● 向指令列表添加主要的指令
  363.   #--------------------------------------------------------------------------
  364.   def add_main_commands
  365.     add_command(Vocab::item,   :item,   main_commands_enabled)
  366.     add_command(Vocab::skill,  :skill,  main_commands_enabled)
  367.     add_command(Vocab::equip,  :equip,  main_commands_enabled)
  368.     add_command(Vocab::status, :status, main_commands_enabled)
  369.     add_command("更换称号",  :nicknames, main_commands_enabled)
  370.   end
  371. end
  372. class Scene_Menu
  373.   #--------------------------------------------------------------------------
  374.   # ● 生成指令窗口
  375.   #--------------------------------------------------------------------------
  376.   alias old_create_command_window create_command_window
  377.   def create_command_window
  378.     old_create_command_window
  379.     @command_window.set_handler(:nicknames, method(:command_nicknames))
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ● 指令“更换称号”
  383.   #--------------------------------------------------------------------------
  384.   def command_nicknames
  385.     SceneManager.call(Scene_Nicknames)
  386.   end
  387. end
  388. #==============================================================================
  389. # ■ Window_NicknameSelect
  390. #------------------------------------------------------------------------------
  391. #  称号选择窗口
  392. #==============================================================================
  393. class Window_NicknameSelect < Window_Selectable
  394.   #--------------------------------------------------------------------------
  395.   # ● 初始化对象
  396.   #--------------------------------------------------------------------------
  397.   def initialize(x, y, width, height,actor)
  398.     super(x, y, width, height)
  399.     @actor = actor
  400.     @data = []
  401.     refresh
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ● 设置角色
  405.   #--------------------------------------------------------------------------
  406.   def actor=(actor)
  407.     return if @actor == actor
  408.     @actor = actor
  409.     refresh
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ● 获取项目数
  413.   #--------------------------------------------------------------------------
  414.   def item_max
  415.     @data ? @data.size : 0
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ● 获取物品
  419.   #--------------------------------------------------------------------------
  420.   def item
  421.     @data && index >= 0 ? @data[index] : nil
  422.   end
  423.   #--------------------------------------------------------------------------
  424.   # ● 生成物品列表
  425.   #--------------------------------------------------------------------------
  426.   def make_item_list
  427.     @data = @actor.nicknames
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ● 返回上一个选择的位置
  431.   #--------------------------------------------------------------------------
  432.   def select_last
  433.     select(@data.index($game_party.last_item.object) || 0)
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ● 绘制项目
  437.   #--------------------------------------------------------------------------
  438.   def draw_item(index)
  439.     id = @data[index]
  440.     if id
  441.       rect = item_rect(index)
  442.       rect.width -= 4
  443.       draw_nickname(id, rect.x, rect.y,156)
  444.     end
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● 更新帮助内容
  448.   #--------------------------------------------------------------------------
  449.   def update_help
  450.     @help_window.set_item(item)
  451.   end
  452.   #--------------------------------------------------------------------------
  453.   # ● 刷新
  454.   #--------------------------------------------------------------------------
  455.   def refresh
  456.     make_item_list
  457.     create_contents
  458.     draw_all_items
  459.     @index = 0
  460.   end
  461. end
  462.  
  463. #==============================================================================
  464. # ■ Window_NicknameInfo
  465. #------------------------------------------------------------------------------
  466. #  显示称号信息窗口。
  467. #==============================================================================
  468.  
  469. class Window_NicknameInfo < Window_Base
  470.   #--------------------------------------------------------------------------
  471.   # ● 初始化对象
  472.   #--------------------------------------------------------------------------
  473.   def initialize(x,y,width,height,actor)
  474.     super(x,y,width,height)
  475.     @actor = actor
  476.     refresh
  477.     activate
  478.   end
  479.   #--------------------------------------------------------------------------
  480.   # ● 设置角色
  481.   #--------------------------------------------------------------------------
  482.   def actor=(actor)
  483.     return if @actor == actor
  484.     @actor = actor
  485.     refresh
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● 绘制水平线
  489.   #--------------------------------------------------------------------------
  490.   def draw_horz_line(y)
  491.     line_y = y + line_height / 2 - 1
  492.     contents.fill_rect(0, line_y, contents_width, 2, line_color)
  493.   end
  494.   #--------------------------------------------------------------------------
  495.   # ● 获取水平线的颜色
  496.   #--------------------------------------------------------------------------
  497.   def line_color
  498.     color = normal_color
  499.     color.alpha = 48
  500.     color
  501.   end
  502.   #--------------------------------------------------------------------------
  503.   # ● 刷新
  504.   #--------------------------------------------------------------------------
  505.   def refresh
  506.     contents.clear
  507.     draw_block1(0)
  508.     draw_block2(2,line_height)
  509.     draw_horz_line(line_height * 3)
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # ● 绘制区域 1
  513.   #--------------------------------------------------------------------------
  514.   def draw_block1(y)
  515.     draw_actor_name(@actor, 4, y)
  516.     draw_actor_class(@actor, 128, y)
  517.     draw_actor_nickname(@actor, 248, y)
  518.   end
  519.   #--------------------------------------------------------------------------
  520.   # ● 绘制区域 2
  521.   #--------------------------------------------------------------------------
  522.   def draw_block2(x,y)
  523.     change_color(system_color)
  524.     draw_text(x, y, 160,line_height,"震慑力")
  525.     draw_text(x, y+line_height, 160,line_height,"震慑抵抗力")
  526.  
  527.     change_color(normal_color)
  528.     draw_text(x+132, y, 128,line_height,@actor.shock_point)
  529.     draw_text(x+132, y+line_height, 128,line_height,@actor.shock_def)
  530.  
  531.     rect = Rect.new(x+176,y+1,width - 222,line_height-2)
  532.     draw_fill_rect(rect, Color.new(0,0,0))
  533.     color1 = Color.new(0,255,0)
  534.     color2 = Color.new(0,0,255)
  535.     value = @actor.shock_point
  536.     if value < 0
  537.       value = -value
  538.       color1 = Color.new(255,0,0)
  539.       color2 = Color.new(255,255,0)
  540.     end
  541.     rect.width = (rect.width*(value / 100.0)).to_i
  542.     contents.gradient_fill_rect(rect,color1,color2)
  543.  
  544.     rect = Rect.new(x+176,y+line_height+1,width - 222,line_height-2)
  545.     draw_fill_rect(rect, Color.new(0,0,0))
  546.     color1 = Color.new(0,255,0)
  547.     color2 = Color.new(128,128,128)
  548.     value = @actor.shock_def
  549.     if value < 0
  550.       value = -value
  551.       color1 = Color.new(255,0,0)
  552.       color2 = Color.new(128,128,128)
  553.     end
  554.     rect.width = (rect.width*(value / 100.0)).to_i
  555.     contents.gradient_fill_rect(rect,color1,color2)
  556.   end
  557.   #--------------------------------------------------------------------------
  558.   # ● 绘制能力
  559.   #--------------------------------------------------------------------------
  560.   def draw_parameters(x, y, id)
  561.     draw_nickname(id, x, y)
  562.  
  563.     change_color(system_color)
  564.     draw_text(x, y+line_height, 160,line_height,"震慑力")
  565.     draw_text(x, y+line_height*2, 160,line_height,"震慑抵抗力")
  566.  
  567.     change_color(normal_color)
  568.     draw_text(x+132, y+line_height, 128,line_height,ShockSystem::NickNames[:shock][id])
  569.     draw_text(x+132, y+line_height*2, 128,line_height,ShockSystem::NickNames[:shock_def][id])
  570.  
  571.     rect = Rect.new(x+176,y+line_height+1,width - 222,line_height-2)
  572.     draw_fill_rect(rect, Color.new(0,0,0))
  573.     color1 = Color.new(0,255,0)
  574.     color2 = Color.new(0,0,255)
  575.     value = ShockSystem::NickNames[:shock][id]
  576.     if value < 0
  577.       value = -value
  578.       color1 = Color.new(255,0,0)
  579.       color2 = Color.new(255,255,0)
  580.     end
  581.     rect.width = (rect.width*(value / 100.0)).to_i
  582.     contents.gradient_fill_rect(rect,color1,color2)
  583.  
  584.     rect = Rect.new(x+176,y+line_height*2+1,width - 222,line_height-2)
  585.     draw_fill_rect(rect, Color.new(0,0,0))
  586.     color1 = Color.new(0,255,0)
  587.     color2 = Color.new(128,128,128)
  588.     value = ShockSystem::NickNames[:shock_def][id]
  589.     if value < 0
  590.       value = -value
  591.       color1 = Color.new(255,0,0)
  592.       color2 = Color.new(128,128,128)
  593.     end
  594.     rect.width = (rect.width*(value / 100.0)).to_i
  595.     contents.gradient_fill_rect(rect,color1,color2)
  596.  
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ● 绘制说明
  600.   #--------------------------------------------------------------------------
  601.   def draw_description(x, y, id)
  602.     draw_text_ex(x, y, ShockSystem::NickNames[:description][id],contents_width - 2*x)
  603.   end
  604.   #--------------------------------------------------------------------------
  605.   # ● 绘制说明
  606.   #--------------------------------------------------------------------------
  607.   def set_item(id)
  608.     contents.clear
  609.     refresh
  610.     if id
  611.       draw_parameters(2, line_height * 4, id)
  612.       draw_horz_line(line_height * 8)
  613.       draw_description(2, line_height * 9,id)
  614.     end
  615.   end
  616. end
  617.  
  618. #==============================================================================
  619. # ■ Window_NicknameCommand
  620. #------------------------------------------------------------------------------
  621. #  称号指令画面
  622. #==============================================================================
  623. class Window_NicknameCommand < Window_Command
  624.   #--------------------------------------------------------------------------
  625.   # ● 初始化对象
  626.   #--------------------------------------------------------------------------
  627.   def initialize(x, y, width)
  628.     @window_width = width
  629.     super(x, y)
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ● 获取窗口的宽度
  633.   #--------------------------------------------------------------------------
  634.   def window_width
  635.     @window_width
  636.   end
  637.   #--------------------------------------------------------------------------
  638.   # ● 获取窗口的高度
  639.   #--------------------------------------------------------------------------
  640.   def window_height
  641.     return 120
  642.   end
  643.   #--------------------------------------------------------------------------
  644.   # ● 获取列数
  645.   #--------------------------------------------------------------------------
  646.   def col_max
  647.     return 2
  648.   end
  649.   #--------------------------------------------------------------------------
  650.   # ● 生成指令列表
  651.   #--------------------------------------------------------------------------
  652.   def make_command_list
  653.     add_command("使用该称号",   :set)
  654.     add_command("放弃该称号",   :del)
  655.     add_command("卸下原称号",   :putoff)
  656.     add_command("上一角色"  ,   :prev)
  657.     add_command("下一角色"  ,   :next)
  658.     add_command("返回"      ,   :back)
  659.   end
  660. end
  661.  
  662. #==============================================================================
  663. # ■ Scene_Nicknames
  664. #------------------------------------------------------------------------------
  665. #  称号更换画面
  666. #==============================================================================
  667.  
  668. class Scene_Nicknames < Scene_MenuBase
  669.   #--------------------------------------------------------------------------
  670.   # ● 开始处理
  671.   #--------------------------------------------------------------------------
  672.   def start
  673.     super
  674.     create_select_window
  675.     create_info_window
  676.   end
  677.   #--------------------------------------------------------------------------
  678.   # ● 生成称号选择窗口
  679.   #--------------------------------------------------------------------------
  680.   def create_select_window
  681.     @select_window = Window_NicknameSelect.new(0, 0,156,Graphics.height,@actor)
  682.     @select_window.set_handler(:ok,    method(:select_command))
  683.     @select_window.set_handler(:cancel,   method(:return_scene))
  684.     @select_window.set_handler(:pagedown, method(:next_actor))
  685.     @select_window.set_handler(:pageup,   method(:prev_actor))
  686.     @select_window.activate
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ● 生成称号信息窗口
  690.   #--------------------------------------------------------------------------
  691.   def create_info_window
  692.     @info_window = Window_NicknameInfo.new(@select_window.width, 0,Graphics.width - @select_window.width,Graphics.height,@actor)
  693.     @select_window.help_window = @info_window
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● 生成指令窗口
  697.   #--------------------------------------------------------------------------
  698.   def create_command_window
  699.     wx = @info_window.x
  700.     wy = @info_window.height - 120
  701.     ww = @info_window.width
  702.     @command_window = Window_NicknameCommand.new(wx, wy, ww)
  703.     @command_window.viewport = @viewport
  704.     @command_window.help_window = @help_window
  705.     @command_window.set_handler(:set,    method(:set_nickname))
  706.     @command_window.set_handler(:del,    method(:delete_nickname))
  707.     @command_window.set_handler(:putoff, method(:put_off_nickname))
  708.     @command_window.set_handler(:prev,   method(:prev_actor))
  709.     @command_window.set_handler(:next,   method(:next_actor))
  710.     @command_window.set_handler(:back,   method(:back))
  711.     @command_window.set_handler(:cancel, method(:back))
  712.   end
  713.   #--------------------------------------------------------------------------
  714.   # ● 刷新窗口
  715.   #--------------------------------------------------------------------------
  716.   def refresh_windows
  717.     @select_window.refresh
  718.     @info_window.refresh
  719.   end
  720.   #--------------------------------------------------------------------------
  721.   # ● 选项
  722.   #--------------------------------------------------------------------------
  723.   def select_command
  724.     if @select_window.item
  725.       create_command_window
  726.       @command_window.activate
  727.     else
  728.       back
  729.     end
  730.   end
  731.   #--------------------------------------------------------------------------
  732.   # ● 指令“设置称号”
  733.   #--------------------------------------------------------------------------
  734.   def set_nickname
  735.     @actor.del_nickname
  736.     @actor.set_nickname(@select_window.item)
  737.     back
  738.   end
  739.   #--------------------------------------------------------------------------
  740.   # ● 指令“放弃称号”
  741.   #--------------------------------------------------------------------------
  742.   def delete_nickname
  743.     @actor.del_nicknames(@select_window.item)
  744.     back
  745.   end
  746.   #--------------------------------------------------------------------------
  747.   # ● 指令“卸下称号”
  748.   #--------------------------------------------------------------------------
  749.   def put_off_nickname
  750.     @actor.del_nickname
  751.     back
  752.   end
  753.   #--------------------------------------------------------------------------
  754.   # ● 指令“返回”
  755.   #--------------------------------------------------------------------------
  756.   def back
  757.     if @command_window
  758.       @command_window.close
  759.       @command_window.deactivate
  760.     end
  761.     refresh_windows
  762.     @select_window.activate
  763.   end
  764.   #--------------------------------------------------------------------------
  765.   # ● 切换角色
  766.   #--------------------------------------------------------------------------
  767.   def on_actor_change
  768.     @select_window.actor = @actor
  769.     @info_window.actor = @actor
  770.     back
  771.   end
  772. end


注:本脚本需要用到
自动换行脚本 【 原作者:叶子 修改:wyongcan】
RUBY 代码复制
  1. class Window_Base < Window
  2. #~ draw_text_ex的增强,使其可以自动换行  原作者:叶子 修改:wyongcan
  3.   #--------------------------------------------------------------------------
  4.   # ● 绘制带有控制符的文本内容
  5.   #   如果传递了width参数的话,会自动换行
  6.   #--------------------------------------------------------------------------
  7.   def draw_text_ex(x, y, text, width = nil,textwidth = nil,normalfont = true)
  8.     reset_font_settings if normalfont == true
  9.     text = convert_escape_characters(text)
  10.     pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
  11.     if width != nil
  12.       pos[:height] = contents.font.size
  13.       pos[:width] = width
  14.       pos[:textwidth] = textwidth
  15.     end
  16.     process_character(text.slice!(0, 1), text, pos) until text.empty?
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 文字的处理
  20.   #     c    : 文字
  21.   #     text : 绘制处理中的字符串缓存(字符串可能会被修改)
  22.   #     pos  : 绘制位置 {:x, :y, :new_x, :height}
  23.   #--------------------------------------------------------------------------
  24.   def process_character(c, text, pos)
  25.     case c
  26.     when "\r"   # 回车
  27.       return
  28.     when "\n"   # 换行
  29.       process_new_line(text, pos)
  30.     when "\f"   # 翻页
  31.       process_new_page(text, pos)
  32.     when "\e"   # 控制符
  33.       process_escape_character(obtain_escape_code(text), text, pos)
  34.     else        # 普通文字
  35.       pos[:textwidth] == nil ? text_width = text_size(c).width : text_width = pos[:textwidth]
  36.       if pos[:width] != nil && pos[:x] - pos[:new_x] + text_width > pos[:width]
  37.         process_new_line(text, pos)
  38.       end
  39.       process_normal_character(c, pos)
  40.     end
  41.   end
  42. end


绘制线段脚本 【原作者:忘了。。。】
RUBY 代码复制
  1. class Bitmap
  2.   def draw_line(x1, y1, x2, y2, color)
  3.     if x1 == x2
  4.       x = x1
  5.       for y in (y1 < y2 ? y1..y2 : y2..y1)
  6.         set_pixel(x, y, color)
  7.       end
  8.     else
  9.       a = (y2-y1)/(x2-x1).to_f
  10.       if -1 < a and a < 1
  11.         for x in (x1 < x2 ? x1..x2 : x2..x1)
  12.           y = a * (x - x1) + y1
  13.           set_pixel(x, y, color)
  14.         end
  15.       else
  16.         for y in (y1 < y2 ? y1..y2 : y2..y1)
  17.           x = (y - y1) / a + x1
  18.           set_pixel(x, y, color)
  19.         end
  20.       end
  21.     end
  22.   end
  23. end



范例:(已含DLL)
称号震慑系统.zip (1.44 MB, 下载次数: 800)

点评

看到“预言之孙子”,“国家炼金术师”和“八武海”这三个的时候莫名的笑了  发表于 2015-1-24 23:45

评分

参与人数 3星屑 +38 收起 理由
3106345123 + 18 塞糖
喵kano + 10 塞糖~
VIPArcher + 10 哎呦,不错哦

查看全部评分

undefined

Lv1.梦旅人

梦石
0
星屑
50
在线时间
444 小时
注册时间
2011-1-3
帖子
151

开拓者

发表于 2014-7-11 18:13:30 | 显示全部楼层
{:2_278:}话说干嘛不直接仿造传说系列里,称号附加属性值。

点评

@804173948 南梦宫旗下的传说系列,达成条件获得称号,装备称号获得属性提升。  发表于 2014-7-12 16:05
传说系列?  发表于 2014-7-11 18:21
回复 支持 反对

使用道具 举报

Lv1.梦旅人

石油鸡

梦石
0
星屑
179
在线时间
287 小时
注册时间
2014-1-27
帖子
232
发表于 2014-7-11 18:48:41 | 显示全部楼层
有木有XP的,跪求

点评

肯定没有  发表于 2014-7-11 19:05
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
378 小时
注册时间
2013-10-14
帖子
215
发表于 2014-7-11 21:05:23 | 显示全部楼层
ARPG使用最好了~~!!

收藏先~~!!

最简单的学习方法就是努力回答别人的问题...
任何教程都没有实践来的重要...
XP小问题都能自己解决了,剩下的就是脚本了...
╰⋛⋋⊱⋋๑角⊱☠c色๑⋌⊰⋌⋚╯
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
129 小时
注册时间
2014-2-22
帖子
233
发表于 2014-7-13 14:55:48 | 显示全部楼层
啊!!!!为毛收费附件我都下载不了啊!!!!
很多年了呢,坑还是没填完…………(草
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
64 小时
注册时间
2014-2-5
帖子
19
发表于 2014-7-26 12:39:14 | 显示全部楼层
我只要6个怎么弄
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
77
在线时间
61 小时
注册时间
2014-11-1
帖子
48
发表于 2015-1-24 23:20:34 | 显示全部楼层
这么晚了我才来学习..看得我一脸血.......
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
84 小时
注册时间
2015-1-29
帖子
53
发表于 2015-2-6 18:01:23 | 显示全部楼层
能不能弄个直接加属性的啊大神
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2010-6-29
帖子
241
发表于 2015-3-23 08:48:05 | 显示全部楼层
这个太需要了!
[img]http://rpg.blue/data/attachment/forum/201008/11/105320eudv222d7jgvg24p.gif[img]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2015-10-6
帖子
6
发表于 2015-12-22 16:00:16 | 显示全部楼层
{:2_276:}看到预言之孙子的时候突然就笑了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 07:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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