Project1

标题: 战斗胜利后的处理 [打印本页]

作者: timiesea    时间: 2013-11-9 15:59
标题: 战斗胜利后的处理
我跟各位朋友一样,都在用RMVA实现着自己小小的梦想。这个过程一定是曲折,但是前进的。我们在这一路上都应该互帮互助。

从今天早上到现在,我一直在探索一种杀敌任务(要求杀死多少的敌人才能完成的任务)的逻辑,现在经过初步测试,终于完成了,我将这个方法分享给大家。

注:
1.在这个范例中,任务是通过物品的形式出现的,即获得物品就默认接受任务。使用物品可以查看任务描述,如果满足提交条件还可以进行提交。
2.这个范例应该还有很多需要改进的地方。
3.如果有独立的任务系统,可以跳过前面的步骤,直奔脚本。
4.如果完整按照这个范例来实现杀敌任务系统的话,有以下几个弊端:公共事件太多;物品太多;变量太多;战斗胜利后的判断代码太多;在综合敌群中(敌群中有包含任务怪以外的怪物)功能较弱。

好!我们开始吧。

一、创建一个任务物品:


注:
1.效果范围一定要选择无,这样做的目的是为了使用该物品就立刻执行公共事件,无需选择人物。
2.公共事件稍候讲解。
3.使用场合:也可以设置在战斗中也能使用,不过战斗没有胜利,杀敌数不会增加。

二、设定任务怪:只需要选择一种怪物就行,图略。

注:在本例中,任务怪的ID是37,名称是豺狼战士。

三、设定敌群:一定要是包含任务怪的敌群,图略。

注:在本例中,敌群的ID是37,只有2个怪物,均是豺狼战士。

四、新建一个公共事件:


注:
1.触发条件就选择正常执行。
2.在本例中,使用第13号变量来存储已经杀死的任务怪数目。
3.公共事件逻辑:使用物品后出现任务描述,包括完成条件和奖励。之后再出现当前的任务进度,如果已经满足完成条件则让玩家选择是否提交。如果玩家选择是,则奖励物品给玩家,删除1个任务物品(第一步创建的,因为可以堆叠,所以可以完成多次,但每次均要使用),设置13号变量(这个不必纠结,具体情况具体分析)减去任务杀敌目标(本例是10个)。如果没有满足任务完成条件,则只出现当前的任务进度。
4.玩家选择提交任务后,一定要删除1个任务物品,并且减去变量。

五、重头戏:脚本:


注:
1.这个module在默认代码中有存在,我们新建一个,防止修改默认脚本。
2.27代表任务物品ID。
3.37代表敌群ID。
4.if $game_party.has_item?(item,false) and $game_troop.troop == troops:如果队伍里存在ID为27的物品且当前的敌群是ID为37的敌群。
5.2代表当前敌群任务怪的数量。
6.if语句可根据具体情况稍作更改。
7.这段脚本初步可以使用,但有个缺点:只要出现任务怪的敌群,都必须进行判断。

六、测试:

1.未遇敌前:第13号变量显示0,表示当前没有杀死任务1个任务怪。


2.遇敌:


3.战斗胜利后:第13号变量显示2,表示当前已经杀死2个任务怪。


4.使用任务物品的测试过程略。

总之,这个范例只是个初步的范例,还有很多需要改进的地方。我只是给大家分享在战斗胜利后,增加任务杀敌数的方法。

对于新手而言,脚本是十分讨厌的,虽然不可避免,但能省则省。所以本例并没有采用论坛里流行的任务系统。但杀敌数的计算还是需要小小的脚本。尽管如此,还是折磨了我将近一天。

希望这个范例能给大家一点启示。对这个范例的改进我会写在跟贴中。
作者: 怪蜀黍    时间: 2013-11-10 11:29
首先鼓励发布技术。我有几点要说:
1、因为讨伐令不止一种,所有最好能加一个定义如:def item_task ,然后在这个定义里面写XX讨伐令的具体内容,默认定义只要加一句item_task即可,免得像XP的默认定义那样过于臃肿,一个定义就数百行。
2、利用块化简定义,比如
  1. Item_Task = {27 => 37, 28 => 38, 29 => 39} # 物品和队伍常数对应哈希表
  2. def item_task
  3.   Item_Task.each do |i|
  4.     item = $data_items[i[0]]
  5.     troop = $data_troops[i[1]]
  6.     if $game_party.has_item?(item,false) and $game_troop.troop == troop
  7.       $game_variables[13] += troop.size # 最好这样写,但是也有弊端,我会在第三点里说
  8.     end
  9.   end
  10. end
复制代码
3、如果直接在这里就计算加上队伍敌人数量,万一敌人逃跑则也会被加入被【杀死】的行列,不符合逻辑,所以还应该加上一个关于敌人是否死亡的判断,具体写法参考经验值的获得。
作者: timiesea    时间: 2013-11-10 18:05
protosssonny 发表于 2013-11-10 11:29
首先鼓励发布技术。我有几点要说:
1、因为讨伐令不止一种,所有最好能加一个定义如:def item_task ,然后 ...

还可以这样写啊!受教不少。
作者: 1692704992    时间: 2013-11-17 10:24
那个关于音乐的素材我倒是有,很好听http://dl.vmall.com/c0z9u3yl0b喜欢的话来我空间。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1