Save-Point
KBattleLog XP - Printable Version

+- Save-Point (https://www.save-point.org)
+-- Forum: Material Development (https://www.save-point.org/forum-8.html)
+--- Forum: Scripts Database (https://www.save-point.org/forum-39.html)
+---- Forum: RPGMaker XP (RGSS) Engine (https://www.save-point.org/forum-116.html)
+---- Thread: KBattleLog XP (/thread-8665.html)



KBattleLog XP - kyonides - 01-31-2023

KBattleLog XP

by Kyonides Arkanthes


Introduction

This script simply keeps a record of your performance in battle by adding basic information to a log.
It stores its contents in the BattleLog.txt fileĀ once the battle is over.

Code:
# * KBattleLog XP * #
#   Scripter : Kyonides Arkanthes
#   v0.3.0 - 2023-02-06

module KBattleLog
  BEGINS = "The battle begins!"
  TROOP_NAME = "The troop calls itself %s"
  TROOP_MEMBERS = "The troop consists of "
  PARTY_MEMBERS = "You heroes are "
  ESCAPE_FAILED = "Your party failed to escape!"
  GOLD_SYM_MODE = :first # Options - :first or :last
  GAIN_EXP = "Each hero gained %s EXP!"
  GAIN_GOLD = "Your party earned %s%s"
  CONGRATULATIONS = "Congratulations for defeating those bastards!"
  VICTORY = "Your party is victorious!"
  ESCAPE = "Your party escaped from the battlefield!"
  DEFEAT = "Your party has been defeated!"
  LEVEL_UP = "%s has leveled up!"
  HEROES_STATS = "Your Heroes' Stats:"
  HERO_STATS = "%s: HP %s/%s - SP %s/%s"
  extend self
  @lines = []
  attr_reader :message
  def <<(text)
    @lines << text
  end

  def start
    @lines << BEGINS
    @lines << sprintf(TROOP_NAME, $game_troop.name)
    @lines << TROOP_MEMBERS + $game_troop.names.join(", ") + "."
    @lines << PARTY_MEMBERS + $game_party.names.join(", ") + "."
  end

  def old_levels
    @levels = $game_party.levels
  end

  def check_levels
    names = $game_party.names
    levels = $game_party.levels
    @levels.size.times do |n|
      next if levels[n] == @levels[n]
      @lines << sprintf(LEVEL_UP, names[n])
    end
    @lines << HEROES_STATS
    $game_party.actors.each do |a|
      @lines << sprintf(HERO_STATS, a.name, a.hp, a.maxhp, a.sp, a.maxsp)
    end
  end

  def win(exp, gold, treasures)
    @lines << VICTORY
    @lines << sprintf(GAIN_EXP, exp)
    if GOLD_SYM_MODE == :first
      sub1, sub2 = $data_system.words.gold, gold
    else
      sub1, sub2 = gold, $data_system.words.gold
    end
    @lines << sprintf(GAIN_GOLD, sub1, sub2)
    return if treasures.empty?
    @lines << treasures.map{|t| t.name }.join(", ")
  end

  def finish(result)
    texts = [CONGRATULATIONS, ESCAPE, DEFEAT]
    @lines << texts[result]
    save_file
  end

  def save_file
    troop = $game_troop.name.sub("*", "x")
    filename = "Logs/BattleLogVs#{troop}.txt"
    File.open(filename, "w"){|f| f.puts @lines }
  end

  def make_dir
    Dir.mkdir("Logs") unless Dir.exist?("Logs")
  end
  make_dir
end

class Game_Battler
  alias :kyon_battlelog_gm_btlr_attack_fx :attack_effect
  alias :kyon_battlelog_gm_btlr_skill_fx :skill_effect
  alias :kyon_battlelog_gm_btlr_item_fx :item_effect
  def attack_effect(attacker)
    result = kyon_battlelog_gm_btlr_attack_fx(attacker)
    if @critical
      KBattleLog << "#{attacker} hits #{self.name} with a critical blow!"
    elsif @damage == "Miss"
      KBattleLog << "#{attacker} fails to hit #{self.name}!"
    else
      KBattleLog << "#{attacker} attacks #{self.name}!"
    end
    result
  end

  def skill_effect(user, skill)
    result = kyon_battlelog_gm_btlr_skill_fx(user, skill)
    sn = skill.name
    nm = self.name
    if @critical
      KBattleLog << "#{user} casts a powerful #{sn} spell on #{nm}!"
    elsif @damage == "Miss"
      KBattleLog << "#{user} fails to cast #{sn} on #{nm}!"
    else
      KBattleLog << "#{user} casts #{sn} on #{nm}!"
    end
    result
  end

  def item_effect(item)
    result = kyon_battlelog_gm_btlr_item_fx(item)
    return result unless $game_temp.in_battle
    on = item.name
    if @damage == "Miss"
      KBattleLog << "#{self.name} fails to consume the #{on}!"
    else
      KBattleLog << "#{self.name} consumes the #{on}!"
    end
    result
  end
end
  
class Game_Party
  def names
    @actors.map{|a| a.name }
  end

  def levels
    @actors.map{|a| a.level }
  end
end

class Game_Troop
  alias :kyon_battlelog_gm_troop_setup :setup
  def setup(troop_id)
    kyon_battlelog_gm_troop_setup(troop_id)
    @troop_id = troop_id
  end

  def name
    $data_troops[@troop_id].name
  end

  def names
    @enemies.map{|e| e.name }
  end
end

class Window_BattleResult
  alias :kyon_battlelog_win_blt_result_init :initialize
  def initialize(exp, gold, treasures)
    kyon_battlelog_win_blt_result_init(exp, gold, treasures)
    KBattleLog.win(exp, gold, treasures)
  end
end

class Scene_Battle
  alias :kyon_battlelog_scn_btl_start_ph1 :start_phase1
  alias :kyon_battlelog_scn_btl_start_ph5 :start_phase5
  alias :kyon_battlelog_scn_btl_btl_end :battle_end
  def start_phase1
    KBattleLog.start
    kyon_battlelog_scn_btl_start_ph1
  end

  def update_phase2_escape
    enemies_agi = 0
    enemies_number = 0
    for enemy in $game_troop.enemies
      if enemy.exist?
        enemies_agi += enemy.agi
        enemies_number += 1
      end
    end
    if enemies_number > 0
      enemies_agi /= enemies_number
    end
    actors_agi = 0
    actors_number = 0
    for actor in $game_party.actors
      if actor.exist?
        actors_agi += actor.agi
        actors_number += 1
      end
    end
    if actors_number > 0
      actors_agi /= actors_number
    end
    success = rand(100) < 50 * actors_agi / enemies_agi
    if success
      $game_system.se_play($data_system.escape_se)
      $game_system.bgm_play($game_temp.map_bgm)
      battle_end(1)
    else
      KBattleLog << KBattleLog::ESCAPE_FAILED
      $game_party.clear_actions
      start_phase4
    end
  end

  def start_phase5
    KBattleLog.old_levels
    kyon_battlelog_scn_btl_start_ph5
    KBattleLog.check_levels
  end

  def battle_end(result)
    kyon_battlelog_scn_btl_btl_end(result)
    KBattleLog.finish(result)
  end
end


Default Output

Code:
The battle begins!
The troop calls itself Ghost*2
The troop consists of Ghost, Ghost
You are counting on Aluxes, Basil, Gloria, Hilda
Your party is victorious!
Each hero gained 4 EXP!
Your party earned G32
Your Heroes' Stats:
Aluxes: HP 741/741 - SP 434/534
Basil: HP 695/695 - SP 491/591
Gloria: HP 486/486 - SP 661/661
Hilda: HP 422/422 - SP 606/606
Congratulations for defeating those bastards!

Terms & Conditions

Free as in Beer beer.
Do not repost it!