赞 | 2 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 4954 |
最后登录 | 2024-3-18 |
在线时间 | 54 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 81
- 在线时间
- 54 小时
- 注册时间
- 2008-12-24
- 帖子
- 345
|
2楼
楼主 |
发表于 2009-7-9 23:15:17
|
只看该作者
[范例]基于本人所发的任务脚本--思路解析
本帖最后由 kula1900 于 2009-7-15 10:36 编辑
#------------------------------------------------------------------------------
# □模块定义
#------------------------------------------------------------------------------
module RPG
#----------------------------------------------------------------------------
# □类定义
#----------------------------------------------------------------------------
class Task
#-------------------------------------------------------------------------
# □ 常量设置
# □ 任务难度最大值
#-------------------------------------------------------------------------
DIFFICULT = 5
#-------------------------------------------------------------------------
# □ 实例变量
#-------------------------------------------------------------------------
attr_accessor :id
attr_accessor :name
attr_accessor :line
attr_accessor :description
attr_accessor :lv_stint
attr_accessor :difficult
attr_accessor :glod
attr_accessor :exp
attr_accessor :items
attr_accessor :weapons
attr_accessor :armors
attr_accessor :ditto_accept
attr_accessor :need
attr_accessor :need_items
attr_accessor :need_items_no
attr_accessor :need_weapons
attr_accessor :need_weapons_no
attr_accessor :need_armors
attr_accessor :switch_string
attr_accessor :need_armors_no
attr_accessor :need_switch
attr_accessor :need_variable
attr_accessor :need_variable_situation
attr_accessor :need_variable_value
attr_accessor :signature
attr_accessor :initialize_signature
attr_accessor :need_enemie
attr_accessor :need_enemie_no
# □初始化
def initialize
#------------------------------------------------------------------------
# □任务一般数据
#------------------------------------------------------------------------
# 任务编号
@id = 0
# 任务名称
@name = ""
# 任务线型--字符串
@line = ""
# 任务在任务栏中显示的说明和提示
@description = ""
# 任务等级限制--数据
@lv_stint = 0
# 任务难度描绘---0……DIFFICULT---会自动生成★☆等等---不要填浮点数
@difficult = 0
#------------------------------------------------------------------------
# □任务奖励数据
#------------------------------------------------------------------------
# 金币
@glod = 0
# 经验
@exp = 0
# 物品ID
@items = 0
# 武器ID
@weapons = 0
# 防具ID
@armors = 0
# 其他情况自己是奖励
#------------------------------------------------------------------------
# □任务完成判定数据
#------------------------------------------------------------------------
# 任务完成条件--需要下列哪些总数
@need = 0
# 任务完成--条件1--需要物品ID
@need_items = 0
# 任务完成--条件1--分支--需要物品i 几个
@need_items_no = 0
# 任务完成--条件2--需要武器ID
@need_weapons = 0
# 任务完成--条件1--分支--需要武器i 几个
@need_weapons_no = 0
# 任务完成--条件3--需要防具ID
@need_armors = 0
# 任务完成--条件3--分支--需要防具i 几个
@need_armors_no = 0
# 任务完成--条件4--需要开关ID 为ON 状态
@need_switch = 0
# 任务完成--分歧--用文字描绘开关ID的概念
# 就是所他为嘛没有打开--你还需要跟"who"对话--跟谁对话一定要写上
@switch_string = ""
# 任务完成--条件5--需要变量ID
@need_variable = 0
#------------------------------------------------------------------------
# ●任务完成--条件5--分支情况---如果以上等于0 下面的既不成立
# ●-3 的时候是 不是数字--即字符串
# ●-2 的时候是 小于等于
# ●-1 的时候是 小于
# ● 0 的时候是 等于
# ● 1 的时候是 大于
# ● 2 的时候是 大于等于
# ● 3 的时候是 以外
#------------------------------------------------------------------------
@need_variable_situation = 0
# 任务完成--条件5--分支-需要变量@need_variable 的值
@need_variable_value = 0
# 任务完成--条件6- 需要战胜的敌人数据库ID
@need_enemie = 0
# 任务完成--条件6-分支---需要战胜的敌人I---几个
@need_enemie_no = 0
end
end
end
以上是追加的模块RPG定义Task用于以后的读写
以下是写入脚本~~确认无误后 测试游戏后--出现Task.rxdata删除脚本
no = 1
task = []
task[no] = RPG::Task.new
task[no].id = 0
task[no].name = "新手任务"
task[no].line = "主线"
task[no].description =
"走到第二个人那里去听完废话,听完后到我身边报道=======
========"
task[no].lv_stint = 0
task[no].difficult = 0
task[no].glod = 1000
task[no].exp = 100
task[no].need = 3
task[no].items = 10
task[no].need_items = 10
task[no].need_items_no = 20
task[no].need_switch = 1
task[no].need_enemie = 1
task[no].need_enemie_no = 5
task[no].switch_string = "你好像要跟一位大姐姐对话哦"
save_data(task, "Data/Task.rxdata")
以下是基于脚本中敌人类没有 计数器的添加
#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
# 处理敌人的类。本类在战斗中起到计数器作用
#==============================================================================
class Game_Enemys < Game_Battler
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
@data = []
end
#--------------------------------------------------------------------------
# ● 获取任务
# id : 敌人 ID
#--------------------------------------------------------------------------
def [](id)
if id > 999 or $data_enemies[id] == nil
return nil
end
if @data[id] == nil
@data[id] = Game_Enemys_Count.new
end
return @data[id]
end
end
class Game_Enemys_Count
#--------------------------------------------------------------------------
# ● 初始化对像
# id : 敌人 ID
#--------------------------------------------------------------------------
def initialize
@count = 0
end
#--------------------------------------------------------------------------
# ● 计数器数据
#--------------------------------------------------------------------------
def count
return @count
end
#--------------------------------------------------------------------------
# ● 计数器+
#--------------------------------------------------------------------------
def add
@count += 1
end
#--------------------------------------------------------------------------
# ● 计数器-
#--------------------------------------------------------------------------
def by
@count -= 1
end
end
然后在Game_Battler (分割定义 3)
在基本攻击 & 特技攻击中的计算公式中加入
# HP 的伤害计算
self.hp -= self.damage
# 如果承受攻击的是敌人
if self.is_a?(Game_Enemy)
# 如果敌人hp 小于等于0
if self.hp <= 0
# 获取ID
@enemy_id = self.id
# 下面有两种方法增加计数器一种是无任务即清零,有任务即即时
# 第二种是无论是否有任务都会不会清零---这里采用第二种--直接计数
$game_enemys[@enemy_id].add
end
end
然后请在 游戏开始时添加
$data_tasks = load_data("Data/Task.rxdata")
$game_tasks = Game_Tasks.new
$game_enemys = Game_Enemys.new
save 中
Marshal.dump($game_tasks, file)
Marshal.dump($game_enemys, file)
load 中
$game_tasks = Marshal.load(file)
$game_enemys = Marshal.load(file)
而任务主要判断完成过程脚本如下
#==============================================================================
# ■ Game_Tasks
#------------------------------------------------------------------------------
# 处理任务序列的类。本类的实例请参考
# $game_tasks。
#==============================================================================
class Game_Tasks
attr_accessor:all_id
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
@data = []
@all_id = []
@all_id[0] = nil
end
#--------------------------------------------------------------------------
# ● 获取任务
# task_id : 任务 ID
#--------------------------------------------------------------------------
def [](task_id)
if task_id > 999 or $data_tasks[task_id] == nil or $game_tasks.all_id.include?(task_id) == false
return nil
end
# 获取真正的ID
@id = @all_id[task_id]
if @data[task_id] == nil
@data[task_id] = Game_Task.new(@id)
# 是否完成初始化
@data[task_id].completion = false
end
return @data[task_id]
end
#--------------------------------------------------------------------------
# ● 接受任务
#--------------------------------------------------------------------------
def accept(task_id)
@all_id[$game_tasks.all_id.size] = task_id
end
end
#==============================================================================
# ■ Game_Task
#------------------------------------------------------------------------------
# 处理任务的类。本类在 Game_Tasks 类 ($game_tasks)
# 的内部使用
#==============================================================================
class Game_Task
# 任务数据库ID
attr_accessor:id
# 任务完成标志
attr_accessor:completion
# 任务从接受到完成总共击杀个数
attr_accessor:enemie
# 人物名字
attr_accessor:name
# 人物名字
attr_accessor:need
#--------------------------------------------------------------------------
# ● 初始化对像
# task_id : 任务 ID
#--------------------------------------------------------------------------
def initialize(task_id)
super()
setup(task_id)
end
#--------------------------------------------------------------------------
# ● 设置
# task_id : 任务 ID
#--------------------------------------------------------------------------
def setup(task_id)
task = $data_tasks[task_id]
@task_id = task_id
@name = task.name
i = $data_tasks[task_id].need_enemie
no = $data_tasks[task_id].need_enemie_no
no += $game_enemys.count
@enemie = no
@need = $data_tasks[task_id].need
end
#--------------------------------------------------------------------------
# ● 获取任务 ID
#--------------------------------------------------------------------------
def id
return @task_id
end
#-------------------------------------------------------------------------
# □ 任务完成--task_id 任务id--自动识别 == 事件中无需加入条件分歧
#-------------------------------------------------------------------------
def fulfil
task_id = @task_id
# 如果是该脚本能识别的条件下
if $data_tasks[task_id].need != 0
if $data_tasks[task_id].need_items != 0
i = $data_tasks[task_id].need_items
if $game_party.item_number(i) >= $data_tasks[task_id].need_items_no
@need -= 1
else
p "你身上的物品#{$data_items.name}不够"
end
end
if $data_tasks[task_id].need_weapons != 0
i = $data_tasks[task_id].need_weapons
if $game_party.weapon_number(i) >= $data_tasks[task_id].need_weapons_no
@need -= 1
else
p "你身上的物品#{$data_weapons.name}不够"
end
end
if $data_tasks[task_id].need_armors != 0
i = $data_tasks[task_id].need_armors
if $game_party.armor_number(i) >= $data_tasks[task_id].need_armors_no
@need -= 1
else
p "你身上的物品#{$data_armors.name}不够"
end
end
if $data_tasks[task_id].need_switch != 0
i = $data_tasks[task_id].need_switch
if $game_switches == true
@need -= 1
else
p "#{$data_tasks[task_id].switch_string}"
end
end
if $data_tasks[task_id].need_variable != 0
i = $data_tasks[task_id].need_variable
# 变量特定值
value = $data_tasks[task_id].need_variable_value
# 游戏变量现在值
game_value = $game_variables
#------------------------------------------------------------------------
# ●-3 的时候是 不是数字--即字符串
# ●-2 的时候是 小于等于
# ●-1 的时候是 小于
# ● 0 的时候是 等于
# ● 1 的时候是 大于
# ● 2 的时候是 大于等于
# ● 3 的时候是 以外
#------------------------------------------------------------------------
case $data_tasks[task_id].need_variable_situation
when -3
# 是数字的情况下
if game_value.is_a?(Numeric)
p "任务尚未完成--仍需要努力啊!"
else
@need -= 1
end
when -2
if game_value <= value
@need -= 1
else
p "任务尚未完成--仍需要努力啊!"
end
when -1
if game_value < value
@need -= 1
else
p "任务尚未完成--仍需要努力啊!"
end
when 0
if game_value = value
@need -= 1
else
p "任务尚未完成--仍需要努力啊!"
end
when 1
if game_value > value
@need -= 1
else
p "任务尚未完成--仍需要努力啊!"
end
when 2
if game_value >= value
@need -= 1
else
p "任务尚未完成--仍需要努力啊!"
end
when 3
if game_value != value
@need -= 1
else
p "任务尚未完成--仍需要努力啊!"
end
end
end
if $data_tasks[task_id].need_enemie != 0
i = $data_tasks[task_id].need_enemie
# 当计数器大于等于要求被K的
if $game_enemys.count >= $game_tasks[task_id].enemie
@need -= 1
else
k = $game_tasks[task_id].enemie - $game_enemys.count
p "还有#{k}#{$data_enemies.name}"
end
end
end
# 最后返回@need 的值
if @need == 0
@completion = true
end
end
end
一些显示等 请参照自己实际情况而定义
思路在于 用一些数组 写入到文件后然后读取出来 生成 类似#{RPG::Task:16进制}代码后用脚本读取 |
|