Requesting tutorial for installation of Blizz-ABS for RMX-OS

Started by Xolitude, January 31, 2013, 02:13:54 am

Previous topic - Next topic

Xolitude

Hey guys, I need an installation tutorial for Blizz-ABS for RMX-OS.

I saw Blizzard's Controller script, but I don't really understand what I need/install/etc.

So any help would be appreciated, thanks :)

Blizzard

Quote from: Blizzard on January 17, 2010, 05:02:36 pm
Script

Just make a new script above main and paste this code into it.
Spoiler: ShowHide
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Blizz-ABS Controller for RMX-OS by Blizzard
# Version: 1.5
# Type: RMX-OS Add-on
# Date: 15.2.2010
# Date v1.01: 16.2.2010
# Date v1.02: 23.4.2010
# Date v1.1: 5.12.2010
# Date v1.19: 22.1.2011
# Date v1.2: 25.1.2011
# Date v1.3: 3.2.2011
# Date v1.31: 11.2.2011
# Date v1.32: 11.2.2011
# Date v1.33: 4.3.2011
# Date v1.34: 6.3.2011
# Date v1.4: 9.3.2011
# Date v1.5: 22.6.2012
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
#  This script is to be distributed under the same terms and conditions like
#  the scripts it was created for: RMX-OS and Blizz-ABS.
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# - Special Thanks to Ryex for providing the basecode for the fix for the
#   controls conflict between Blizz-ABS and RMX-OS.
#
# Information:
#
#   This script must be placed below RMX-OS and Blizz-ABS. It requires RMX-OS
#   v1.18 or higher and Blizz-ABS 2.84 or higher to work properly. This script
#   will allow the RMX-OS Server to assign a client the role of the processor
#   (Global Master) and allow global processing Blizz-ABS AI behavior.
#   
#   
# What is different:
#   
#   - Map actor data will not be stored completely. Special states and effects
#     that are related to Blizz-ABS (i.e. the data regarding the charging
#     state) are not being saved.
#   - RMX-OS was not intended to have Blizz-ABS allies! Players will not see
#     other players' allies on the map if you add them and you are risking data
#     corruption during saving! The same goes for summons!
#   - Alignment groups are available, but dynamic change of alignment groups
#     is mostly disabled for convenience.
#   - Target selection is disabled. Every skill that has target selection will
#     be executed immediately. If a selection skill targets only one target, a
#     random target from all available targets will be chosen. Generally you
#     should avoid single-target selection skills and items.
#   - ABSEAL is disabled.
#   - Processing takes place only on the Global Master client that is assigned
#     dynamically by the server.
#   - Killed enemy events that are set on Death trigger are run only on the
#     Global Master client. It is recommended that killed enemies trigger
#     global switches that run common events. For that you need a plugin for
#     RMX-OS that allows you to have global switches.
#   - Item / Gold Drops are disabled. The actor who killed the enemy will get
#     the item reward. EXP and gold rewards are shared among party members
#     where each party member adds a specific amount to the gained EXP.
#     Remember that items can be traded so a shared item reward is unnecessary.
#   
#   
# Notes:
#   
#   - Keep in mind that adding and/or removing this script will corrupt the
#     save data in the RMX-OS SQL database.
#   - You shouldn't have any non-map scenes during the battle. This can disrupt
#     the normal game flow. You should get a custom menu system on the map for
#     the menu system specifically.
#   
#   
# If you find any bugs, please report them here:
# http://forum.chaos-project.com
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

if !$BlizzABS || BlizzABS::VERSION < 2.85
  raise 'ERROR: The "Blizz-ABS Controller" requires Blizz-ABS 2.85 or higher.'
elsif !defined?(RMXOS) || RMXOS::VERSION < 1.18
  raise 'ERROR: The "Blizz-ABS Controller" requires RMX-OS 1.18 or higher.'
end

$blizzabs_rmxos = 1.5

#==============================================================================
# module RMXOS
#==============================================================================
 
module RMXOS
 
  #============================================================================
  # module RMXOS::Options
  #============================================================================
 
  module Options
 
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # START Configuration
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
   
    # PvP active or not
    PVP = false
    # how much percent to the total EXP gain does each party member add
    PARTY_EXP_BONUS = 20
    # how much percent to the total gold gain does each party member add
    PARTY_GOLD_BONUS = 20
    # this should be only changed if necessary!
    BATTLER_VARIABLES = ['@battler|@hp', '@battler|@sp',
        '@battler|@states', '@battler|@states_turn', '@battler|@state_time',
        '@battler|@states_turn', '@battler|@state_time', '@battler|@states',
        '@ai|@positive', '@ai|@negative', '@ai|@neutral']
    ACTOR_VARIABLES = ['@battler|@actor_id', '@battler|@class_id',
        '@battler|@level', '@battler|@maxhp_plus', '@battler|@maxsp_plus',
        '@battler|@str_plus', '@battler|@dex_plus', '@battler|@agi_plus',
        '@battler|@int_plus', '@battler|@skills', '@battler|@weapon_id',
        '@battler|@armor1_id', '@battler|@armor2_id', '@battler|@armor4_id',
        '@battler|@armor3_id', '@battler|@character_name',
        '@battler|@character_hue']
    ENEMY_VARIABLES = ['@battler|@enemy_id', '@battler|@immortal',
        '@ai|@altered_alignment', '@ai|@aggressive', '@ai|@view_range',
        '@ai|@hearing_range_ratio']
   
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # END Configuration
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
    # because Game_Player was redefined
    old_Game_Player = SAVE_DATA.keys.find_all {|key|
        key.is_a?(Class) && key.name == 'Game_Player'}[0]
    SAVE_DATA[Game_Player] = SAVE_DATA[old_Game_Player]
    SAVE_DATA.delete(old_Game_Player)
    # other additional save data
    SAVE_DATA[Map_Actor] = SAVE_DATA[Game_Player].clone
    SAVE_DATA[Game_System].concat(['@hud', '@hotkeys', '@minimap',
        '@attack_button', '@defend_button', '@skill_button', '@item_button',
        '@select_button', '@hud_button', '@hotkey_button', '@minimap_button',
        '@turn_button', '@running_button', '@sneaking_button', '@jumping_button',
        '@caterpillar', '@caterpillar_active'])
    SAVE_DATA[Game_Actor].concat(['@skill', '@item', '@skill_hotkeys',
        '@item_hotkeys', '@old_level', '@offensive', '@aggressive',
        '@force_offensive', '@force_aggressive', '@state_time', '@triggers'])
    SAVE_DATA[BlizzABS::Trigger] = ['@activator', '@condition', '@comparator',
        '@value', '@action_type', '@action_data', '@target']
    # new creation data
    CREATION_DATA[Map_Actor] = '0'
 
  end
 
  #============================================================================
  # module RMXOS::Data
  #============================================================================
 
  module Data
   
    PartyAlreadyMember = 'Player is already a member of your party.'
    PartyNone          = 'You are not in a party.'
    PartyNotLeader     = 'You are not the leader of the party.'
    PartyNotMember     = 'Player is not a member of your party.'
    PartyInfo          = 'Party Leader: LEADER; Members: MEMBERS'
   
    ColorParty = Color.new(0xFF, 0x7F, 0x1F)
   
  end

  #============================================================================
  # module RMXOS::Documentation
  #============================================================================
 
  module Documentation
   
    # Party commands
    PARAMETERS['party']   = 'USERNAME'
    PARAMETERS['premove'] = 'USERNAME'
    PARAMETERS['pleave']  = 'none'
    PARAMETERS['pmsg']    = 'MESSAGE'
    PARAMETERS['pinfo']   = 'none'
   
    DESCRIPTIONS['party']   = 'Invites a player into your party.'
    DESCRIPTIONS['premove'] = 'Removes a player from your party.'
    DESCRIPTIONS['pleave']  = 'Leaves the current party. Disbands the party if you are the party leader.'
    DESCRIPTIONS['pmsg']    = 'Sends a message to all party members.'
    DESCRIPTIONS['pinfo']   = 'Displays information about your party.'
   
  end
 
  def self.change_keys
    controls = [Input::LEFT, Input::RIGHT, Input::UP, Input::DOWN, Input::B,
        Input::C]
    keys = []
    replacements = ['Arrow Left', 'Arrow Right', 'Arrow Up', 'Arrow Down',
        'Esc', 'Enter']
    controls.each_index {|i|
        keys[i] = controls[i].clone
        controls[i].clear
        controls[i].push(Input::Key[replacements[i]])
    }
    return keys
  end
 
  def self.restore_keys(keys)
    controls = [Input::LEFT, Input::RIGHT, Input::UP, Input::DOWN, Input::B,
        Input::C]
    controls.each_index {|i|
        controls[i].clear
        keys[i].each {|key| controls[i].push(key)}
    }
  end
 
end

#==============================================================================
# module BlizzABS
#==============================================================================
 
module BlizzABS
 
  #============================================================================
  # module BlizzABS::Config
  #============================================================================
 
  module Config
   
    ABSEAL_FACTOR = 485
    GOLD_DROP = ''
    ITEM_DROP = false
    CORPSES = false
   
  end
 
  #============================================================================
  # module BlizzABS::Alignments
  #============================================================================
 
  module Alignments
   
    ONLINE_GROUP = 0
    GROUPS.push(ONLINE_GROUP)
    GROUPS.sort!
   
    class << Alignments
      alias neutral_blizzabsrmxos_later neutral
      alias negative_blizzabsrmxos_later neutral
    end
   
    def self.negative(id)
      result = negative_blizzabsrmxos_later(id)
      case id
      when ONLINE_GROUP
        result = GROUPS.clone
        result.delete(id)
        result.delete(ACTOR_GROUP) if !RMXOS::Options::PVP
      when ENEMY_GROUP
        result.push(ONLINE_GROUP)
      end
      return result
    end
   
    def self.neutral(id)
      result = neutral_blizzabsrmxos_later(id)
      result |= [ONLINE_GROUP]
      return result
    end
   
  end
 
  #============================================================================
  # BlizzABS::AI::Data_Enemy
  #============================================================================
 
  class AI::Data_Enemy
   
    alias lifeless_blizzabsrmxos_later? lifeless?
    def lifeless?
      return (!$network.gmaster || lifeless_blizzabsrmxos_later?)
    end
   
  end
 
  #============================================================================
  # BlizzABS::Processor
  #============================================================================
 
  class Processor
   
    def update_killed
      deleted_killed = []
      $game_system.killed.each_key {|key|
          $game_system.killed[key] -= 1
          if key.execute
            key.update
          elsif $game_system.killed[key] <= 0
            $game_map.events.delete(key.id)
            if !key.ai.lifeless_blizzabsrmxos_later? &&
                ($game_system.respawn_time > 0 || key.respawn_point != nil)
              if $network.gmaster && !key.respawning
                $network.send_enemy_respawn(key)
                key.respawning = true
              end
            else
              deleted_killed.push(key)
            end
          end}
      deleted_killed.each {|key| $game_system.killed.delete(key)}
    end
   
    alias exp_result_blizzabsrmxos_later exp_result
    def exp_result(enemy)
      if enemy.last_targeter == $network.user_id ||
          $network.party.include?(enemy.last_targeter)
        return exp_result_blizzabsrmxos_later(enemy)
      end
      return 0
    end
   
    alias gold_result_blizzabsrmxos_later gold_result
    def gold_result(enemy)
      if enemy.last_targeter == $network.user_id ||
          $network.party.include?(enemy.last_targeter)
        return gold_result_blizzabsrmxos_later(enemy)
      end
      return 0
    end
   
    alias additional_result_blizzabsrmxos_later additional_result
    def additional_result(enemy)
      if enemy.last_targeter == $network.user_id
        return additional_result_blizzabsrmxos_later(enemy)
      end
    end
   
    alias drop_items_blizzabsrmxos_later drop_items
    def drop_items(enemy)
      if enemy.last_targeter == $network.user_id
        return drop_items_blizzabsrmxos_later(enemy)
      end
      return []
    end
   
    alias remove_enemy_blizzabsrmxos_later remove_enemy
    def remove_enemy(enemy)
      $network.send_enemy_death(enemy) if $network.gmaster
    end
   
  end
 
  #============================================================================
  # BlizzABS::Controller
  #============================================================================
 
  class Controller
   
    alias update_control_blizzabsrmxos_later update_control
    def update_control
      update_control_blizzabsrmxos_later if !$game_temp.chat_active
    end
   
  end
 
  #============================================================================
  # BlizzABS::Controls
  #============================================================================
 
  class Controls
   
    alias update_blizzabsrmxos_later update
    def update
      update_blizzabsrmxos_later if !$game_temp.chat_active
    end
   
  end
 
  #============================================================================
  # BlizzABS::Utility
  #============================================================================
 
  class Utility
   
    alias request_damage_sprite_blizzabsrmxos_later request_damage_sprite
    def request_damage_sprite(char, damage = nil)
      if $network.gmaster
        variables = char.get_exchange_variables(['@battler|@damage',
            '@battler|@hpdamage', '@battler|@spdamage', '@battler|@hp',
            '@battler|@sp'])
        char.send_exchange_variables(variables)
      end
      request_damage_sprite_blizzabsrmxos_later(char, damage)
    end
   
  end
 
end

$BlizzABS = BlizzABS::Processor.new

#==============================================================================
# RMXOS::Network
#==============================================================================

class RMXOS::Network
 
  attr_reader :gmaster
  attr_reader :party
  attr_reader :partyleader
 
  alias init_blizzabsrmxos_later initialize
  def initialize
    init_blizzabsrmxos_later
    @gmaster = false
    @respawning = {}
    self.party_reset
  end
 
  alias reset_blizzabsrmxos_later reset
  def reset
    self.party_reset
    reset_blizzabsrmxos_later
  end
 
  def party_reset
    @partyleader = ''
    @party = []
  end
 
  alias clear_map_players_blizzabsrmxos_later clear_map_players
  def clear_map_players
    clear_map_players_blizzabsrmxos_later
    @respawning = {}
  end
 
  alias check_game_blizzabsrmxos_later check_game
  def check_game(message)
    case message
    when /\AGMA\Z/ # global master activate
      @gmaster = true
      return true
    when /\AGMD\Z/ # global master deactivate
      @gmaster = false
      return true
    when /\AMEE(.+)\t(.+)/ # exchange variables for enemies
      id = $1.to_i
      variables = eval($2)
      if $game_map != nil && $game_map.events != nil &&
          $game_map.events.has_key?(id)
        $game_map.events[id].evaluate(variables)
      end
      return true
    when /\AMDR\Z/ # map data request
      $game_map.battlers.each {|battler| battler.send_exchange_variables}
      return true
    when /\ABED(.+)\t(.+)/ # broadcast enemy death
      id = $1.to_i
      targeter_id = $2.to_i
      if $game_map.events.has_key?(id)
        enemy = $game_map.events[id]
        enemy.last_targeter = targeter_id
        $BlizzABS.remove_enemy_blizzabsrmxos_later(enemy)
        tmp = $game_map.respawns.find_all {|event|
            !event.erased && event.respawn_ids != nil &&
            event.respawn_ids.include?(enemy.battler_id)}
        if !enemy.ai.lifeless_blizzabsrmxos_later? &&
            ($game_system.respawn_time > 0 || tmp.size > 0)
          @respawning[id] = enemy
        end
      end
    when /\ABER(.+)/ # broadcast enemy respawn
      id = $1.to_i
      if @respawning.has_key?(id)
        enemy = @respawning[id]
        $game_map.events[id] = $BlizzABS.respawn_enemy(enemy)
        @respawning.delete(enemy)
        if $game_system.killed.has_key?(enemy)
          $game_system.killed.delete(enemy)
        end
      end
      return true
    when /\APIN(.+)\t(.+)/ # party invite
      @partyleader = $1
      @party = eval($2).compact.sort
      @party.delete(@username)
      return true
    when /\APRM\Z/ # party reset
      self.party_reset
      return true
    when /\APRE(.+)/ # party remove
      @party.delete($1)
      return true
    when /\AIRM(.+)/ # item remove
      $game_party.lose_item($1.to_i)
      return true
    end
    return check_game_blizzabsrmxos_later(message)
  end
 
  alias check_normal_commands_blizzabsrmxos_later check_normal_commands
  def check_normal_commands(message)
    case message
    when /\A\/party (\S+)\Z/
      command_party_invite($1)
      return true
    when /\A\/premove (\S+)\Z/
      command_party_remove($1)
      return true
    when /\A\/pleave\Z/
      command_party_leave
      return true
    when /\A\/pmsg (\S{1}.*)/
      command_party_chat($1)
      return true
    when /\A\/pinfo\Z/
      command_party_info
      return true
    end
    return check_normal_commands_blizzabsrmxos_later(message)
  end
 
  def partyleader?
    return (self.in_party? && @partyleader == @username)
  end
 
  def in_party?
    return (@partyleader != '')
  end
   
  def check_partyleader_action
    if !self.partyleader?
      self.add_error(RMXOS::Data::PartyNotLeader)
      return false
    end
    return true
  end
   
  def check_party_action
    if !self.in_party?
      self.add_error(RMXOS::Data::PartyNone)
      return false
    end
    return true
  end
   
  def command_party_invite(username)
    if !self.in_party? || self.check_partyleader_action
      if @party.include?(username)
        self.add_error(RMXOS::Data::PartyAlreadyMember)
      else
        self.send("PIN#{username}")
      end
    end
  end
 
  def command_party_remove(username)
    if self.check_partyleader_action
      if !@party.include?(username)
        self.add_error(RMXOS::Data::PartyNotMember)
      else
        self.send("PRE#{username}")
      end
    end
  end
 
  def command_party_leave
    if self.check_party_action
      self.send('PLE')
    end
  end
 
  def command_party_info
    if self.check_party_action
      text = RMXOS::Data::PartyInfo.sub('LEADER') {@partyleader}
      text = text.sub('MEMBERS') {(@party - [@partyleader]).join(', ')}
      self.add_info(text)
    end
  end
   
  def command_party_chat(message)
    if self.check_party_action
      send_chat_message(message, RMXOS::Data::ColorParty, 'PME')
    end
  end
   
  def try_deactivate_gmaster
    self.send('GMD')
    @gmaster = false
  end
 
  def send_enemy_exchange_variables(id, variables)
    self.send("MEE#{id}\t#{variables.inspect}")
  end
   
  def send_item_remove(user_id, item_id)
    self.send("IRM#{user_id}\t#{item_id}")
  end
 
  def send_enemy_death(enemy)
    return if enemy.last_targeter == nil
    if enemy.last_targeter == $game_player
      id = $network.user_id
    elsif enemy.last_targeter.is_a?(Map_OnlineBattler)
      id = enemy.last_targeter.user_id
    else
      return
    end
    self.send("BED#{enemy.id}\t#{id}")
  end
 
  def send_enemy_respawn(enemy)
    self.send("BER#{enemy.id}")
  end
 
end

#==============================================================================
# Game_Enemy
#==============================================================================

class Game_Enemy
 
  alias exp_blizzabs_rmxos_later exp
  def exp
    result = exp_blizzabs_rmxos_later
    bonus = $network.party.size * RMXOS::Options::PARTY_EXP_BONUS
    return (result * (100 + bonus) / 100 / ($network.party.size + 1))
  end
 
  alias gold_blizzabs_rmxos_later gold
  def gold
    result = gold_blizzabs_rmxos_later
    bonus = $network.party.size * RMXOS::Options::PARTY_GOLD_BONUS
    return (result * (100 + bonus) / 100 / ($network.party.size + 1))
  end
 
end
 
#==============================================================================
# Spriteset_Map
#==============================================================================

class Spriteset_Map
 
  alias init_blizzabsrmxos_later initialize
  def initialize
    init_blizzabsrmxos_later
    $network.map_players.each_value {|character|
        sprite = Sprite_Character.new(@viewport1, character)
        sprite.update
        @character_sprites.push(sprite)}
  end
 
end

#==============================================================================
# Map_Battler
#==============================================================================

class Map_Battler
 
  attr_accessor :last_targeter
 
  def get_exchange_variable_names
    return (RMXOS::Options::EXCHANGE_VARIABLES |
        RMXOS::Options::BATTLER_VARIABLES)
  end
 
  alias use_attack_blizzabsrmxos_later use_attack
  def use_attack
    result = use_attack_blizzabsrmxos_later
    if result && (self == $game_player || $network.gmaster)
      variables = {}
      variables['@ai|@act|@kind'] = BlizzABS::ACTAttack
      self.send_exchange_variables(variables)
    end
    return result
  end
 
  alias use_skill_blizzabsrmxos_later use_skill
  def use_skill(skill, forced = false)
    result = use_skill_blizzabsrmxos_later(skill, forced)
    if result && (self == $game_player || $network.gmaster)
      variables = {}
      variables['@ai|@act|@kind'] = BlizzABS::ACTSkill
      variables['@ai|@act|@id'] = skill.id
      self.send_exchange_variables(variables)
    end
    return result
  end
 
  alias use_item_blizzabsrmxos_later use_item
  def use_item(item, forced = false)
    result = use_item_blizzabsrmxos_later(item, forced)
    if result && (self == $game_player || $network.gmaster)
      variables = {}
      variables['@ai|@act|@kind'] = BlizzABS::ACTItem
      variables['@ai|@act|@id'] = item.id
      self.send_exchange_variables(variables)
    end
    return result
  end
 
  def setup_damage_display
    $BlizzABS.util.request_damage_sprite(self)
    @battler.damage, @battler.hpdamage, @battler.spdamage = nil, 0, 0
  end
 
  def in_screen?
    return true
  end
         
end
 
#==============================================================================
# Map_Actor
#==============================================================================

class Map_Actor
 
  alias update_blizzabsrmxos_later update
  def update
    update_blizzabsrmxos_later
    if !$network.gmaster && self.valid? && @battler.damage != nil
      setup_damage_display
    end
  end
 
  def get_exchange_variable_names
    return (super | RMXOS::Options::ACTOR_VARIABLES)
  end
 
  def update_exchange_variables
    changed = self.get_exchange_variables_changes
    if changed.size > 0
      self.send_exchange_variables(changed)
      self.store_exchange_variables(changed)
    end
  end
 
  def send_exchange_variables(variables = nil)
    variables = super(variables)
    $network.send_exchange_variables(variables) if self == $game_player
    return variables
  end
 
  alias attack_effect_blizzabsrmxos_later attack_effect
  def attack_effect(character, _battler)
    return false if !$network.gmaster
    return attack_effect_blizzabsrmxos_later(character, _battler)
  end
 
  alias skill_effect_blizzabsrmxos_later skill_effect
  def skill_effect(character, _battler, skill)
    return false if !$network.gmaster
    return skill_effect_blizzabsrmxos_later(character, _battler, skill)
  end
 
  alias item_effect_blizzabsrmxos_later item_effect
  def item_effect(character, _battler, item)
    return false if !$network.gmaster
    return item_effect_blizzabsrmxos_later(character, _battler, item)
  end
 
end
 
#==============================================================================
# Map_Enemy
#==============================================================================

class Map_Enemy
 
  attr_accessor :respawning
 
  alias update_blizzabsrmxos_later update
  def update
    update_blizzabsrmxos_later
    if !$network.gmaster && self.valid? && @battler.damage != nil
      setup_damage_display
    end
  end
 
  def get_exchange_variable_names
    return (super | RMXOS::Options::ENEMY_VARIABLES)
  end
 
  def update_exchange_variables
    changed = self.get_exchange_variables_changes
    if changed.size > 0
      self.send_exchange_variables(changed)
      self.store_exchange_variables(changed)
    end
  end
 
  def send_exchange_variables(variables = nil)
    variables = super(variables)
    $network.send_enemy_exchange_variables(self.id, variables)
    return variables
  end
 
  alias attack_effect_blizzabsrmxos_later attack_effect
  def attack_effect(character, _battler)
    return false if !$network.gmaster
    @last_targeter = character
    return attack_effect_blizzabsrmxos_later(character, _battler)
  end
 
  alias skill_effect_blizzabsrmxos_later skill_effect
  def skill_effect(character, _battler, skill)
    return false if !$network.gmaster
    @last_targeter = character
    return skill_effect_blizzabsrmxos_later(character, _battler, skill)
  end
 
  alias item_effect_blizzabsrmxos_later item_effect
  def item_effect(character, _battler, item)
    return false if !$network.gmaster
    @last_targeter = character
    return item_effect_blizzabsrmxos_later(character, _battler, item)
  end
 
end
 
#==============================================================================
# Map_OnlineBattler
#==============================================================================

class Map_OnlineBattler < Map_Actor
 
  attr_reader   :user_id
  attr_reader   :username
  attr_reader   :usergroup
  attr_accessor :map_id
 
  def initialize
    super(0)
    @battler = Game_Actor.new(1)
    @cindex = nil
    @ai.setup_group(BlizzABS::Alignments::ONLINE_GROUP)
    @normal_speed = BlizzABS::Config::NORMAL_SPEED
    refresh
  end
 
  def update
    if !$network.gmaster && self.valid? && @battler.damage != nil
      setup_damage_display
    end
    refresh
    super
    @character_name = @character_name_org
    sprite_animation_setup
    check_action
  end
 
  def check_action
    return if !self.valid? || !@ai.act.valid?
    battlers = []
    if @ai.target == nil
      battlers = ($game_map.battlers + $BlizzABS.battlers).find_all {|b|
          b.valid?}
      battlers.compact!
    end
    $BlizzABS.AI.normal_action(self, battlers, battlers, @ai.act.basic?,
        @ai.act.kind - 1, 0xFFFF, 0xFFFF, @ai.act.id, @ai.act.skill?)
    @ai.act.delay = 0 if !@ai.act.defend?
    $BlizzABS.AI.try_execute(self) if @ai.target != nil
    self.reset_action
  end
 
  def update?
    return false
  end
 
  def evaluate(variables, user_id, username, usergroup)
    super(variables)
    @user_id = user_id
    @username = username
    @usergroup = usergroup
    refresh
  end
 
  def battler(override = false)
    return @battler
  end
 
  def item_can_use?(id)
    return true
  end
 
  def item_consumption(item)
    $network.send_item_remove(@user_id, item.id) if item.consumable
  end
 
  def update_ci(ind = nil)
  end
 
  def update_buffer(move)
  end
 
  def turn_toward(character)
  end
 
  def moveto(x, y)
    pix = $BlizzABS.pixel
    super(x / pix, y / pix)
  end
 
end

Game_OnlineCharacter = Map_OnlineBattler

#==============================================================================
# Game_Map
#==============================================================================

class Game_Map
 
  alias battlers_blizzabsrmxos_later battlers
  def battlers
    return (battlers_blizzabsrmxos_later | $network.map_players.values)
  end
 
end

#==============================================================================
# Frame_Text
#==============================================================================

class Frame_Text
 
  alias update_input_blizzabsrmxos_later update_input
  def update_input
    keys = RMXOS.change_keys
    update_input_blizzabsrmxos_later
    RMXOS.restore_keys(keys)
  end
 
end

#==============================================================================
# Scene_Login
#==============================================================================

class Scene_Login
 
  alias update_blizzabsrmxos_later update
  def update
    keys = RMXOS.change_keys
    update_blizzabsrmxos_later
    RMXOS.restore_keys(keys)
  end
 
end

#==============================================================================
# Scene_Register
#==============================================================================

class Scene_Register
 
  alias update_blizzabsrmxos_later update
  def update
    keys = RMXOS.change_keys
    update_blizzabsrmxos_later
    RMXOS.restore_keys(keys)
  end
 
end

#==============================================================================
# Scene_Map
#==============================================================================

class Scene_Map
 
  alias main_blizzabsrmxos_later main
  def main
    main_blizzabsrmxos_later
    $network.try_deactivate_gmaster
  end
 
  def initialize_selection
  end
 
  def process_selection
    object, r, type, sprites = $game_temp.select_data
    if $tons_version != nil && object.is_a?(RPG::Skill) &&
        ($tons_version >= 6.02 && $game_system.TARGET_EM_ALL &&
        FULL_TARGET_IDS.include?(object.id))
      targets = []
      sprites.each {|sprite| targets.push(sprite.character)}
    else
      targets = [sprites[rand(sprites.size)].character]
    end
    return targets
  end
 
  def execute_selection(targets)
    if targets.size > 0
      $game_player.ai.target = targets[0]
      case $game_temp.select_data[0]
      when RPG::Skill then $game_player.use_skill($game_temp.select_data[0])
      when RPG::Item then $game_player.use_item($game_temp.select_data[0])
      end
    end
    $game_temp.select_data = nil
  end
 
  alias call_menu_blizzardrmxos_later call_menu
  def call_menu
    if $game_temp.chat_active
      $game_temp.menu_calling = false
      $game_temp.menu_beep = false
      return
    end
    call_menu_blizzardrmxos_later
  end
 
  alias check_huds_blizzardrmxos_later check_huds
  def check_huds
    minimap_button = $game_system.minimap_button
    hotkey_button = $game_system.hotkey_button
    hud_button = $game_system.hud_button
    if $game_temp.chat_active
      $game_system.minimap_button = false
      $game_system.hotkey_button = false
      $game_system.hud_button = false
    end
    check_huds_blizzardrmxos_later
    $game_system.minimap_button = minimap_button
    $game_system.hotkey_button = hotkey_button
    $game_system.hud_button = hud_button
  end
 
  alias update_hotkeys_blizzardrmxos_later update_hotkeys
  def update_hotkeys
    update_hotkeys_blizzardrmxos_later if !$game_temp.chat_active
  end
 
end


Make a new file with an .rb extension in the Extensions folder of RMX-OS and copy-paste this script into it.
Spoiler: ShowHide
module RMXOS
 
  def self.load_current_extension
    return BlizzABS
  end
 
  module Data
    GlobalMasterActivate = 'Client \'CLIENT\' activate G-Master for map \'MAPID\'.'
    GlobalMasterDeactivate = 'Client \'CLIENT\' deactivate G-Master for map \'MAPID\'.'
    GlobalMasterRelease = 'Map \'MAPID\' has been released.'
    PartyDisbanded = 'The party has been disbanded.'
    PartyFull = 'Your party is already full.'
    PartyFullPlayer = 'The party of \'PLAYER\' is already full.'
    PartyInvitation = '\'PLAYER\' has invited you to join a party.'
    PartyInvited = 'You have invited \'PLAYER\' to join your party.'
    PartyJoined = 'You have joined the party of \'PLAYER\'.'
    PartyJoinedPlayer = '\'PLAYER\' has joined the party.'
    PartyNoJoinPlayer = '\'PLAYER\' has not accepted the party invitation.'
    PartyNotOnline = '\'PLAYER\' is not online anymore.'
    PartyRemoved = 'You have left the party.'
    PartyRemovedPlayer = '\'PLAYER\' has left the party.'
  end
 
end

#======================================================================
# module BlizzABS
#======================================================================

module BlizzABS
 
  VERSION = 1.5
  RMXOS_VERSION = 1.18
  SERVER_THREAD = true
  IDENTIFIER = 'Blizz-ABS'
 
  # START Configuration
  MAX_ONLINE_PARTY = 5
  GMASTER_TIMEOUT = 5 # after how much an inactive time global master client should be released
  SERVER_DISPLAY = false # show log in command prompt screen
  LOG_FILENAME = 'logs/blizzabs.log' # leave empty if no log file should be created
  DELETE_LOG_ON_START = true
  # END Configuration
 
  def self.initialize
    @client_times = {}
    @gmasters = {}
    @capable_clients = {}
    @battlers = {}
    if LOG_FILENAME != ''
      File.delete(LOG_FILENAME) if DELETE_LOG_ON_START && FileTest.exist?(LOG_FILENAME)
      RMXOS::Logs[IDENTIFIER] = LOG_FILENAME
    end
  end
 
  def self.main
    while RMXOS.server.running
      self.server_update
      sleep(0.1)
    end
  end
 
  def self.server_update
    Thread.exclusive {
      time = Time.now
      logged_in_clients = $clients.find_all {|client| client.player.user_id > 0}
      old_clients = @client_times.keys - logged_in_clients
      old_clients.each {|client|
        @client_times.delete(client)
        @capable_clients.delete(@capable_clients.key(client))
        self.try_deactivate_gmaster(client)
        if client.player.partyleader != ''
          client.action.execute_party_remove(client.player.username, client.player.partyleader)
        end
      }
      new_clients = logged_in_clients - @client_times.keys
      new_clients.each {|client| @client_times[client] = time}
      @capable_clients.keys.each {|key|
        if time - @client_times[@capable_clients[key]] > GMASTER_TIMEOUT
          client = @capable_clients[key]
          @capable_clients.delete(key)
          self.try_deactivate_gmaster(client)
        end
      }
      (@capable_clients.values - logged_in_clients).each {|client| @capable_clients.delete(@capable_clients.key(client))}
      map_ids = []
      logged_in_clients.each {|client| map_ids.push(client.player.map_id)}
      map_ids |= map_ids # removes duplicates
      (@battlers.keys - map_ids).each {|map_id| @battlers.delete(map_id) if @battlers.has_key?(map_id)}
      (@gmasters.keys - map_ids).each {|map_id| self.release_map(map_id)}
      (map_ids - @gmasters.keys).each {|map_id| self.try_activate_gmaster(map_id)}
    }
  end
 
  def self.client_update(client)
    result = false
    case client.message
    when /\AGMD\Z/ # deactivate capable global master client
      @capable_clients.delete(client.player.user_id) if @capable_clients.has_key?(client.player.user_id)
      self.try_deactivate_gmaster(client, client.player.map_id) if client == @gmasters[client.player.map_id]
      result = true
    when /\APNG\Z/ # client ping
      if client.player.user_id != 0
        @client_times[client] = Time.now
        @capable_clients[client.player.user_id] = client if !@capable_clients.has_key?(client.player.user_id)
      end
    when /\AMEE(.+)\t(.+)/ # exchange variables for enemies
      id = $1.to_i
      variables = eval($2)
      @battlers[client.player.map_id] = {} if !@battlers.has_key?(client.player.map_id)
      @battlers[client.player.map_id][id] = Player.new(nil) if !@battlers[client.player.map_id].has_key?(id)
      @battlers[client.player.map_id][id].evaluate(variables)
      client.sender.send_to_map(client.message)
      result = true
    when /\AMEN(.+)/ # enter map
      map_id = $1.to_i
      if @battlers.has_key?(map_id)
        @battlers[map_id].each_key {|id|
          client.send("MEE#{id}\t#{@battlers[map_id][id].get_exchange_variables}")
        }
      end
    when /\ABED(.+)\t(.+)/ # broadcast enemy death
      if @gmasters[client.player.map_id] == client
        client.sender.send_to_map(client.message, true)
      else
        id = $1.to_i
        client.send("MEE#{id}\t#{@battlers[client.player.map_id][id].get_exchange_variables}")
      end
      result = true
    when /\ABER(.+)/ # broadcast enemy respawn
      if @gmasters[client.player.map_id] == client
        client.sender.send_to_map(client.message, true)
      else
        id = $1.to_i
        client.send("MEE#{id}\t#{@battlers[client.player.map_id][id].get_exchange_variables}")
      end
      result = true
    when /\AIRM(.+)\t(.+)/ # item remove
      if @gmasters[client.player.map_id] == client
        user_id, item_id = $1.to_i, $2.to_i
        client.sender.send_to_id(user_id, "IRM#{item_id}")
      end
      result = true
    when /\APIN(.+)/ # party invitation
      username = $1
      result = client.action.try_party_invite(username)
      case result
      when RMXOS::RESULT_SUCCESS
        message = RMXOS::Data::PartyInvited.sub('PLAYER') {username}
        color = RMXOS::Data::ColorInfo
      when RMXOS::RESULT_FAIL
        message = RMXOS::Data::PlayerNotOnlineMap.sub('PLAYER') {username}
        color = RMXOS::Data::ColorError
      when RMXOS::RESULT_ALTFAIL
        message = RMXOS::Data::PartyFull
        color = RMXOS::Data::ColorError
      end
      client.send("CHT#{color}\t0\t#{message}")
      result = true
    when /\APLE\Z/ # party leave
      client.action.execute_party_remove(client.player.username, client.player.partyleader)
      result = true
    when /\APRE(.+)/ # party remove
      username = $1
      client.action.execute_party_remove(username, client.player.partyleader)
      result = true
    when /\APME(.+)/ # party message
      client.sender.send_to_party("CHT#{$1}", true)
      result = true
    end
    return result
  end
 
  def self.try_activate_gmaster(map_id)
    return if @gmasters.has_key?(map_id)
    clients = @capable_clients.values.find_all {|client| client.player.map_id == map_id}
    return if clients.size == 0
    client = clients[0]
    client.send('GMA')
    @gmasters[map_id] = client
    if !@battlers.has_key?(map_id)
      @battlers[map_id] = {}
      client.send('MDR')
    end
    message = RMXOS::Data::GlobalMasterActivate.sub('CLIENT', client.player.username).sub('MAPID', map_id.to_s)
    self.log(message)
  end
 
  def self.try_deactivate_gmaster(client, map_id = nil)
    if map_id == nil
      @gmasters.each_key {|key|
        if client == @gmasters[key]
          map_id = key
          break
        end
      }
    end
    return if map_id == nil
    @gmasters.delete(map_id)
    client.send('GMD')
    message = RMXOS::Data::GlobalMasterDeactivate.sub('CLIENT', client.player.username).sub('MAPID', map_id.to_s)
    self.log(message)
    self.try_activate_gmaster(map_id)
    self.release_map(map_id) if !@gmasters.has_key?(map_id)
  end
 
  def self.release_map(map_id)
    @gmasters.delete(map_id) if @gmasters.has_key?(map_id)
    message = RMXOS::Data::GlobalMasterRelease.sub('MAPID', map_id.to_s)
    self.log(message)
  end
 
  def self.log(message)
    puts message if SERVER_DISPLAY
    RMXOS.log(IDENTIFIER, 'Log', message)
  end
 
end

#======================================================================
# Player
#======================================================================

class Player

  IGNORE_VARIABLES.push('@battler|@damage')
  IGNORE_VARIABLES.push('@battler|@hpdamage')
  IGNORE_VARIABLES.push('@battler|@spdamage')
  IGNORE_VARIABLES.push('@ai|@act|@kind')
  IGNORE_VARIABLES.push('@ai|@act|@id')
 
  attr_accessor :party
  attr_accessor :partyleader
 
  alias initialize_blizzabsrmxos_later initialize
  def initialize(client)
    initialize_blizzabsrmxos_later(client)
    self.reset_party
  end
 
  def reset_party
    @partyleader = ''
    @party = []
  end
 
end

#======================================================================
# Action
#======================================================================

class Action
 
  TYPE_PARTY_JOIN = 111
 
end
 
#======================================================================
# Action_Handler
#======================================================================

class Action_Handler
 
  def try_party_invite(username)
    return RMXOS::RESULT_ALTFAIL if @client.player.party.size >= BlizzABS::MAX_ONLINE_PARTY - 1
    client = @client.sender.get_client_by_name(username)
    return RMXOS::RESULT_FAIL if client == nil
    return RMXOS::RESULT_FAIL if client.player.map_id != @client.player.map_id
    client.action.current.type = Action::TYPE_PARTY_JOIN
    client.action.current.data = [@client.player.user_id, @client.player.username]
    message = "#{RMXOS::Data::PartyInvitation.sub('PLAYER') {@client.player.username}} #{RMXOS::Data::DoYouAccept}"
    client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{message}")
    return RMXOS::RESULT_SUCCESS
  end
 
  def execute_party_join
    user_id, leadername = @current.data
    leader = @client.sender.get_client_by_id(user_id)
    if leader == nil
      message = RMXOS::Data::PlayerNotOnlineMap.sub('PLAYER') {leadername}
      @client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{RMXOS::Data::PartyNotOnline}")
      return
    end
    if leader.player.party.size >= BlizzABS::MAX_ONLINE_PARTY - 1
      message = RMXOS::Data::PartyFullPlayer.sub('PLAYER') {leadername}
      @client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{message}")
      return
    end
    leader.player.party |= [@client.player.username]
    @client.player.party = leader.player.party.clone
    @client.player.partyleader = leader.player.partyleader = leadername
    message = RMXOS::Data::PartyJoined.sub('PLAYER') {leadername}
    @client.send("CHT#{RMXOS::Data::ColorOK}\t0\t#{message}")
    @client.send("PIN#{leadername}\t#{leader.player.party.inspect}")
    message = RMXOS::Data::PartyJoinedPlayer.sub('PLAYER') {@client.player.username}
    @client.sender.get_party_clients.each {|client|
      client.send("PIN#{leadername}\t#{leader.player.party.inspect}")
      client.send("CHT#{RMXOS::Data::ColorOK}\t0\t#{message}")
      client.player.party = leader.player.party.clone
    }
  end
 
  def execute_party_remove(username, leadername)
    client = @client.sender.get_client_by_name(username)
    clients = $clients.find_all {|client| client.player.partyleader == leadername}
    leader = @client.sender.get_client_by_name(leadername)
    party = clients - [client, leader]
    if username == leadername || leader == nil || party.size == 0
      clients.each {|client|
        if !client.socket.closed?
          client.send('PRM')
          client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{RMXOS::Data::PartyDisbanded}")
          client.player.reset_party
        end
      }
      return
    end
    if client != nil
      client.send('PRM')
      message = RMXOS::Data::PartyRemoved
      client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{message}")
      client.player.reset_party
    end
    leader.sender.send_to_party("PRE#{username}", true)
    message = RMXOS::Data::PartyRemovedPlayer.sub('PLAYER') {username}
    leader.sender.send_to_party("CHT#{RMXOS::Data::ColorInfo}\t0\t#{message}", true)
  end
 
  alias execute_yes_blizzabsrmxos_later execute_yes
  def execute_yes
    if @current.type == Action::TYPE_PARTY_JOIN
      self.execute_party_join
      @current.clear
    else
      execute_yes_blizzabsrmxos_later
    end
  end
 
  alias execute_no_blizzabsrmxos_later execute_no
  def execute_no
    if @current.type == Action::TYPE_PARTY_JOIN
      @client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{RMXOS::Data::PartyNoJoin}")
      name = @current.data[1]
      if name != nil
        message = RMXOS::Data::PartyNoJoinPlayer.sub('PLAYER') {@client.player.username}
        @client.sender.send_to_name(name, "CHT#{RMXOS::Data::ColorInfo}\t0\t#{message}")
      end
      @current.clear
    else
      execute_no_blizzabsrmxos_later
    end
  end
 
end

#======================================================================
# Sender
#======================================================================

class Sender
 
  def get_party_clients(including = false)
    clients = $clients.find_all {|client| client.player.partyleader == @client.player.partyleader}
    clients.delete(@client) if !including
    return clients
  end

  def send_to_party(message, including = false)
    self.send_to_clients(self.get_party_clients(including), message)
  end
 
end

Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on January 31, 2013, 03:18:34 am
Quote from: Blizzard on January 17, 2010, 05:02:36 pm
Script

Just make a new script above main and paste this code into it.
Spoiler: ShowHide
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Blizz-ABS Controller for RMX-OS by Blizzard
# Version: 1.5
# Type: RMX-OS Add-on
# Date: 15.2.2010
# Date v1.01: 16.2.2010
# Date v1.02: 23.4.2010
# Date v1.1: 5.12.2010
# Date v1.19: 22.1.2011
# Date v1.2: 25.1.2011
# Date v1.3: 3.2.2011
# Date v1.31: 11.2.2011
# Date v1.32: 11.2.2011
# Date v1.33: 4.3.2011
# Date v1.34: 6.3.2011
# Date v1.4: 9.3.2011
# Date v1.5: 22.6.2012
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
#  This script is to be distributed under the same terms and conditions like
#  the scripts it was created for: RMX-OS and Blizz-ABS.
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# - Special Thanks to Ryex for providing the basecode for the fix for the
#   controls conflict between Blizz-ABS and RMX-OS.
#
# Information:
#
#   This script must be placed below RMX-OS and Blizz-ABS. It requires RMX-OS
#   v1.18 or higher and Blizz-ABS 2.84 or higher to work properly. This script
#   will allow the RMX-OS Server to assign a client the role of the processor
#   (Global Master) and allow global processing Blizz-ABS AI behavior.
#   
#   
# What is different:
#   
#   - Map actor data will not be stored completely. Special states and effects
#     that are related to Blizz-ABS (i.e. the data regarding the charging
#     state) are not being saved.
#   - RMX-OS was not intended to have Blizz-ABS allies! Players will not see
#     other players' allies on the map if you add them and you are risking data
#     corruption during saving! The same goes for summons!
#   - Alignment groups are available, but dynamic change of alignment groups
#     is mostly disabled for convenience.
#   - Target selection is disabled. Every skill that has target selection will
#     be executed immediately. If a selection skill targets only one target, a
#     random target from all available targets will be chosen. Generally you
#     should avoid single-target selection skills and items.
#   - ABSEAL is disabled.
#   - Processing takes place only on the Global Master client that is assigned
#     dynamically by the server.
#   - Killed enemy events that are set on Death trigger are run only on the
#     Global Master client. It is recommended that killed enemies trigger
#     global switches that run common events. For that you need a plugin for
#     RMX-OS that allows you to have global switches.
#   - Item / Gold Drops are disabled. The actor who killed the enemy will get
#     the item reward. EXP and gold rewards are shared among party members
#     where each party member adds a specific amount to the gained EXP.
#     Remember that items can be traded so a shared item reward is unnecessary.
#   
#   
# Notes:
#   
#   - Keep in mind that adding and/or removing this script will corrupt the
#     save data in the RMX-OS SQL database.
#   - You shouldn't have any non-map scenes during the battle. This can disrupt
#     the normal game flow. You should get a custom menu system on the map for
#     the menu system specifically.
#   
#   
# If you find any bugs, please report them here:
# http://forum.chaos-project.com
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

if !$BlizzABS || BlizzABS::VERSION < 2.85
  raise 'ERROR: The "Blizz-ABS Controller" requires Blizz-ABS 2.85 or higher.'
elsif !defined?(RMXOS) || RMXOS::VERSION < 1.18
  raise 'ERROR: The "Blizz-ABS Controller" requires RMX-OS 1.18 or higher.'
end

$blizzabs_rmxos = 1.5

#==============================================================================
# module RMXOS
#==============================================================================
 
module RMXOS
 
  #============================================================================
  # module RMXOS::Options
  #============================================================================
 
  module Options
 
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # START Configuration
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
   
    # PvP active or not
    PVP = false
    # how much percent to the total EXP gain does each party member add
    PARTY_EXP_BONUS = 20
    # how much percent to the total gold gain does each party member add
    PARTY_GOLD_BONUS = 20
    # this should be only changed if necessary!
    BATTLER_VARIABLES = ['@battler|@hp', '@battler|@sp',
        '@battler|@states', '@battler|@states_turn', '@battler|@state_time',
        '@battler|@states_turn', '@battler|@state_time', '@battler|@states',
        '@ai|@positive', '@ai|@negative', '@ai|@neutral']
    ACTOR_VARIABLES = ['@battler|@actor_id', '@battler|@class_id',
        '@battler|@level', '@battler|@maxhp_plus', '@battler|@maxsp_plus',
        '@battler|@str_plus', '@battler|@dex_plus', '@battler|@agi_plus',
        '@battler|@int_plus', '@battler|@skills', '@battler|@weapon_id',
        '@battler|@armor1_id', '@battler|@armor2_id', '@battler|@armor4_id',
        '@battler|@armor3_id', '@battler|@character_name',
        '@battler|@character_hue']
    ENEMY_VARIABLES = ['@battler|@enemy_id', '@battler|@immortal',
        '@ai|@altered_alignment', '@ai|@aggressive', '@ai|@view_range',
        '@ai|@hearing_range_ratio']
   
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # END Configuration
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
    # because Game_Player was redefined
    old_Game_Player = SAVE_DATA.keys.find_all {|key|
        key.is_a?(Class) && key.name == 'Game_Player'}[0]
    SAVE_DATA[Game_Player] = SAVE_DATA[old_Game_Player]
    SAVE_DATA.delete(old_Game_Player)
    # other additional save data
    SAVE_DATA[Map_Actor] = SAVE_DATA[Game_Player].clone
    SAVE_DATA[Game_System].concat(['@hud', '@hotkeys', '@minimap',
        '@attack_button', '@defend_button', '@skill_button', '@item_button',
        '@select_button', '@hud_button', '@hotkey_button', '@minimap_button',
        '@turn_button', '@running_button', '@sneaking_button', '@jumping_button',
        '@caterpillar', '@caterpillar_active'])
    SAVE_DATA[Game_Actor].concat(['@skill', '@item', '@skill_hotkeys',
        '@item_hotkeys', '@old_level', '@offensive', '@aggressive',
        '@force_offensive', '@force_aggressive', '@state_time', '@triggers'])
    SAVE_DATA[BlizzABS::Trigger] = ['@activator', '@condition', '@comparator',
        '@value', '@action_type', '@action_data', '@target']
    # new creation data
    CREATION_DATA[Map_Actor] = '0'
 
  end
 
  #============================================================================
  # module RMXOS::Data
  #============================================================================
 
  module Data
   
    PartyAlreadyMember = 'Player is already a member of your party.'
    PartyNone          = 'You are not in a party.'
    PartyNotLeader     = 'You are not the leader of the party.'
    PartyNotMember     = 'Player is not a member of your party.'
    PartyInfo          = 'Party Leader: LEADER; Members: MEMBERS'
   
    ColorParty = Color.new(0xFF, 0x7F, 0x1F)
   
  end

  #============================================================================
  # module RMXOS::Documentation
  #============================================================================
 
  module Documentation
   
    # Party commands
    PARAMETERS['party']   = 'USERNAME'
    PARAMETERS['premove'] = 'USERNAME'
    PARAMETERS['pleave']  = 'none'
    PARAMETERS['pmsg']    = 'MESSAGE'
    PARAMETERS['pinfo']   = 'none'
   
    DESCRIPTIONS['party']   = 'Invites a player into your party.'
    DESCRIPTIONS['premove'] = 'Removes a player from your party.'
    DESCRIPTIONS['pleave']  = 'Leaves the current party. Disbands the party if you are the party leader.'
    DESCRIPTIONS['pmsg']    = 'Sends a message to all party members.'
    DESCRIPTIONS['pinfo']   = 'Displays information about your party.'
   
  end
 
  def self.change_keys
    controls = [Input::LEFT, Input::RIGHT, Input::UP, Input::DOWN, Input::B,
        Input::C]
    keys = []
    replacements = ['Arrow Left', 'Arrow Right', 'Arrow Up', 'Arrow Down',
        'Esc', 'Enter']
    controls.each_index {|i|
        keys[i] = controls[i].clone
        controls[i].clear
        controls[i].push(Input::Key[replacements[i]])
    }
    return keys
  end
 
  def self.restore_keys(keys)
    controls = [Input::LEFT, Input::RIGHT, Input::UP, Input::DOWN, Input::B,
        Input::C]
    controls.each_index {|i|
        controls[i].clear
        keys[i].each {|key| controls[i].push(key)}
    }
  end
 
end

#==============================================================================
# module BlizzABS
#==============================================================================
 
module BlizzABS
 
  #============================================================================
  # module BlizzABS::Config
  #============================================================================
 
  module Config
   
    ABSEAL_FACTOR = 485
    GOLD_DROP = ''
    ITEM_DROP = false
    CORPSES = false
   
  end
 
  #============================================================================
  # module BlizzABS::Alignments
  #============================================================================
 
  module Alignments
   
    ONLINE_GROUP = 0
    GROUPS.push(ONLINE_GROUP)
    GROUPS.sort!
   
    class << Alignments
      alias neutral_blizzabsrmxos_later neutral
      alias negative_blizzabsrmxos_later neutral
    end
   
    def self.negative(id)
      result = negative_blizzabsrmxos_later(id)
      case id
      when ONLINE_GROUP
        result = GROUPS.clone
        result.delete(id)
        result.delete(ACTOR_GROUP) if !RMXOS::Options::PVP
      when ENEMY_GROUP
        result.push(ONLINE_GROUP)
      end
      return result
    end
   
    def self.neutral(id)
      result = neutral_blizzabsrmxos_later(id)
      result |= [ONLINE_GROUP]
      return result
    end
   
  end
 
  #============================================================================
  # BlizzABS::AI::Data_Enemy
  #============================================================================
 
  class AI::Data_Enemy
   
    alias lifeless_blizzabsrmxos_later? lifeless?
    def lifeless?
      return (!$network.gmaster || lifeless_blizzabsrmxos_later?)
    end
   
  end
 
  #============================================================================
  # BlizzABS::Processor
  #============================================================================
 
  class Processor
   
    def update_killed
      deleted_killed = []
      $game_system.killed.each_key {|key|
          $game_system.killed[key] -= 1
          if key.execute
            key.update
          elsif $game_system.killed[key] <= 0
            $game_map.events.delete(key.id)
            if !key.ai.lifeless_blizzabsrmxos_later? &&
                ($game_system.respawn_time > 0 || key.respawn_point != nil)
              if $network.gmaster && !key.respawning
                $network.send_enemy_respawn(key)
                key.respawning = true
              end
            else
              deleted_killed.push(key)
            end
          end}
      deleted_killed.each {|key| $game_system.killed.delete(key)}
    end
   
    alias exp_result_blizzabsrmxos_later exp_result
    def exp_result(enemy)
      if enemy.last_targeter == $network.user_id ||
          $network.party.include?(enemy.last_targeter)
        return exp_result_blizzabsrmxos_later(enemy)
      end
      return 0
    end
   
    alias gold_result_blizzabsrmxos_later gold_result
    def gold_result(enemy)
      if enemy.last_targeter == $network.user_id ||
          $network.party.include?(enemy.last_targeter)
        return gold_result_blizzabsrmxos_later(enemy)
      end
      return 0
    end
   
    alias additional_result_blizzabsrmxos_later additional_result
    def additional_result(enemy)
      if enemy.last_targeter == $network.user_id
        return additional_result_blizzabsrmxos_later(enemy)
      end
    end
   
    alias drop_items_blizzabsrmxos_later drop_items
    def drop_items(enemy)
      if enemy.last_targeter == $network.user_id
        return drop_items_blizzabsrmxos_later(enemy)
      end
      return []
    end
   
    alias remove_enemy_blizzabsrmxos_later remove_enemy
    def remove_enemy(enemy)
      $network.send_enemy_death(enemy) if $network.gmaster
    end
   
  end
 
  #============================================================================
  # BlizzABS::Controller
  #============================================================================
 
  class Controller
   
    alias update_control_blizzabsrmxos_later update_control
    def update_control
      update_control_blizzabsrmxos_later if !$game_temp.chat_active
    end
   
  end
 
  #============================================================================
  # BlizzABS::Controls
  #============================================================================
 
  class Controls
   
    alias update_blizzabsrmxos_later update
    def update
      update_blizzabsrmxos_later if !$game_temp.chat_active
    end
   
  end
 
  #============================================================================
  # BlizzABS::Utility
  #============================================================================
 
  class Utility
   
    alias request_damage_sprite_blizzabsrmxos_later request_damage_sprite
    def request_damage_sprite(char, damage = nil)
      if $network.gmaster
        variables = char.get_exchange_variables(['@battler|@damage',
            '@battler|@hpdamage', '@battler|@spdamage', '@battler|@hp',
            '@battler|@sp'])
        char.send_exchange_variables(variables)
      end
      request_damage_sprite_blizzabsrmxos_later(char, damage)
    end
   
  end
 
end

$BlizzABS = BlizzABS::Processor.new

#==============================================================================
# RMXOS::Network
#==============================================================================

class RMXOS::Network
 
  attr_reader :gmaster
  attr_reader :party
  attr_reader :partyleader
 
  alias init_blizzabsrmxos_later initialize
  def initialize
    init_blizzabsrmxos_later
    @gmaster = false
    @respawning = {}
    self.party_reset
  end
 
  alias reset_blizzabsrmxos_later reset
  def reset
    self.party_reset
    reset_blizzabsrmxos_later
  end
 
  def party_reset
    @partyleader = ''
    @party = []
  end
 
  alias clear_map_players_blizzabsrmxos_later clear_map_players
  def clear_map_players
    clear_map_players_blizzabsrmxos_later
    @respawning = {}
  end
 
  alias check_game_blizzabsrmxos_later check_game
  def check_game(message)
    case message
    when /\AGMA\Z/ # global master activate
      @gmaster = true
      return true
    when /\AGMD\Z/ # global master deactivate
      @gmaster = false
      return true
    when /\AMEE(.+)\t(.+)/ # exchange variables for enemies
      id = $1.to_i
      variables = eval($2)
      if $game_map != nil && $game_map.events != nil &&
          $game_map.events.has_key?(id)
        $game_map.events[id].evaluate(variables)
      end
      return true
    when /\AMDR\Z/ # map data request
      $game_map.battlers.each {|battler| battler.send_exchange_variables}
      return true
    when /\ABED(.+)\t(.+)/ # broadcast enemy death
      id = $1.to_i
      targeter_id = $2.to_i
      if $game_map.events.has_key?(id)
        enemy = $game_map.events[id]
        enemy.last_targeter = targeter_id
        $BlizzABS.remove_enemy_blizzabsrmxos_later(enemy)
        tmp = $game_map.respawns.find_all {|event|
            !event.erased && event.respawn_ids != nil &&
            event.respawn_ids.include?(enemy.battler_id)}
        if !enemy.ai.lifeless_blizzabsrmxos_later? &&
            ($game_system.respawn_time > 0 || tmp.size > 0)
          @respawning[id] = enemy
        end
      end
    when /\ABER(.+)/ # broadcast enemy respawn
      id = $1.to_i
      if @respawning.has_key?(id)
        enemy = @respawning[id]
        $game_map.events[id] = $BlizzABS.respawn_enemy(enemy)
        @respawning.delete(enemy)
        if $game_system.killed.has_key?(enemy)
          $game_system.killed.delete(enemy)
        end
      end
      return true
    when /\APIN(.+)\t(.+)/ # party invite
      @partyleader = $1
      @party = eval($2).compact.sort
      @party.delete(@username)
      return true
    when /\APRM\Z/ # party reset
      self.party_reset
      return true
    when /\APRE(.+)/ # party remove
      @party.delete($1)
      return true
    when /\AIRM(.+)/ # item remove
      $game_party.lose_item($1.to_i)
      return true
    end
    return check_game_blizzabsrmxos_later(message)
  end
 
  alias check_normal_commands_blizzabsrmxos_later check_normal_commands
  def check_normal_commands(message)
    case message
    when /\A\/party (\S+)\Z/
      command_party_invite($1)
      return true
    when /\A\/premove (\S+)\Z/
      command_party_remove($1)
      return true
    when /\A\/pleave\Z/
      command_party_leave
      return true
    when /\A\/pmsg (\S{1}.*)/
      command_party_chat($1)
      return true
    when /\A\/pinfo\Z/
      command_party_info
      return true
    end
    return check_normal_commands_blizzabsrmxos_later(message)
  end
 
  def partyleader?
    return (self.in_party? && @partyleader == @username)
  end
 
  def in_party?
    return (@partyleader != '')
  end
   
  def check_partyleader_action
    if !self.partyleader?
      self.add_error(RMXOS::Data::PartyNotLeader)
      return false
    end
    return true
  end
   
  def check_party_action
    if !self.in_party?
      self.add_error(RMXOS::Data::PartyNone)
      return false
    end
    return true
  end
   
  def command_party_invite(username)
    if !self.in_party? || self.check_partyleader_action
      if @party.include?(username)
        self.add_error(RMXOS::Data::PartyAlreadyMember)
      else
        self.send("PIN#{username}")
      end
    end
  end
 
  def command_party_remove(username)
    if self.check_partyleader_action
      if !@party.include?(username)
        self.add_error(RMXOS::Data::PartyNotMember)
      else
        self.send("PRE#{username}")
      end
    end
  end
 
  def command_party_leave
    if self.check_party_action
      self.send('PLE')
    end
  end
 
  def command_party_info
    if self.check_party_action
      text = RMXOS::Data::PartyInfo.sub('LEADER') {@partyleader}
      text = text.sub('MEMBERS') {(@party - [@partyleader]).join(', ')}
      self.add_info(text)
    end
  end
   
  def command_party_chat(message)
    if self.check_party_action
      send_chat_message(message, RMXOS::Data::ColorParty, 'PME')
    end
  end
   
  def try_deactivate_gmaster
    self.send('GMD')
    @gmaster = false
  end
 
  def send_enemy_exchange_variables(id, variables)
    self.send("MEE#{id}\t#{variables.inspect}")
  end
   
  def send_item_remove(user_id, item_id)
    self.send("IRM#{user_id}\t#{item_id}")
  end
 
  def send_enemy_death(enemy)
    return if enemy.last_targeter == nil
    if enemy.last_targeter == $game_player
      id = $network.user_id
    elsif enemy.last_targeter.is_a?(Map_OnlineBattler)
      id = enemy.last_targeter.user_id
    else
      return
    end
    self.send("BED#{enemy.id}\t#{id}")
  end
 
  def send_enemy_respawn(enemy)
    self.send("BER#{enemy.id}")
  end
 
end

#==============================================================================
# Game_Enemy
#==============================================================================

class Game_Enemy
 
  alias exp_blizzabs_rmxos_later exp
  def exp
    result = exp_blizzabs_rmxos_later
    bonus = $network.party.size * RMXOS::Options::PARTY_EXP_BONUS
    return (result * (100 + bonus) / 100 / ($network.party.size + 1))
  end
 
  alias gold_blizzabs_rmxos_later gold
  def gold
    result = gold_blizzabs_rmxos_later
    bonus = $network.party.size * RMXOS::Options::PARTY_GOLD_BONUS
    return (result * (100 + bonus) / 100 / ($network.party.size + 1))
  end
 
end
 
#==============================================================================
# Spriteset_Map
#==============================================================================

class Spriteset_Map
 
  alias init_blizzabsrmxos_later initialize
  def initialize
    init_blizzabsrmxos_later
    $network.map_players.each_value {|character|
        sprite = Sprite_Character.new(@viewport1, character)
        sprite.update
        @character_sprites.push(sprite)}
  end
 
end

#==============================================================================
# Map_Battler
#==============================================================================

class Map_Battler
 
  attr_accessor :last_targeter
 
  def get_exchange_variable_names
    return (RMXOS::Options::EXCHANGE_VARIABLES |
        RMXOS::Options::BATTLER_VARIABLES)
  end
 
  alias use_attack_blizzabsrmxos_later use_attack
  def use_attack
    result = use_attack_blizzabsrmxos_later
    if result && (self == $game_player || $network.gmaster)
      variables = {}
      variables['@ai|@act|@kind'] = BlizzABS::ACTAttack
      self.send_exchange_variables(variables)
    end
    return result
  end
 
  alias use_skill_blizzabsrmxos_later use_skill
  def use_skill(skill, forced = false)
    result = use_skill_blizzabsrmxos_later(skill, forced)
    if result && (self == $game_player || $network.gmaster)
      variables = {}
      variables['@ai|@act|@kind'] = BlizzABS::ACTSkill
      variables['@ai|@act|@id'] = skill.id
      self.send_exchange_variables(variables)
    end
    return result
  end
 
  alias use_item_blizzabsrmxos_later use_item
  def use_item(item, forced = false)
    result = use_item_blizzabsrmxos_later(item, forced)
    if result && (self == $game_player || $network.gmaster)
      variables = {}
      variables['@ai|@act|@kind'] = BlizzABS::ACTItem
      variables['@ai|@act|@id'] = item.id
      self.send_exchange_variables(variables)
    end
    return result
  end
 
  def setup_damage_display
    $BlizzABS.util.request_damage_sprite(self)
    @battler.damage, @battler.hpdamage, @battler.spdamage = nil, 0, 0
  end
 
  def in_screen?
    return true
  end
         
end
 
#==============================================================================
# Map_Actor
#==============================================================================

class Map_Actor
 
  alias update_blizzabsrmxos_later update
  def update
    update_blizzabsrmxos_later
    if !$network.gmaster && self.valid? && @battler.damage != nil
      setup_damage_display
    end
  end
 
  def get_exchange_variable_names
    return (super | RMXOS::Options::ACTOR_VARIABLES)
  end
 
  def update_exchange_variables
    changed = self.get_exchange_variables_changes
    if changed.size > 0
      self.send_exchange_variables(changed)
      self.store_exchange_variables(changed)
    end
  end
 
  def send_exchange_variables(variables = nil)
    variables = super(variables)
    $network.send_exchange_variables(variables) if self == $game_player
    return variables
  end
 
  alias attack_effect_blizzabsrmxos_later attack_effect
  def attack_effect(character, _battler)
    return false if !$network.gmaster
    return attack_effect_blizzabsrmxos_later(character, _battler)
  end
 
  alias skill_effect_blizzabsrmxos_later skill_effect
  def skill_effect(character, _battler, skill)
    return false if !$network.gmaster
    return skill_effect_blizzabsrmxos_later(character, _battler, skill)
  end
 
  alias item_effect_blizzabsrmxos_later item_effect
  def item_effect(character, _battler, item)
    return false if !$network.gmaster
    return item_effect_blizzabsrmxos_later(character, _battler, item)
  end
 
end
 
#==============================================================================
# Map_Enemy
#==============================================================================

class Map_Enemy
 
  attr_accessor :respawning
 
  alias update_blizzabsrmxos_later update
  def update
    update_blizzabsrmxos_later
    if !$network.gmaster && self.valid? && @battler.damage != nil
      setup_damage_display
    end
  end
 
  def get_exchange_variable_names
    return (super | RMXOS::Options::ENEMY_VARIABLES)
  end
 
  def update_exchange_variables
    changed = self.get_exchange_variables_changes
    if changed.size > 0
      self.send_exchange_variables(changed)
      self.store_exchange_variables(changed)
    end
  end
 
  def send_exchange_variables(variables = nil)
    variables = super(variables)
    $network.send_enemy_exchange_variables(self.id, variables)
    return variables
  end
 
  alias attack_effect_blizzabsrmxos_later attack_effect
  def attack_effect(character, _battler)
    return false if !$network.gmaster
    @last_targeter = character
    return attack_effect_blizzabsrmxos_later(character, _battler)
  end
 
  alias skill_effect_blizzabsrmxos_later skill_effect
  def skill_effect(character, _battler, skill)
    return false if !$network.gmaster
    @last_targeter = character
    return skill_effect_blizzabsrmxos_later(character, _battler, skill)
  end
 
  alias item_effect_blizzabsrmxos_later item_effect
  def item_effect(character, _battler, item)
    return false if !$network.gmaster
    @last_targeter = character
    return item_effect_blizzabsrmxos_later(character, _battler, item)
  end
 
end
 
#==============================================================================
# Map_OnlineBattler
#==============================================================================

class Map_OnlineBattler < Map_Actor
 
  attr_reader   :user_id
  attr_reader   :username
  attr_reader   :usergroup
  attr_accessor :map_id
 
  def initialize
    super(0)
    @battler = Game_Actor.new(1)
    @cindex = nil
    @ai.setup_group(BlizzABS::Alignments::ONLINE_GROUP)
    @normal_speed = BlizzABS::Config::NORMAL_SPEED
    refresh
  end
 
  def update
    if !$network.gmaster && self.valid? && @battler.damage != nil
      setup_damage_display
    end
    refresh
    super
    @character_name = @character_name_org
    sprite_animation_setup
    check_action
  end
 
  def check_action
    return if !self.valid? || !@ai.act.valid?
    battlers = []
    if @ai.target == nil
      battlers = ($game_map.battlers + $BlizzABS.battlers).find_all {|b|
          b.valid?}
      battlers.compact!
    end
    $BlizzABS.AI.normal_action(self, battlers, battlers, @ai.act.basic?,
        @ai.act.kind - 1, 0xFFFF, 0xFFFF, @ai.act.id, @ai.act.skill?)
    @ai.act.delay = 0 if !@ai.act.defend?
    $BlizzABS.AI.try_execute(self) if @ai.target != nil
    self.reset_action
  end
 
  def update?
    return false
  end
 
  def evaluate(variables, user_id, username, usergroup)
    super(variables)
    @user_id = user_id
    @username = username
    @usergroup = usergroup
    refresh
  end
 
  def battler(override = false)
    return @battler
  end
 
  def item_can_use?(id)
    return true
  end
 
  def item_consumption(item)
    $network.send_item_remove(@user_id, item.id) if item.consumable
  end
 
  def update_ci(ind = nil)
  end
 
  def update_buffer(move)
  end
 
  def turn_toward(character)
  end
 
  def moveto(x, y)
    pix = $BlizzABS.pixel
    super(x / pix, y / pix)
  end
 
end

Game_OnlineCharacter = Map_OnlineBattler

#==============================================================================
# Game_Map
#==============================================================================

class Game_Map
 
  alias battlers_blizzabsrmxos_later battlers
  def battlers
    return (battlers_blizzabsrmxos_later | $network.map_players.values)
  end
 
end

#==============================================================================
# Frame_Text
#==============================================================================

class Frame_Text
 
  alias update_input_blizzabsrmxos_later update_input
  def update_input
    keys = RMXOS.change_keys
    update_input_blizzabsrmxos_later
    RMXOS.restore_keys(keys)
  end
 
end

#==============================================================================
# Scene_Login
#==============================================================================

class Scene_Login
 
  alias update_blizzabsrmxos_later update
  def update
    keys = RMXOS.change_keys
    update_blizzabsrmxos_later
    RMXOS.restore_keys(keys)
  end
 
end

#==============================================================================
# Scene_Register
#==============================================================================

class Scene_Register
 
  alias update_blizzabsrmxos_later update
  def update
    keys = RMXOS.change_keys
    update_blizzabsrmxos_later
    RMXOS.restore_keys(keys)
  end
 
end

#==============================================================================
# Scene_Map
#==============================================================================

class Scene_Map
 
  alias main_blizzabsrmxos_later main
  def main
    main_blizzabsrmxos_later
    $network.try_deactivate_gmaster
  end
 
  def initialize_selection
  end
 
  def process_selection
    object, r, type, sprites = $game_temp.select_data
    if $tons_version != nil && object.is_a?(RPG::Skill) &&
        ($tons_version >= 6.02 && $game_system.TARGET_EM_ALL &&
        FULL_TARGET_IDS.include?(object.id))
      targets = []
      sprites.each {|sprite| targets.push(sprite.character)}
    else
      targets = [sprites[rand(sprites.size)].character]
    end
    return targets
  end
 
  def execute_selection(targets)
    if targets.size > 0
      $game_player.ai.target = targets[0]
      case $game_temp.select_data[0]
      when RPG::Skill then $game_player.use_skill($game_temp.select_data[0])
      when RPG::Item then $game_player.use_item($game_temp.select_data[0])
      end
    end
    $game_temp.select_data = nil
  end
 
  alias call_menu_blizzardrmxos_later call_menu
  def call_menu
    if $game_temp.chat_active
      $game_temp.menu_calling = false
      $game_temp.menu_beep = false
      return
    end
    call_menu_blizzardrmxos_later
  end
 
  alias check_huds_blizzardrmxos_later check_huds
  def check_huds
    minimap_button = $game_system.minimap_button
    hotkey_button = $game_system.hotkey_button
    hud_button = $game_system.hud_button
    if $game_temp.chat_active
      $game_system.minimap_button = false
      $game_system.hotkey_button = false
      $game_system.hud_button = false
    end
    check_huds_blizzardrmxos_later
    $game_system.minimap_button = minimap_button
    $game_system.hotkey_button = hotkey_button
    $game_system.hud_button = hud_button
  end
 
  alias update_hotkeys_blizzardrmxos_later update_hotkeys
  def update_hotkeys
    update_hotkeys_blizzardrmxos_later if !$game_temp.chat_active
  end
 
end


Make a new file with an .rb extension in the Extensions folder of RMX-OS and copy-paste this script into it.
[spoiler][code]module RMXOS
 
  def self.load_current_extension
    return BlizzABS
  end
 
  module Data
    GlobalMasterActivate = 'Client \'CLIENT\' activate G-Master for map \'MAPID\'.'
    GlobalMasterDeactivate = 'Client \'CLIENT\' deactivate G-Master for map \'MAPID\'.'
    GlobalMasterRelease = 'Map \'MAPID\' has been released.'
    PartyDisbanded = 'The party has been disbanded.'
    PartyFull = 'Your party is already full.'
    PartyFullPlayer = 'The party of \'PLAYER\' is already full.'
    PartyInvitation = '\'PLAYER\' has invited you to join a party.'
    PartyInvited = 'You have invited \'PLAYER\' to join your party.'
    PartyJoined = 'You have joined the party of \'PLAYER\'.'
    PartyJoinedPlayer = '\'PLAYER\' has joined the party.'
    PartyNoJoinPlayer = '\'PLAYER\' has not accepted the party invitation.'
    PartyNotOnline = '\'PLAYER\' is not online anymore.'
    PartyRemoved = 'You have left the party.'
    PartyRemovedPlayer = '\'PLAYER\' has left the party.'
  end
 
end

#======================================================================
# module BlizzABS
#======================================================================

module BlizzABS
 
  VERSION = 1.5
  RMXOS_VERSION = 1.18
  SERVER_THREAD = true
  IDENTIFIER = 'Blizz-ABS'
 
  # START Configuration
  MAX_ONLINE_PARTY = 5
  GMASTER_TIMEOUT = 5 # after how much an inactive time global master client should be released
  SERVER_DISPLAY = false # show log in command prompt screen
  LOG_FILENAME = 'logs/blizzabs.log' # leave empty if no log file should be created
  DELETE_LOG_ON_START = true
  # END Configuration
 
  def self.initialize
    @client_times = {}
    @gmasters = {}
    @capable_clients = {}
    @battlers = {}
    if LOG_FILENAME != ''
      File.delete(LOG_FILENAME) if DELETE_LOG_ON_START && FileTest.exist?(LOG_FILENAME)
      RMXOS::Logs[IDENTIFIER] = LOG_FILENAME
    end
  end
 
  def self.main
    while RMXOS.server.running
      self.server_update
      sleep(0.1)
    end
  end
 
  def self.server_update
    Thread.exclusive {
      time = Time.now
      logged_in_clients = $clients.find_all {|client| client.player.user_id > 0}
      old_clients = @client_times.keys - logged_in_clients
      old_clients.each {|client|
        @client_times.delete(client)
        @capable_clients.delete(@capable_clients.key(client))
        self.try_deactivate_gmaster(client)
        if client.player.partyleader != ''
          client.action.execute_party_remove(client.player.username, client.player.partyleader)
        end
      }
      new_clients = logged_in_clients - @client_times.keys
      new_clients.each {|client| @client_times[client] = time}
      @capable_clients.keys.each {|key|
        if time - @client_times[@capable_clients[key]] > GMASTER_TIMEOUT
          client = @capable_clients[key]
          @capable_clients.delete(key)
          self.try_deactivate_gmaster(client)
        end
      }
      (@capable_clients.values - logged_in_clients).each {|client| @capable_clients.delete(@capable_clients.key(client))}
      map_ids = []
      logged_in_clients.each {|client| map_ids.push(client.player.map_id)}
      map_ids |= map_ids # removes duplicates
      (@battlers.keys - map_ids).each {|map_id| @battlers.delete(map_id) if @battlers.has_key?(map_id)}
      (@gmasters.keys - map_ids).each {|map_id| self.release_map(map_id)}
      (map_ids - @gmasters.keys).each {|map_id| self.try_activate_gmaster(map_id)}
    }
  end
 
  def self.client_update(client)
    result = false
    case client.message
    when /\AGMD\Z/ # deactivate capable global master client
      @capable_clients.delete(client.player.user_id) if @capable_clients.has_key?(client.player.user_id)
      self.try_deactivate_gmaster(client, client.player.map_id) if client == @gmasters[client.player.map_id]
      result = true
    when /\APNG\Z/ # client ping
      if client.player.user_id != 0
        @client_times[client] = Time.now
        @capable_clients[client.player.user_id] = client if !@capable_clients.has_key?(client.player.user_id)
      end
    when /\AMEE(.+)\t(.+)/ # exchange variables for enemies
      id = $1.to_i
      variables = eval($2)
      @battlers[client.player.map_id] = {} if !@battlers.has_key?(client.player.map_id)
      @battlers[client.player.map_id][id] = Player.new(nil) if !@battlers[client.player.map_id].has_key?(id)
      @battlers[client.player.map_id][id].evaluate(variables)
      client.sender.send_to_map(client.message)
      result = true
    when /\AMEN(.+)/ # enter map
      map_id = $1.to_i
      if @battlers.has_key?(map_id)
        @battlers[map_id].each_key {|id|
          client.send("MEE#{id}\t#{@battlers[map_id][id].get_exchange_variables}")
        }
      end
    when /\ABED(.+)\t(.+)/ # broadcast enemy death
      if @gmasters[client.player.map_id] == client
        client.sender.send_to_map(client.message, true)
      else
        id = $1.to_i
        client.send("MEE#{id}\t#{@battlers[client.player.map_id][id].get_exchange_variables}")
      end
      result = true
    when /\ABER(.+)/ # broadcast enemy respawn
      if @gmasters[client.player.map_id] == client
        client.sender.send_to_map(client.message, true)
      else
        id = $1.to_i
        client.send("MEE#{id}\t#{@battlers[client.player.map_id][id].get_exchange_variables}")
      end
      result = true
    when /\AIRM(.+)\t(.+)/ # item remove
      if @gmasters[client.player.map_id] == client
        user_id, item_id = $1.to_i, $2.to_i
        client.sender.send_to_id(user_id, "IRM#{item_id}")
      end
      result = true
    when /\APIN(.+)/ # party invitation
      username = $1
      result = client.action.try_party_invite(username)
      case result
      when RMXOS::RESULT_SUCCESS
        message = RMXOS::Data::PartyInvited.sub('PLAYER') {username}
        color = RMXOS::Data::ColorInfo
      when RMXOS::RESULT_FAIL
        message = RMXOS::Data::PlayerNotOnlineMap.sub('PLAYER') {username}
        color = RMXOS::Data::ColorError
      when RMXOS::RESULT_ALTFAIL
        message = RMXOS::Data::PartyFull
        color = RMXOS::Data::ColorError
      end
      client.send("CHT#{color}\t0\t#{message}")
      result = true
    when /\APLE\Z/ # party leave
      client.action.execute_party_remove(client.player.username, client.player.partyleader)
      result = true
    when /\APRE(.+)/ # party remove
      username = $1
      client.action.execute_party_remove(username, client.player.partyleader)
      result = true
    when /\APME(.+)/ # party message
      client.sender.send_to_party("CHT#{$1}", true)
      result = true
    end
    return result
  end
 
  def self.try_activate_gmaster(map_id)
    return if @gmasters.has_key?(map_id)
    clients = @capable_clients.values.find_all {|client| client.player.map_id == map_id}
    return if clients.size == 0
    client = clients[0]
    client.send('GMA')
    @gmasters[map_id] = client
    if !@battlers.has_key?(map_id)
      @battlers[map_id] = {}
      client.send('MDR')
    end
    message = RMXOS::Data::GlobalMasterActivate.sub('CLIENT', client.player.username).sub('MAPID', map_id.to_s)
    self.log(message)
  end
 
  def self.try_deactivate_gmaster(client, map_id = nil)
    if map_id == nil
      @gmasters.each_key {|key|
        if client == @gmasters[key]
          map_id = key
          break
        end
      }
    end
    return if map_id == nil
    @gmasters.delete(map_id)
    client.send('GMD')
    message = RMXOS::Data::GlobalMasterDeactivate.sub('CLIENT', client.player.username).sub('MAPID', map_id.to_s)
    self.log(message)
    self.try_activate_gmaster(map_id)
    self.release_map(map_id) if !@gmasters.has_key?(map_id)
  end
 
  def self.release_map(map_id)
    @gmasters.delete(map_id) if @gmasters.has_key?(map_id)
    message = RMXOS::Data::GlobalMasterRelease.sub('MAPID', map_id.to_s)
    self.log(message)
  end
 
  def self.log(message)
    puts message if SERVER_DISPLAY
    RMXOS.log(IDENTIFIER, 'Log', message)
  end
 
end

#======================================================================
# Player
#======================================================================

class Player

  IGNORE_VARIABLES.push('@battler|@damage')
  IGNORE_VARIABLES.push('@battler|@hpdamage')
  IGNORE_VARIABLES.push('@battler|@spdamage')
  IGNORE_VARIABLES.push('@ai|@act|@kind')
  IGNORE_VARIABLES.push('@ai|@act|@id')
 
  attr_accessor :party
  attr_accessor :partyleader
 
  alias initialize_blizzabsrmxos_later initialize
  def initialize(client)
    initialize_blizzabsrmxos_later(client)
    self.reset_party
  end
 
  def reset_party
    @partyleader = ''
    @party = []
  end
 
end

#======================================================================
# Action
#======================================================================

class Action
 
  TYPE_PARTY_JOIN = 111
 
end
 
#======================================================================
# Action_Handler
#======================================================================

class Action_Handler
 
  def try_party_invite(username)
    return RMXOS::RESULT_ALTFAIL if @client.player.party.size >= BlizzABS::MAX_ONLINE_PARTY - 1
    client = @client.sender.get_client_by_name(username)
    return RMXOS::RESULT_FAIL if client == nil
    return RMXOS::RESULT_FAIL if client.player.map_id != @client.player.map_id
    client.action.current.type = Action::TYPE_PARTY_JOIN
    client.action.current.data = [@client.player.user_id, @client.player.username]
    message = "#{RMXOS::Data::PartyInvitation.sub('PLAYER') {@client.player.username}} #{RMXOS::Data::DoYouAccept}"
    client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{message}")
    return RMXOS::RESULT_SUCCESS
  end
 
  def execute_party_join
    user_id, leadername = @current.data
    leader = @client.sender.get_client_by_id(user_id)
    if leader == nil
      message = RMXOS::Data::PlayerNotOnlineMap.sub('PLAYER') {leadername}
      @client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{RMXOS::Data::PartyNotOnline}")
      return
    end
    if leader.player.party.size >= BlizzABS::MAX_ONLINE_PARTY - 1
      message = RMXOS::Data::PartyFullPlayer.sub('PLAYER') {leadername}
      @client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{message}")
      return
    end
    leader.player.party |= [@client.player.username]
    @client.player.party = leader.player.party.clone
    @client.player.partyleader = leader.player.partyleader = leadername
    message = RMXOS::Data::PartyJoined.sub('PLAYER') {leadername}
    @client.send("CHT#{RMXOS::Data::ColorOK}\t0\t#{message}")
    @client.send("PIN#{leadername}\t#{leader.player.party.inspect}")
    message = RMXOS::Data::PartyJoinedPlayer.sub('PLAYER') {@client.player.username}
    @client.sender.get_party_clients.each {|client|
      client.send("PIN#{leadername}\t#{leader.player.party.inspect}")
      client.send("CHT#{RMXOS::Data::ColorOK}\t0\t#{message}")
      client.player.party = leader.player.party.clone
    }
  end
 
  def execute_party_remove(username, leadername)
    client = @client.sender.get_client_by_name(username)
    clients = $clients.find_all {|client| client.player.partyleader == leadername}
    leader = @client.sender.get_client_by_name(leadername)
    party = clients - [client, leader]
    if username == leadername || leader == nil || party.size == 0
      clients.each {|client|
        if !client.socket.closed?
          client.send('PRM')
          client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{RMXOS::Data::PartyDisbanded}")
          client.player.reset_party
        end
      }
      return
    end
    if client != nil
      client.send('PRM')
      message = RMXOS::Data::PartyRemoved
      client.send("CHT#{RMXOS::Data::ColorInfo}\t0\t#{message}")
      client.player.reset_party
    end
    leader.sender.send_to_party("PRE#{username}", true)
    message = RMXOS::Data::PartyRemovedPlayer.sub('PLAYER') {username}
    leader.sender.send_to_party("CHT#{RMXOS::Data::ColorInfo}\t0\t#{message}", true)
  end

Blizzard

As I quoted myself in red text, the instructions how to add these scripts into your game are already there.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on January 31, 2013, 04:05:04 am
As I quoted myself in red text, the instructions how to add these scripts into your game are already there.

Alright, lemme go ahead and re-try it. I will edit this post with updates afterwards.


EDIT:
Spoiler: ShowHide


Why does it say it needs to be a higher version? O.o
----

Spoiler: ShowHide


Why does it say it doesn't exist?(This is the .rb extension for ABS)
----

Spoiler: ShowHide


Picture of my scripts

Blizzard

You haven't added the actual Blizz-ABS script.

Refer to this topic to make sure you add your scripts in the right order: http://forum.chaos-project.com/index.php/topic,23.0.html
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on January 31, 2013, 05:07:05 am
You haven't added the actual Blizz-ABS script.

Refer to this topic to make sure you add your scripts in the right order: http://forum.chaos-project.com/index.php/topic,23.0.html

Ok how does this look?



Also, when I still start the game, I get the error that it requires blizz-abs 2.85 or higher

MOAL

Quote from: Xolitude on February 01, 2013, 07:07:32 pm
Quote from: Blizzard on January 31, 2013, 05:07:05 am
You haven't added the actual Blizz-ABS script.

Refer to this topic to make sure you add your scripts in the right order: http://forum.chaos-project.com/index.php/topic,23.0.html

Ok how does this look?



Also, when I still start the game, I get the error that it requires blizz-abs 2.85 or higher


You need to look in the Blizz-ABS Controller for RMX-OS inside your game project on line 76, edit the 2.85 to 2.84.

Xolitude

Quote from: MOAL on February 01, 2013, 08:41:29 pm
Quote from: Xolitude on February 01, 2013, 07:07:32 pm
Quote from: Blizzard on January 31, 2013, 05:07:05 am
You haven't added the actual Blizz-ABS script.

Refer to this topic to make sure you add your scripts in the right order: http://forum.chaos-project.com/index.php/topic,23.0.html

Ok how does this look?



Also, when I still start the game, I get the error that it requires blizz-abs 2.85 or higher


You need to look in the Blizz-ABS Controller for RMX-OS inside your game project on line 76, edit the 2.85 to 2.84.


Ok fixed that issue but now....


MOAL

You didn't edit the parameters in the RMX-OS script, did you? Or are you using the unedited script?

Blizzard

Your images don't appear to me. Try imageshack or photobucket.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: MOAL on February 01, 2013, 10:54:06 pm
You didn't edit the parameters in the RMX-OS script, did you? Or are you using the unedited script?


Unedited...

Xolitude

Quote from: Blizzard on February 02, 2013, 04:51:11 am
Your images don't appear to me. Try imageshack or photobucket.


All it says is this:

"Script 'Blizz-OS' line 171: NameError occurred

uninitialized constant RMXOS::Documentation::PARAMETERS"

Blizzard

Make sure that you add both parts of the script. Part 1 (the configuration) goes above Part 2 in the script editor.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on February 02, 2013, 01:58:07 pm
Make sure that you add both parts of the script. Part 1 (the configuration) goes above Part 2 in the script editor.


my scripts go like this(from the RMXOS):



(RMX-OS) Options
(RMX-OS) Script
Blizz-ABS Part 1
Blizz-ABS Part 2
Blizz-ABS Part 3
Blizz-OS(Blizz-ABS Controller)
-<:::RMX-OS Main:::>-

Blizzard

Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on February 02, 2013, 02:38:44 pm
Try inserting the scripts again.

*facepalms*....

I don't think this:
  #============================================================================
  # module RMXOS::Documentation
  #============================================================================
 
  module Documentation
   
    # Party commands
    PARAMETERS['party']   = 'USERNAME'

(Line 164-171, 171 being the error line)

Has anything to do with the Blizz-ABS Script placement...

"Script 'Blizz-OS' line 171: NameError occurred

uninitialized constant RMXOS::Documentation::PARAMETERS"


Blizz-OS being the Controller script


Blizzard

No, I meant that you maybe didn't copy the scripts right. PARAMETERS is a constant defined in the original RMX-OS script for the definition of chat command parameters. The controller adds new chat commands so it also adds the documentation for them.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on February 02, 2013, 02:50:45 pm
No, I meant that you maybe didn't copy the scripts right. PARAMETERS is a constant defined in the original RMX-OS script for the definition of chat command parameters. The controller adds new chat commands so it also adds the documentation for them.


So what scripts are you asking I do the same thing for again?(re-copy)

Blizzard

Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on February 02, 2013, 03:25:31 pm
The RMX-OS script is probably causing the problem.


Nope. Re-copied it twice. Same error.


EDIT: Perhaps the problem is the extension is not being loaded?

1. Yes, I do actually have an extension in the folder.
2. Yes, I do have the text for the controller in it.


Loading Extensions...
Error: 'new' could not be loaded, initialized or does not exist

Blizzard

It says that you set EXTENSIONS = ['new'] or EXTENSIONS = ['new.rb']
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on February 02, 2013, 05:45:33 pm
It says that you set EXTENSIONS = ['new'] or EXTENSIONS = ['new.rb']


EXTENSIONS = ['new']


That's how it looks.

EDIT: Do you just wanna talk on Skype or something so we don't have to keep bumping this post up?

MOAL

You don't have to bump things, it'll be read eventually. Many people here are busy with other things after all. Anyway, are you sure that you made the extension an .rb file? Because from the looks of it, it seems like it can't detect it.

Xolitude

Quote from: MOAL on February 02, 2013, 07:00:38 pm
You don't have to bump things, it'll be read eventually. Many people here are busy with other things after all. Anyway, are you sure that you made the extension an .rb file? Because from the looks of it, it seems like it can't detect it.

Haven't been bumping it...

Anyways yes.

Extensions folder contains:

Controller.rb - Renamed from new
ExtensionSkeleton.rb
info.txt

MOAL

Let me set a demo for you containing both the client and the server, that way you can see if that one works instead. Here it is, try this one: http://www.mediafire.com/?2uim5jtsw5pk4r5 It contains Blizz-ABS already set up in it.

I've tested these myself and they work just fine.

Edit: Had to re-upload.

Xolitude

Quote from: MOAL on February 02, 2013, 07:45:32 pm
Let me set a demo for you containing both the client and the server, that way you can see if that one works instead. Here it is, try this one: http://www.mediafire.com/?2uim5jtsw5pk4r5 It contains Blizz-ABS already set up in it.

I've tested these myself and they work just fine.

Edit: Had to re-upload.


"This project is from an old version of RPG Maker and cannot be loaded." :/ You have an older version?

MOAL

Quote from: Xolitude on February 02, 2013, 08:02:34 pm
Quote from: MOAL on February 02, 2013, 07:45:32 pm
Let me set a demo for you containing both the client and the server, that way you can see if that one works instead. Here it is, try this one: http://www.mediafire.com/?2uim5jtsw5pk4r5 It contains Blizz-ABS already set up in it.

I've tested these myself and they work just fine.

Edit: Had to re-upload.


"This project is from an old version of RPG Maker and cannot be loaded." :/ You have an older version?


Strange, not that I recall. I have the one I got from Enterbrain's website. Replace the Game.exe, Game.rxproj, and Game.ini with the ones from your project.

Xolitude

Quote from: MOAL on February 02, 2013, 08:06:35 pm
Quote from: Xolitude on February 02, 2013, 08:02:34 pm
Quote from: MOAL on February 02, 2013, 07:45:32 pm
Let me set a demo for you containing both the client and the server, that way you can see if that one works instead. Here it is, try this one: http://www.mediafire.com/?2uim5jtsw5pk4r5 It contains Blizz-ABS already set up in it.

I've tested these myself and they work just fine.

Edit: Had to re-upload.


"This project is from an old version of RPG Maker and cannot be loaded." :/ You have an older version?


Strange, not that I recall. I have the one I got from Enterbrain's website. Replace the Game.exe, Game.rxproj, and Game.ini with the ones from your project.

But wouldn't that just erase everything you made in this project...?

diagostimo

you only need to replace game.rxproj with the same file from your current version, it wont delete any of your progress in your project, all that is stored inside the data files, also i remember a small bug that occurred when adding and removing extensions with the gui tool, if I remember correctly when you delete an entry it does not fully remove it, it just leaves a blank named extension, open up the config file thingy and check the extension part to make sure that is not the case

MOAL

No, that wouldn't. As long as you're not deleting the folders.

Xolitude

Quote from: MOAL on February 02, 2013, 08:27:23 pm
Quote from: Xolitude on February 02, 2013, 08:18:05 pm
Quote from: MOAL on February 02, 2013, 08:06:35 pm
Quote from: Xolitude on February 02, 2013, 08:02:34 pm
Quote from: MOAL on February 02, 2013, 07:45:32 pm
Let me set a demo for you containing both the client and the server, that way you can see if that one works instead. Here it is, try this one: http://www.mediafire.com/?2uim5jtsw5pk4r5 It contains Blizz-ABS already set up in it.

I've tested these myself and they work just fine.

Edit: Had to re-upload.


"This project is from an old version of RPG Maker and cannot be loaded." :/ You have an older version?


Strange, not that I recall. I have the one I got from Enterbrain's website. Replace the Game.exe, Game.rxproj, and Game.ini with the ones from your project.

But wouldn't that just erase everything you made in this project...?


No, that wouldn't. As long as you're not deleting the folders.

So far so good, except when I try to register:

2013-02-03 01:33:48 UTC; -1 () - Error:
Data too long for column 'password' at row 1
Data/Action_Handler1.rb:38:in `query'
Data/Action_Handler1.rb:38:in `try_register'
Data/Client.rb:137:in `check_connection'
Data/Client.rb:47:in `handle'
Data/Server.rb:276:in `block (2 levels) in run'
<internal:prelude>:28:in `block in exclusive'
<internal:prelude>:10:in `synchronize'
<internal:prelude>:27:in `exclusive'
Data/Server.rb:274:in `block in run'
I get this :/

MOAL

What is the length of the password that you're trying to use? I set the length to 50 in the script... Try lowering it.

Xolitude

Quote from: MOAL on February 02, 2013, 08:52:07 pm
Quote from: Xolitude on February 02, 2013, 08:35:14 pm
Quote from: MOAL on February 02, 2013, 08:27:23 pm
Quote from: Xolitude on February 02, 2013, 08:18:05 pm
Quote from: MOAL on February 02, 2013, 08:06:35 pm
Quote from: Xolitude on February 02, 2013, 08:02:34 pm
Quote from: MOAL on February 02, 2013, 07:45:32 pm
Let me set a demo for you containing both the client and the server, that way you can see if that one works instead. Here it is, try this one: http://www.mediafire.com/?2uim5jtsw5pk4r5 It contains Blizz-ABS already set up in it.

I've tested these myself and they work just fine.

Edit: Had to re-upload.


"This project is from an old version of RPG Maker and cannot be loaded." :/ You have an older version?


Strange, not that I recall. I have the one I got from Enterbrain's website. Replace the Game.exe, Game.rxproj, and Game.ini with the ones from your project.

But wouldn't that just erase everything you made in this project...?


No, that wouldn't. As long as you're not deleting the folders.

So far so good, except when I try to register:

2013-02-03 01:33:48 UTC; -1 () - Error:
Data too long for column 'password' at row 1
Data/Action_Handler1.rb:38:in `query'
Data/Action_Handler1.rb:38:in `try_register'
Data/Client.rb:137:in `check_connection'
Data/Client.rb:47:in `handle'
Data/Server.rb:276:in `block (2 levels) in run'
<internal:prelude>:28:in `block in exclusive'
<internal:prelude>:10:in `synchronize'
<internal:prelude>:27:in `exclusive'
Data/Server.rb:274:in `block in run'
I get this :/


What is the length of the password that you're trying to use? I set the length to 50 in the script... Try lowering it.

Nope, same error :/

KK20

Okay guys, there is absolutely no reason to create a quoteception. Only do that in the SPAM boards.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

MOAL

I'm sorry, I deleted the quotes off my replies. Back to the topic, try clearing your database? That's as far as I can help...

Xolitude

Cleared, yet still this same error :/ ugh... always problems.

So no one can help with this problem I have NOW...

Great, back where I started. No progress made!  :facepalm:

Blizzard

Try deleting the database completely. I think something went wrong during the database creation.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on February 02, 2013, 10:04:53 pm
Try deleting the database completely. I think something went wrong during the database creation.

Same error even after doing that..

2013-02-03 03:10:35 UTC; -1 () - Error:
Data too long for column 'password' at row 1
Data/Action_Handler1.rb:38:in `query'
Data/Action_Handler1.rb:38:in `try_register'
Data/Client.rb:137:in `check_connection'
Data/Client.rb:47:in `handle'
Data/Server.rb:276:in `block (2 levels) in run'
<internal:prelude>:28:in `block in exclusive'
<internal:prelude>:10:in `synchronize'
<internal:prelude>:27:in `exclusive'
Data/Server.rb:274:in `block in run'

This only happens when registering. Login obviously can't be done.

Blizzard

Did you edit the SQL script? By default the database password hashes always have the same length, regardless of password length.
Turn on message logging in cfg.ini and post the messages that are logged right after that error happens.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

2013-02-03 03:28:08 UTC; -1 () - Incoming Message:
Test
2013-02-03 03:28:08 UTC; -1 () - Outgoing Message:
DCS
2013-02-03 03:28:18 UTC; -1 () - Incoming Message:
Test
2013-02-03 03:28:18 UTC; -1 () - Outgoing Message:
DCS
2013-02-03 03:28:22 UTC; -1 () - Incoming Message:
CON1.21
2013-02-03 03:28:22 UTC; -1 () - Outgoing Message:
CON0 1.21
2013-02-03 03:28:30 UTC; -1 () - Incoming Message:
REGXolitude royVLEuD.WM
2013-02-03 03:28:30 UTC; -1 () - Outgoing Message:
DCS
2013-02-03 03:28:33 UTC; -1 () - Incoming Message:
Test
2013-02-03 03:28:33 UTC; -1 () - Outgoing Message:
DCS


I have no clue what this means.. I hope you do. This is what the log said.

Blizzard

That's really weird. This is the message for registration:

REGXolitude	royVLEuD.WM


Xolitude is your username and royVLEuD.WM is the hash value of your password. The length is fine, IDK why it's not working. Have you tried another password?
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on February 03, 2013, 06:43:07 am
That's really weird. This is the message for registration:

REGXolitude	royVLEuD.WM


Xolitude is your username and royVLEuD.WM is the hash value of your password. The length is fine, IDK why it's not working. Have you tried another password?
I've tried several different passwords..

Blizzard

Alright, drop the database again and recreate it from scratch. But before execute the SQL script for creating the database, find this line:

`password` varchar(11) NOT NULL,


and change it to this:

`password` varchar(20) NOT NULL,


Let's see what happens.

The line is located somewhere right under this one:

CREATE TABLE `users` (
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Xolitude

Quote from: Blizzard on February 03, 2013, 04:09:27 pm
Alright, drop the database again and recreate it from scratch. But before execute the SQL script for creating the database, find this line:

`password` varchar(11) NOT NULL,


and change it to this:

`password` varchar(20) NOT NULL,


Let's see what happens.

The line is located somewhere right under this one:

CREATE TABLE `users` (



After that, execute the SQL script?

EDIT: OMG thank you so much <3 it works! I had to do that, and change the database being used from "rmxosdb" to "db", thanks so much <3