O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Add-On para ABS - Experiência compartilhada.

Iniciado por Red, 21/09/2017 às 19:09

21/09/2017 às 19:09 Última edição: 23/09/2017 às 06:10 por Corvo
Olá Bebês, preciso de ajuda relacionado ao ABS do meu projeto, o Imperial Action System II, quero que quando o Personagem A derrote um monstro e recebe X de experiência, os demais personagens do grupo recebam a mesma quantidade de Experiência.

Uma referência pode ser o Exp. Share dos jogos de Pokémon.
Se tiverem mais dúvidas, me perguntem aqui.
Consegui meu equilíbrio cortejando a insanidade.

21/09/2017 às 19:27 #1 Última edição: 21/09/2017 às 19:31 por Corvo
Quando o inimigo morrer ligue o Switch Local A > Na nova página do evento.
Use o comando Mudar EXP e ligue o Switch Local B > Finalize o evento


Isso não resolve?

:paperplease: Tá na hora de fazer um script novo.
Tô fazendo, jovem. Não sei quando terminarei, mas não deve demorar muito.

22/09/2017 às 04:02 #3 Última edição: 22/09/2017 às 06:02 por Alisson
Citação de: Corvo online 21/09/2017 às 19:27
Quando o inimigo morrer ligue o Switch Local A > Na nova página do evento.
Use o comando Mudar EXP e ligue o Switch Local B > Finalize o evento


Isso não resolve?

Já tentei antes, simplesmente continuou do mesmo jeito, por isso estou apelando pro script.

Citação de: Alisson online 21/09/2017 às 21:26
:paperplease: Tá na hora de fazer um script novo.
Tô fazendo, jovem. Não sei quando terminarei, mas não deve demorar muito.

Tudo Bem Alisson, não estou com muita pressa, o importante é que funcione.
Consegui meu equilíbrio cortejando a insanidade.

Tó:

module Imperial
  
  EXP_GAIN_MODIFIER = 0.5
  
  def damage_enemy(event, value, hero, weapon, critical = false)
    return if event.enemy.nil? and event.object.nil?
    if weapon.nil?
      event.animation_id = Imperial_Config::Default_Animation
    else
      event.animation_id = weapon.animation_id
    end
    if event.object != nil
      print "try start object \n"
      event.try_start_object(weapon)
      return
    end
    if event.enemy.only != nil
      if event.enemy.only != weapon; event.animation_id = 0; return; end
    end
    rand = (10) - 5
    value -= rand
    event.jump(0,0) if Imperial_Config::Jump_On_Damage
    value *= 2.5 if critical
    value = value.to_i
    evaded = event.enemy.evaded?
    if evaded
      event.jump(0,0)
      $game_map.damage_sprites.push(Sprites::Custom.new(event, "Evade!")) if Imperial_Config::Show_Damage_Sprites
      return
    end
    defense = event.enemy.def - event.enemy.mdf
    value -= defense
    value = 0 if value < 0
    event.minibar.nil? ? event.minibar = Sprites::Minibar.new(event) : event.minibar.restart
    if event.enemy.hp - value <= 0
      $game_map.enemies.delete(event)
      event.enemy.hp = 0
      event.perform_kill
      Audio.se_play('Audio/Se/Blow6', 80, 100)
      expp = event.enemy.enemy.exp
      case hero.class.to_s
      when 'Game_Player'
        actor = $game_party.members[0]
      when 'Game_Follower'
        actor = $game_party.members[hero.member_index]
      end
      actor = $game_party.members[0] if actor.nil?
      actor.gain_exp(expp)
      $game_party.members.each do |m|
        next if m == actor
        m.gain_exp(expp * EXP_GAIN_MODIFIER) if m
      end
      $game_map.damage_sprites.push(Reward_Sprite.new(hero, expp)) if Imperial_Config::Show_Reward_Sprites
    else
      event.enemy.hp -= value
    end
    $game_map.damage_sprites.push(Sprites::Damage.new(event,value,critical)) if Imperial_Config::Show_Damage_Sprites
  end
  
  def enemy_magical_damage(attacker, defender, skill, critical)
    return if defender.enemy.nil? and defender.object.nil?
    if defender.object != nil
      print "try start object \n"
      defender.try_start_object(skill)
      return
    end
    if !skill.effects.empty?
      skill.effects.each {|effect|
        print "effect ! \n"
        next if effect.code != 21
          print "adding state! \n"
          $game_map.damage_sprites.push(Sprites::Custom.new(defender, "Added State!"))
          defender.enemy.enemy.add_state(effect.data_id)
      }
    end
    return if !skill.damage.to_hp?
    if !defender.object.nil?
      if defender.object.only == nil
        start_object
      else
        if skill == defender.object.only; defender.start_object; else; defender.animation_id = 0; return; end
      end
      return
    end
    if defender.enemy.only != nil
      print "enemy only != nil"
      if defender.enemy.only != skill; defender.animation_id = 0; return; end
    end
    defender.minibar.nil? ? defender.minibar = Sprites::Minibar.new(defender) : defender.minibar.restart
    modifier = check_weakness(skill, defender)
    jump(0,0) if Imperial_Config::Jump_On_Damage
    case attacker.class.to_s
    when 'Game_Player'
      actor = $game_party.members[0]
    when 'Game_Follower'
      actor = $game_party.members[attacker.member_index]
    end
    string = convert_formula_damage('actor', 'defender.enemy', skill.damage.formula)
    print string,"\n"
    value = eval(string)
    value = 0 if value < 0
    value *= 3 if critical
    value *= modifier if not modifier.nil?
    defender.minibar.nil? ? defender.minibar = Enemy_Minibar.new(self) : defender.minibar.restart
    type = check_type(modifier)
    $game_map.damage_sprites.push(Sprites::Magic.new(defender, value, critical, type)) if Imperial_Config::Show_Damage_Sprites
    if defender.enemy.hp - value <= 0
      $game_map.enemies.delete(defender)
      defender.enemy.hp = 0
      defender.perform_kill
      Audio.se_play('Audio/Se/Blow6', 90, 100)
      expp = defender.enemy.enemy.exp
      actor.gain_exp(expp)
      $game_party.members.each do |m|
        next if m == actor
        m.gain_exp(expp * EXP_GAIN_MODIFIER) if m
      end
      $game_map.damage_sprites.push(Reward_Sprite.new(attacker, expp)) if Imperial_Config::Show_Reward_Sprites
    else
      defender.enemy.hp -= value
    end
  end
end


Isso aí é uma modificação direta, então coloque imediatamente embaixo do script na lista.

EXP_GAIN_MODIFIER é o modificador de experiência.
O Exp Share, por exemplo, faz com que o pokémon segurando receba metade da exp da batalha.
0.5 indica que os outros membros irão ganhar 50% da exp. Se você mudar pra 1, eles irão ganhar 100%, 0.01 ganham 1% e etc...
Se você mudar pra 0, eles não ganham nada.

Nossa eu nem acredito que funcionou  :<3: :*-*: :T.T: :lol: :'0':.
Não sei nem o que dizer, muito obrigado mesmo, tava dando erro na linha 118 mas eu já resolvi, só com aquele velho '#' antes da linha.

Tópico resolvido, obrigado @Corvo e mais uma vez, muito obrigado, @Alisson :<3:
Consegui meu equilíbrio cortejando a insanidade.