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

Project1

 找回密码
 注册会员
搜索
查看: 1081|回复: 7
打印 上一主题 下一主题

[有事请教] 定义技能的攻击范围在Game_Battler还在Scene_Battle里

[复制链接]

Lv4.逐梦者

梦石
0
星屑
7842
在线时间
1348 小时
注册时间
2015-8-15
帖子
754
跳转到指定楼层
1
发表于 2023-4-26 09:02:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 金芒芒 于 2023-4-26 13:22 编辑

下面这段脚本应该定义在Game_Battler还在Scene_Battle里面
RUBY 代码复制
  1. def skill_旋舞斩
  2.   for enemy in $game_map.events.values
  3.     next if enemy.return_erased2
  4.     next if enemy.list == nil
  5.     next if enemy.list[0].code != 108
  6.     next if enemy.list[1].parameters[0] != "敌人"
  7. px = $game_player.x
  8. py = $game_player.y
  9. if (px - enemy.x).abs <= 2 and (py - enemy.y).abs <= 1
  10. case rand(10)  
  11. when 0..8
  12.       enemy.damage = $data_skills[@skill.id].power
  13.       enemy.damage_pop = true
  14. case $game_player.direction
  15.     when 2
  16.     enemy.jump(0, 1)
  17.     when 4
  18.     enemy.jump(-1, 0)
  19.     when 6
  20.     enemy.jump(1, 0)
  21.     when 8
  22.     enemy.jump(0, -1)
  23.     end
  24. when 9
  25.       enemy.damage = $data_skills[@skill.id].power*2
  26.       enemy.damage_pop = true
  27.       enemy.critical = true
  28. case $game_player.direction
  29.     when 2
  30.     enemy.jump(0, 1)
  31.     when 4
  32.     enemy.jump(-1, 0)
  33.     when 6
  34.     enemy.jump(1, 0)
  35.     when 8
  36.     enemy.jump(0, -1)
  37.     end
  38.     end
  39. Mess_Text.write ("#{enemy.list[2].parameters[0]}受到#{enemy.damage.to_i}伤害。")
  40.       end #伤害范围
  41.     end #定义event
  42. end #旋舞斩技能

炫舞斩.png (34.85 KB, 下载次数: 25)

炫舞斩.png

炫舞斩2.png (23.23 KB, 下载次数: 26)

炫舞斩2.png

Lv5.捕梦者

梦石
0
星屑
36472
在线时间
10806 小时
注册时间
2009-3-15
帖子
4815
2
发表于 2023-4-26 12:12:22 | 只看该作者
默认没有ARPG
所以都和这两个无关
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7842
在线时间
1348 小时
注册时间
2015-8-15
帖子
754
3
 楼主| 发表于 2023-4-26 13:13:03 | 只看该作者
本帖最后由 金芒芒 于 2023-4-26 13:14 编辑
soulsaga 发表于 2023-4-26 12:12
默认没有ARPG
所以都和这两个无关


我想用炫舞斩替换掉万箭齐发 脚本改成arpg  去掉SRPG 请问有什么好的思路吗




  1. class Scene_Map
  2.   
  3.   
  4.   
  5.   #--------------------------------------------------------------------------
  6.   # ● 生成特技行动结果  [SRPG]
  7.   #--------------------------------------------------------------------------
  8.   def make_skill_action_result_srpg(id1,id2,skill)
  9.     # 行动者取得
  10.     @attacker = @armies[id1]
  11.     # 作用者取得
  12.     @targeter = []
  13.     for id in id2
  14.       @targeter.push(@armies[id])
  15.     end
  16.     # 获取特技
  17.     @skill = skill
  18.     # 消耗 SP
  19.     #@attacker.sp -= @skill.sp_cost
  20.    
  21.    
  22.    
  23.     # 设置动画 ID
  24.     @animation1_id = @skill.animation1_id
  25.     @animation2_id = @skill.animation2_id
  26.     # 设置公共事件 ID
  27.     @common_event_id = @skill.common_event_id
  28.     # 应用特技效果
  29.     for target in @targeter
  30.       #target.skill_effect(@attacker, @skill)
  31.      # p target.the_name
  32.       eval(SRPG_SKILLS[skill.id])
  33.       
  34.     end
  35.     # 显示动画
  36.    # play_animation(id2,@animation2_id)
  37.     # 对我方HP0等在解除战斗不能状态
  38.     if skill.scope == 5 or skill.scope == 6 or skill.scope == 10
  39.       for target in targeter
  40.         #_update_actor(@battler.index(target))
  41.       end
  42.     end
  43.     # 特技名窗口释放
  44.     #@help_window.dispose
  45.     # 显示伤害值 参数为id数组
  46.     #show_damage(id2)
  47.     # 等待一会儿
  48.     wait_a_moment
  49.     # 经验值、金钱、宝物判断
  50.     #egt = exp_or_gold_or_treasure(id2)
  51.     # 行动方是敌军则判断返回
  52.     if ! @attacker.player_team
  53.       judge_battler_death
  54.       return
  55.     end
  56.     # exp增加
  57.     #add_exp_and_judge_lvup(id1,egt[0])
  58.     # 等待
  59.     #wait_a_moment
  60.     # 金钱增加
  61.     #show_gold(id1,egt[1])
  62.     # 宝物判断
  63.     #judge_treasure(egt[2])
  64.    
  65.     # 公共事件 ID 有效的情况下
  66.     if @common_event_id > 0
  67.       # 设置事件
  68.       common_event = $data_common_events[@common_event_id]
  69.       @xn_srpg_interpreter.setup(common_event.list, 0)
  70.     end

  71.   end

  72.   [code]class Scene_Map
  73.   
  74.   
  75.   
  76.   #=======================================================
  77.   # SRPG技能关联
  78.   # 格式: 技能ID =>  执行技能的名字
  79.   #=======================================================
  80.   #,6,10,9
  81.   SRPG_SKILLS = {
  82.     1 => "skill_ten_thousand_arrows(@attacker, @skill,target)",
  83.     2 => "skill_zhenfen_morale(@attacker, @skill,target)",
  84.     3 => "",
  85.     4 => "skill_distory_morale(@attacker, @skill,target)"

  86.   }
  87.   #=======================================================
  88.   # SRPG技能发动条件
  89.   # 格式: 技能ID =>  检查技能的method名字
  90.   # 如果空的,则可以使用
  91.   #=======================================================
  92.   #,6,10,9
  93.   SRPG_SKILLS_CAN_USE = {
  94.     1 => "check_skill_ten_thousand_arrows(self.army)",
  95.     2 => "",
  96.     3 => "",
  97.     4 => ""

  98.   }
  99.   def get_srpg_skills_can_use_list
  100.     return SRPG_SKILLS_CAN_USE.clone
  101.   end
  102.   #=======================================================
  103.   # SRPG技能 1 : 万箭齐发
  104.   #=======================================================
  105.   def skill_ten_thousand_arrows(attacker,skill,target)
  106.     attacker.event.turn_toward_xy(target.event.x,target.event.y)
  107.     target.event.turn_toward_xy(attacker.event.x,attacker.event.y)
  108.       attacker.event.damage = "放箭!"
  109.       attacker.event.critical = false
  110.       attacker.event.damage_pop = true   
  111.     play_anime(attacker,attacker.event.character_name + "-atk-1")
  112.     target_list = []
  113.     target.member.each do|group|
  114.     group.fighter.each do|f|
  115.       next if f.dead?
  116.       target_list.push f
  117.     end  
  118.     end  
  119.     all_killed = false
  120.     num_hit = 0
  121.     sum = 0.0
  122.     attacker.member.each do|group|
  123.     group.fighter.each do|f|
  124.       if target_list.size == 0
  125.         all_killed = true
  126.         break
  127.       end  
  128.       next if f.dead? or f.is_a?(EFS_Infantry) or f.is_a?(EFS_Horseman) or f.is_a?(EFS_Hero) or f.is_a?(EFS_Object)
  129.         Audio.se_play("Audio/SE/"+f.s_shoot_se+ (rand(f.s_shoot_se_num)+1).to_s,80, 100)
  130.         wait_a_moment(true,4)
  131.         Audio.se_play("Audio/SE/"+f.s_pass_by_se+ (rand(f.s_pass_by_se_num)+1).to_s,80, 100)
  132.         wait_a_moment(true,4)
  133.         #如果射中
  134.         if rand(101) <= f.accuracy
  135.           #p attacker.event.x - target.event.x,attacker.event.y
  136.          a =  f.give_me_a_arrow_obj(attacker.event,target.event.x-attacker.event.x,target.event.y-attacker.event.y,true)
  137.          $game_map.missiles.push a
  138.          $scene.spriteset.add_missiles(a)
  139.           target.event.animation_id = 153
  140.         Audio.se_play("Audio/SE/"+f.s_atk_se+ (rand(f.s_atk_se_num)+1).to_s,80, 100)
  141.         wait_a_moment(true,4)
  142.           num_hit += 1
  143.           t = target_list[rand(target_list.size)]
  144.           damage = f.s_bro_atk + [f.s_base_atk - t.armor_hp_max,rand(5)+5].max
  145.             t.recieve_damage(damage)
  146.             if t.dead?
  147.               target_list.delete(t)
  148.             end
  149.             
  150.             
  151.             sum += damage
  152.       target.event.damage = damage
  153.       target.event.critical = false
  154.       target.event.damage_pop = true
  155.     else #如果没射中
  156.          a =  f.give_me_a_arrow_obj(attacker.event,target.event.x-attacker.event.x,target.event.y-attacker.event.y,false)
  157.          $game_map.missiles.push a
  158.          $scene.spriteset.add_missiles(a)
  159.           target.event.damage = "Miss"
  160.             target.event.critical = false
  161.           target.event.damage_pop = true            
  162.             target.event.animation_id = 135
  163.         Audio.se_play("Audio/SE/"+f.s_drop_se+ (rand(f.s_drop_se_num)+1).to_s,80, 100)
  164.         wait_a_moment(true,4)
  165.         end  #if zhong
  166.       end  #group
  167.         break if all_killed
  168.   end #attacker
  169.     target.event.damage = sum.round
  170.     target.event.critical = true
  171.     target.event.damage_pop = true
  172.     Notification.post("命中"+target.the_name+"中的"+num_hit.to_s+"人,共计造成"+sum.round.to_s+"点伤害。")
  173.     if all_killed
  174.     for id in @armies.keys
  175.       if @armies[id].all_dead?
  176.           next if @dealed_death_actors.include?(id)
  177.           deaths_disappear(id)
  178.       end
  179.     end
  180.     end
  181.     target.delete_all_dead
  182.     wait_a_moment(true)
  183.   end
  184.   #==============================================
  185.   def check_skill_ten_thousand_arrows(attacker)
  186.     sum = 0
  187.     attacker.member.each do|group|
  188.     group.fighter.each do|f|
  189.       next if f.dead? or f.is_a?(EFS_Infantry) or f.is_a?(EFS_Horseman) or f.is_a?(EFS_Hero) or f.is_a?(EFS_Object)
  190.       sum += 1
  191.     end  
  192.     end  
  193.     return sum >=5  
  194.   end  
  195.   #=======================================================
  196.   # SRPG技能 2 : 振奋士气
  197.   #=======================================================  
  198.   def skill_zhenfen_morale(attacker,skill,target)
  199.    
  200.    
  201.     target.add_const_state(10)
  202.    
  203.   
  204.    
  205.   end
  206.   
  207.   
  208.   #=======================================================
  209.   # SRPG技能 4 : 士气打击
  210.   #=======================================================
  211.   
  212.    def skill_distory_morale(attacker,skill,target)
  213.      
  214.       target.add_const_state(5)
  215.    
  216.   end
复制代码

end[/code]
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36472
在线时间
10806 小时
注册时间
2009-3-15
帖子
4815
4
发表于 2023-4-26 15:44:12 | 只看该作者
不知你搞什么
又ARPG
又SRPG
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7842
在线时间
1348 小时
注册时间
2015-8-15
帖子
754
5
 楼主| 发表于 2023-4-26 16:00:32 | 只看该作者
本帖最后由 金芒芒 于 2023-4-26 17:16 编辑
soulsaga 发表于 2023-4-26 15:44
不知你搞什么
又ARPG
又SRPG


那这个呢炫舞斩可以替换强制热血 我想群战中每个士兵多有个ARPG的技能
  1. module Skill_data
  2.   
  3. data_id = 0
  4. NAME = []
  5. CD = []
  6. TIME = []
  7. CODE = []
  8. ICON = []
  9. end
复制代码
  1. module Skill_data
  2.   
  3. data_id = 1
  4. #名称
  5. NAME[data_id] = "强制热血"
  6. #图标
  7. ICON[data_id] = "skill1"
  8. #冷却时间
  9. CD[data_id] = 400
  10. #使用次数限制
  11. TIME[data_id] = 2
  12. #技能代码
  13. CODE[data_id] = 1

  14. end
复制代码

  1. #==============================================================================
  2. # ■ 详细的技能脚本内容在这里处理
  3. #
  4. #==============================================================================

  5. module EFS_Spell
  6.   
  7. =begin    #便利剪切板#
  8.   $game_player.animation_id
  9.   Audio.se_play("Audio/SE/",100, 100)
  10.   $Team_Fighter
  11.   $team_group[group_id]
  12.   add_state()
  13.   remove_state()
  14. =end      #便利剪切板#

  15.   def self.use_spell(code_id)
  16. #--------------------------------------------------------------------------      
  17.     if code_id == 1  #强制热血
  18. #--------------------------------------------------------------------------
  19.     $game_party.actors[0].sp = 0
  20.     $game_player.animation_id = 104
  21.     Audio.se_play("Audio/SE/rush_"+(rand(4)+1).to_s,100, 100)
  22.     for e in $Team_Fighter
  23.       next if e.is_a?(Game_Player)
  24.       e.add_state(2)
  25.     end
  26.    
  27. #--------------------------------------------------------------------------
  28.     elsif code_id == 2
  29. #--------------------------------------------------------------------------






  30. #--------------------------------------------------------------------------
  31.     elsif code_id == 3
  32. #--------------------------------------------------------------------------      
  33.       





  34.     end
  35.    
  36.   end
  37.   
  38. #--------------------------------------------------------------------------
  39. end # The End of this page.
  40. #--------------------------------------------------------------------------
复制代码

class Scene_Map
    @spell_used = []
    #一定要把所有技能在这里过一遍
    #一定要把所有技能在这里过一遍
    #一定要把所有技能在这里过一遍
   # for i in 1..X
    @spell_used[1] = Skill_data::TIME[1] # i

RUBY 代码复制
  1. module State_data
  2.  
  3. @data_id = 2
  4. ANIMATION[@data_id] =   119
  5. ICON[@data_id] =   ""
  6. NAME[@data_id] =   "狂暴攻击"
  7. #持续时间(nil 表示整个战场中都有)
  8. TIME[@data_id] =    400
  9. AMMOR_HP[@data_id] =  100
  10. SHD_HP[@data_id] =    100
  11. ACCURATCY[@data_id] =  100
  12. MOVEMENT_SPEED[@data_id] = 100
  13. ATK_SKILL[@data_id] =  200
  14. DEF_SKILL[@data_id] =  50
  15. ANTI_CAV[@data_id] =   100
  16. ANTI_INF[@data_id] =    100
  17. MORALE[@data_id] =  100
  18. ATK_FR[@data_id] =  100
  19. ENGAGE_RANGE[@data_id] = 100
  20. S_BASE_ATK[@data_id] = 115
  21. S_BRO_ATK[@data_id] =  115
  22. BRO_ATK[@data_id] =  115
  23. BASE_ATK[@data_id] = 115
  24. SLIP_DAMAGE[@data_id] = false
  25.  
  26.  
  27. end






回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36472
在线时间
10806 小时
注册时间
2009-3-15
帖子
4815
6
发表于 2023-4-26 17:17:57 | 只看该作者
我看不懂你说什么
建议出钱找人定制

点评

我也看不懂为什么我一直在回复他23333  发表于 2023-4-26 17:53

评分

参与人数 1+1 收起 理由
alexncf125 + 1 我也看不懂为什么你一直在回答他23333.

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7842
在线时间
1348 小时
注册时间
2015-8-15
帖子
754
7
 楼主| 发表于 2023-4-26 20:48:51 | 只看该作者
本帖最后由 金芒芒 于 2023-4-26 21:28 编辑
soulsaga 发表于 2023-4-26 17:17
我看不懂你说什么
建议出钱找人定制


其实你已经引导我了觉悟了。毕竟你是懂脚本的人  定义炫舞战的攻击范围是公共事件开启的,  IF team_selected_troops包活士兵ID=2的时候 add状态 强制热血 强制热血 =旋舞斩  ,我突然觉悟了
再说这个群战脚本是刺夜之枪和正太君两位大神杰作还加空之轨迹超大脚本芯又忙着带娃谁会接单啊
我多喊了好几年了 接着自己也学会了很多也有点上瘾了应该会完成的,当业余爱好把14年开始的也不差时间
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-29 00:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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