赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 390 |
最后登录 | 2012-8-29 |
在线时间 | 1 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 1 小时
- 注册时间
- 2007-8-6
- 帖子
- 8
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
大家好!本人闲暇之余,写了这个东东,全为菜鸟和懒人着想,高手可无视(其实本人也很懒,呵呵,自己觉得写脚本太麻烦,所以大部分是直接修改现有脚本。其实话说回来了,自己动手,丰衣足食嘛。)
好了,现在进入正题。
首先,要想把脚本修改成自己想要的,起码先要明白自己想要的脚本功能是什么,
就像这个双倍时间,要实现这个功能就得先考虑一下,从哪几方面入手。
其实双倍时间就是控制一个开关,当这个开关打开的时候,在一定时间内,战斗后得到的经验为平时的双倍。那好,我们就先在脚本中定义一个双倍开关Two_Switches。
首先在Game_Enemy里,在class Game_Enemy < Game_Battler这条上面定义:Two_Switches == 1,这里面的“1”是第一号开关,可以自己随意更改。至于为什么要在Game_Enemy中定义,接着往下看。
开关已经定义好了,那么就要设置双倍经验的效果了。在主程序里,每建立一个敌人角色,都会有相应的数值,既然建立敌人的时候,经验是我们自己输入的固定数值,那我们就应该在脚本中找到敌人全数值获取的脚本,而Game_Enemy这个脚本就是处理敌人的类。现在我们就要修改双倍经验了。
在这个脚本中的172行我们能看到
#--------------------------------------------------------------------------
# ● 获取 EXP
#--------------------------------------------------------------------------
def exp
return $data_enemies[@enemy_id].exp
end
end
这段脚本记录的就是单个敌人的经验,我们从这里入手。把刚才的双倍开关加到这里面来。改成以下的脚本文件。
#--------------------------------------------------------------------------
# ● 获取 EXP
#--------------------------------------------------------------------------
def exp
if $game_switches[Two_Switches]
return $data_enemies[@enemy_id].exp / $game_party.actors.size * 2
else
return $data_enemies[@enemy_id].exp / $game_party.actors.size
end
end
这个脚本里,if $game_switches[Two_Switches]这一条脚本的意思是如果当双倍经验开关为ON时。
return $data_enemies[@enemy_id].exp / $game_party.actors.size * 2 这条脚本的意思是输出战斗后,杀敌所得的经验== 敌人本身经验÷队伍人数×2,在这里顺便把经验均分也带入了,如果不想要经验均分的话,把return $data_enemies[@enemy_id].exp / $game_party.actors.size * 2改成return $data_enemies[@enemy_id].exp * 2就行,$game_party.actors.size就是队伍里的人物数量。
else是否则的意思,和前面的if构成if循环。
else下面的就是双倍经验开关为OFF的时候,经验为正常经验。同样,如果不想要经验均分的话,把 / $game_party.actors.size这条去掉就行了。
好了,到这里我们设置的双倍经验就算基本完成了,如过想试试效果,可以去游戏中建立一个事件,把双倍经验开关打开,然后看看打开前和后的经验所得情况。
好了,下面就让我们顺着上面的思路往下走,刚才我们修改了战斗后获取经验的脚本,但是却不能很好的控制,如果像上面那样,把开关开开,就会不分时间,一直有双倍效果,难道非得人为的拿事件控制吗?
其实,我们的脚本还只是修改了一部分,剩下的还没完成。
游戏里面的双倍经验都是用时间控制的,这个大家都知道,当时间为0秒的时候,双倍经验停止。
那我们就可以用计时器控制。但是软件中的计时器并不是很好用,如果用过的应该有这样的感受,就是控制不是很方便。那我们就自己修改一下计时器脚本,来达到我们自己想要的效果。
首先,对于一个游戏的双倍时间来说,最少领取时间为一小时,但是软件中的计时器却最多是一个小时,当计时器运行的时候显示为59:00,也就是说,领2小时的双倍经验也只能是一个小时的时间,我们就先把计时器显示这个脚本改一下,使它从00:00变成
00:00:00这个样子。
首先在Sprite_Timer这个脚本中,找到
# 生成计时器显示用字符串
min = @total_sec / 60
sec = @total_sec % 60
text = sprintf("%02d:%02d", min, sec)
这条脚本只有分min和秒sec却没有小时hour这个数值,那我们把它修改一下,改成下面的样子。
# 生成计时器显示用字符串
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%2d:%02d:%02d", hour, min, sec)
改成这样就可以了,这样在游戏中显示的计时器就是00:00:00这个样子。
但是这样还是不行的。在主程序中,设置计时器的时间最多也是60分,不能设为更多,那怎么才能叫它变成我们想要的呢?
我们在Interpreter 4这个脚本中,找到190行,这个就是计时器在输出端的输出数值。内容如下:
#--------------------------------------------------------------------------
# ● 计时器操作
#--------------------------------------------------------------------------
def command_124
# 开始的情况
if @parameters[0] == 0
$game_system.timer = @parameters[1] * Graphics.frame_rate
$game_system.timer_working = true
end
# 停止的情况
if @parameters[0] == 1
$game_system.timer_working = false
end
# 继续
return true
end
我们把它改成下面这个样子就可以了:
#--------------------------------------------------------------------------
# ● 计时器操作
#--------------------------------------------------------------------------
def command_124
# 开始的情况
if @parameters[0] == 0
$game_system.timer = @parameters[1] * Graphics.frame_rate * 10
$game_system.timer_working = true
end
# 停止的情况
if @parameters[0] == 1
$game_system.timer_working = false
end
# 继续
return true
end
为什么要在设定的时间上乘10呢?因为这样就可以突破60分钟上限的限制了,如果你想领取1个小时的双,用计时器显示的话,可以在计时器设置的时候用6分钟就是一个小时,因为改完以后的脚本是你输入的数值乘10,如果2个小时,你只需要设置12分钟就可以,怎么样,很简单吧!
像上面的修改应该算是已经完成了,但是有一个问题,不知道你们试完了发现没?
就是自己设置完计时器开启双倍了以后,当计时器的时间为0秒的时候,双倍却没有停止。而且为了一个双倍还占用一个公共事件,确实不是很好的办法。那有什么办法能叫它在0秒的时候自动停止呢?其实还真有一个办法能作到这一点。俗话说:羊毛出在羊身上,既然是计时器控制双倍时间,那我们还的从计时器脚本入手。
在Sprite_Timer脚本里我们修改完的计时器显示脚本下面,也就是在:
# 生成计时器显示用字符串
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%2d:%02d:%02d", hour, min, sec)
# 描绘计时器
下面,我们加上两行脚本,用来控制双倍时间的自动取消。内容如下:
if $game_system.timer == 0
# 更改双倍经验时间开关为OFF
$game_switches[Two_Switches] = false
end
这条脚本的意思就是当计时器秒数为0的时候,自动关闭双倍开关,这样我们就不用拿事件控制双倍时间的关闭了。去试一下效果吧!
到这里,我们的双倍时间就修改完毕了。其实并不难,主要就是靠自己的思考和实践,其实同类的脚本修改还很多,比如在脚本中加变量控制什么的,大家自己多努力一下,很快就可以自己修改了。大家多多努力哦:)不会写脚本或者和鄙人一样懒的写脚本的同志们,就用这个方法自己改脚本吧:)不过改之前也要尊重一下脚本的作者,不要把人家的拿来改一下就说是自己的哦。
|
|