Project1
标题: RMVA任务系统改进【此脚本原作者为韩云溪】 [打印本页]
作者: zyyczp 时间: 2012-1-29 12:51
标题: RMVA任务系统改进【此脚本原作者为韩云溪】
本帖最后由 zyyczp 于 2012-2-26 13:53 编辑
此脚本原作者为韩云溪,我只是增加了 任务追加描述- =begin
- 领取任务:$game_party.get_task(任意数字,任务名称,任务描述)
- 完成任务:$game_party.finish_task(领取任务时设定的数字)
- 对已有任务追加说明:$game_party.add_task(任务编号,任务追加描述)
- 如:
- 前面有事件$game_party.get_task(1,"测试","只是测试")
- 此时任务1的说明为
- >只是测试
- 后面完成任务的脚本就是$game_party.finish_task(1)
- 追加说明$game_party.add_task(1,"真的只是测试哦")
- 此时任务1的说明为:
- >只是测试
- >真的只是测试哦
- 召唤任务界面:SceneManager.call(Scene_Task)
- 该脚本来自66rpg,发布者:韩云溪
- 改进:工藤由纪(论坛ID:zyyczp)
- =end
- #===========================================================
- #●任务系统
- #===========================================================
- class Task
- attr_reader :desc
- attr_reader :finished
- def initialize(origin_name,desc)
- @origin_name = origin_name
- @desc = desc
- @finished = false
- end
- def name
- if @finished
- return @origin_name + "(完成)"
- else
- return @origin_name
- end
- end
- def desc=(desc)
- @desc = desc
- end
-
- def finish
- @finished = true
- end
-
- end
- class Game_Party < Game_Unit
- alias old_init initialize
- def initialize
- old_init
- @tasks = {}
- end
- def add_task(i,desc)
- @tasks[i].desc = @tasks[i].desc + "\n" + desc
- end
- def get_task(i,name,desc)
- @tasks[i]=Task.new(name,desc)
- end
- def have_task?(i)
- @tasks[i] != nil
- end
- def finish_task(i)
- @tasks[i].finish if have_task?(i)
- end
- def unfinished_tasks
- n = []
- for i in @tasks.values
- next if i.finished
- n.push(i)
- end
- return n
- end
- def finished_tasks
- n = []
- for i in @tasks.values
- next unless i.finished
- n.push(i)
- end
- return n
- end
- end
- class Window_Task_Type < Window_HorzCommand
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0)
- activate
- end
- def window_width
- return Graphics.width
- end
- def col_max
- return 3
- end
- #--------------------------------------------------------------------------
- # ● コマンドリストの作成
- #--------------------------------------------------------------------------
- def make_command_list
- add_command("未完成任务", :unfinished_task)
- add_command("已完成任务", :finished_task)
- add_command("取消", :cancel)
- end
- end
- class Window_TaskLeft < Window_Selectable
- attr_reader :finished
- def initialize
- super(0,48,160,Graphics.height - 48)
- create_contents
- @finished = false
- @index = 0
- refresh
- deactivate
- end
- def set_finish(finish)
- @finished = finish
- set_item_max
- end
- def item_max
- return @item_max != nil ? @item_max : 0
- end
- def set_item_max
- if @finished
- @item_max = $game_party.finished_tasks.size
- else
- @item_max = $game_party.unfinished_tasks.size
- end
- end
- def refresh
- set_item_max
- super
- end
- #--------------------------------------------------------------------------
- # ● 項目の描画
- #--------------------------------------------------------------------------
- def draw_item(index)
- text = ""
- unless @finished
- if $game_party.unfinished_tasks[index] != nil
- text = $game_party.unfinished_tasks[index].name
- end
- else
- if $game_party.finished_tasks[index] != nil
- text = $game_party.finished_tasks[index].name
- end
- end
- draw_text(item_rect_for_text(index), text)
- end
- end
- class Window_TaskRight < Window_Base
- attr_reader :left_index
- def initialize
- super(160,48,Graphics.width - 160,Graphics.height - 48)
- create_contents
- @left_index = 0
- @finished = false
- refresh
- end
- def set_index(i)
- @left_index = i
- refresh
- end
- def set_finish(i)
- @finished = i
- end
-
- def refresh
- contents.clear
- draw_desc
- end
- def draw_desc
- if @finished
- if $game_party.finished_tasks[@left_index] != nil
- draw_text_ex(0,0,$game_party.finished_tasks[@left_index].desc)
- end
- else
- if $game_party.unfinished_tasks[@left_index] != nil
- draw_text_ex(0,0,$game_party.unfinished_tasks[@left_index].desc)
- end
- end
- end
-
- end
- class Scene_Task < Scene_Base
- def start
- super
- create_task_type_window
- create_left_window
- create_right_window
- end
- def update
- super
- if @left_window.active
- if Input.trigger?(:B)
- @left_window.deactivate
- @task_type_window.activate
- end
- if Input.trigger?(:UP) || Input.trigger?(:DOWN)
- @right_window.set_finish(@left_window.finished)
- @right_window.set_index(@left_window.index)
- end
- end
- end
-
- def terminate
- super
- end
- def create_task_type_window
- @task_type_window = Window_Task_Type.new
- @task_type_window.set_handler(:unfinished_task,method(:view_unfinished_task))
- @task_type_window.set_handler(:finished_task,method(:view_finished_task))
- @task_type_window.set_handler(:cancel,method(:return_scene))
- end
- def create_left_window
- @left_window = Window_TaskLeft.new
- @left_window.set_finish(false)
- @left_window.refresh
- end
- def create_right_window
- @right_window = Window_TaskRight.new
- @right_window.refresh
- end
- def view_unfinished_task
- @left_window.set_finish(false)
- @left_window.refresh
- @left_window.activate
- @task_type_window.deactivate
- @right_window.set_finish(false)
- @right_window.set_index(@left_window.index)
- end
- def view_finished_task
- @left_window.set_finish(true)
- @left_window.refresh
- @left_window.activate
- @task_type_window.deactivate
- @right_window.set_finish(true)
- @right_window.set_index(@left_window.index)
- end
-
- end接下说一下主菜单添加查看任务命令的方法:
- 1、先打开脚本窗口(废话 = =)
- 2、找到Windows_MenuCommand
- 在 def add_main_commands 下方end之前插入add_command("任务", :task, main_commands_enabled)
复制代码 3、找到Scene_Menu
在 def create_command_window 下方end之前插入- @command_window.set_handler(:task, method(:command_task))
复制代码 4、在- #--------------------------------------------------------------------------
- # ● 指令“结束游戏”
- #--------------------------------------------------------------------------
- def command_game_end
- SceneManager.call(Scene_End)
- end
复制代码 的前面加入- #--------------------------------------------------------------------------
- # ● 指令“任务”
- #--------------------------------------------------------------------------
- def command_task
- SceneManager.call(Scene_Task)
- end
-
复制代码 OK~~~
追加:具体判定某个任务是否完成只需要:$game_party.tasks(编号).finished(完成的情况下返回真,未完成返回假,说白了,就是完成的情况下条件成立)如:
$game_party.tasks(1).finished #=> 完成时为true,没有完成为false
在条件分歧的情况下,只需要在脚本里面填上这样一行就了。
作者: xuzhengchi 时间: 2012-1-29 16:43
LZ可以放张图看下效果吗?
作者: acn00269 时间: 2012-1-29 17:48
本帖最后由 acn00269 于 2012-1-29 17:49 编辑
为什么 第56行发生脚本错误
这是脚本截取的第56行- class Game_Party < Game_Unit
复制代码 说“未初始化常数对象::Game_Unit”
难道和其他脚本冲突了吗?
作者: 乏味— 时间: 2012-1-29 21:16
弱弱的问一句 在NPC那里领取任务的时候要怎么设置呢?
作者: xmheart 时间: 2012-1-30 23:13
根据这个添加指令的地方,我把“整队”指令删了,也可以加上其他指令。。。。。学习了啊
作者: 姬文翔 时间: 2012-2-20 04:45
LZ教得真详细~本宫按图索骥改成功了
作者: z12508186 时间: 2012-2-21 12:24
本帖最后由 z12508186 于 2012-2-21 15:43 编辑
新鲜的好东西,先下载测试一下,再来回复。
非常棒的东西,在发布任务,和完成任务中查看都非常方便高效。。
只是自己水平有限,如果用在NPC中任务完成判断,这个该如果设定?
另外,在追加任务提示时,好像出了什么问题,报错如下图
作者: zyyczp 时间: 2012-2-26 13:44
z12508186 发表于 2012-2-21 12:24
新鲜的好东西,先下载测试一下,再来回复。
非常棒的东西,在发布任务,和完成任务中查看都非常方便高效。 ...
添加任务的时候,那个名称和说明都要加双引号的。。。。
比如:
$game_party.get_task(1,"测试","只是测试")
你那个是没有加引号导致的。
‘‘──zyyczp于2012-2-26 13:55补充以下内容
判断任务是否完成的方法已经追加
’’
作者: z12508186 时间: 2012-2-27 15:56
zyyczp 发表于 2012-2-26 13:44
添加任务的时候,那个名称和说明都要加双引号的。。。。
比如:
$game_party.get_task(1,"测试","只是测 ...
哦哦...原来是这样..多谢解答...很成功的说!
作者: 7185819 时间: 2012-2-27 19:58
哦哦哦 在废话那里有执行错误
作者: 青楼丶買醉 时间: 2012-2-27 21:36
弱弱的说一句:看不懂.... 怎么弄任务奖励的说-.-
‘‘──青楼丶買醉于2012-2-27 21:54补充以下内容
Windows_MenuCommand 没这个啊 找了半天
’’
作者: 魏玉龙 时间: 2012-3-21 20:41
本帖最后由 魏玉龙 于 2012-3-21 20:44 编辑
如果想让任务选项没任务的时候灰色
应该这样加
Window_MenuCommand
#--------------------------------------------------------------------------
# ● 独自添加指令用
#--------------------------------------------------------------------------
def add_original_commands
end
#--------------------------------------------------------------------------
# ● 独自添加指令用
#--------------------------------------------------------------------------
def add_original_commands
end
替换为
#--------------------------------------------------------------------------
# ● 独自添加指令用
#--------------------------------------------------------------------------
def add_original_commands
add_command("任务", :task,task_enabled)
end
#--------------------------------------------------------------------------
# ● 独自添加指令用
#--------------------------------------------------------------------------
def add_original_commands
add_command("任务", :task,task_enabled)
end
然后找
#--------------------------------------------------------------------------
# ● 添加整队指令
#--------------------------------------------------------------------------
def add_formation_command
add_command(Vocab::formation, :formation, formation_enabled)
end
#--------------------------------------------------------------------------
# ● 添加整队指令
#--------------------------------------------------------------------------
def add_formation_command
add_command(Vocab::formation, :formation, formation_enabled)
end
下添加
#--------------------------------------------------------------------------
# ● 获取任务的有效状态
#--------------------------------------------------------------------------
def task_enabled
$game_party.unfinished_tasks.size>= 1 || $game_party.finished_tasks.size>= 1
end
#--------------------------------------------------------------------------
# ● 获取任务的有效状态
#--------------------------------------------------------------------------
def task_enabled
$game_party.unfinished_tasks.size>= 1 || $game_party.finished_tasks.size>= 1
end
作者: zhangchi5 时间: 2012-3-25 17:29
http://rpg.blue/forum.php?mod=vi ... D368%26typeid%3D368
过度爱推销,过度Love水。。。
这个。。。点开以后就不用解释了。。。
作者: 食人族幽灵 时间: 2012-5-13 15:48
Why?
-
搜狗截图_2012-05-13_15-48-37.png
(9.24 KB, 下载次数: 26)
作者: 200928326 时间: 2012-9-28 21:05
本帖最后由 200928326 于 2012-10-24 05:35 编辑
接受任务时报错了,我加了引号啊,脚本给放的也放好了,这是怎么回事? 明白了,原来逗号也要英语的格式……
-
QQ截图20120928205943.jpg
(17.99 KB, 下载次数: 30)
作者: 不败神话 时间: 2012-10-20 11:47
我按你说的做了,可是有错误啊!
-
KH~){KU0S$A()~(`IZ1}IIR.jpg
(18.3 KB, 下载次数: 27)
这该怎么解决
作者: chd114 时间: 2012-10-20 12:07
如果是像做成暗夜精灵族恐怖之潮之类那样地宫的战役,任务内容不停变怎么办··
作者: 月满月西楼 时间: 2012-11-19 15:32
顶个,用楼主这个脚本,任务系统已经基本完成了,自己在研究改进,要是有能够放弃任务的选项就好了
作者: zhengnanren 时间: 2012-11-19 21:16
完美无破绽。感谢楼主。应用的很好。
作者: 謝小丹 时间: 2012-11-24 12:37
请问完成任务的页面只会显示一面而已么.. ?
貌似很多人有相同情况阿 !
http://rpg.blue/forum.php?mod=vi ... highlight=%E4%BB%BB
没有翻页功能自行添加该怎么做 ?
作者: 延无 时间: 2013-1-28 16:18
跟上面的一样,报错了
这是事件图
脚本检查过都按要求放的,怎么回事……OTZ
作者: 延无 时间: 2013-1-28 16:21
延无 发表于 2013-1-28 16:18
跟上面的一样,报错了
这是事件图
不用了解决了!原来是逗号问题!不好意思=/////=
作者: 小龙快追 时间: 2013-2-6 19:33
本帖最后由 小龙快追 于 2013-2-6 19:37 编辑
先收藏,学习了。。
请问在xp里是不是也一样?
作者: 刘方鑫 时间: 2013-9-8 14:55
怎么不行啊???
作者: dxd123qaz 时间: 2013-12-22 22:28
新手表示不懂。。。这算挖坟吗?。。。我想问一下 如果在一个人那里接取了任务之后 再和他对话 对话的就变了 再然后之后获得了任务物品再和他对话就完成任务这个如何设置?。。。。。 如果有杀怪的任务的话 该怎样设置呢?
作者: 夜飞尔-流星 时间: 2014-1-13 21:21
支持一下.
不过为什么按照楼主的方法改了脚本,菜单里没有出现任务呢?
按我的理解应该是直接有任务一栏的啊.
作者: 雪夜闻龙吟 时间: 2014-3-16 12:39
为啥会有
【脚本”Game_Interpreter”第1411行:发生NoMethodError。
undefined method'get_task'for #<Game_Party:0x335ee74>】这个东西?
作者: DayNight白夜 时间: 2017-4-10 21:52
本帖最后由 DayNight白夜 于 2017-4-10 21:54 编辑
请问同时接受的任务或者已完成的任务超过一页所能显示的任务数量(14个)的时候,第15个任务开始都不能显示任务名称怎么解决,但是任务描述能正常显示,光标也能往下移动。
如图……
-
捕获.PNG
(77.35 KB, 下载次数: 26)
作者: 於汐老於汐 时间: 2019-1-10 18:32
emm这个怎么办····是我哪里弄错了吗
作者: 於汐老於汐 时间: 2019-1-10 18:35
本帖最后由 於汐老於汐 于 2019-1-10 18:46 编辑
这个怎么办?是我哪里弄错了吗
作者: 於汐老於汐 时间: 2019-1-10 22:03
是吗?那我去试试
作者: Terocrim 时间: 2019-3-23 21:30
删掉就行了,最后几行是这样结尾。
@task_type_window.deactivate
@right_window.set_finish(true)
@right_window.set_index(@left_window.index)
end
end
作者: Doolet 时间: 2023-7-4 14:39
能打开界面是能打开,可是我怎么接任务里面显示都是空的....
作者: swwetgirl018 时间: 2023-7-21 22:09
請問如果我要結合原本系列的和這個相融合成一個會比較簡單上手,還是要分開寫比較好排錯?
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |