Project1
标题: 有没有战斗时分前后站位的脚本? [打印本页]
作者: 备用镧桐翎 时间: 2016-10-10 20:52
标题: 有没有战斗时分前后站位的脚本?
理想的是不同站位有不同优劣势、并限制一些动作的系统,另外得兼容全动画战斗,不知道有没有类似的?大概有也不会十全十美吧,如果有愿意写的我可以付现金。
作者: jiushiainilip19 时间: 2016-10-11 18:33
本帖最后由 jiushiainilip19 于 2016-10-11 18:34 编辑
写我不会 但是做一些提示可以
战斗画面是有坐标的
screen_y screen_x screen_z
screen_y screen_x screen_z
这三种
在游戏中每一个角色都有一个固定的待机坐标,这些坐标在全动画战斗脚本中是这样写的
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 取得战斗画面的 X 坐标
#--------------------------------------------------------------------------
def screen_x
# 返回计算后的队伍 X 坐标的排列顺序
if self.index != nil
#......................................................................
return self.index * 90 + 500
#......................................................................
else
return 0
end
end
#--------------------------------------------------------------------------
# ● 取得战斗画面的 Y 坐标
#--------------------------------------------------------------------------
def screen_y
#........................................................................
return 464 - self.index * 110 ;
#........................................................................
end
#--------------------------------------------------------------------------
# ● 取得战斗画面的 Z 坐标
#--------------------------------------------------------------------------
def screen_z
# 返回计算后的队伍 Z 坐标的排列顺序
if self.index != nil
return 4 - self.index
else
return 0
end
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 取得战斗画面的 X 坐标
#--------------------------------------------------------------------------
def screen_x
# 返回计算后的队伍 X 坐标的排列顺序
if self.index != nil
#......................................................................
return self.index * 90 + 500
#......................................................................
else
return 0
end
end
#--------------------------------------------------------------------------
# ● 取得战斗画面的 Y 坐标
#--------------------------------------------------------------------------
def screen_y
#........................................................................
return 464 - self.index * 110 ;
#........................................................................
end
#--------------------------------------------------------------------------
# ● 取得战斗画面的 Z 坐标
#--------------------------------------------------------------------------
def screen_z
# 返回计算后的队伍 Z 坐标的排列顺序
if self.index != nil
return 4 - self.index
else
return 0
end
end
end
看不懂没关系,但是可以从另一个方式去看他,我们把视线转移到Game_Battler 3中!
然后在Game_Battler 3中P出来 例如:
if hit_result == true
# 计算威力
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
p user.screen_y #P 出行动这角色的原点Y坐标 可以看下图!
if user.is_a?(Game_Actor) && user.screen_y==354
power*=100000
p "站位好就是牛"
end
#我方角色在Y==354的时候威力增益100000 请看实际图片如下
if hit_result == true
# 计算威力
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
p user.screen_y #P 出行动这角色的原点Y坐标 可以看下图!
if user.is_a?(Game_Actor) && user.screen_y==354
power*=100000
p "站位好就是牛"
end
#我方角色在Y==354的时候威力增益100000 请看实际图片如下
结果出来了,这个在行动中的角色Y值在464
好了,那我们就有办法治理他了 请看上面的代码
好了 ,我会的只有这些了,高深的没辙了,当然想写出什么效果你可以说出来
我试一试能够告诉你怎么达到(前提是我要会 - -!)
-
QQ截图20161011182814.png
(205.03 KB, 下载次数: 10)
-
QQ截图20161011183126.png
(210.22 KB, 下载次数: 12)
-
QQ截图20161011183134.png
(104.39 KB, 下载次数: 9)
作者: 备用镧桐翎 时间: 2016-10-13 16:20
谢谢回答,没弹消息我没发现有响应了。。不知道你玩过跨过我的尸体没有?我希望的效果差不多就类似。一个是希望能在战斗中移动站位(仅前后移动),可以灵活的应对不同的情况,增加战斗的策略性,另一个是希望拉大不同武器的多样性,例如长武器可能会伤害前排所有人,射击武器前后贯穿,单手武器在后排无法攻击之类的效能差距。我想的模式看起来基本是这样: ;
作者: bboodd 时间: 2016-10-13 17:20
等高手指导,我也想知道,楼主的设想怎么去实现。
作者: jiushiainilip19 时间: 2016-10-14 08:27
单手武器装备无法攻击的效果直接可以用一个if来直接判断就好了
if @active_battler.is_a?(Game_Actor) && @active_battler.weapon_id == xx
p "我不 准你这么做 "
else
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 0
@active_battler.current_action.basic = 0
# 开始选择敌人
start_enemy_select
end
if @active_battler.is_a?(Game_Actor) && @active_battler.weapon_id == xx
p "我不 准你这么做 "
else
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 0
@active_battler.current_action.basic = 0
# 开始选择敌人
start_enemy_select
end
长武器会有几率伤害其前排这个效果 我游戏也用过 我自己的思路是 先 要把 敌人的站位定好然后取出敌人站位坐标
然后在例如敌人是五人 1 2 3
4 5
角色 A佩戴S武器对敌人进行技能攻击. 假如 P出4 5敌人的坐标是 248 384
if user.is_a?(Game_Actor) && user.weapon_id == 1 #需要几率就添加rand(100)<多少自己设置了
for enemy in $game_troop.enemies
if enemy.exist? && enemy!=self
case enemy.screen_x
when 248
enemy.hp-=self.damage and enemy.damage=-self.damage and enemy.damage_pop = true
when 384
enemy.hp-=self.damage and enemy.damage=-self.damage and enemy.damage_pop = true
end
end
end
end
#这是我的一个方法,好的做法是对技能行动结果去搞,我也不怎么会。我也不需要 因为我要做许多特效! 贯穿也是 一个道理
if user.is_a?(Game_Actor) && user.weapon_id == 1 #需要几率就添加rand(100)<多少自己设置了
for enemy in $game_troop.enemies
if enemy.exist? && enemy!=self
case enemy.screen_x
when 248
enemy.hp-=self.damage and enemy.damage=-self.damage and enemy.damage_pop = true
when 384
enemy.hp-=self.damage and enemy.damage=-self.damage and enemy.damage_pop = true
end
end
end
end
#这是我的一个方法,好的做法是对技能行动结果去搞,我也不怎么会。我也不需要 因为我要做许多特效! 贯穿也是 一个道理
作者: 备用镧桐翎 时间: 2016-10-28 19:53
感谢,抱歉没有及时回复,断断续续的看了几遍你的脚本,想多少明白一些再回复,但是结果还是只能看懂一点,实际操作估计完全不行=A=。如果可能还是希望能直接有一个完整的脚本。
ps:而且我的设计也比较怪,其实我的想法是围绕boss战设计战斗的,所以敌人有无站位其实不太重要,主要是不同特点的boss让玩家被迫改变战术,所以其实被贯穿、横扫的主要是玩家队伍。
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |