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!

Luvinia Server / Client

Skilled Illusionist
Joined
Jul 8, 2008
Messages
306
Reaction score
338
quote "The item shop seems to be bugged now though, if anyone has ideas on why you can't purchase items or which files
contain the item shop settings let me know thanks. "
I posted this because the Cashop works well, you can buy items ;)
(perhaps, you've already corrected this problem and my post is useless but i've not seen a new post about that)
 
Joined
Jul 8, 2009
Messages
445
Reaction score
64
Getting further in development and thought a redo of this post was needed.
Will update the links as they are uploaded, currently going to take 3 hours on the new client.

----------

Files:

Server:



English client:



Partially translated client: ( Viet to English )



Vietnamese client & server: ( Optional, not needed unless you want a Vietnamese game )



----------

Tutorial for setup: ( Working on a video tutorial )

1. Download the translated client and the server

2. Extract both into D:/

2.1. Client can go anywhere and drive letter should not matter, but I use D:/

3. Download MS SQL 2008 R2, and restore the databases located in: D:/GPHXC/Server/SQL Backup

4. Open up D:\GPHXC\server\BillingServer and edit the setup config file as below:

Êý¾Ý¿âIP SQL Instance goes here
Êý¾Ý¿âÃû³Æ SQL User goes here
Êý¾Ý¿âÃÜÂë Pass goes here

4.1. Repeat step 4 for the database and login folders.

5. Run the .exe files in each server folder:

BillingServer
DBServer
GameServer1
GameServer2
GameServer8
LoginServer
WorldServer

6. Now you just have to run the client, don't use the launcher,
it does not work properly, just run the exe called Luvinia, in the client folder.

7. That's all there is to it, your online .. hopefully, if you followed this properly.

7.1 An account is already made:

Username - a123
Password - 123

8. Only made step 8 because I am OCD about numbers, must end on an even one .. lol

----------

Other related files: ( Optional )

Luvinia tools source:



Credits - Kalachu


Luvinia Source:



Credits - Kalachu


Luvinia database:

http://forum.ragezone.com/attachment.php?attachmentid=149619&d=1420299958

Credits - morbitangel

----------

Tools: ( Comming eventually, currently for personal use )

Saved space.

----------
Packres.cfg file explanation:

01.00.0001 - Client version

<*> 3210934893 0 0 0 1 1 1 - Data folder size or the entire Viet folder size.

<cursors> 178708 0 0 0 1 1 1 - Cursor folder

<cursor0.ani> 3338 3338 3338 3052822824 1 1 0 - Contents of cursor folder

<Return> 0 0 0 0 0 0 20 - Back one folder

The client will check the main client folder size.

If correct it checks from first folder ( Cursors )

It uses the <Return> command to go back a folder, uses more returns to go back more folders.

It just checks every folder in order and checks the size of each file, it's like an anti-editing program to stop players changing client files, if the files are different to what the Packres.cfg says, the game will not load.

-----------------------------------------------------------------------------

Example File Entry:

<cursor0.ani> 3338 3338 3338 3052822824 1 1 0

The first number is the compressed size of the file

The 2nd is the extracted size

The 3rd is the same as the first compressed size

The 4th is the CRC

The 5th is the dwPackageType

The 6th is the compression type

The 7th is the bool

Thanks must go to Supicioso for helping me figure the numbers out, great guy.

He has a services thread open on the marketplace, if you need a professional coder go and give him a poke, I can vouch for his services, top notch quality !

Note:
This file is not compressed, so the 3 file size's are entered as the uncompressed size.

----------

Pictures:





















----------

Currently looking for people to join the team to help open a server publicly this year.

Skills are not required, just the drive to learn and improve the game,
although those with skills in the following will be considered first:

C++ / SQL / GFX Design / Web Design / Forum Design ( I have IPB files if needed )

General Thought provoking mad genius's like myself required badly, really helps to have other
freaks like myself to figure out bugs and problems on the server.


Note:

If you ask for a position as a staff member i.e. GM / Forum mod e.c.t,
I will kill you, ok? got it? understand kids? good, don't do it! :)

Staff comes after development, but even then I probably wont need any, since those helping develop
are likely to stay on and help out with that stuff.

----------

My contact information for now.

Skype:

OrikiWLevani

----------

Hope to hear from you lot soon, development is progressing really fast now,
thanks to bla bla and bla bla for providing bla bla and bla bla.

This game graphics Ducking remember of GodsWar Online maybe this game also was from z176 company or IGG rigth ?
 
Newbie Spellweaver
Joined
Dec 11, 2013
Messages
37
Reaction score
12
quote "The item shop seems to be bugged now though, if anyone has ideas on why you can't purchase items or which files
contain the item shop settings let me know thanks. "
I posted this because the Cashop works well, you can buy items ;)
(perhaps, you've already corrected this problem and my post is useless but i've not seen a new post about that)

It still does not work with mine, but that's because during translation I changed some of the item mall files, but I can't remember where they were :)
If you can find the item mall files, it can be fixed by copying them from the original Vietnamese files, just have to find them.
Your upload was not useless, it's another backup in case links die, so thanks :)



This game graphics Ducking remember of GodsWar Online maybe this game also was from z176 company or IGG rigth ?

Not sure, I know Outspark hosted it at one point.
 
Experienced Elementalist
Joined
Sep 23, 2008
Messages
277
Reaction score
90
2(02-23 20:21:04.615):初始化MapFile时, 创建影射文件(GS内存管理)出错. ErrorID: 2.

gameserver 1 debug.txt

help!

please release data.dp english client extracted tool no work

ty
 
Last edited:
Initiate Mage
Joined
Oct 30, 2011
Messages
0
Reaction score
4
Links:

Patch -->
Tool -->
Client --> Pass= r99s (credit --> 中之劫)
1.sorry, big problem to upload at this time, i give you original link
2.in baidu folder, File "服务端解压到D盘根目录.rar" is the server. I compared with that of this post, there are more stuff inside like script, data. Binary are same

can someone reupload to a decent hosting service?
baidu sucks for downloads, always timeout and extremely slow
 
Initiate Mage
Joined
Aug 29, 2016
Messages
2
Reaction score
0
Hi! Are you guys still working on this?? I want to help, and, if possible get a copy to put my own server online!! I really miss this game and want to play it once again.... it deserves to be revived xP
 
Custom Title Activated
Loyal Member
Joined
Dec 20, 2005
Messages
2,046
Reaction score
117
Yeah gameplay looks interesting... FeedsTheBird, are you still translating this MMORPG games?

Wow! This game shutdown 2 times, Luvinia world is their name. Closed on November 1, 2015.
Hope we can bring this MMORPG back for those who still missed it.
 
Last edited:
Custom Title Activated
Loyal Member
Joined
Dec 20, 2005
Messages
2,046
Reaction score
117
The client isn't fully in English either, most of the tools for the servers are still in Chinese. I guess Feed already had gave up on this MMORPG.
 
Newbie Spellweaver
Joined
Dec 11, 2013
Messages
37
Reaction score
12
@FeedTheBirds ItemMall not working tried to buy it nothing happen :S
Item mall was broken, there was a fix either on this thread or the one in the releases section, you'd have to search for it.
The client isn't fully in English either, most of the tools for the servers are still in Chinese. I guess Feed already had gave up on this MMORPG.
It's stated in the first post that this is only partially translated, the language the game and tools are in is Vietnamese, it was rather hard translating what I had done, the rest is up to anyone willing to finish the project off, this is I think the most complete release, but I may be wrong, check for my other release in the releases section.

I've been away from ragezone since I released these files and only came back to have a look see at anything new, good luck, it's a great game hope you guys get it running, will definitely come check any servers out, ask suspiciouso for the tools ( His actual name is on the first post, I'm rather drunk so bad idea asking me to look for things hic )

I give the guy permission to distribute the tool he coded for me to anything, if it's free or not is entirely up to him, I lost all my files, like a dimwit who forgot 20 emails associated with the uploads lol
 
Initiate Mage
Joined
Oct 30, 2011
Messages
0
Reaction score
4
So.. as they shutdown the game, anyone has the english client available?
 
Joined
Aug 14, 2009
Messages
2,304
Reaction score
1,189
I was making space on my HDD and found some files of luvinia I worked on when it was first seen in the wild. I don't know how far anybody got with these files (looking through posts nobody tried running the MapEditor and tools yet?) so I'm sharing what I've got, if anybody still has interested in this game, and tell me what he needs I can upload it before deleting it from my HDD forever.

Since I didn't found anything back then to extract the DP files, I made my own using C# so now I'm releasing it:
Code:
public class DataPack
{
	public class FileListEntry
	{
		public string fileName;
		public int offset;
		public int size;
		public int originalSize;
		public int validSize;
		public int crc32;
		public int compressType;
		
		public byte[] Data;
		
		public void LoadFileData(byte[] bytes)
		{
			using (var ms = new MemoryStream(bytes))
			{
				if (!((compressType & 0x1) == 1))
				{
					if ((compressType & 0x4) == 1) // Standard compress
					{
						Console.WriteLine("Compressed!");
					}
					else
					{
						Data = new byte[size];
						ms.Read(Data, 0, size);
						Data = lzoCompress.Decompress(Data, size*2);
					}
				}
				else
				{
					Data = bytes;
				}
			}
		}

		public void Extract(string folderPath)
		{
			var filePath = folderPath + fileName;
			if(File.Exists(filePath)) return;
			
			filePath = filePath.Replace('?', '_');
			
			var fi = new FileInfo(filePath);
			Directory.CreateDirectory(fi.DirectoryName);
			File.WriteAllBytes(filePath, Data);
		}
	};
	/// <summary>
	/// The offset of all file data in the current package
	/// </summary>
	int offset;
	
	/// <summary>
	/// File index header size
	/// </summary>
	int indexHeadSize;
	
	int maxIndexNum;
	
	/// <summary>
	/// The size of the empty file index header
	/// </summary>
	int emptyIndexHeadSize;	
	int maxEmptyIndexNum;
	int emptyIndexCount;
	
	FileListEntry[] FileEntries;
	FileListEntry[] EmptyFileEntries;
	
	private const int HeadSize = 280;
	
	public void ExtractFiles(string filePath, string extractPath)
	{
		using (var fs = File.OpenRead(filePath))
		{
			var br = new BinaryReader(fs);
			offset = br.ReadInt32();
			indexHeadSize = br.ReadInt32();

			maxIndexNum = indexHeadSize / HeadSize;

			var indexCount = br.ReadInt32();
			Debug.Assert(indexCount <= maxIndexNum, "dwIndexCount <= m_dwMaxIndexNum");

			FileEntries = new FileListEntry[indexCount];
			for (int i = 0; i < indexCount; i++)
			{
				var fileEntry = new FileListEntry();
				fileEntry.fileName = ReadAsciiStatic(br, 256);

				// 24
				var bs = br.ReadBytes(24);
				bs = Decrypt(bs);

				fileEntry.offset = BitConverter.ToInt32(bs, 0);
				fileEntry.size = BitConverter.ToInt32(bs, 3);
				fileEntry.originalSize = BitConverter.ToInt32(bs, 7);
				fileEntry.validSize = BitConverter.ToInt32(bs, 11);
				fileEntry.crc32 = BitConverter.ToInt32(bs, 15);
				fileEntry.compressType = BitConverter.ToInt32(bs, 19);
				var oldPos = br.BaseStream.Position;
				br.BaseStream.Seek(fileEntry.offset, SeekOrigin.Begin);
				fileEntry.LoadFileData(br.ReadBytes(fileEntry.size));
				fileEntry.Extract(extractPath);
				br.BaseStream.Seek(oldPos, SeekOrigin.Begin);
			}
		}
	}

	public void Load(string filePath)
	{
		using (var fs = File.OpenRead(filePath))
		{
			var br = new BinaryReader(fs);
			offset = br.ReadInt32();
			indexHeadSize = br.ReadInt32();
			
			maxIndexNum = indexHeadSize / HeadSize;

			var indexCount = br.ReadInt32();
			Debug.Assert(indexCount <= maxIndexNum, "dwIndexCount <= m_dwMaxIndexNum");

			FileEntries = new FileListEntry[indexCount];
			for (int i = 0; i < indexCount; i++)
			{
				FileEntries[i] = new FileListEntry();
				FileEntries[i].fileName = ReadAsciiStatic(br, 256);

				// 24
				var bs = br.ReadBytes(24);
				bs = Decrypt(bs);

				FileEntries[i].offset = BitConverter.ToInt32(bs, 0);
				FileEntries[i].size = BitConverter.ToInt32(bs, 3);
				FileEntries[i].originalSize = BitConverter.ToInt32(bs, 7);
				FileEntries[i].validSize = BitConverter.ToInt32(bs, 11);
				FileEntries[i].crc32 = BitConverter.ToInt32(bs, 15);
				FileEntries[i].compressType = BitConverter.ToInt32(bs, 19);
				var oldPos = br.BaseStream.Position;
				br.BaseStream.Seek(FileEntries[i].offset, SeekOrigin.Begin);
				FileEntries[i].LoadFileData(br.ReadBytes(FileEntries[i].size));
				br.BaseStream.Seek(oldPos, SeekOrigin.Begin);
			}

			br.BaseStream.Seek(4 + 4 + 4 + indexHeadSize, SeekOrigin.Begin);
			emptyIndexHeadSize = br.ReadInt32();
			maxEmptyIndexNum = emptyIndexHeadSize / HeadSize;
			emptyIndexCount = br.ReadInt32();
			Debug.Assert(emptyIndexCount <= maxEmptyIndexNum, "dwIndexCount2 <= m_dwMaxEmptyIndexNum");

			EmptyFileEntries = new FileListEntry[emptyIndexCount];
			for (int i = 0; i < emptyIndexCount; i++)
			{
				EmptyFileEntries[i] = new FileListEntry();
				EmptyFileEntries[i].fileName = ReadAsciiStatic(br, 256);

				// 24
				var bs = br.ReadBytes(24);
				bs = Decrypt(bs);

				EmptyFileEntries[i].offset = BitConverter.ToInt32(bs, 0);
				EmptyFileEntries[i].size = BitConverter.ToInt32(bs, 3);
				EmptyFileEntries[i].originalSize = BitConverter.ToInt32(bs, 7);
				EmptyFileEntries[i].validSize = BitConverter.ToInt32(bs, 11);
				EmptyFileEntries[i].crc32 = BitConverter.ToInt32(bs, 15);
				EmptyFileEntries[i].compressType = BitConverter.ToInt32(bs, 19);
				var oldPos = br.BaseStream.Position;
				br.BaseStream.Seek(EmptyFileEntries[i].offset, SeekOrigin.Begin);
				EmptyFileEntries[i].LoadFileData(br.ReadBytes(EmptyFileEntries[i].size));
				br.BaseStream.Seek(oldPos, SeekOrigin.Begin);
			}
		}
	}
	
	public void Extract(string folderPath)
	{
		if(!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath);
		
		foreach(var entry in FileEntries)
		{
			entry.Extract(folderPath);
		}
	}
	
	public static byte[] Decrypt(byte[] encrypted)
	{
		var decrypted = encrypted;
		for (var i = 0; i < decrypted.Length; i++)
		{
			decrypted[i] ^= 0xFF;
		}
		return decrypted;
	}
	
	public static string ReadAsciiStatic(BinaryReader br, int maxLength)
	{
		var buf = br.ReadBytes(maxLength);
		buf = Decrypt(buf);
		var str = Encoding.ASCII.GetString(buf);
	
		if (str.Contains("\0"))
			str = str.Substring(0, str.IndexOf('\0'));
	
		return str;
	}
};

MapEditor:
mV8TLLz - Luvinia Server / Client - RaGEZONE Forums


PackageTool (I think I translated this one myself since there are clear differences between mine and the one shared before):
vrao618 - Luvinia Server / Client - RaGEZONE Forums


GameModel Viewer:
aAcBD2e - Luvinia Server / Client - RaGEZONE Forums
 

Attachments

You must be registered for see attachments list
Last edited:
Initiate Mage
Joined
Sep 20, 2018
Messages
2
Reaction score
0
GigaToni, hello. You can give me class lzoCompress?
 
Back
Top