Home World Forum
Stars! AutoHost web forums

Jump to Stars! AutoHost


 
 
Home » Stars! Clones, Extensions, Modding » Stars! Extensions » "message pane" scraper
Re: "message pane" scraper Fri, 13 September 2013 08:48 Go to previous messageGo to previous message
XAPBob is currently offline XAPBob

 
Lt. Commander

Messages: 957
Registered: August 2012
I have made a file called events.txt as follows:
$ head events.txt
0;4;The \v00 Colonists you dropped on \p were massacred by the ground troops of \l.
1;5;Of the \v00 Colonists you dropped on \p, \P were destroyed by planetary defenses, the rest were massacred by the ground troops of \l.
2;3;The \v00 Colonists you forced to transport down to \p died because you did not colonize the planet first.
...


I have also tweaked the map output file as follows:
$ head lowtek.map
#;X;Y;Name
1;1012;1921;Pin Prick
2;1017;1470;Midnight
3;1021;1486;Pearl
...


I have also made the following progress in terms of a script.
It is currently hard coded to the M10 of lowtek - so sue me.
#!/bin/bash

msg=0
while read line; do # From events export file
  params=( `echo $line | sed -e 's/;/ /g'` )
  if [ "${params[0]}" -eq "${params[0]}" ] 2>/dev/null; then # Message ID is numeric
    text=`grep ^${params[0]}\; events.txt | awk -F';' '{print $3}'` # Get relevant message text
    ((msg++))
  else
    echo Ignore header row >&2
    continue
  fi

  param=1
  message=
  for (( i=0; i<${#text}; i++ )); do
    if [ "${text:${i}:1}" = "\\" ]; then
      ((i++))
      ((param++))
      case ${text:${i}:1} in
        e) # environment area (note: 0 - gravity, 1 - temperature, 2 - radiation)
          case ${params[@]:${param}:1} in
            0) message=${message}"gravity"
            ;;
            1) message=${message}"temperature"
            ;;
            2) message=${message}"radiation"
            ;;
          esac
          ;;
        E) # environment area value (seems to be in clicks from the left?)
          message=${message}${params[@]:${param}:1}" clicks"
          ;;
        F|o|s) # F ship id; o|s fleet id;
          message=${message}"Fleet #"${params[@]:${param}:1}
          ;;
        g|G|i|v|V) # g|G integer, not found yet; i signed integer; v|V unsigned integer
          message=${message}${params[@]:${param}:1}
          ;;
        I) # change type (0 = decreased, 1 = increased)
          case ${params[@]:${param}:1} in
            0) message=${message}"decreased"
            ;;
            1) message=${message}"increased"
            ;;
          esac
          ;;
        j) # zero based research area id (0 - energy, 1 - weapons, 2 - propulsion, 3 - construction, 4 - electronics, 5 - biotechnology)
          case ${params[@]:${param}:1} in
            0) message=${message}"energy"
            ;;
            1) message=${message}"weapons"
            ;;
            2) message=${message}"propulsion"
            ;;
            3) message=${message}"construction"
            ;;
            4) message=${message}"electronics"
            ;;
            5) message=${message}"biotechnology"
            ;;
          esac
          ;;
        k) # technology id (4 bytes unsigned integer), stored in format: bits 0-15 is an ItemId, bits 16-31 is a GroupId
          message=${message}"Cool Stuff [${params[@]:${param}:1}]"
          ;;
        l|L|O|S|Z) # zero based player id
          message=${message}`grep "^${params[@]:${param}:1}\;" lowtek.m10.players.csv | awk -F';' '{print $3}'`
          ;;
        m) # cargo type (note: 0 - ironium, 1 - boranium, 2 - germanium, 3 - colonists, 4 - fuel)
          case ${params[@]:${param}:1} in
            0) message=${message}"ironium"
            ;;
            1) message=${message}"boranium"
            ;;
            2) message=${message}"germanium"
            ;;
            3) message=${message}"colonists"
            ;;
            4) message=${message}"fuel"
            ;;
          esac
          ;;
        M) # mine field type (0 - standard, 1 = heavy, 2 - speed bump)
          case ${params[@]:${param}:1} in
            0) message=${message}"standard"
            ;;
            1) message=${message}"heavy"
            ;;
            2) message=${message}"speed bump"
            ;;
          esac
          ;;
        n) # this param consumed 2 args, it specifies location (can be either planet id, fleet id or space coordinates)
          case ${params[@]:${param}:1} in
            65535) # planet ID
              ((param++))
              planet=$[${params[@]:${param}:1}+1]
              message=${message}`grep "^${planet}\;" lowtek.map | awk -F';' '{print $4}'`
              ;;
            *)
              message=${message}" [${params[@]:${param}:1}"
                ((param++))
              message=${message}":${params[@]:${param}:1}]"
              ;;
            esac
          ;;
        P) # percent value
          percent=$[${params[@]:${param}:1}/100]
          message=${message}${percent}%
          ;;
        p) # zero based planet id (note: you have to add 1 to match a planet id as it shown in Stars!)
          planet=$[${params[@]:${param}:1}+1]
          message=${message}`grep "^${planet}\;" lowtek.map | awk -F';' '{print $4}'`
          ;;
        X) # strange, but \X is always replaced by empty string in any event message, will be stored as empty Arg in export
          ((param--))
          ;;
        z) #\z - design id (bits 0-4 - design id, bit 5 values: 0 - ship design, 1 - starbase design)
          lastword=`echo ${message} | awk '{print $NF}'`
          case $lastword in
            new|your|Your|type) # Our fleets
              isbase=0
              slot=${params[@]:${param}:1}
              if [ ${params[@]:${param}:1} -gt 16 ] ; then
                isbase=1
                slot=$[${slot}-16]
              fi
              message=${message}`grep "^9\;${isbase}\;${slot}\;" lowtek.m10.designs.csv | awk -F';' '{print $5}'`
              ;;
            destroyed|by|nor) # Someone elses
              message=${message}[design:${text:${i}:1}-${params[@]:${param}:1}]
              ;;
          esac
          ;;
        *)
          message=${message}[TODO:${text:${i}:1}-${params[@]:${param}:1}]
          ;;
      esac

    else
      message=${message}${text:${i}:1}
    fi
  done

  #echo ${params[@]:0}
  #echo ${text}
  echo $msg:$'\t'${message}
  #echo
done < lowtek.m10.events.csv


That gives a simple text output of the form:
$ ./Scraper.bash
1:    <message>
2:    <message>
...

With only the design name of enemy fleets being left encoded.
Additionally fleet names are not retrieved yet, so it's always "Fleet #130" rather than "My stack of 1000 nubians"


[Updated on: Fri, 13 September 2013 11:05]

Report message to a moderator

 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: My wheels are turning
Next Topic: Should Stars! files structures be publically available?
Goto Forum:
  


Current Time: Fri Apr 26 08:55:48 EDT 2024