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

Project1

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

[已经过期] 怎么设置没有使用者,能同时攻击敌人方和主角方的技能?

[复制链接]

Lv2.观梦者

梦石
0
星屑
756
在线时间
532 小时
注册时间
2011-10-3
帖子
2237
跳转到指定楼层
1
发表于 2015-5-30 23:17:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 神秘影子 于 2015-6-7 21:28 编辑

要求:
1.没有使用者,或没有主角、敌人中的使用效果
2.同时攻击敌我两方,均造成伤害,用伤害显示脚本能够显示

因为需要一个全场性的技能,但是并不知道怎么做,直接扣HP好像无法在伤害脚本中显示。
主要目的就是造成伤害且显示

谢谢
真是麻烦各位了,感谢!似乎不好做吗?选择事件不能显示伤害(横版战斗自带的伤害显示)选择技能会有使用信息。这个效果原意是使用某物过多破坏平衡引发全场诅咒。要不干脆设计成状态好了?

点评

……其实你可以把技能拆成两部分……第一个技能敌方全体,之后公共事件强制执行第二个技能我方全体,公式填一样的就行……  发表于 2015-6-1 07:31

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-5-31 11:34:14 | 只看该作者
执行一个公共事件不行吗 - - 技能效果全用事件写

点评

谢谢,有空会去看  发表于 2015-6-6 15:43
人工添加战斗信息。没记错的话我写过这个事件指令,不过现在爪机不想去翻  发表于 2015-5-31 16:56
伤害没办法显示……  发表于 2015-5-31 14:13
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
180
在线时间
829 小时
注册时间
2010-6-26
帖子
671
3
发表于 2015-5-31 23:53:01 | 只看该作者
http://himeworks.com/2014/03/skill-links/
嗯,这个脚本可以做到,先用本身的技能,之后接着用备注设置的技能,记忆中是没动画的,如果有动画那就用另一个
Yanfly Engine Ace - Follow-Up Skill 这个网址要用代理才能上,你可以试着谷歌一下?
反正两个脚本一个有动画一个没动画
新手们!不要被看扁了!我们也会用论坛搜索,我们也会自己找脚本,我们也会自己点击关闭按钮旁边的小问号!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1721
在线时间
764 小时
注册时间
2013-9-23
帖子
211

开拓者

4
发表于 2015-6-1 03:24:15 | 只看该作者
本帖最后由 午睡的风铃 于 2015-6-1 03:26 编辑
  1. #==============================================================================
  2. # +++ MOG - Scope EX (v1.3) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # http://www.atelier-rgss.com/
  6. #==============================================================================
  7. # Adiciona a característica de área de impacto da ação baseado na posição
  8. # e o tamanho do sprite do alvo.
  9. # Por exemplo, uma habilidade de explosão vai acertar apenas os inimigos que
  10. # estiverem em volta do alvo inicial.
  11. # O script adiciona também a função de incluir todos os alvos da tela, aliados
  12. # e inimigos juntos.
  13. #==============================================================================
  14. # Adicione a Tag abaixo na caixa de comentários de notas para definir a área de
  15. # impacto da habilidade.
  16. #
  17. # <Scope Range = X1 - X2 - Y1 - Y2>
  18. #
  19. #            Y1
  20. #            
  21. #       X1        X2
  22. #            
  23. #            Y2
  24. #
  25. # Ex ->      <Scope Range = (100 - 32 - 64 - 32>
  26. #
  27. #==============================================================================
  28. # Incluir todos os alvos da tela. (Inimigos e Aliados)
  29. #==============================================================================
  30. #
  31. # <All Targets>
  32. #
  33. #==============================================================================
  34. # Histórico
  35. #==============================================================================
  36. # v1.3 Melhoria no cálculo de área em alvos únicos.
  37. # v1.2 Melhoria no sistema de calculo baseado no tamanho do sprite.
  38. # v1.1 Possibilidade de definir a área específica para cada lado.
  39. #   
  40. #==============================================================================

  41. $imported = {} if $imported.nil?
  42. $imported[:mog_scope_ex] = true

  43. module MOG_SCOPE_EX
  44.   #============================================================================
  45.   # Definição do modo que vai ser calculado a área do alvo.
  46.   #
  47.   # 0 - Baseado apenas na posição X e Y. (ignorando o tamanho do sprite)
  48.   # 1 - Baseado na posição X e Y + o tamanho do sprite do alvo.
  49.   #     (Alvos grandes tem maior area de impacto)
  50.   #
  51.   #============================================================================
  52.   SCOPE_TYPE = 1
  53.   #============================================================================
  54.   # Definição da porcentágem total do tamanho sprite, para ser efetuado o
  55.   # calculo. (Apenas se o valor do SCOPE_TYPE estiver no 1)
  56.   # Por exemplo, definindo o valor de 100% o sistema vai considerar 100% do
  57.   # tamanho do sprite para fazer o calculo.
  58.   #============================================================================
  59.   # SPRITE_SIZE_RANGE = [WIDTH %, HEIGHT %]  
  60.   #============================================================================
  61.   SPRITE_SIZE_RANGE = [80,70]  
  62. end

  63. #==============================================================================
  64. # ■ Game Battler
  65. #==============================================================================
  66. class Game_Battler < Game_BattlerBase
  67.   attr_accessor :sprite_size
  68.   
  69.   #--------------------------------------------------------------------------
  70.   # * Initialize
  71.   #--------------------------------------------------------------------------
  72.   alias mog_scope_ex_initialize initialize
  73.   def initialize
  74.       @sprite_size = [0,0,true]
  75.       mog_scope_ex_initialize
  76.   end

  77. end

  78. #==============================================================================
  79. # ■ Sprite Battler
  80. #==============================================================================
  81. class Sprite_Battler < Sprite_Base

  82.   #--------------------------------------------------------------------------
  83.   # * Update Bitmap
  84.   #--------------------------------------------------------------------------
  85.   alias mog_scope_ex_update_bitmap update_bitmap
  86.   def update_bitmap
  87.       @battler.sprite_size = [bitmap.width,bitmap.height,true] if bitmap
  88.       mog_scope_ex_update_bitmap
  89.   end

  90. end

  91. #==============================================================================
  92. # ■ Scene Battle
  93. #==============================================================================
  94. class Scene_Battle < Scene_Base

  95.   #--------------------------------------------------------------------------
  96.   # * Show Normal Animation
  97.   #--------------------------------------------------------------------------
  98.   alias mog_scope_ex_show_normal_animation show_normal_animation
  99.   def show_normal_animation(targets, animation_id, mirror = false)
  100.       new_targets = []
  101.       targets.each do |t| new_targets.push(t) if t.sprite_size[2] end
  102.       targets = new_targets
  103.       mog_scope_ex_show_normal_animation(targets, animation_id, mirror)
  104.       targets.each do |t| t.sprite_size[2] = true end
  105.   end  
  106.   
  107. end

  108. #==============================================================================
  109. # ■ Game Action
  110. #==============================================================================
  111. class Game_Action
  112.   include MOG_SCOPE_EX
  113.   #--------------------------------------------------------------------------
  114.   # * Make Targets
  115.   #--------------------------------------------------------------------------
  116.   def make_targets
  117.       if !forcing && subject.confusion?
  118.          confusion_target
  119.       elsif item.for_opponent?
  120.          targets_for_opponents
  121.       elsif item.for_friend?
  122.          targets_for_friends
  123.       else
  124.         []
  125.       end
  126.   end  
  127.   
  128.   #--------------------------------------------------------------------------
  129.   # * Confusion Target
  130.   #--------------------------------------------------------------------------
  131.   def confusion_target
  132.       case subject.confusion_level
  133.       when 1 ; new_targets = make_new_targets([opponents_unit.random_target],0)
  134.       when 2
  135.           if rand(2) == 0
  136.             new_targets = make_new_targets([opponents_unit.random_target],0)
  137.           else
  138.             new_targets = make_new_targets([friends_unit.random_target],1)
  139.           end
  140.       else
  141.            new_targets = make_new_targets([friends_unit.random_target],1)  
  142.       end
  143.   end
  144.   
  145.   #--------------------------------------------------------------------------
  146.   # * Targets for Opponents
  147.   #--------------------------------------------------------------------------
  148.   def targets_for_opponents
  149.       if item.for_random?
  150.          org_target = Array.new(item.number_of_targets) { opponents_unit.random_target }
  151.          new_targets = make_new_targets(org_target,0)
  152.       elsif item.for_one?
  153.          num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  154.          if @target_index < 0
  155.             org_target = [opponents_unit.random_target] * num
  156.             new_targets = make_new_targets(org_target,0)
  157.          else
  158.             org_target = [opponents_unit.smooth_target(@target_index)] * num
  159.             new_targets = make_new_targets(org_target,0)
  160.          end
  161.        else
  162.           return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  163.           return opponents_unit.alive_members
  164.       end
  165.   end
  166.   
  167.   #--------------------------------------------------------------------------
  168.   # * All Targets
  169.   #--------------------------------------------------------------------------
  170.   def all_targets
  171.       return true if @item.object.note =~ /<All Targets>/
  172.       return false
  173.   end
  174.   
  175.   #--------------------------------------------------------------------------
  176.   # * Targets for Allies
  177.   #--------------------------------------------------------------------------
  178.   def targets_for_friends
  179.     if item.for_user?
  180.        new_targets = make_new_targets([subject],1)      
  181.     elsif item.for_dead_friend?
  182.         if item.for_one?
  183.            org_target = [friends_unit.smooth_dead_target(@target_index)]
  184.            new_targets = make_new_targets(org_target,2)   
  185.         else
  186.            org_target = friends_unit.dead_members
  187.            new_targets = make_new_targets(org_target,2)           
  188.         end
  189.     elsif item.for_friend?
  190.          if item.for_one?
  191.             org_target = [friends_unit.smooth_target(@target_index)]
  192.             new_targets = make_new_targets(org_target,1)   
  193.          else
  194.             return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  195.             return friends_unit.alive_members
  196.          end
  197.     end
  198.   end
  199.   
  200.   #--------------------------------------------------------------------------
  201.   # * Make New Targets
  202.   #--------------------------------------------------------------------------
  203.   def make_new_targets(target,type = 0)
  204.       targets = []
  205.       if all_targets
  206.         members = (opponents_unit.alive_members + friends_unit.alive_members) if type <= 1
  207.         members = friends_unit.dead_members if type == 2      
  208.       else
  209.         members = opponents_unit.alive_members if type == 0
  210.         members = friends_unit.alive_members if type == 1
  211.         members = friends_unit.dead_members if type == 2
  212.       end
  213.       for t in target
  214.           for m in members
  215.               targets.push(m) if t == m
  216.               next if t == m
  217.              (targets.push(m); m.sprite_size[2] = false) if scope_range?(t,m)            
  218.           end
  219.       end
  220.       return targets
  221.   end
  222.   
  223.   #--------------------------------------------------------------------------
  224.   # * Scope Range
  225.   #--------------------------------------------------------------------------
  226.   def scope_range?(user,target)
  227.       t_r2 = [user.screen_x, user.screen_y] rescue nil
  228.       t_r3 = [target.screen_x, target.screen_y] rescue nil
  229.       return false if t_r2 == nil or t_r3 == nil
  230.       s_r = [0,0,0,0] ; s_p = [0,0]
  231.       s_r = [$1.to_i,$2.to_i,$3.to_i,$4.to_i] if @item.object.note =~ /<Scope Range = (\d+) - (\d+) - (\d+) - (\d+)>/
  232.       if SCOPE_TYPE > 0
  233.          s_p = [target.sprite_size[0] / 2, target.sprite_size[1]]
  234.          s_p[0] = s_p[0] * SPRITE_SIZE_RANGE[0] / 100
  235.          s_p[1] = s_p[1] * SPRITE_SIZE_RANGE[1] / 100
  236.       end
  237.       return false if !t_r3[0].between?(t_r2[0] - (s_r[0] + s_p[0]), t_r2[0] + (s_r[1] + s_p[0]))
  238.       return false if !t_r3[1].between?(t_r2[1] - s_r[2], t_r2[1] + s_r[3] + s_p[1])
  239.       return true
  240.   end  
  241.   
  242. end
复制代码
技能备注里写
<Scope Range = X1 - X2 - Y1 - Y2>
上面的X和Y是范围
 Y1
X1 X2
 Y2
比如<Scope Range = 30 - 30 - 320 - 0>
目标两侧30像素  上方320像素范围内目标

<All Targets>
敌我全目标,这个貌似需要把技能范围设为敌全体。

上面的两个都写的话,貌似是范围内的目标不分敌我,我没试过。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
5
发表于 2015-6-1 07:33:44 | 只看该作者
……
话说,用强制行动的效果不行吗?
第一个技能敌方全体伤害,同时用公共事件强制执行第二个技能我方全体伤害,这俩填一样的公式……
这么做很难吗?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
756
在线时间
532 小时
注册时间
2011-10-3
帖子
2237
6
 楼主| 发表于 2015-6-6 15:42:28 | 只看该作者
紫苍焰 发表于 2015-6-1 07:33
……
话说,用强制行动的效果不行吗?
第一个技能敌方全体伤害,同时用公共事件强制执行第二个技能我方全体 ...

要对我方使用技能的话,必须选择一个敌方使用者吧?
这样的话,如果我选1号敌人作为使用者,而1号被杀死了,还能正常进行吗?

点评

但是这样的话上方的战斗文字说明会显示使用者balabala  发表于 2015-6-7 21:26
好像是可以设置出使自己全队回血的技能 修改伤害对吧?  发表于 2015-6-7 21:25
实在不行你就先己方全体伤害,然后再敌方全体伤害。  发表于 2015-6-7 11:37
自己人就可以做到的为啥非要让敌人做呢……  发表于 2015-6-7 11:36
……话说你记得全体加血的技能吗?把那个换成全体伤害不就完了……  发表于 2015-6-7 11:36
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

7
发表于 2015-6-6 16:45:20 | 只看该作者
我还是建议用事件,不要用技能了吧。
  1. SceneManager.scene.instance_eval {
  2.   @log_window.add_text("这段脚本可以添加战斗信息,不过我没有测试。")
  3. }
复制代码

点评

……版主你说我说的这个方法能行不?先一发敌方全体伤害再一发己方全体伤害……并不需要额外脚本什么的……  发表于 2015-6-7 11:35
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
8
发表于 2015-6-7 11:25:32 | 只看该作者
本帖最后由 紫苍焰 于 2015-6-7 11:34 编辑
神秘影子 发表于 2015-6-6 15:42
要对我方使用技能的话,必须选择一个敌方使用者吧?
这样的话,如果我选1号敌人作为使用者,而1号被杀死 ...

……
设置技能1。效果范围是敌方全体,伤害。
设置技能2。效果范围是我方全体,伤害。
技能1填写所有能填写的,技能2除了公式和技能1一样之外啥都不用填。
技能1里添加公共事件,强制执行技能2,目标填上一个目标也没关系。
试试看效果。
另外,技能2推荐选上必定命中。
以上。

点评

不是说技能要没有使用者么  发表于 2015-6-7 13:12
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
帖子
813

开拓者

9
发表于 2015-6-7 13:34:00 | 只看该作者
技能使用者的问题是个难题,我游戏有个支援攻击的系统,援助者不参加战斗,但会在固定回合发动固定技能,可是因为技能发动者问题一直很难办,最后技能发动给了主角,并脑补男主一挂支援者立刻吓的魂飞破胆逃之夭夭……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
10
发表于 2015-6-8 08:59:42 | 只看该作者
本帖最后由 紫苍焰 于 2015-6-8 09:02 编辑
jianyulei 发表于 2015-6-7 13:34
技能使用者的问题是个难题,我游戏有个支援攻击的系统,援助者不参加战斗,但会在固定回合发动固定技能,可 ...


……
强制战斗指令可以以队伍中的任何一个角色为对象……
也就是说你可以给敌群添加X回合执行一次的事件……

点评

……回合结束有地方插入事件?不是每个敌群都要设置一次?  发表于 2015-6-11 09:01
你直接在脚本里开战的时候里加入个公共事件,内容是某变量赋值0(或者1)。 然后你再再回合结束也加个公共事件,内容是变量+1,这样就行了  发表于 2015-6-10 19:23
每个敌群都要写一遍……你还不懂吗……  发表于 2015-6-10 11:27
敌群原本就能设定回合数吧?你是指在某特定条件触发之后才开始计算多少回合触发的事件?  发表于 2015-6-9 22:00
……嘛……麻烦的是在敌群里添加记录回合数的事件……  发表于 2015-6-9 20:25
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 02:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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