| 赞 | 54 |
| VIP | |
| 好人卡 | |
| 积分 | 59 |
| 经验 | |
| 最后登录 | 2026-9-21 |
| 在线时间 | 1145 小时 |
- 梦石
- 0
- 星屑
- 5901
- 在线时间
- 1145 小时
- 注册时间
- 2013-7-8
- 回帖
- 1850

|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 我是大仙 于 2022-8-30 12:56 编辑
该脚本用来实现在不同的地形环境下战斗会产生不同的地形效果。
如图所示:
使用方法
直接举例:
首先预留一个变量为设定地形信息所用,这个可以直接在脚本中设置,脚本中有备注。
如果你想设计一个“草原效果”,先在“数据库-技能”中随便选一个技能位置(譬如15号技能),在它的备注中写入:
@p[内容]
@r[内容][内容]
@s[内容]
@p[]的[]中的内容指的是:要显示地形介绍的图片的文件名,其保存在游戏内“Pictures”文件夹下。例如要显示草原的地形介绍图,那么你自制一个草原介绍图,然后这个图片的文件名叫“grassland”,那么这里就写入@p[grassland]
@r[][]的[][]中,前一个[]写入“a”、“w”或者“e”。“a”代表地形效果对全体单位生效(敌我双方),“w”代表仅对我方单位生效,“e”代表仅对敌人生效。后一个[]中的内容为数字,代表生效的人数,譬如@r[w][2]代表“对我方随机的两名单位生效”,如果你想对全体单位生效只需要把后一个[]的内容写得大于我方单位人数就行了,比如@r[a][8],因为我方团队中最多有四个人,敌群人数最多有七个(VA默认)所以就实现了“对所有单位生效”。如果写入“0”则没有意义。
@s[]的[]中的内容指的是:状态ID,通常情况下,效果是由给单位添加状态实现的,这里是指定状态的ID,譬如@s[5],那就是给某些单位添加5号状态。
举例:
@p[sonwfield]
@r[w][1]
@s[8]
在战斗开始时候显示“snowfield”,然后给我方随机的一个单位添加8号状态。
这就是工作原理。
设置地形有两种方法,一种是直接指定,另一种是选择区域指定。
直接指定:直接指定就是在设置战斗前,把预留的用来指定地形信息的变量的值设定为对应效果的技能ID,譬如1号变量用来指定信息,15号技能的备注里有设置的地形效果,那就在事件操作中令1号变量的值为15,想改变地形效果只需要改变1号变量的值即可。
区域指定:在该脚本编辑页面中,有备注的两个数组用来设定区域地形效果,请保证两个数组内的元素的数量一样,数组内“区域编号”和“地形效果”一一对应。
在地图设定中,如果有设定在某个区块遇敌的事件,那么当到那个区块的时候就会触发对应的遇敌效果。
样品展示
样品内的图像为自制,其用到的素材来源于百度百科,仅供参考,请千万不要将这些图片用于你的游戏中。
特殊的地形使用方法:
如果你想增加额外的不只是通过添加状态来实现的效果,可以在对应技能备注里写上@sp[内容],这里的“内容”为数字,分别对应个性化的特殊效果,这里可以用脚本编辑,样品中之举例性地展示了一个。
脚本内容
[pre lang="ruby"]#==============================================================================
# ■ Terrain_Function
#------------------------------------------------------------------------------
# 地形效果:在不同的地形,获得不同的战斗加成,此加成主要由给单位添加状态实现。
# 也有一些特殊的地形效果,通过脚本实现。
#------------------------------------------------------------------------------
# 使用方法:在“数据库”的“技能”里预留几个需要产生地形效果的技能编辑框。
# 需要使用通常方式实现地形效果时,在对应地形效果的技能的备注里输入:
# @p[] 在这里,[]中的内容为需要显示的图片的文件名
#
# @r[][] 在这里,第一个[]中的内容为效果范围:“a”表示对敌我双方生效“w”表示对
# 我方单位生效,“e”表示对敌方单位生效。
# 第二个[]中的内容是随机生效的单位数量。
# 例如:@r[w][2]表示对我方随机的两个存活单位生效
#
# @s[] 在这里,[]中的内容为需要添加状态的ID编号。
#
# 直接指定战斗的场合,需要在战斗前把设储存地形信息变量的值设置为对应地形的技能ID。
# 区块内随机遇敌的场合,区块编号和遇敌变量的数组内元素个数要保持一致。
#
#------------------------------------------------------------------------------
# 本脚本适用于RPG Maker Vx Ace
# 使用可以注明出处或者不注明
#------------------------------------------------------------------------------
# 我是大仙
# 2022.8.29
#
#==============================================================================
module TerrainFunction
#是否启用地形效果
UseFunction = true
#储存地形信息的变量编号:
TerrainVariables = 1
#是否在启用地形效果时显示介绍地形效果的图片
TerrainDisplay = true
#显示地形信息的图片编号:
PictrueCode = 1
#所有地形效果的技能ID:
#AllFunction = [15,16,17,18]#此处,你可以添加技能ID,来实现对应地形效果
#全部有地形效果的区块
Square = [1,2,3,4]
#对应区块的效果
SquareFunction = [15,16,17,18]
end
#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
# 处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● 强制附加状态
#--------------------------------------------------------------------------
def force_add_state(state_id)
#if state_addable?(state_id)
add_new_state(state_id) unless state?(state_id)
reset_state_counts(state_id)
@result.added_states.push(state_id).uniq!
#end
end
end
#==============================================================================
# ■ Game_Unit
#------------------------------------------------------------------------------
class Game_Unit
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :in_battle # 战斗中的标志
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize
@in_battle = false
@r = ""
@num = 0
@s = 0
@sp = 0
end
#--------------------------------------------------------------------------
# ● 战斗开始时启用特别效果
#--------------------------------------------------------------------------
def call_special_function
display_pictures if TerrainFunction::TerrainDisplay
apply_function
apply_special_function
end
#--------------------------------------------------------------------------
# ● 以下均用于显示地形效果的图片
#--------------------------------------------------------------------------
def display_pictures
picture
show_picture
end
def picture
$game_troop.screen.pictures[TerrainFunction::PictrueCode]
end
def show_picture
$game_troop.screen.pictures[TerrainFunction::PictrueCode].show(terrain_name, 0,
0, 0, 100, 100, 255, 0)
end
def picture_erase
picture.erase
end
def get_terrain
$data_skills[$game_variables[TerrainFunction::TerrainVariables]]
end
def terrain_name
if /@n\[(\w+?)\]/i =~ get_terrain.note
return $1
end
end
#--------------------------------------------------------------------------
# ● 应用效果
#--------------------------------------------------------------------------
def judge
if get_terrain.note =~ /@r\[(\w+?)\]\[(\d+?)\]/i
@r = $1
@num = $2.to_i
end
end
def judge_state
if /@s\[(\d+?)\]/i =~ get_terrain.note
return @s = $1.to_i
end
end
def judge_special
if /@sp\[(\d+?)\]/i =~ get_terrain.note
@sp = $1.to_i
end
end
def apply_function
judge
if @r == "a"
judge_state
apply_all
elsif @r == "w"
judge_state
apply_we
elsif @r == "e"
judge_state
apply_enemies
else
return
end
end
def apply_all
apply_we
judge
apply_enemies
end
def apply_we
if @num != 0
@num = $game_party.alive_members.length if @num > $game_party.alive_members.length
has_num = []
$game_party.alive_members.each do |actor|
has_num.push(actor.index)
end
while @num > 0
@num -= 1
ra = has_num.length
nnl = rand(ra)
ran_dom = has_num[nnl]
$game_party.alive_members[ran_dom].force_add_state(@s)
has_num.delete_at(nnl)
end
end
end
def apply_enemies
if @num != 0
@num = $game_troop.alive_members.length if @num > $game_troop.alive_members.length
has_num = []
$game_troop.alive_members.each do |enemy|
has_num.push(enemy.index)
end
while @num > 0
@num -= 1
ra = has_num.length
nnl = rand(ra)
ran_dom = has_num[nnl]
$game_troop.alive_members[ran_dom].force_add_state(@s)
has_num.delete_at(nnl)
end
end
end
#--------------------------------------------------------------------------
# ● 应用特别的效果
#--------------------------------------------------------------------------
def apply_special_function
judge_special
if @sp == 1
$game_party.alive_members.each do |magician|
magician.mp = magician.mmp if magician.class_id > 6
end
else
return
end
end
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# 处理玩家人物的类。拥有事件启动的判定、地图的卷动等功能。
# 本类的实例请参考 $game_player 。
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● 执行遇敌处理
#--------------------------------------------------------------------------
def encounter
return false if $game_map.interpreter.running?
return false if $game_system.encounter_disabled
return false if @encounter_count > 0
make_encounter_count
set_terrain_function
troop_id = make_encounter_troop_id
return false unless $data_troops[troop_id]
BattleManager.setup(troop_id)
BattleManager.on_encounter
return true
end
#--------------------------------------------------------------------------
# ● 检测所处的地形标志
#--------------------------------------------------------------------------
def terrain_tag_select
x = @x
y = @y
return $game_map.region_id(x, y)
end
#--------------------------------------------------------------------------
# ● 设置对应的地形效果
#--------------------------------------------------------------------------
def set_terrain_function
ncc = terrain_tag_select - 1
value = TerrainFunction::SquareFunction[ncc]
$game_variables[TerrainFunction::TerrainVariables] = value
end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
# 战斗画面
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 指令“战斗”
#--------------------------------------------------------------------------
def command_fight
next_command
picture_erase
end
#--------------------------------------------------------------------------
# ● 指令“撤退”
#--------------------------------------------------------------------------
def command_escape
picture_erase
turn_start unless BattleManager.process_escape
end
def picture_erase
$game_troop.picture_erase
end
end
#--------------------------------------------------------------------------
# ● BattleManager
#--------------------------------------------------------------------------
module BattleManager
#--------------------------------------------------------------------------
# ● 战斗开始
#--------------------------------------------------------------------------
def self.battle_start
$game_system.battle_count += 1
$game_party.on_battle_start
$game_troop.on_battle_start
$game_party.call_special_function if TerrainFunction::UseFunction
$game_troop.enemy_names.each do |name|
$game_message.add(sprintf(Vocab::Emerge, name))
end
if @preemptive
$game_message.add(sprintf(Vocab::Preemptive, $game_party.name))
elsif @surprise
$game_message.add(sprintf(Vocab::Surprise, $game_party.name))
end
wait_for_message
end
end[/pre]
如果这个脚本没有BUG的话,我会把它移植到RMMZ上去。
范例:链接:https://pan.baidu.com/s/1xKFnPI6UjywaeDPb1gQWIA
提取码:meme
|
评分
-
查看全部评分
|