赞 | 17 |
VIP | 0 |
好人卡 | 0 |
积分 | 119 |
经验 | 0 |
最后登录 | 2023-11-11 |
在线时间 | 396 小时 |
Lv4.逐梦者
- 梦石
- 8
- 星屑
- 3943
- 在线时间
- 396 小时
- 注册时间
- 2017-10-11
- 帖子
- 154
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
想要实现的功能是:在任务系统里,对某任务按C键,然后弹出一个对话框显示“任务地图位置已更新”然后一秒后自动消失,然后地图里显示的目的地位置更新。该任务字体颜色变更,表示现在对应地图目的地的是这个任务。
地图界面我是直接用图片,以及变量控制坐标位置。
而任务系统,暂时是用下面这个任务系统
https://rpg.blue/thread-167490-1-1.html
目前想到的是,在脚本大概394行中,按C键的反应里改为,显示提示框,变更该项的字体颜色,以及变更变量。而具体脚本不知道怎么写,望指教。
- #==============================================================================#
- # 便民任务界面 by EngShun #
- # #
- # 由于此版本仅做出了一些小优化, #
- # 因此设置方法请参考v0.7的范例 #
- # #
- # 效果说明: #
- # 支持普通对话框效果 #
- # \a[号码] :更改左右对齐方式(0,1,2)。 #
- # \itm[物品id] :物品数量 #
- # \wpn[武器id] :武器数量 #
- # \amr[防具id] :防具数量 #
- # \eval{脚本} :运行脚本 #
- # \1line{内容} :把多行的内容显示为一行 #
- # \bold :字体加粗,插入多一次关闭 #
- # \italic :字体打斜,插入多一次关闭 #
- # \f[字体名称] :更改字体 #
- # \s[号码] :更改字体大小 #
- # \p[名称] :插入图片 #
- # \icon[名称] :插入图标 #
- # #
- #==============================================================================#
-
- #===============================================================================
- # ■ 队伍
- #===============================================================================
- class Game_Party
- Mission = Struct.new(:id, :name, :info, :status)
- alias org_init_mission initialize if !defined?(org_init_mission)
- #--------------------------------------------------------------------------
- # ● 重定义初始化
- #--------------------------------------------------------------------------
- def initialize
- @mission = {}
- org_init_mission
- end
- def no_mission?
- return @mission == {}
- end
- def missions
- if no_mission?
- m = Mission.new(0,"没有任务","\n\n\n\\a[1]\\s[32]你还没有领取任何任务",0)
- return [m]
- end
- return @mission.values.sort_by {|m|m.id}
- end
- def get_mission(mission,info)
- return if @mission.has_key?(mission)
- id = missions[-1].id + 1
- @mission[mission] = Mission.new(id,mission,info,0)
- end
- def done_mission(mission)
- @mission[mission].status = 1 if @mission[mission].status == 0
- end
- def delete_mission(mission)
- @mission.delete(mission)
- end
- def fail_mission(mission)
- @mission[mission].status = 2 if @mission[mission].status == 0
- end
- def resume_mission(mission)
- @mission[mission].status = 0 if @mission[mission].status == 2
- end
- def done_all_mission
- @mission.each{|k,m|m.status = 1}
- end
- def update_mission(mission,info)
- @mission[mission].info = info
- end
- def add_mission_info(mission,info)
- @mission[mission].info += "\n" + info
- end
- def delete_all_mission
- @mission = {}
- end
- def resume_all_mission
- @mission.each{|k,m|m.status = 0 if m.status == 2}
- end
- end
-
- #===============================================================================
- # ■ 任务列表窗口
- #===============================================================================
- class Window_Mission < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对象
- #--------------------------------------------------------------------------
- def initialize
- super(0, 64, 200, 416)
- self.index = 0
- @mission = $game_party.missions
- @item_max = @mission.size
- if self.contents != nil
- self.contents.dispose
- self.contents = nil
- end
- self.contents = Bitmap.new(width - 32, @item_max * 32)
- for i in [email][email protected][/email]
- t = @mission[i].status != 0
- self.contents.font.color = t ? disabled_color : normal_color
- text = @mission[i].name
- self.contents.draw_text(4, i * 32, 160, 32, text.to_s)
- self.contents.font.color = system_color
- self.contents.draw_text(self.contents.width-32, i * 32, 32, 32, "□",1) unless $game_party.no_mission?
- if @mission[i].status == 1
- self.contents.font.color = crisis_color
- self.contents.draw_text(self.contents.width-32, i * 32, 32, 32, "√",1)
- elsif @mission[i].status == 2
- self.contents.font.color = knockout_color
- self.contents.draw_text(self.contents.width-32, i * 32, 32, 32, "×",1)
- end
- end
- end
- end
-
- #===============================================================================
- # ■ 任务详情窗口
- #===============================================================================
- class Window_MissionInfo < Window_Base
- attr_accessor :wait
- attr_accessor :scroll_up
- #--------------------------------------------------------------------------
- # ● 初始化对象
- #--------------------------------------------------------------------------
- def initialize
- super(200,64,440,416)
- self.contents = Bitmap.new(408, 384)
- @scroll_up = false
- @wait = 90
- @items = []
- @progress = 0
- @draw_y = 0
- @align = 0
- @cache = Bitmap.new(160,160)
- @font = Font.new
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- super
- parse_items if @items.size > 0
- return if self.contents.height <= 384
- return @wait -= 1 if @wait > 0
- self.oy += @scroll_up ? -1 : 1
- self.oy = 0 if self.oy < 0
- self.oy = oy_max if self.oy > oy_max
- if self.oy <= 0
- @scroll_up = false
- @wait = 60
- elsif self.oy >= oy_max
- @scroll_up = true
- @wait = 60
- end
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- super
- @cache.dispose
- end
- #--------------------------------------------------------------------------
- # ● 滚动最大值
- #--------------------------------------------------------------------------
- def oy_max
- return self.contents.height - 384
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh(str)
- str = str.clone
- @scroll_up = false
- @wait = 120
- @draw_y = 0
- @align = 0
- @progress = 0
- @lines = []
- self.oy = 0
- @cache.font = Font.new
- @font = Font.new
- self.contents.dispose
- self.contents = Bitmap.new(408, 384)
- parse_text(str)
- 12.times{parse_items}
- end
- #--------------------------------------------------------------------------
- # ● 描绘行
- #--------------------------------------------------------------------------
- def draw_line(width, height, items)
- bitmap = Bitmap.new(width, height)
- bitmap.font = @font
- x = 0
- for item in items
- if item.is_a?(Color)
- bitmap.font.color = item
- elsif item.is_a?(Integer)
- bitmap.font.size = item
- elsif item.is_a?(Array)
- bitmap.font.name = item[0] if item.size == 1
- elsif item.is_a?(Bitmap)
- bitmap.blt(x + 2, (height - item.height) / 2,
- item, Rect.new(0,0,item.width,item.height))
- x += item.width + 4
- elsif item == :bold
- bitmap.font.italic = !bitmap.font.bold
- elsif item == :italic
- bitmap.font.italic = !bitmap.font.italic
- else
- bitmap.draw_text(x,0,width,height,item)
- x += bitmap.text_size(item).width
- end
- end
- return bitmap
- end
- #--------------------------------------------------------------------------
- # ● 解析文本
- #--------------------------------------------------------------------------
- def parse_text(str)
- begin
- last_text = str.clone
- str.gsub!(/\\v\[(\d+)\]/i) { $game_variables[$1.to_i] }
- str.gsub!(/\\g/i) { $game_party.gold.to_s }
- str.gsub!(/\\itm\[(\d+)\]/i) { $game_party.item_number($1.to_i) }
- str.gsub!(/\\wpn\[(\d+)\]/i) { $game_party.weapon_number($1.to_i) }
- str.gsub!(/\\amr\[(\d+)\]/i) { $game_party.armor_number($1.to_i) }
- str.gsub!(/\\1line{(.+?)}/im) { $1.delete("\n") }
- str.gsub!(/\\eval{(.+?)}/im) { eval($1) }
- end until str == last_text
- str.gsub!(/\\n\[(\d+)\]/i) do
- $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
- end
- str.gsub!(/\n/){"\000\002n\000"}
- str.gsub!(/\\\\/) { "\001" }
- str.gsub!(/\\a\[([0-2])\]/i){ "\000\0027#{$1}" }
- str.gsub!(/\\c\[(\d+)\]/i) { "\000\0020#{$1}\000" }
- str.gsub!(/\\bold/i) { "\000\0021\000" }
- str.gsub!(/\\italic/i) { "\000\0022\000" }
- str.gsub!(/\\f\[(\w+)\]/i) { "\000\0023#{$1}\000" }
- str.gsub!(/\\s\[(\d+)\]/i) { "\000\0024#{$1}\000" }
- str.gsub!(/\\p\[(.+?)\]/i) { "\000\0025#{$1}\000" }
- str.gsub!(/\\icon\[(.+?)\]/i){ "\000\0026#{$1}\000" }
- str.gsub!(/\001/) {"\\"}
- @items = str.split("\000")
- @items.delete("")
- end
- #--------------------------------------------------------------------------
- # ● 深度解析
- #--------------------------------------------------------------------------
- def parse_items
- return unless @items.size > 0
- bitmap = @cache
- width, height, items = 1, 32, []
- while item = @items.delete_at(0)
- if item[/^\002([0-9a-z])(.*)/]
- case (a = $1)
- when '7'
- @align = $2.to_i
- when '0'
- color = $2.to_i
- bitmap.font.color = if color >= 0 and color <= 9
- text_color(color)
- elsif color == 8
- disabled_color
- elsif color == 9
- system_color
- end
- items.push bitmap.font.color
- when '1'
- items.push :bold
- when '2'
- items.push :italic
- when '3'
- bitmap.font.name = $2
- items.push [bitmap.font.name]
- when '4'
- bitmap.font.size = $2.to_i
- items.push bitmap.font.size
- when '5', '6'
- item = (a == 5) ? RPG::Cache.picture($2) : RPG::Cache.icon($2)
- if item.width > 408
- item.dispose
- items.unshift("[图片太大无法显示]")
- next
- elsif width + item.width > 408
- @items.unshift(item)
- break
- end
- items.push(item)
- width += item.width + 4
- height = item.height + 4 if item.height + 4 > height
- when 'n'
- break
- end
- else
- str = ""
- size = Rect.new(0, 0, 0, 0)
- while s = item.slice!(/./)
- size = bitmap.text_size(str + s)
- if width + size.width > 408
- item.insert(0, s)
- break
- else
- str += s
- end
- end
- if items[-1].is_a?(String)
- items[-1] += str
- else
- items.push(str)
- end
- width += size.width
- height = size.height + 4 if size.height + 4 > height
- if item != ""
- @items.unshift(item)
- break
- end
- end
- end
- b = draw_line(width, height, items)
- if @draw_y + b.height > 384
- c = self.contents
- self.contents = Bitmap.new(408, @draw_y + b.height)
- self.contents.blt(0, 0, c, Rect.new(0,0,c.width, c.height))
- c.dispose
- end
- x = 0
- x = 204 - (b.width / 2) if @align == 1
- x = 408 - b.width if @align == 2
- self.contents.blt(x, @draw_y, b, Rect.new(0,0,b.width, b.height))
- @draw_y += b.height
- end
- end
-
- #===============================================================================
- # ■ 任务界面
- #===============================================================================
- class Scene_Mission
- #--------------------------------------------------------------------------
- # ● 初始化
- #--------------------------------------------------------------------------
- def initialize
- @last_scene = $scene
- end
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- @mission = $game_party.missions
- @window1 = Window_Base.new(0,0,200,64)
- @window1.contents = Bitmap.new(168,32)
- @window1.contents.draw_text(0,0,168,32,"任务",1)
- @window2 = Window_Base.new(200,0,440,64)
- @window2.contents = Bitmap.new(408,32)
- @window2.contents.draw_text(0,0,408,32,"任务说明",1)
- @mission_window = Window_Mission.new
- @mission_window.index = @mission.size - 1
- @index = @mission_window.index
- @info_window = Window_MissionInfo.new
- @info_window.refresh(@mission[@index].info)
- Graphics.transition
- loop do
- Graphics.update
- Input.update
- update
- if $scene != self
- break
- end
- end
- Graphics.freeze
- @window1.dispose
- @window2.dispose
- @mission_window.dispose
- @info_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- @mission_window.update
- @info_window.update
- if @index != @mission_window.index
- @index = @mission_window.index
- @info_window.refresh(@mission[@index].info)
- end
- return update_mission if @mission_window.active
- update_info
- end
- #--------------------------------------------------------------------------
- # ● 刷新任务
- #--------------------------------------------------------------------------
- def update_mission
- if Input.trigger?(Input::C)
- $game_system.se_play($data_system.decision_se)
- @mission_window.active = false
- @info_window.oy = 0
- elsif Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- $scene = @last_scene
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新人物详情
- #--------------------------------------------------------------------------
- def update_info
- @info_window.wait = 90
- if Input.press?(Input::UP)
- @info_window.oy -= 3
- @info_window.oy = 0 if @info_window.oy < 0
- elsif Input.press?(Input::DOWN)
- @info_window.oy += 3
- @info_window.oy = @info_window.oy_max if @info_window.oy > @info_window.oy_max
- elsif Input.repeat?(Input::L)
- $game_system.se_play($data_system.cursor_se)
- @mission_window.index -= 1
- @mission_window.index = $game_party.missions.size - 1 if @mission_window.index < 0
- elsif Input.repeat?(Input::R)
- $game_system.se_play($data_system.cursor_se)
- @mission_window.index += 1
- @mission_window.index = 0 if @mission_window.index >= $game_party.missions.size
- elsif Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- @mission_window.active = true
- @info_window.scroll_up = false
- @info_window.oy = 0
- end
- end
- end
-
- #===============================================================================
- # ■ 事件处理器
- #===============================================================================
- class Interpreter
- alias orig_ec_mission execute_command if !defined?(orig_ec_mission)
- #--------------------------------------------------------------------------
- # ● 重定义执行事件命令
- #--------------------------------------------------------------------------
- def execute_command
- if @index >= @list.size - 1
- command_end
- return true
- end
- @parameters = @list[@index].parameters
- return command_108 if @list[@index].code == 108
- return orig_ec_mission
- end
- #--------------------------------------------------------------------------
- # ● 注释
- #--------------------------------------------------------------------------
- def command_108
- case @list[@index].parameters[0]
- when (/^删除任务\[(\w+)\]$/)
- $game_party.delete_mission($1)
- return true
- when (/^完成任务\[(\w+)\]$/)
- $game_party.done_mission($1)
- return true
- when "删除所有任务"
- $game_party.delete_all_mission
- return true
- when "完成所有任务"
- $game_party.done_all_mission
- return true
- when (/^放弃任务\[(\w+)\]$/)
- $game_party.fail_mission($1)
- return true
- when (/^恢复任务\[(\w+)\]$/)
- $game_party.resume_mission($1)
- return true
- when "恢复所有任务"
- $game_party.resume_all_mission
- return true
- end
- text = @list[@index].parameters[0]
- loop do
- if @list[@index+1].code == 108 or @list[@index+1].code == 408
- text += "\n" + @list[@index+1].parameters[0]
- else
- break
- end
- @index += 1
- end
- split = text.split("\n")
- if (split[0] == "任务设置" or split[0] == "任务更新" or split[0] == "追加说明") and split.size >= 3
- info , name = split[2] , split[1]
- if split.size >= 4
- for i in 3...split.size
- info += "\n" + split[i]
- end
- end
- $game_party.get_mission(name,info) if split[0] == "任务设置"
- $game_party.update_mission(name,info) if split[0] == "任务更新"
- $game_party.add_mission_info(name,info) if split[0] == "追加说明"
- end
- return true
- end
- end
复制代码
|
|