设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: dujian15
打印 上一主题 下一主题

[已经解决] 大家好,我想请教一个有关脚本的问题

[复制链接]

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

11
发表于 2012-12-7 13:29:25 | 只看该作者
dujian15 发表于 2012-12-7 08:41
大神您好,我想请教一个问题。

我想返回一个人是否学会哪一种技能例如,例如1号actor学会“特技”和“魔 ...

你想要知道某个对象都有些什么现成方法/函数.首先需要知道他是哪个类的.类名是什么.
角色分为 数据库角色 和 游戏中的角色
数据库角色的类名是 RPG::Actor 实例对象都保存在 $data_actors 这个数组里
游戏中的角色类名是 Game_Actor 实例对象都保存在 Game_Actors 这个类的实例对象 $game_actors 里
你想知道游戏中的角色是否学会某技能.可以去 Game_Actor 这个类里找 或者去他的父类里找.

  1.   #--------------------------------------------------------------------------
  2.   # ● 判定技能是否已经学会
  3.   #--------------------------------------------------------------------------
  4.   def skill_learn?(skill)
  5.     skill.is_a?(RPG::Skill) && @skills.include?(skill.id)
  6.   end
复制代码
这里需要的 skill 参数是 保存在 $data_skills 数组里的 RPG::Skill 类的实例对象...数据库技能

  1. for actor in $game_party.members
  2.   if actor.skill_learn?($data_skills[1])
  3.     msgbox "ok"
  4.   end
  5. end
复制代码
数据库相关类的定义在脚本编辑器里找不到  要去F1里找.

评分

参与人数 1梦石 +1 收起 理由
迷糊的安安 + 1 认可答案 附赠66RPG提供的精美好人卡一张^^.

查看全部评分












你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
140
在线时间
345 小时
注册时间
2009-5-15
帖子
111
12
 楼主| 发表于 2012-12-14 11:18:35 | 只看该作者
后知后觉 发表于 2012-12-7 13:29
你想要知道某个对象都有些什么现成方法/函数.首先需要知道他是哪个类的.类名是什么.
角色分为 数据库角色 ...

大神您好。

在windows类中,需要显示一段文字。

带有控制符的文字的显示方法是draw_text_ex 但是不可以自动换行。

我读了很多脚本,看有的脚本只引用了content

但有的脚本却用到了bitmap
我现在很混乱,能否帮助区分一下?

我现在练习写一个帮助系统。

左侧是一个菜单栏,右侧是主窗口。

通过选择左侧的选项,变换右铡的内容。

如果要一个窗口一个窗口的描绘,很容易实现,但是那样这个脚本没有什么延展性。

我想的做法是model一堆变量,然后其中有一个变量的内容是text = "一堆一堆的文字"+"另一堆一堆的文字",中间还要带上控制符,如"\\n"是换行什么的。

我想需要在主窗口中写一个方法,碰到控制符应该怎么做。

这个很多日文脚本中见到过,不知道默认脚本里有没有可参考的?
敌人自动排列系统    1/1
技能类型着色   1/1
物品着色     0/1
仿网游强化系统    0/1
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

13
发表于 2012-12-14 13:49:37 | 只看该作者
本帖最后由 后知后觉 于 2012-12-14 13:56 编辑
dujian15 发表于 2012-12-14 11:18
大神您好。

在windows类中,需要显示一段文字。


你可以把默认的 Window_Help 看成是你的主窗口
把 物品窗口 装备窗口 技能窗口 这类的看成是你的 左侧选项窗口

窗口类里的 contents 其实就是 Bitmap 类的实例对象.
Sprite 类里的 bitmap 也是 Bitmap 类的实例对象.
这些只不过是方法名而已.
方法名、变量名.只要不取保留字.别的爱怎么叫就怎么叫.便于自己阅读和记忆就好.
关键是他返回的东西是什么类的实例对象.
要查看某个东西的类名是什么. 可以用 class 方法获取.
比如你在某个窗口类的初始化的时候里的 super 下面加一行
msgbox contents.class
然后运行 就能看到 contents 是什么玩意了

自动换行
你看 def draw_text_ex 里面调用的内容 一层一层的往下找
里面调用了一个 process_character
很明显这个就是描绘文字的具体过程...所以就去找 def process_character
里面的注释说 process_normal_character 是描绘普通文字
然后去找 def process_normal_character

  1.   #--------------------------------------------------------------------------
  2.   # ● 处理普通文字
  3.   #--------------------------------------------------------------------------
  4.   def process_normal_character(c, pos)
  5.     text_width = text_size(c).width
  6.     draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
  7.     pos[:x] += text_width
  8.   end
复制代码
text_width 获取描绘当前的文字需要的宽度
pos[:x] 获取当前描绘的 x 坐标
有了这2个东西就可以做判断了
if text_width + pos[:x] > contents_width
  #换行
    pos[:x] = pos[:new_x]
    pos[:y] += pos[:height]
end

换行那2句是从 def process_new_line 里复制过来的











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
140
在线时间
345 小时
注册时间
2009-5-15
帖子
111
14
 楼主| 发表于 2012-12-14 14:35:38 | 只看该作者
后知后觉 发表于 2012-12-14 13:49
你可以把默认的 Window_Help 看成是你的主窗口
把 物品窗口 装备窗口 技能窗口 这类的看成是你的 左侧选 ...

我想给一个类制作一个新的方法。

比如,在默认脚本中,有一个

class A < B

def ini
end

def 方法1
end

def 方法2
end

end



然后我在自己的脚本里想给A追加一个新的方法,我需要重新描述所有的方法,还是直接
class A < B
def 方法3
end
end

?
敌人自动排列系统    1/1
技能类型着色   1/1
物品着色     0/1
仿网游强化系统    0/1
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

15
发表于 2012-12-14 18:31:35 | 只看该作者
本帖最后由 后知后觉 于 2012-12-14 18:42 编辑
dujian15 发表于 2012-12-14 14:35
我想给一个类制作一个新的方法。

比如,在默认脚本中,有一个


直接定义 方法3 就可以了
如果再次定义方法1 方法2 的话 .就会有替换覆盖的作用.
很多脚本冲突就是因为 他们对某个默认脚本中的同一方法都进行了再定义.而实际情况只会以最后一次定义为准.
也就是更靠近 Main 脚本的地方

还有种情况就是在现有基础上给某方法增加点内容.而不是完全替换
可以用  alias 取别名
这是我自装备系统里的一小段

  1.   alias hzhj_equip_system_param_plus param_plus
  2.   def param_plus(param_id)
  3.     plus = hzhj_equip_system_param_plus(param_id)
  4.     val = equips.compact.inject(plus) {|r, e| r += e.gps[param_id] }
  5.     val + RPG::EquipItem.esp(equip_set, param_id)
  6.   end
复制代码
作用就是在现有 param_plus 的效果上追加一点内容











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
140
在线时间
345 小时
注册时间
2009-5-15
帖子
111
16
 楼主| 发表于 2012-12-17 22:30:24 | 只看该作者
后知后觉 发表于 2012-12-14 18:31
直接定义 方法3 就可以了
如果再次定义方法1 方法2 的话 .就会有替换覆盖的作用.
很多脚本冲突就是因为  ...

大神您好,又要麻烦您了。

是这样了,我看到您写过装备脚本,我下一步也打算从装备脚本和战斗系统动刀。

问题1:  初期的想法是这样的,系统中人物的八围 血 魔 物攻 物防 魔攻 魔防 敏捷 幸运

可以被看作是 血 魔 力量 体质 智力 精神 敏捷 幸运 对应三个攻击属性 三个防御属性

我是这么想的,如果想做出职业特色来,就需要让不同的属性决定某种职业的技能伤害或者技能加成。

如 战士这个职业,力量在增加伤害的同时,还增加爆击伤害 表问默许脚本里有没有关于属性换算的部分,比如多少敏捷折算成1%的爆击神马的。


问题 2 战斗系统的描述,我想仿魔力宝贝,增加战斗距离和格子攻击的概念。

具体的描述是这样的:


敌人方画出一个3 * 5矩阵 我方是 3 * 3 的矩阵

敌敌敌
敌 我我我
敌敌敌 我我我
敌 我我我
敌敌敌

当第一排有敌人时 不能攻击到后一排的敌人。

然后也可以定义技能的攻击距离 如弓术和魔法可以不受战斗距离限制。

技能的攻击除了单体和全体外,还可以增加十字攻击 或者打击一排这种。

不求您能告诉我写的方法,我想知道我应该需要先读哪一部分的脚本,如果这么写,会不会影响到重新编写AI?。

问题 3 这个相对简单一点

新的战斗资源 能量 EP值  每回合固定恢复40 最大值100 可以受到一些装备的加成 如 增加到110 同时这个人也使用法力。所以 不能用MP值山寨。

需要找到哪一部分脚本,然后在技能中如何设置?应该是修改备注吧。

问题 4 宠物系统的思路。

我的想法是
1 用不着抓宠物 完全是任务获得 然后再通过任务进化宠物。(脚本解决 无须多言 )

2 宠物和队友一样 但宠物不出现在菜单中 只在特定列表中出现,这个目前我也能做到。

3 宠物也是队友 但不出现在队友的火车中

4 六个人加上三只宠物 队伍一共九人 宠物自动战斗 不需要人来控制。
  但 队伍中的位置需要分人 人物位置 和宠物位置 宠物超过三只 人物超过六人 则不能入队。

以上四个问题比较复杂,如果大神时间 紧张 告诉我需要读哪部分的脚本,我自己找找看。

不知大神还有什么其它的联系方式?
敌人自动排列系统    1/1
技能类型着色   1/1
物品着色     0/1
仿网游强化系统    0/1
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

17
发表于 2012-12-18 00:57:46 | 只看该作者
dujian15 发表于 2012-12-17 22:30
大神您好,又要麻烦您了。

是这样了,我看到您写过装备脚本,我下一步也打算从装备脚本和战斗系统动刀。 ...

1.
除了敏捷和幸运.别的属性好像都是相对独立的 没参与什么东西的计算
处理战斗伤害是调用的 Game_Battler 类的 item_apply
命中.躲避.波动.暴击.什么的都可以通过他找到.

2.
这个其实就是一个 技能、物品 的 【效果范围】的扩展.
Game_Action 类的 make_targets 就是生成 目标对象数组 的
把角色和战斗的2个矩阵看成是2个坐标系.最左上方的那点是 0,0 坐标
这样就可以通过 角色 和敌人的  index 计算出 矩阵中的坐标.
计算方法可以参考 光标窗口类里对光标位置的计算.
然后根据扩展的效果范围寻找作用对象.
可以以未知点的相对坐标为数据来进行设置效果范围.
比如我现在设置一个哈希表 内容是这样的
hash = {13 => [[0,0], [-1, 0], [1, 0], [0, -1], [0, 1]]}
13是新扩展的 scope.其值是一个以相对坐标为数据的数组
所谓的未知点就是玩家手动选择的攻击目标.
比如玩家选择了 index 为 4 的敌人.计算出 4 对应的坐标是 1,1
然后循环这个相对坐标数组  [[0,0], [-1, 0], [1, 0], [0, -1], [0, 1]]
就能算出 5 个坐标.然后就可以找到实际要攻击的敌人.我写的这是个十字坐标.
当然了这是我的方法 你可以自己去寻找别的更高效更方便设置的方法

3.
武器和护甲的父类是 RPG::EquipItem
在 F1 里能找到相关说明. RPG:: 这样开头的都是 数据库 的内容 要去F1里找
要给装备增加新的属性  可以在这个类里定义.
然后具体可以参考 mhp mmp 看默认脚本是怎么把装备属性算进角色能力里去的
至于每回合回复
可以去 Scene_Battle 的 turn_end 里加句子

4.修改 Game_Party 的 battle_members











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
140
在线时间
345 小时
注册时间
2009-5-15
帖子
111
18
 楼主| 发表于 2012-12-18 08:24:31 | 只看该作者
后知后觉 发表于 2012-12-18 00:57
1.
除了敏捷和幸运.别的属性好像都是相对独立的 没参与什么东西的计算
处理战斗伤害是调用的 Game_Battle ...

追问,F1有中文版的么?
完全不懂日文......
敌人自动排列系统    1/1
技能类型着色   1/1
物品着色     0/1
仿网游强化系统    0/1
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
140
在线时间
345 小时
注册时间
2009-5-15
帖子
111
19
 楼主| 发表于 2012-12-20 15:19:16 | 只看该作者
后知后觉 发表于 2012-12-18 00:57
1.
除了敏捷和幸运.别的属性好像都是相对独立的 没参与什么东西的计算
处理战斗伤害是调用的 Game_Battle ...

大神您好,又有新问题请教了。


由于改动战斗系统,可能要重新绘制战场,所以在研究精灵操作。

早期做一些简单的例如技能商店的脚本只,只需要写好window和sence,就可以了。而且可以通过事件,直观的看到。

但是精灵应该如何使用,我现在完全摸不到头脑。

有没有适用的教程可以参考的?

我主要就是想在战斗界面中,在人物和地图之间,再显示一个精灵,就是画我上次说的格子。
敌人自动排列系统    1/1
技能类型着色   1/1
物品着色     0/1
仿网游强化系统    0/1
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
696 小时
注册时间
2011-1-4
帖子
208
20
发表于 2012-12-20 16:30:17 | 只看该作者
dujian15 发表于 2012-12-20 15:19
大神您好,又有新问题请教了。

我跟你一样想做那种有距离的回合制,用地球村的sideview,不过想法有些不同。  

我是想给每个角色开个变量,角色1对应变量1 等等。然后随着变量1改变而改变坐标————同时改变状态。状态限制技能的使用,也就是例如以下这个例子

攻击,除“1米内”状态之外的其他状态都会沉默“攻击”技能。然后用“前进”或“后退”技能则能改变变量和状态。

但是现在卡在了变量改变坐标,其他都搞定了。你能帮下我么
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-24 15:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表