Project1

标题: 【教程】让汝的游戏多一个属性(类似于HP、SP) [打印本页]

作者: 退屈£无聊    时间: 2010-10-10 10:49
标题: 【教程】让汝的游戏多一个属性(类似于HP、SP)
本帖最后由 退屈£无聊 于 2010-10-24 14:39 编辑

本来想把这功能放的将要发布的游戏当中的说- - 也不知道是否曾经有人发布过这类的教程。
我还是厚颜无耻地发表一下。
这有什么用处呢。?主要是能为你的游戏增加一个除了HPSP以外的另外一个P。(这里暂时盗用TP)
方便那些想做点什么的人 - -,本教程纯属渣物,有一定脚本功底的人慎入。
通过这个教程可以任由汝增加多少P哦。从AP-ZP都可以 ( - -!
教程前言:
在更改脚本之前要先备份哦!小心餐具。
一、增加TP的变量
我们都知道,游戏中HPMP相关的变量基本上是HP、SP或者MAXHP、MAXSP,所以要填加一个TP,也必须添上与其相同的变量。
控制战斗者的部分主要是Game_Battler,于是大家可以打开脚本编辑器找到Game_Battler 1,在一开始的变量设置里增加一个变量。
  1. attr_reader   :tp            #TP
复制代码
再在初始化对象里增加几行字
  1. @tp = 0
  2. @maxtp_plus = 0
复制代码
由于在原脚本中本就定义了HP和MAXTP_PLUS,我们也要照做。
二、仿照HP、MP设置设定TP的最大值及其变动
继续翻啊翻,我们可以翻到这么一处脚本
  1. #--------------------------------------------------------------------------
  2.   # ● 获取 MaxSP
  3.   #--------------------------------------------------------------------------
复制代码
把其复制一遍,或手动敲入,改成
  1. #--------------------------------------------------------------------------
  2.   # ● 获取 MaxTP
  3.   #--------------------------------------------------------------------------
  4.   def maxtp
  5.     n = [[base_maxtp + @maxtp_plus, 0].max, 9999].min
  6.     n = [[Integer(n), 0].max, 9999].min
  7.     return n
  8.   end
复制代码
类似的,找到设置MAXSP的地方,照样的。。。
  1. #--------------------------------------------------------------------------
  2.   # ● 设置 MaxTP
  3.   #     maxtp : 新的 MaxTP
  4.   #--------------------------------------------------------------------------
  5.   def maxtp=(maxtp)
  6.     @maxtp_plus += maxtp - self.maxtp
  7.     @maxtp_plus = [[@maxtp_plus, -9999].max, 9999].min
  8.     @tp = [@tp, self.maxtp].min
  9.   end
复制代码
再增加控制TP改变的地方。
  1. #--------------------------------------------------------------------------
  2.   # ● 更改 TP
  3.   #     tp : 新的 TP
  4.   #--------------------------------------------------------------------------
  5.   def tp=(tp)
  6.     @tp = [[tp, maxtp].min, 0].max
  7.   end
复制代码
如果汝还需要在全恢复时增加TP,在全恢复(recover_all)里增加这么一行
  1. @tp = maxtp
复制代码
设置到这里还不够,回到脚本选择框。
找到Game_Actor
在设置中跟 HP、SP一样增加
  1. @tp = maxtp
复制代码
  1. @maxtp_plus = 0
复制代码
找到
  1. #--------------------------------------------------------------------------
  2.   # ● 获取基本 MaxSP
  3.   #--------------------------------------------------------------------------
  4.   def base_maxsp
  5.     return $data_actors[@actor_id].parameters[1, @level]
  6.   end
复制代码
这段有什么用呢?这段是获取当前角色最大SP值用的。如果这里设置错了那么整个系统就全部报废了哦。
跟上面一样,复制一遍再把所有的SP改为TP,但是这里要注意了,默认的档案里是没有TP的曲线的。我们需要自己动手增加一条直线(只能是直线- -)
  1. $data_actors[@actor_id].parameters[1, @level]
复制代码
改为
  1. @level * 40 + 20
  2. # 40为你每级增加的数,20为0级的初始值
  3. #照此,1级为60,2级为100
复制代码
当然了,你也可以把它设置的不同一点。比如说,根据职业的不同- -
  1. case @class_id
  2. when 1
  3. return @level * 50 + 1
  4. when 2
  5. when 3
  6. when 4
  7. ...
  8. end
复制代码
这段怎么用呢?case 比较直白的说是获取某个变量的值,在..的情况下,执行什么脚本
例如,在职业为1的情况下,角色的TP初始值为1,每级增加50哦。
在改变等级时,也要改变TP的大小- -
找到
  1. #--------------------------------------------------------------------------
  2.   # ● 更改 EXP
  3.   #     exp : 新的 EXP
  4.   #--------------------------------------------------------------------------
  5.   def exp=(exp)
复制代码
,在END前填加
  1. @tp = [@tp, self.maxtp].min
复制代码
这样就在游戏里彻底增加了这么一个变量。
三、TP的显示
太简单了,仿照Window_Base 里的显示HP、MP,自己敲进去这么一段
  1. #--------------------------------------------------------------------------
  2.   #     actor : 角色
  3.   #     x     : 描画目标 X 坐标
  4.   #     y     : 描画目标 Y 坐标
  5.   #     width : 描画目标的宽
  6.   #--------------------------------------------------------------------------
  7.   def draw_actor_tp(actor, x, y, width = 144)
  8.     # 描绘字符串 "TP"
  9.     self.contents.font.color = system_color
  10.     self.contents.draw_text(x, y, 32, 32, "TP")
  11.     # 计算描绘 MaxTP 所需的空间
  12.     if width - 32 >= 108
  13.       sp_x = x + width - 108
  14.       flag = true
  15.     elsif width - 32 >= 48
  16.       sp_x = x + width - 48
  17.       flag = false
  18.     end
  19.     # 描绘 TP
  20.     self.contents.font.color = actor.tp == 0 ? knockout_color :
  21.       actor.tp <= actor.maxtp / 4 ? crisis_color : normal_color
  22.     self.contents.draw_text(sp_x, y, 48, 32, actor.tp.to_s, 2)
  23.     # 描绘 MaxTP
  24.     if flag
  25.       self.contents.font.color = normal_color
  26.       self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  27.       self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxtp.to_s)
  28.     end
  29.   end
复制代码
在所有draw_acotr_hp后都增加draw_actor_tp,注意x\y的值哦。
四、使用TP
变量做出来了不用可不行。但默认的游戏编辑器没有办法执行啊。?怎么办呢。?
比方说我在用第一个技能(治疗)时,要求必须有50点体力。
找到Game_Actor的可以使用特技判定,增加
  1. if $data_skills[skill_id].id == 1
  2.       return false if @tp < 50
  3.     end
复制代码
这样就能保证在TP低于50时不能使用该技能。
如果要在使用后减少体力,则  = =
找到Scene_Battle 4 中的● 生成特技行动结果
在扣除SP后增加
  1. if @skill.id == 1
  2.       @active_battler.tp -= 50
  3.     end
复制代码
这样就能在使用时扣除50点体力了。
(喂,你可别告诉我只能在ID为1情况下才能用哦。)
最终效果图


物品同理。光耗费体力不恢复也是不行的。至于这个……基本上把skill改为item就大功告成了- -

编辑哟==给伸手党的福音==以下是工程
新的属性范例.rar (285.49 KB, 下载次数: 1638)
但还是鼓励各位自己动手试试。
=================编辑一之敌人TP的设定====================
我到现在还没想好敌人弄那么复杂干什么。
不过既然有人问了,那我就告诉你好了。
敌人的设定是在Game_Enemy中的。
  1. #--------------------------------------------------------------------------
  2.   # ● 获取基本 MaxSP
  3.   #--------------------------------------------------------------------------
  4.   def base_maxsp
  5.     return $data_enemies[@enemy_id].maxsp
  6.   end
复制代码
同样的,我们复制一遍并作相应改动。
但是呢,敌人没有等级这一个属性。。
所以你也可以直接把SP搬过来用。
或者对SPHP作加法减法乘法除法随汝的便了。
同样的,按照技能的方法设定就可以了。
作者: 九夜神尊    时间: 2010-10-10 11:10
写的真的很不错!
鼓励 之
经验+9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
作者: 仲秋启明    时间: 2010-10-10 13:28
来研究一下,一直想要做一个这样的效果,一直没有动手研究
作者: 越前リョーマ    时间: 2010-10-10 15:11
写的还是挺详细的……
不过如果物品也用判断技能那个办法做,不如直接带个公共事件加变量 = =
作者: 退屈£无聊    时间: 2010-10-10 15:35
也是哈= =
不过如果是要用公共事件的话。。。。。
作者: 嫁衣    时间: 2010-10-10 16:54
Window_Skill也可以适当改一下哈,技能不同显示不同的skill.sp_cost或skill.tp_cost
作者: bzzdhm    时间: 2010-10-10 17:06
喵的
我还以为就我做出来了
算了,反正我已经完成了一套包括回复之类的东西,可怜了我的能力上升功能啊
作者: 退屈£无聊    时间: 2010-10-13 17:21
回复 嫁衣 的帖子
一般来说..这方法不可行吧- -?
毕竟没有数据库里的设定

   
作者: 黑崎一护    时间: 2010-10-20 19:30
谢谢,终于找到了,个人感觉蛮难。
作者: 退屈£无聊    时间: 2010-10-21 18:18
补充说明:

如果....如果你认为特技界面只显示法术消耗不美观的话,可以在显示消耗时增加判断.
然后再显示你想要的特定数字.

呵呵,个人感觉蛮麻烦的. - -
作者: w21367245    时间: 2010-10-23 23:19
都是人才呀!!!
作者: 鬼小1    时间: 2010-10-27 18:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪翼飞马    时间: 2010-11-3 23:45
很好,受教了。看起来应该挺兼容的?
不知道是不是可以用这个做出怒气值一类的东西,比如挨打时增加什么的?
作者: bbaugle    时间: 2010-11-7 06:44
退屈£无聊 发表于 2010-10-21 18:18
补充说明:

如果....如果你认为特技界面只显示法术消耗不美观的话,可以在显示消耗时增加判断.

我不是纯引.
作者: 退屈£无聊    时间: 2010-11-7 09:33
回复 bbaugle 的帖子

嘛。汝想说什么。 - -?
作者: Fraude    时间: 2010-11-9 05:09
你的范例等级上升了。并不增加TP上限?因为在状态窗口中开不到TP这项。不知道我说错没?
作者: flyfairy    时间: 2011-3-17 16:38
跟伤害处理有关就不行了,没有计算公式:Q




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