Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Extract Strings v2 - Aid to translations

Status
Not open for further replies.
Moderator
Staff member
Moderator
Joined
Feb 22, 2008
Messages
2,404
Reaction score
723
The way to use it is the same as this thread:

http://forum.ragezone.com/f399/extract-strings-aid-translation-728191/

The only difference is that this one has a GUI and for those that doesnt like too much of freeBasic (like me :lol: ) you can see how its done.

How the txt should look like: (strings.txt)
Code:
Sheen Strings Finder v1.0
----START
(useless pointers...)
0x10FAFB = "F_change01.bmp"
0x10FB0B = "BL_loding_04.bmp"
0x10FB1F = "BL_loding_03.bmp"
0x10FB33 = "BL_loding_02.bmp"
0x10FB47 = "BL_loding_01.bmp"
0x10FB5B = "BL_loding_00.bmp"
0x10FB6F = "BL_loding.bmp"
0x113D1F = "ruin-4"
0x113D27 = "ricarten\v-ani14.ASE"
0x113D3F = "ricarten\v-ani13.ASE"
0x113D57 = "ricarten\v-ani12.ASE"
0x113D6F = "ricarten\v-ani11.ASE"
0x113D87 = "ricarten\v-ani10.ASE"
0x113D9F = "ricarten\v-ani09.ASE"
0x113DB7 = "ricarten\v-ani08.ASE"
0x113DCF = "ricarten\v-ani07.ASE"
0x113DE7 = "ricarten\v-ani06.ASE"
0x113DFF = "ricarten\v-ani05.ASE"
0x113E17 = "ricarten\v-ani04.ASE"
0x113E2F = "ricarten\v-ani03.ASE"
0x113E47 = "ricarten\v-ani02.ASE"
0x113E5F = "ricarten\v-ani01.ASE"
0x113E77 = "ricarten\village-2.ase"
0x1236F3 = "%d-%d%s"
0x1236FB = "%d(+%d)-%d(+%d)\r"
0x12370F = "%d-%d+(LV/2)\r"
0x12371F = "%d-%d+(LV/3)\r"
0x12372F = "%d+(LV/9)\r"
0x12373B = "%d-%d(+LV/5)\r"
PS: As you can see, there are some 0x02 that I dont know what happened :lol:

Just the form1.cs:

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;

namespace ExtractStringas
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        static void Analyse(byte letter,BinaryWriter stream)
        {
            switch (letter)
            {
                case 27:
                    break;
                case 7:
                    stream.Write("\\a");
                    break;
                case 8:
                    stream.Write("\\b");
                    break;
                case 12:
                    break;
                case 10:
                    stream.Write("\\n");
                    break;
                case 13:
                    stream.Write("\\r");
                    break;
                case 9:
                    stream.Write("\\t");
                    break;
                case 11:
                    stream.Write("\\b");
                    break;
                default:
                    stream.Write((char)letter);
                    break;
            }
        }
        void Find()
        {
            if (textBox2.Text.Length < 3 || textBox1.Text.Length < 3)
            {
                MessageBox.Show("Error!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            var address = int.Parse(textBox2.Text) - 1;
            var section = textBox1.Text;

            var read = new BinaryReader(new FileStream(section, FileMode.Open, FileAccess.Read));
            var write = new BinaryWriter(new FileStream("strings.txt", FileMode.Create, FileAccess.Write));

            var text = Encoding.ASCII.GetBytes("Sheen Strings Finder v1.0\r\n----START\r\n\r\n");
            write.Write(text);
            var letra = (byte)0;
            while (read.BaseStream.Position < read.BaseStream.Length)
            {
                text = Encoding.ASCII.GetBytes("0x" + address.ToString("X2") + " = " + (char)0x22);
                write.Write(text);
                do
                {
                    if (letra != 0)
                    {
                        Analyse(letra, write);
                    }
                    letra = read.ReadByte();
                    address++;
                }
                while (letra != 0 && (read.BaseStream.Position < read.BaseStream.Length));
                write.Write((char)0x22);
                text = Encoding.ASCII.GetBytes(Environment.NewLine);
                write.Write(text);
                do
                {
                    letra = read.ReadByte();
                    address++;
                }
                while (letra == 0 && (read.BaseStream.Position < read.BaseStream.Length));
            }
            text = Encoding.ASCII.GetBytes("----END");
            write.Write(text);
            write.Close();
            read.Close();
            MessageBox.Show("Done!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            var t = new Thread(new ThreadStart(Find));
            t.Start();
        }
    }
}

(It should be ExtractStrings not ExtractStringas but you know... crap keyboard and was too lazy to change :eek:tt1: )

Full project:


How to use:

In Nome da seção: (Section name) you put the name of the .rdata section or whatever section you wanna to extract strings of, just look bob's previous thread.
In Offset Inicial:(Initial Offset) you just get the Virtual Offset in CFF Explorer, exactly bob did.

ALL THANKS TO BOBSOBOL FOR HIS SOURCE!
 
Moderator
Staff member
Moderator
Joined
Feb 22, 2008
Messages
2,404
Reaction score
723
BUG FIX:

Replace the old switch code wih this one:

Code:
[B]
            var text = Encoding.ASCII;
            var te = new byte[] { };
            switch (letter)
            {
                case 27:
                    break;
                case 7:
                    te = text.GetBytes("\\a");
                    stream.Write(te);
                    break;
                case 8:
                    te = text.GetBytes("\\b");
                    stream.Write(te);
                    break;
                case 12:
                    break;
                case 10:
                    te = text.GetBytes("\\n");
                    stream.Write(te);
                    break;
                case 13:
                    te = text.GetBytes("\\r");
                    stream.Write(te);
                    break;
                case 9:
                    te = text.GetBytes("\\t");
                    stream.Write(te);
                    break;
                case 11:
                    te = text.GetBytes("\\b");
                    stream.Write(te);
                    break;
                default:
                    te = text.GetBytes(text.GetString(new byte[] {letter},0,1));
                    stream.Write(te);
                    break;
            }
[/B]

This'll prevent those strange characters in your text file to be displayed.
 
Newbie Spellweaver
Joined
Jun 11, 2012
Messages
7
Reaction score
0
Hi, I'm sorry revive topic ... Do you still have this executable?
 
Status
Not open for further replies.
Back
Top