class TrackerEventsParser

Public Class Methods

new(game) click to toggle source
# File lib/herostats/tracker_events_parser.rb, line 2
def initialize(game)
  @game = game
end

Public Instance Methods

load_events(file) click to toggle source
# File lib/herostats/tracker_events_parser.rb, line 6
def load_events(file)
  file = file.read
  file = file.gsub("}\n{", "},\n{")
  file = file.gsub("]\n{", "],\n{")
  JSON.parse("[#{file}]")
end
parse(file_path) click to toggle source
# File lib/herostats/tracker_events_parser.rb, line 14
def parse(file_path)
  events = load_events(file_path)

  events.each do |event|
    if event['_event'] == 'NNet.Replay.Tracker.SUnitBornEvent'
      #u = Unit.new(event['m_unitTagIndex'],
      #             event['m_unitTagRecycle'],
      #             event['m_controlPlayerId'],
      #             event['_gameloop'],
      #             event['m_x'],
      #             event['m_y]'],
      #             event['m_upkeepPlayerId'],
      #            event['m_unitTypeName'])

      #units[u.id] = u

      #puts "#{u.name} #{u.id}"

    elsif event['_event'] == 'NNet.Replay.Tracker.SStatGameEvent'

      case event['m_eventName']
        when 'RegenGlobePickedUp'
          #game.pickup_regen_globe(event['m_intData'][0]['m_value'])
          #{"_eventid"=>10, "m_stringData"=>nil, "m_intData"=>[{"m_key"=>"PlayerID", "m_value"=>1}], "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>1254, "_bits"=>472, "m_eventName"=>"RegenGlobePickedUp", "m_fixedData"=>nil}
        when 'LevelUp'
          #{"_eventid"=>10, "m_stringData"=>nil, "m_intData"=>[{"m_key"=>"PlayerID", "m_value"=>10}, {"m_key"=>"Level", "m_value"=>1}], "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>84, "_bits"=>512, "m_eventName"=>"LevelUp", "m_fixedData"=>nil}
          #puts event

        when 'PeriodicXPBreakdown'
          #{"_eventid"=>10, "m_stringData"=>nil, "m_intData"=>[{"m_key"=>"Team", "m_value"=>1}, {"m_key"=>"TeamLevel", "m_value"=>10}], "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>7330, "_bits"=>1920, "m_eventName"=>"PeriodicXPBreakdown", "m_fixedData"=>[{"m_key"=>"GameTime", "m_value"=>1720320}, {"m_key"=>"PreviousGameTime", "m_value"=>1474560}, {"m_key"=>"MinionXP", "m_value"=>57368576}, {"m_key"=>"CreepXP", "m_value"=>618496}, {"m_key"=>"StructureXP", "m_value"=>3276800}, {"m_key"=>"HeroXP", "m_value"=>6882750}, {"m_key"=>"TrickleXP", "m_value"=>31539200}]}
          puts event
          team_number = event['m_intData'].detect { |hash| hash['m_key'] == 'Team'}['m_value']
          fixed_data = event['m_fixedData']
          minion_exp = 0
          creep_exp = 0
          structure_exp = 0
          hero_exp = 0
          trickle_exp = 0
          time = 0

          fixed_data.each do |data|
            case data['m_key']
              when 'MinionXP'
                minion_exp = data['m_value'] / 4096
              when 'CreepXP'
                creep_exp = data['m_value'] / 4096
              when 'StructureXP'
                structure_exp = data['m_value'] / 4096
              when 'HeroXP'
                hero_exp = data['m_value'] / 4096
              when 'TrickleXP'
                trickle_exp = data['m_value'] / 4096
              when 'GameTime'
                time = data['m_value'] / 4096
              else
                puts data
            end
          end

          @game.teams[team_number].exp_breakdowns.push(ExpBreakdown.new(minion_exp, creep_exp, structure_exp, hero_exp, trickle_exp, time))

        when 'GatesOpen'
          #{"_eventid"=>10, "m_stringData"=>nil, "m_intData"=>nil, "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>610, "_bits"=>240, "m_eventName"=>"GatesOpen", "m_fixedData"=>nil}
          #puts event
        when 'TalentChosen'
          #{"_eventid"=>10, "m_stringData"=>[{"m_key"=>"PurchaseName", "m_value"=>"GenericTalentBlock"}], "m_intData"=>[{"m_key"=>"PlayerID", "m_value"=>2}], "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>522, "_bits"=>776, "m_eventName"=>"TalentChosen", "m_fixedData"=>nil}
          player_number = event['m_intData'].detect { |hash| hash['m_key'] == 'PlayerID'}['m_value']
          talent_name = event['m_stringData'].detect { |hash| hash['m_key'] == 'PurchaseName'}['m_value']
          @game.players[player_number].select_talent(talent_name)
        when 'PlayerDeath'
          #{"_eventid"=>10, "m_stringData"=>nil, "m_intData"=>[{"m_key"=>"PlayerID", "m_value"=>7}, {"m_key"=>"KillingPlayer", "m_value"=>1}, {"m_key"=>"KillingPlayer", "m_value"=>4}, {"m_key"=>"KillingPlayer", "m_value"=>5}], "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>2692, "_bits"=>1360, "m_eventName"=>"PlayerDeath", "m_fixedData"=>[{"m_key"=>"PositionX", "m_value"=>549022}, {"m_key"=>"PositionY", "m_value"=>709147}]}
        when 'TownStructureDeath'
          #{"_eventid"=>10, "m_stringData"=>nil, "m_intData"=>[{"m_key"=>"TownID", "m_value"=>9}, {"m_key"=>"KillingPlayer", "m_value"=>1}, {"m_key"=>"KillingPlayer", "m_value"=>2}, {"m_key"=>"KillingPlayer", "m_value"=>4}, {"m_key"=>"KillingPlayer", "m_value"=>5}], "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>18584, "_bits"=>1224, "m_eventName"=>"TownStructureDeath", "m_fixedData"=>nil}
        when 'RavenCurseActivated'
          #{"_eventid"=>10, "m_stringData"=>nil, "m_intData"=>[{"m_key"=>"Event", "m_value"=>2}, {"m_key"=>"TeamScore", "m_value"=>3}, {"m_key"=>"OpponentScore", "m_value"=>2}], "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>18044, "_bits"=>968, "m_eventName"=>"RavenCurseActivated", "m_fixedData"=>[{"m_key"=>"TeamID", "m_value"=>4096}]}
        when 'TributeCollected'
          #{"_eventid"=>10, "m_stringData"=>nil, "m_intData"=>[{"m_key"=>"Event", "m_value"=>1}], "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>4221, "_bits"=>600, "m_eventName"=>"TributeCollected", "m_fixedData"=>[{"m_key"=>"TeamID", "m_value"=>8192}]}

        when 'JungleCampCapture'
          #{"_eventid"=>10, "m_stringData"=>[{"m_key"=>"CampType", "m_value"=>"Bruiser Camp"}], "m_intData"=>[{"m_key"=>"CampID", "m_value"=>2}], "_event"=>"NNet.Replay.Tracker.SStatGameEvent", "_gameloop"=>18252, "_bits"=>872, "m_eventName"=>"JungleCampCapture", "m_fixedData"=>[{"m_key"=>"TeamID", "m_value"=>4096}]}
        else
          #puts event
      end
    elsif event['_event'] == 'NNet.Replay.Tracker.SUnitDiedEvent'
      #puts event
    elsif event['_event'] == 'NNet.Replay.Tracker.SUnitOwnerChangeEvent'
    elsif event['_event'] == 'NNet.Replay.Tracker.SUnitRevivedEvent'

    elsif event['_event'] == 'NNet.Replay.Tracker.SScoreResultEvent'
      event['m_instanceList'].each do |list|
        puts list['m_name']
        case list['m_name']
          when 'SoloKill'
            list['m_values'].each_with_index do |v, index|
              @game.players[index + 1].kills = v[0]['m_value'] unless index > 9
            end
          when 'Deaths'
            list['m_values'].each_with_index do |v, index|
              @game.players[index + 1].deaths = v[0]['m_value'] unless index > 9
            end
          when 'Assists'
            list['m_values'].each_with_index do |v, index|
              @game.players[index + 1].assists = v[0]['m_value'] unless index > 9
            end
          when 'SiegeDamage'
            list['m_values'].each_with_index do |v, index|
              @game.players[index + 1].siege_damage = v[0]['m_value'] unless index > 9
            end
          when 'HeroDamage'
            list['m_values'].each_with_index do |v, index|
              @game.players[index + 1].hero_damage = v[0]['m_value'] unless index > 9
            end
          when 'ExperienceContribution'
            list['m_values'].each_with_index do |v, index|
              @game.players[index + 1].exp = v[0]['m_value'] unless index > 9
            end
          when 'DamageTaken'
            list['m_values'].each_with_index do |v, index|
              @game.players[index + 1].damage_taken = v[0]['m_value'] unless index > 9
            end
          when 'Healing'
            list['m_values'].each_with_index do |v, index|
              #puts v
              @game.players[index + 1].healing = v[0]['m_value'] unless index > 9
            end
          when 'SelfHealing'
            list['m_values'].each_with_index do |v, index|
              #puts v
              #@game.players[index + 1].healing = v[0]['m_value'] unless index > 9
            end
          else
            list['m_values'].each_with_index do |v, index|
              #puts v
            end
        end

      end
      #puts event
    else
      #puts event
    end
  end
  @game
end