本帖最后由 匿名 于 2011-7-8 01:44 编辑
简单的随机任务系统因为“任务”这两个字存在,所以风险还是可控的。
基本的设计思路:
1,制作大量的单步零部件(比如,移动到某处、交出某物品、打死某个人)
2,拼装这些部件为一个任务并加入任务状态变化(例如标记当前到第几步了。)
3,文字润色
举例:- class Mission_Esort_Sample1 < Mission_Basic
- attr_accessor :ccname
- attr_accessor :timelimit
- ############################################################
- def initialize(target,timelimit,reward)
- super()
- @ccname = ""
- @timelimit = timelimit
- initial_self(target,reward)
- end
- ############################################################
- def initial_self(target,reward)
- step1 = Mission_Basic_Step.new(self)
- step1.reward = reward
- reward.owner = step1
- step1.check_code = "$game_map.map_id == #{target}"
- step1.check_fail = "@owner.timelimit < ( Graphics.frame_count / Graphics.frame_rate) "
- step1.step_id = 0
- step1.lose_code =<<'LOSE_CODE'
- if $game_temp.transition_processing
- return
- end
- Audio.se_play("Audio/SE/011-System11.ogg")
- sys_ani_battleshout("#{@owner.ccname}:“看来在期限前无法赶到了。”")
- d = $game_variables[12] / 10
- d += 1
- d += rand(20)
- sys_ani_battleshout("任务失败,损失#{d}点声望")
- $game_variables[12] -= d
- $game_party.remove_actor(56)
- @owner.delete_mission
- LOSE_CODE
- step1.win_code =<<'WIN_CODE'
- if $game_temp.transition_processing
- return
- end
- Audio.se_play("Audio/SE/056-Right02.ogg")
- sys_ani_battleshout("#{@owner.ccname}:“太好了!终于到了!\n谢谢你!”")
- @reward.get_it
- @reward.out_flash_test
- $game_party.remove_actor(56)
- @owner.delete_mission
- WIN_CODE
-
- @steps.push(step1)
- end
- ############################################################
- def make_random_name
- k = ["商人","旅行者","使者","观光客"]
- @ccname = k[rand(k.size)]
- #$game_actors[56].name = @ccname
- end
- ############################################################
- def start
- super
- @timelimit += (Graphics.frame_count / Graphics.frame_rate)
- $game_actors[56].name = @ccname
- $game_party.add_actor(56)
- list = [1,3,4,5,7,9,14,16,18,19,20,24,26,35]
- d = list[rand(list.size)]
- $game_actors[56].battler_name = "SA#{d}K"
- $game_actors[56].character_name = "SA#{d}"
- sys_ani_battleshout("#{ccname}加入了队伍!")
- sys_ani_battleshout("#{ccname}:“我们出发吧!”")
- end
- ############################################################
- def can_start?
- if $game_party.full?
- Audio.se_play("Audio/SE/057-Wrong01.ogg")
- sys_ani_battleshout("队伍已满")
- return false
- elsif $game_party.actors.include?($game_actors[56])
- Audio.se_play("Audio/SE/057-Wrong01.ogg")
- sys_ani_battleshout("无法同时进行多个护卫任务")
- return false
- end
- return true
- end
- ############################################################
- end
复制代码 附带石器的某随机任务系统图:
|