Friday, September 20, 2024 2:58:49 AM
> settings

Customize


Authenticate

> log_generator.rb
# frozen_string_literal: true

class LogGenerator
  TIMEZONES = ::ActiveSupport::TimeZone.all.map(&:name).freeze

  module Format
    DEATH = "%{player_name} %{reason}"

    # Trading formats
    TRADING_PURCHASE_ITEM = "PLAYER: ( %{player_uid} ) %{player_name} PURCHASED ITEM %{item} FOR %{number} POPTABS | PLAYER TOTAL MONEY: %{number}"
    TRADING_PURCHASE_VEHICLE = "PLAYER: ( %{player_uid} ) %{player_name} PURCHASED VEHICLE %{vehicle} FOR %{number} POPTABS | PLAYER TOTAL MONEY: %{number}"
    TRADING_PURCHASE_VEHICLE_SKIN = "PLAYER: ( %{player_uid} ) %{player_name} PURCHASED VEHICLE SKIN [%{skin}] (%{vehicle}) FOR %{number} POPTABS | PLAYER TOTAL MONEY: %{number}"
    TRADING_SOLD_CARGO = "PLAYER: ( %{player_uid} ) %{player_name} SOLD ITEM: %{vehicle} with Cargo [%{item}] FOR %{number} POPTABS AND %{number} RESPECT | PLAYER TOTAL MONEY: %{number}"
    TRADING_SOLD_ITEM = "PLAYER: ( %{player_uid} ) %{player_name} SOLD ITEM %{vehicle} FOR %{number} POPTABS AND %{number} RESPECT | PLAYER TOTAL MONEY: %{number}"

    TRADING = [TRADING_PURCHASE_ITEM, TRADING_PURCHASE_VEHICLE, TRADING_PURCHASE_VEHICLE_SKIN, TRADING_SOLD_CARGO, TRADING_SOLD_ITEM].freeze

    # Territory formats
    TERRITORY_PURCHASE = "PLAYER ( %{player_uid} ) %{player_name} PAID %{number} POP TABS TO PURCHASE A TERRITORY FLAG | PLAYER TOTAL POP TABS: %{number}"
    TERRITORY_PROTECT = "PLAYER ( %{player_uid} ) %{player_name} PAID %{number} POP TABS TO PROTECT THEIR OWN TERRITORY #%{number} | PLAYER TOTAL POP TABS: %{number}"
    TERRITORY_RANSOM = "PLAYER ( %{player_uid} ) %{player_name} PAID %{number} POP TABS FOR THE RANSOM OF TERRITORY #%{number} | PLAYER TOTAL POP TABS: %{number}"
    TERRITORY_UPGRADE = "PLAYER ( %{player_uid} ) %{player_name} PAID %{number} POP TABS TO UPGRADE TERRITORY #%{number} TO LEVEL %{number} | PLAYER TOTAL POP TABS: %{number}"
    TERRITORY_STOLE = "PLAYER ( %{player_uid} ) %{player_name} STOLE A LEVEL %{number} FLAG FROM TERRITORY #%{number}"

    TERRITORY = [TERRITORY_PURCHASE, TERRITORY_PROTECT, TERRITORY_RANSOM, TERRITORY_UPGRADE, TERRITORY_STOLE].freeze
  end

  def self.generate_trading_log
    # Set up the time
    starting_time = ::Faker::Time.backward(days: ::Faker::Number.between(from: 1, to: 14), period: :morning)
    starting_time = starting_time.in_time_zone(TIMEZONES.sample)
    end_time = starting_time.end_of_day

    output = []
    ::Faker::Number.between(from: 1, to: 250).times do
      current_format = Format::TRADING.sample
      current_time = ::Faker::Time.between(from: starting_time, to: end_time)

      formatted_entry = current_format % {
        player_uid: ::Faker::Number.number(digits: 17).to_s,
        player_name: ::Faker::Name.name,
        item: ::Faker::Commerce.product_name,
        number: ::Faker::Number.between(from: 1, to: 1_000_000),
        vehicle: ::Faker::Commerce.product_name,
        skin: ::Faker::Commerce.product_name
      }

      output << {
        date: current_time.to_date.strftime("%Y-%m-%d"),
        line: ::Faker::Number.between(from: 0, to: 25_000),
        entry: "#{log_prefix(current_time)} #{formatted_entry}"
      }
    end

    output
  end

  def self.generate_death_log
    # Set up the time
    starting_time = ::Faker::Time.backward(days: ::Faker::Number.between(from: 1, to: 14), period: :morning)
    starting_time = starting_time.in_time_zone(TIMEZONES.sample)
    end_time = starting_time.end_of_day

    output = []
    ::Faker::Number.between(from: 1, to: 250).times do
      current_time = ::Faker::Time.between(from: starting_time, to: end_time)

      formatted_entry = Format::DEATH % {
        player_name: ::Faker::Name.name,
        reason: ::Faker::Lorem.sentence
      }

      output << {
        date: current_time.to_date.strftime("%Y-%m-%d"),
        line: ::Faker::Number.between(from: 0, to: 25_000),
        entry: "#{log_prefix(current_time)} #{formatted_entry}"
      }
    end

    output
  end

  def self.generate_territory_log
    # Set up the time
    starting_time = ::Faker::Time.backward(days: ::Faker::Number.between(from: 1, to: 14), period: :morning)
    starting_time = starting_time.in_time_zone(TIMEZONES.sample)
    end_time = starting_time.end_of_day

    output = []
    ::Faker::Number.between(from: 1, to: 250).times do
      current_format = Format::TERRITORY.sample
      current_time = ::Faker::Time.between(from: starting_time, to: end_time)

      formatted_entry = current_format % {
        player_uid: ::Faker::Number.number(digits: 17).to_s,
        player_name: ::Faker::Name.name,
        number: ::Faker::Number.between(from: 1, to: 1_000_000)
      }

      output << {
        date: current_time.to_date.strftime("%Y-%m-%d"),
        line: ::Faker::Number.between(from: 0, to: 25_000),
        entry: "#{log_prefix(current_time)} #{formatted_entry}"
      }
    end

    output
  end

  private_class_method def self.log_prefix(date)
    "[#{date.strftime("%H:%M:%S:%6N %:z")}] [Thread #{::Faker::Number.between(from: 1000, to: 99_999)}]"
  end
end
All opinions represented herein are my own
- © 2024 itsthedevman
- build 340fbb8