> Rohan PServer Ask & Answer Thread <

05/13/2014 01:59 imarin#16
Quote:
Originally Posted by Dr.Dr.SheldonLeeCooper View Post
Which one ?
From client 08292012 and this scripts:

C# moemet
Code:
 static void Main(string[] args)
        {
          
            string _srcGel = "D:\\NexusRohan\\res\\world.gel";// edit this part
            string _srcGem = "D:\\NexusRohan\\res\\world.gem";// edit this part
            string _srcDest = "D:\\GelGemExtract\\world\\";// edit this part

            using (FileStream fsGel = new FileStream(_srcGel, FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader brGel = new BinaryReader(fsGel))
                {
                 
                    int m_ID = brGel.ReadInt32();
                    int m_Version = brGel.ReadInt32();
                    int m_MaxAllocFileNum = brGel.ReadInt32();
                    int m_MissingFileSize = brGel.ReadInt32();
                    int m_Reserved = brGel.ReadInt32();
                    int m_Reserved1 = brGel.ReadInt32();

                    int _pos = 0;
                   
                    while (brGel.BaseStream.Position < brGel.BaseStream.Length  )
                    {
                        int i1 = brGel.ReadInt32();
                        int i2 = brGel.ReadInt32();
                        byte[] filename =  brGel.ReadBytes(128);
                        int i3 = brGel.ReadInt32();
                        int startOffset = brGel.ReadInt32();
                        int dataSize = brGel.ReadInt32();
                        int i6 = brGel.ReadInt32();
                        using (FileStream fsGem = new FileStream(_srcGem, FileMode.Open, FileAccess.Read))
                        {
                            using (BinaryReader brGem = new BinaryReader(fsGem))
                            {
                                string _s1 = Encoding.UTF8.GetString(filename);
                                _s1 = _s1.Substring(0, _s1.IndexOf("\0"));

                                if (!_s1.EndsWith(".gbf"))
                                {
                                    int _spos1 = _s1.LastIndexOf("\\");
                                    string _pth = _srcDest + _s1.Substring(0, _spos1);
                                    if (!System.IO.Directory.Exists(_pth))
                                    {
                                        System.IO.Directory.CreateDirectory(_pth);
                                    }
                                }
                                string _result = _srcDest + _s1;
                                
                                brGem.BaseStream.Seek(startOffset, SeekOrigin.Begin);
                                if (dataSize > 0)
                                {
                                    using (FileStream fsDest = new FileStream(_result, FileMode.Append, FileAccess.Write))
                                    {
                                        using (BinaryWriter bw = new BinaryWriter(fsDest))
                                        {
                                            bw.Write(brGem.ReadBytes(dataSize));
                                            Console.WriteLine("writing :" + _result + "\n");
                                        }
                                    }
                                }
                                
                                
                            }
                        }
                        _pos += 1;
                    }
                }
        
            }
        }

C++ Xentax
Code:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>

struct GELHeader
{
   int i1;
   int i2;
   int numberOfElements;
   int i4;
   int i5;
   int i6;

   void print()
   {
      //printf( "i1 = %d\n", i1 );
      //printf( "i2 = %d\n", i2 );
      printf( "numberOfElements = %d\n", numberOfElements );
      //printf( "i4 = %d\n", i4 );
      //printf( "i5 = %d\n", i5 );
      //printf( "i6 = %d\n", i6 );
      printf( "\n" );
   }
};

struct GELEntry
{
   int i1;
   int i2;
   char filename[128];
   int i3;
   int startOffset;
   int dataSize;
   int i6;

   void print()
   {
      //printf( "i1 = %d\n", i1 );
      //printf( "i2 = %d\n", i2 );
      printf( "filename = %s\n", filename );
      //printf( "i3 = %d\n", i3 );
      printf( "startOffset = %d\n", startOffset );
      printf( "dataSize = %d\n", dataSize );
      //printf( "i6 = %d\n", i6 );
      printf( "\n" );
   }
};

// Set this to the .GEL file that you want to extract
std::string srcGel = "F:\\Paker\\animation.gel";
// Set this to the .GEM file that matches the .GEL file you want to extract
std::string srcGem = "F:\\Paker\\animation.gem";
// This is the path where all the files will be extracted to
std::string destPath = "F:\\Paker\\Animation\\";

int iiii = 0;
/*
char hextoascii(char a, char b)
{
char hex[5], *stopper;
hex[0] = '0';
hex[1] = 'x';
hex[2] = a;
hex[3] = b;
//hex[4] = '0';
return strtol(hex, &stopper, 16);

}
*/
int main()
{
   FILE* gelFP;
   gelFP = fopen(srcGel.c_str(), "rb" );

   if( gelFP )
   {
      FILE* gemFP;
      gemFP = fopen(srcGem.c_str(), "rb" );

      if( gemFP )
      {
         GELHeader gelHeader;
         fread( &gelHeader, sizeof( GELHeader ), 1, gelFP );
         //gelHeader.print();
        printf("Extracting Files: \n");
         for( int i=0; i<gelHeader.numberOfElements; i++ )
         {
            GELEntry gelEntry;
            fread( &gelEntry, sizeof( GELEntry ), 1, gelFP );
            //gelEntry.print();
            printf( "\b\b\b\b\b\b\b%d", i + 1 );

            if( gelEntry.dataSize > 0 )
            {
               // Create the file
               std::string sFilename = gelEntry.filename;
               size_t pos = sFilename.find_last_of( "\\" );

               std::string path = sFilename.substr( 0, pos + 1 );
               std::string filename = sFilename.substr( pos + 1, sFilename.length() - pos );
               //printf( "Path = %s\nFile = %s\n", path.c_str(), filename.c_str() );

               std::string newPath = destPath;
               newPath.append( path );
               CreateDirectory( newPath.c_str(), NULL );

               // Detect GTX files (DDS files with the header changed and the extension changed
               pos = filename.find_last_of( "." );
               //printf( "pos = %d\n", pos );
               std::string ext = filename.substr( pos + 1, filename.length() - pos - 1 );
               //printf( "ext = %s\n", ext.c_str() );

               if( ext.find( "gtx" ) != std::string::npos )
               {
                  //printf( "Found GTX file!\n" );
                  char* data = (char*)malloc( gelEntry.dataSize );
                  fseek( gemFP, gelEntry.startOffset, 0 );
                  fread( data, gelEntry.dataSize, 1, gemFP );
                  printf("%d",gelEntry.startOffset);
                  if( data[0] == 'G' && data[1] == 'E' && data[2] == 'O' )
                  {
                     // Most gtx files are DDS files with the "Magic Word" changed to GEO.  We change that here, before
                     // writing the file
                     filename.replace( pos + 1, 3, "tga" );
                     std::string fullPath = newPath;
                     fullPath.append( "\\" );
                     fullPath.append( filename );
                     //data[0] = hextoascii('0','0');
                     //data[1] = hextoascii('0','0');
                     //data[2] = hextoascii('0','a');
                     //data[0] = NULL;
                     //data[1] = NULL;
                     //data[2] = NULL;


                     FILE* outFP;
                     outFP = fopen(fullPath.c_str(), "wb" );
                     if( outFP )
                     {
                        fwrite( data, gelEntry.dataSize, 1, outFP );
                        fclose( outFP );
                     }
                  }
                  else if( data[0] == 'D' && data[1] == 'D' && data[2] == 'S' )
                  {
                     // Sometimes, DDS files have the proper header in them
                     filename.replace( pos + 1, 3, "dds" );
                     std::string fullPath = newPath;
                     fullPath.append( "\\" );
                     fullPath.append( filename );

                     FILE* outFP;
                     outFP = fopen(fullPath.c_str(), "wb" );
                     if( outFP )
                     {
                        fwrite( data, gelEntry.dataSize, 1, outFP );
                        fclose( outFP );
                     }
                  }
                  else
                  {

                     // Haven't come across this yet, but just in case, we'll know.
                     printf( "\n" );
                     printf( "Encountered UNKNOWN GTX file!\n" );
                     printf( "%c %c %c\n", data[0], data[1], data[2] );
                     printf( "\n" );
                  }

                  free( data );
               }
               else
               {
                  std::string fullPath = newPath;
                  fullPath.append( "\\" );
                  fullPath.append( filename );

                  FILE* outFP;
                  outFP = fopen(fullPath.c_str(), "wb" );
                  if( outFP )
                  {
                     void* data = malloc( gelEntry.dataSize );
                     fseek( gemFP, gelEntry.startOffset, 0 );
                     fread( data, gelEntry.dataSize, 1, gemFP );
                     fwrite( data, gelEntry.dataSize, 1, outFP );
                     free( data );
                     fclose( outFP );
                  }
               }
            }
         }

         printf( "\n\nProcess Completed\n\n" );
         fclose( gemFP );
      }

      fclose( gelFP );
   }

   return 0;
}

RoHan Tool from this thread: [Only registered and activated users can see links. Click Here To Register...]


and this quick bms script:

Code:
#quickbms script
#Rohan Gem Extractor
#from chrrox

open FDDE GEM 0
open FDDE GEL 1

get id longlong 1
get files long 1
goto 0x18 1
savepos Tablepos 1
for i = 1 to files
    goto Tablepos 1
    get FILENUM long 1
    get UNKSIZE long 1
    getdstring name 0x80 1
    get DUMMYSIZE long 1
    get offset long 1
    get UNK01 long 1
    get UNK02 long 1
    if i < files
    savepos Tablepos 1
    savepos temp 1
    math temp + 0x8C
    goto temp 1
    get size long 1
    math size - offset
    else
    get size asize
    math size - offset
    endif
        log name offset size
next i
I want to extract files to get spawns in forgotten fortress and get upper and lower gratt! :D
05/14/2014 10:49 DevParanoid#17
Hi, i have a problem with my server.
There's a time that my Server is Auto Prison all characters. Idk what is the possible problem of that, Can you help me Rito? :mofo:
05/14/2014 15:34 Dr.Dr.SheldonLeeCooper#18
Quote:
Originally Posted by DevParanoid View Post
Hi, i have a problem with my server.
There's a time that my Server is Auto Prison all characters. Idk what is the possible problem of that, Can you help me Rito? :mofo:

I bet you changed Server Time while the Server was running :) ?
05/15/2014 11:02 DevParanoid#19
I don't think so. It never change. I will try to change my CMOS Battery. Thanks! :D
05/15/2014 13:44 Dr.Dr.SheldonLeeCooper#20
Quote:
Originally Posted by DevParanoid View Post
I don't think so. It never change. I will try to change my CMOS Battery. Thanks! :D
Well, maybe your VMware Time canged or BIOS Time ^^
Got the same Problem some Time ago also.

Hope it works gl m8
05/15/2014 15:40 DevParanoid#21
Anyway, i have problem with my nprotect GG.
when i change DownloadFlag nation from US to TH
and ServerGroup

it can't get the character list it always said Getting Character List.
my login address is [Only registered and activated users can see links. Click Here To Register...]
05/15/2014 18:56 Dr.Dr.SheldonLeeCooper#22
Quote:
Originally Posted by DevParanoid View Post
Anyway, i have problem with my nprotect GG.
when i change DownloadFlag nation from US to TH
and ServerGroup

it can't get the character list it always said Getting Character List.
my login address is [Only registered and activated users can see links. Click Here To Register...]
Change the Nation from Regedit also from TH to US.
Make the same on SQL also, then it shoud work :)
05/16/2014 13:17 dedeernet#23
Quote:
Originally Posted by Dr.Dr.SheldonLeeCooper View Post
Hello Guys,

since many People ask tons of Questions about PServer i made a Thread about it.
I will try to Post here some Helpfull Tools & Tipps for everyone who wanna Start a Rohan Server.

Would be nice if other Developers help here also, so im not alone to answer all Questions since im not anymore at PC 24/7 :D

So dont make new Threads, everyone can search here for some Answers. Much better & faster way then use the "Search" Button. Just Read this Topic and be Happy :D

how to edit time TSB?
05/16/2014 17:16 wootszie#24
im looking for a private server
with good starting items
and
decent rates
probably a still new server and still growing

i've tried
ion rohan 2 (but this pserver closed good server though)
renaisannce rohan
05/16/2014 17:37 Dr.Dr.SheldonLeeCooper#25
Quote:
Originally Posted by wootszie View Post
im looking for a private server
with good starting items
and
decent rates
probably a still new server and still growing

i've tried
ion rohan 2 (but this pserver closed good server though)
renaisannce rohan
Like i said.
We gonna Start our Server next Days ;)

We Post it here when we are rdy
05/17/2014 02:25 wootszie#26
Quote:
Originally Posted by Dr.Dr.SheldonLeeCooper View Post
Like i said.
We gonna Start our Server next Days ;)

We Post it here when we are rdy
nice

just want to ask this are you gonna have a hero skill or not???
05/17/2014 12:55 maikleBT1#27
I need Any Tool to convert GameEffect.bin if there any one can help me
05/17/2014 18:14 asmodeus812#28
Just out of curiosity where is stored the data from honorable kills / points and etc the table i mean . I tried to look for it but didn't find it !
Would be great if you tell me i would like to try something !
05/18/2014 00:26 Ishtaria#29
Quote:
Originally Posted by maikleBT1 View Post
I need Any Tool to convert GameEffect.bin if there any one can help me
I'm not entirely sure there's anything in there that's really worth editing. I looked into making graphical effects for other armours and costumes (like the tsb champ armour and ignited spirit armour) but there's more to it than just gameeffect. There's a definite lock/link to the item's specific ID number so if you have a similar idea to me, you will have to look elsewhere I'm afraid.
05/18/2014 16:56 Dr.Dr.SheldonLeeCooper#30
Quote:
Originally Posted by wootszie View Post
nice

just want to ask this are you gonna have a hero skill or not???
No, we dont have Hero Skills.
Max Cap will be 100 & newest iRohan Client without Hero Skillbar & many other cool Stuff :)