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

Project1

 找回密码
 注册会员
搜索
查看: 1906|回复: 1
打印 上一主题 下一主题

[已经解决] 关于超好用的技能消耗物品/物品限定技能系统

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
38 小时
注册时间
2014-10-28
帖子
94
跳转到指定楼层
1
发表于 2014-11-4 18:22:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 猩红之月 于 2014-11-4 18:24 编辑

脚本是很不错,
但是我选择了第2种风格并读档以后,
技能界面风格又变回原来的样子了(第一种风格)。
请问大家知道是哪里出问题了吗?
如果可以的话能麻烦懂脚本的人帮我把其他风格去掉吧,
其他风格用不着。
  1. #ITEM:ID18NUM3 代表每次使用该技能需要消耗第18号物品,数量3个,
  2. #没有该物品或不足消耗量将无法发动技能。
  3. #ITEM:ID18NUM1UN 代表使用该技能的前提条件是队伍持有第18号物品1个,但是不会被消耗。
  4. #ARM:ID10 代表使用该技能的前提条件是使用者装备着第10号防具。
  5. #ITEM:ID19NUM1
  6. #EQU:ID2
  7. #这两行代表,代表使用该技能的前提条件是使用者装备着第2号武器。
  8. #每次使用该技能消耗第19号物品1个。
  9. #
  10. module IISNOW_ITEM_CONSUME_SKILL
  11.   
  12.   PATTERN = /.*ITEM:ID(\d+)NUM(\d+)(.*)/m  
  13.   # 非专业人士请勿修改,正则匹配式,修改后注意备注写法的改变,下同
  14.   PATTERN_E = /.*EQU:ID(\d+).*/m
  15.   PATTERN_A = /.*ARM:ID(\d+).*/m
  16.   STR_UN_CONSUM = "UN" # 物品不消耗标识
  17.   
  18.   TP_ICON = 189  # 你说你懂的
  19.   MP_ICON = 188
  20.   
  21.   STYLE = 1 # 界面风格(支持1,2,3,4效果自己体会,不推荐4)
  22.   STYLE_A = 2 # 提示风格(支持1,2,3,同上)
  23.   PLACE = 3 # 消耗物品的图标与数目间的间距
  24.   PLACE_E = 2 # 不同消耗物品间的间距
  25.   ORDER = [0,1,2]     # 从右往左的消耗显示顺序(0,TP;1,MP;2,物品)
  26.   
  27.   COLOR_ITEM = Color.new(255,255,255) # 物品消耗数目的字的颜色
  28.   COLOR_WE_L = Color.new(255,0,0) # 具体限定武器的框的颜色
  29.   COLOR_WE_A = Color.new(255,0,0) # 具体限定防具的框的颜色
  30.   COLOR_UN_I = Color.new(0,255,0) # 物品限定但不消耗的提示框的颜色
  31.   
  32.   TRAN_DE = 100 # 风格_A2下的透明度再次降低(最大为160)
  33. end

  34. class Window_SkillList
  35.   
  36.   include IISNOW_ITEM_CONSUME_SKILL
  37.   
  38.   def col_max
  39.     case STYLE
  40.     when 1,3,4
  41.       return 2
  42.     when 2
  43.       return 1
  44.     end
  45.   end
  46.   
  47.   def item_height
  48.     case STYLE
  49.     when 3
  50.       line_height * 2
  51.     when 1,2,4
  52.       line_height + 1
  53.     end
  54.   end
  55.   
  56.   def draw_item(index)
  57.     skill = @data[index]
  58.     if skill
  59.       rect = item_rect(index)
  60.       rect.width -= 4
  61.       draw_item_name(skill, rect.x, rect.y, enable?(skill))
  62.       draw_skill_cost(rect, skill)
  63.     end
  64.   end
  65.   
  66.   alias :iisnow_draw_item_name :draw_item_name
  67.   def draw_item_name(item, x, y, enabled = true, width = 172)
  68.     iisnow_draw_item_name(item, x, y, enabled,width)
  69.     rect_temp = text_size(item.name)
  70.     if @actor.skill_eq_limt(item)
  71.       draw_kuang(x + 24 + PLACE  + rect_temp.width,y,24,24,COLOR_WE_L,enabled)
  72.       draw_icon(@actor.skill_eq_limt(item).icon_index,x + 24 + PLACE + rect_temp.width,y,enabled)
  73.       rect_temp.width += (24 + PLACE_E)
  74.     end
  75.     if @actor.skill_ar_limt(item)
  76.       draw_kuang(x + 24 + PLACE + rect_temp.width,y,24,24,COLOR_WE_A,enabled)
  77.       draw_icon(@actor.skill_ar_limt(item).icon_index,x + 24 + PLACE + rect_temp.width,y,enabled)
  78.     end
  79.   end
  80.   
  81.   def draw_skill_cost(rect, skill)
  82.     str = create_string(skill)
  83.     color = [tp_cost_color,mp_cost_color,COLOR_ITEM]
  84.     str.each_with_index do |str,i|
  85.       next unless str
  86.       change_color(color[ORDER[i]], enable?(skill))
  87.       kuang = false
  88.       case i
  89.       when ORDER.index(2)
  90.         icon_index = str[0].icon_index
  91.         kuang = true if str[2]
  92.         str = str[1]
  93.       when ORDER.index(1)
  94.         icon_index = MP_ICON
  95.       when ORDER.index(0)
  96.         icon_index = TP_ICON
  97.       end
  98.       contents.font.size = STYLE == 1 ? Font.default_size - 6 : Font.default_size
  99.       draw_style(icon_index,rect,str,skill,kuang)
  100.     end
  101.     contents.font.size = Font.default_size
  102.   end
  103.   
  104.   def draw_style(icon_index,rect,str,skill,kuang)
  105.     case STYLE
  106.     when 1
  107.       draw_kuang(rect.width - 24 + rect.x,rect.y,24,24,COLOR_UN_I,enable?(skill)) if kuang
  108.       draw_icon(icon_index,rect.width - 24 + rect.x,rect.y,enable?(skill))
  109.       draw_text(Rect.new(rect.x + rect.width - 24,rect.y + 8,24,16),str,2) if str.to_i != 1
  110.       rect.width -= (24 + PLACE_E)
  111.     when 2,4
  112.       draw_text(rect,str,2) if str.to_i != 1
  113.       rect.width -= (text_size(str).width + PLACE) if str.to_i != 1
  114.       draw_kuang(rect.width - 24 + rect.x,rect.y,24,24,COLOR_UN_I,enable?(skill)) if kuang
  115.       draw_icon(icon_index,rect.width - 24 + rect.x,rect.y,enable?(skill))
  116.       rect.width -= (24 + PLACE_E)
  117.     when 3
  118.       rect_temp = rect.clone
  119.       rect_temp.y += (rect_temp.height / 2)
  120.       rect_temp.height /= 2
  121.       draw_text(rect_temp,str,2) if str.to_i != 1
  122.       rect.width -= (text_size(str).width + PLACE) if str.to_i != 1
  123.       draw_kuang(rect.width - 24 + rect.x,rect_temp.y,24,24,COLOR_UN_I,enable?(skill)) if kuang
  124.       draw_icon(icon_index,rect.width - 24 + rect.x,rect_temp.y,enable?(skill))
  125.       rect.width -= (24 + PLACE_E)
  126.     end
  127.   end
  128.   
  129.   def draw_kuang(x,y,w,h,c,fl)
  130.     c.alpha = fl ? 255 : translucent_alpha - (STYLE_A == 2 ? TRAN_DE : 0)
  131.     case STYLE_A
  132.     when 1
  133.       contents.fill_rect(x,y,w,1,c)
  134.       contents.fill_rect(x,y + 1,1,h - 1,c)
  135.       contents.fill_rect(x + 1,y + h - 1,w - 1,1,c)
  136.       contents.fill_rect(x + w -1,y + 1,1,h - 2,c)
  137.     when 2
  138.       contents.fill_rect(x,y,w,h,c)
  139.     end
  140.   end
  141.   
  142.   def create_string(skill)
  143.     str1 = @actor.skill_tp_cost(skill)
  144.     str2 = @actor.skill_mp_cost(skill)
  145.     str3 = @actor.skill_it_cost(skill)
  146.     str1 = str1 > 0 ?  str1.to_s : nil
  147.     str2 = str2 > 0 ?  str2.to_s : nil
  148.     str3 = str3[1] > 0 ? [str3[0],str3[1].to_s,str3[2]] : nil
  149.     str = [str1,str2,str3]
  150.     iisnow = [str[ORDER[0]],str[ORDER[1]],str[ORDER[2]]]
  151.     iisnow
  152.   end
  153.   
  154. end

  155. class Game_BattlerBase
  156.   
  157.   include IISNOW_ITEM_CONSUME_SKILL
  158.   
  159.   def skill_it_cost(skill)
  160.     skill.note.match(PATTERN)
  161.     item = $data_items[$1.to_i] if $1 != 0
  162.     num = $2.to_i
  163.     flag = $3.match(/^#{STR_UN_CONSUM}/) if $3
  164.     return [item,num,flag]
  165.   end
  166.   
  167.   def skill_eq_limt(skill)
  168.     skill.note.match(PATTERN_E)
  169.     eq = $data_weapons[$1.to_i] if $1 != 0
  170.     return eq
  171.   end
  172.   
  173.   def skill_ar_limt(skill)
  174.     skill.note.match(PATTERN_A)
  175.     eq = $data_armors[$1.to_i] if $1 != 0
  176.     return eq
  177.   end
  178.   
  179.   alias :iisnow_skill_cost_payable? :skill_cost_payable?
  180.   def skill_cost_payable?(skill)
  181.     result1 = iisnow_skill_cost_payable?(skill)
  182.     if skill_it_cost(skill)[0]
  183.       result2 = $game_party.item_number(skill_it_cost(skill)[0]) >= skill_it_cost(skill)[1]
  184.       return result1 && result2
  185.     end
  186.     return result1
  187.   end
  188.   
  189.   alias :iisnow_pay_skill_cost :pay_skill_cost
  190.   def pay_skill_cost(skill)
  191.     iisnow_pay_skill_cost(skill)
  192.     if skill_it_cost(skill)[0] && !skill_it_cost(skill)[2]
  193.       $game_party.gain_item(skill_it_cost(skill)[0],-skill_it_cost(skill)[1])
  194.     end
  195.   end

  196. end

  197. class Game_Actor
  198.   
  199.   alias :iisnow_skill_wtype_ok? :skill_wtype_ok?
  200.   def skill_wtype_ok?(skill)
  201.     result1 = iisnow_skill_wtype_ok?(skill)
  202.     result2 = skill_eq_limt(skill) ? weapons.include?(skill_eq_limt(skill)) : true
  203.     result3 = skill_ar_limt(skill) ? armors.include?(skill_ar_limt(skill)) : true
  204.     return result1 && result2 && result3
  205.   end
  206.   
  207. end
复制代码

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10079
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

2
发表于 2014-11-4 18:43:14 | 只看该作者
那个范例里事件改变类型只是给你看看风格变化的。如果你确定了某风格,请在脚本22行
  1.   STYLE_A = 2 # 提示风格(支持1,2,3,同上)
复制代码
处修改成你需要的风格,以上
(如果你要弄成可以在游戏中自由切换风格的话再说

点评

感谢解答困惑  发表于 2014-11-4 19:07

评分

参与人数 1星屑 +200 收起 理由
taroxd + 200 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 21:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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