赞 | 4 |
VIP | 0 |
好人卡 | 0 |
积分 | 23 |
经验 | 2892 |
最后登录 | 2024-7-10 |
在线时间 | 275 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 2333
- 在线时间
- 275 小时
- 注册时间
- 2017-7-25
- 帖子
- 163
|
- module IISNOW_ITEM_CONSUME_SKILL
-
- PATTERN = /.*ITEM:ID(\d+)NUM(\d+)(.*)/m
- # 非专业人士请勿修改,正则匹配式,修改后注意备注写法的改变,下同
- PATTERN_E = /.*EQU:ID(\d+).*/m
- PATTERN_A = /.*ARM:ID(\d+).*/m
- STR_UN_CONSUM = "UN" # 物品不消耗标识
-
- TP_ICON = 189 # 你说你懂的
- MP_ICON = 188
-
- STYLE = 1 # 界面风格(支持1,2,3,4效果自己体会,不推荐4)
- STYLE_A = 2 # 提示风格(支持1,2,3,同上)
- PLACE = 3 # 消耗物品的图标与数目间的间距
- PLACE_E = 2 # 不同消耗物品间的间距
- ORDER = [0,1,2] # 从右往左的消耗显示顺序(0,TP;1,MP;2,物品)
-
- COLOR_ITEM = Color.new(255,255,255) # 物品消耗数目的字的颜色
- COLOR_WE_L = Color.new(255,0,0) # 具体限定武器的框的颜色
- COLOR_WE_A = Color.new(255,0,0) # 具体限定防具的框的颜色
- COLOR_UN_I = Color.new(0,255,0) # 物品限定但不消耗的提示框的颜色
-
- TRAN_DE = 100 # 风格_A2下的透明度再次降低(最大为160)
- end
- class Window_SkillList
-
- include IISNOW_ITEM_CONSUME_SKILL
-
- def col_max
- case STYLE
- when 1,3,4
- return 2
- when 2
- return 1
- end
- end
-
- def item_height
- case STYLE
- when 3
- line_height * 2
- when 1,2,4
- line_height + 1
- end
- end
-
- def draw_item(index)
- skill = @data[index]
- if skill
- rect = item_rect(index)
- rect.width -= 4
- draw_item_name(skill, rect.x, rect.y, enable?(skill))
- draw_skill_cost(rect, skill)
- end
- end
-
- alias :iisnow_draw_item_name :draw_item_name
- def draw_item_name(item, x, y, enabled = true, width = 172)
- iisnow_draw_item_name(item, x, y, enabled,width)
- rect_temp = text_size(item.name)
- if @actor.skill_eq_limt(item)
- draw_kuang(x + 24 + PLACE + rect_temp.width,y,24,24,COLOR_WE_L,enabled)
- draw_icon(@actor.skill_eq_limt(item).icon_index,x + 24 + PLACE + rect_temp.width,y,enabled)
- rect_temp.width += (24 + PLACE_E)
- end
- if @actor.skill_ar_limt(item)
- draw_kuang(x + 24 + PLACE + rect_temp.width,y,24,24,COLOR_WE_A,enabled)
- draw_icon(@actor.skill_ar_limt(item).icon_index,x + 24 + PLACE + rect_temp.width,y,enabled)
- end
- end
-
- def draw_skill_cost(rect, skill)
- str = create_string(skill)
- color = [tp_cost_color,mp_cost_color,COLOR_ITEM]
- str.each_with_index do |str,i|
- next unless str
- change_color(color[ORDER[i]], enable?(skill))
- kuang = false
- case i
- when ORDER.index(2)
- icon_index = str[0].icon_index
- kuang = true if str[2]
- str = str[1]
- when ORDER.index(1)
- icon_index = MP_ICON
- when ORDER.index(0)
- icon_index = TP_ICON
- end
- contents.font.size = STYLE == 1 ? Font.default_size - 6 : Font.default_size
- draw_style(icon_index,rect,str,skill,kuang)
- end
- contents.font.size = Font.default_size
- end
-
- def draw_style(icon_index,rect,str,skill,kuang)
- case STYLE
- when 1
- draw_kuang(rect.width - 24 + rect.x,rect.y,24,24,COLOR_UN_I,enable?(skill)) if kuang
- draw_icon(icon_index,rect.width - 24 + rect.x,rect.y,enable?(skill))
- draw_text(Rect.new(rect.x + rect.width - 24,rect.y + 8,24,16),str,2) if str.to_i != 1
- rect.width -= (24 + PLACE_E)
- when 2,4
- draw_text(rect,str,2) if str.to_i != 1
- rect.width -= (text_size(str).width + PLACE) if str.to_i != 1
- draw_kuang(rect.width - 24 + rect.x,rect.y,24,24,COLOR_UN_I,enable?(skill)) if kuang
- draw_icon(icon_index,rect.width - 24 + rect.x,rect.y,enable?(skill))
- rect.width -= (24 + PLACE_E)
- when 3
- rect_temp = rect.clone
- rect_temp.y += (rect_temp.height / 2)
- rect_temp.height /= 2
- draw_text(rect_temp,str,2) if str.to_i != 1
- rect.width -= (text_size(str).width + PLACE) if str.to_i != 1
- draw_kuang(rect.width - 24 + rect.x,rect_temp.y,24,24,COLOR_UN_I,enable?(skill)) if kuang
- draw_icon(icon_index,rect.width - 24 + rect.x,rect_temp.y,enable?(skill))
- rect.width -= (24 + PLACE_E)
- end
- end
-
- def draw_kuang(x,y,w,h,c,fl)
- c.alpha = fl ? 255 : translucent_alpha - (STYLE_A == 2 ? TRAN_DE : 0)
- case STYLE_A
- when 1
- contents.fill_rect(x,y,w,1,c)
- contents.fill_rect(x,y + 1,1,h - 1,c)
- contents.fill_rect(x + 1,y + h - 1,w - 1,1,c)
- contents.fill_rect(x + w -1,y + 1,1,h - 2,c)
- when 2
- contents.fill_rect(x,y,w,h,c)
- end
- end
-
- def create_string(skill)
- str1 = @actor.skill_tp_cost(skill)
- str2 = @actor.skill_mp_cost(skill)
- str3 = @actor.skill_it_cost(skill)
- str1 = str1 > 0 ? str1.to_s : nil
- str2 = str2 > 0 ? str2.to_s : nil
- str3 = str3[1] > 0 ? [str3[0],str3[1].to_s,str3[2]] : nil
- str = [str1,str2,str3]
- iisnow = [str[ORDER[0]],str[ORDER[1]],str[ORDER[2]]]
- iisnow
- end
-
- end
- class Game_BattlerBase
-
- include IISNOW_ITEM_CONSUME_SKILL
-
- def skill_it_cost(skill)
- skill.note.match(PATTERN)
- item = $data_items[$1.to_i] if $1 != 0
- num = $2.to_i
- flag = $3.match(/^#{STR_UN_CONSUM}/) if $3
- return [item,num,flag]
- end
-
- def skill_eq_limt(skill)
- skill.note.match(PATTERN_E)
- eq = $data_weapons[$1.to_i] if $1 != 0
- return eq
- end
-
- def skill_ar_limt(skill)
- skill.note.match(PATTERN_A)
- eq = $data_armors[$1.to_i] if $1 != 0
- return eq
- end
-
- alias :iisnow_skill_cost_payable? :skill_cost_payable?
- def skill_cost_payable?(skill)
- result1 = iisnow_skill_cost_payable?(skill)
- if skill_it_cost(skill)[0]
- result2 = $game_party.item_number(skill_it_cost(skill)[0]) >= skill_it_cost(skill)[1]
- return result1 && result2
- end
- return result1
- end
-
- alias :iisnow_pay_skill_cost :pay_skill_cost
- def pay_skill_cost(skill)
- iisnow_pay_skill_cost(skill)
- if skill_it_cost(skill)[0] && !skill_it_cost(skill)[2]
- $game_party.gain_item(skill_it_cost(skill)[0],-skill_it_cost(skill)[1])
- end
- end
- end
- class Game_Actor
-
- alias :iisnow_skill_wtype_ok? :skill_wtype_ok?
- def skill_wtype_ok?(skill)
- result1 = iisnow_skill_wtype_ok?(skill)
- result2 = skill_eq_limt(skill) ? weapons.include?(skill_eq_limt(skill)) : true
- result3 = skill_ar_limt(skill) ? armors.include?(skill_ar_limt(skill)) : true
- return result1 && result2 && result3
- end
-
- end
- #ITEM:ID18NUM3 代表每次使用该技能需要消耗第18号物品,
- #数量3个,没有该物品或不足消耗量将无法发动技能
- #ITEM:ID18NUM1UN 代表使用该技能的前提条件是队伍持有第18号物品1个,但是不会被消耗
- #ARM:ID10 代表使用该技能的前提条件是使用者装备着第10号防具。
- #ITEM:ID19NUM1
- #EQU:ID2 这两行代表,代表使用该技能的前提条件是使用者装备着第2号武器。
- #每次使用该技能消耗第19号物品1个
复制代码 |
|