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!

Lunia Files

Status
Not open for further replies.
Newbie Spellweaver
Joined
Oct 22, 2008
Messages
75
Reaction score
143
Here's some stuff I talked about in previous posts:

Cleanup.sql - This is my current WIP script for cleaning up the existing data. There's nothing special about it, but it does go over some of the tables that you do and don't have to set. The point of this is to serve as a base script to setup stock servers from the uploaded files rather than doing a repack of the DB just yet.
Code:
/*
	BEFORE YOU RUN:

	I'm no MSSQL master, but this is what I have come up with from
	researching the issue on how to cleanup tables with FK constraints.
	There might be easier ways to do this, but this is what I have for now.
	
	Stage 0:
	- Change @SERVERNAME to the name of the server you define in your config
		files. The variable comes after this large comment block.
	
	Stage 1:
	- Expand "Databases\v3_guild\Tables"
	- Right click on "dbo.guild" and choose Design
	- Right click on "guildId" and choose "Relationships"
	- There should be one relationship, "FK_guildGrade_guild"
	- For each relationship:
	-- Expand "INSERT And UPDATE Specification" at the bottom
	-- Change "Delete Rule" to "Cascade"
	-- Change "Update Rule" to "Cascade"
	- Hit "Close" and save the table (ctr + s)
	- You will get a warning box about changes, hit "Yes"
	
	Stage 2:
	- Expand "Databases\v3_character\Tables"
	- Right click on "dbo.Accounts" and choose Design
	- Right click on "accountName" and choose "Relationships"
	- There should be two relationships, "FK_Characters_Accounts" 
		and "FK_LobbyConnections_Accounts"
	- For each relationship:
	-- Expand "INSERT And UPDATE Specification" at the bottom
	-- Change "Delete Rule" to "Cascade" if it is not already
	-- Change "Update Rule" to "Cascade" if it is not already
	- Hit "Close" and save the table (ctr + s)
	- You will get a warning box about changes, hit "Yes"
	
	Stage 3:
	- Expand "Databases\v3_character\Tables"
	- Right click on "dbo.Characters" and choose Design
	- Right click on "characterName" and choose "Relationships"
	- There should be six relationships, "FK_Characters_Accounts", "FK_Items_Characters", 
		"FK_Licenses_Characters", "FK_QuickSlots_Characters", "FK_SelectedCharacters_Characters", 
		and "FK_Skills_Characters"
	- For each relationship:
	-- Expand "INSERT And UPDATE Specification" at the bottom
	-- Change "Delete Rule" to "Cascade" if it is not already
	-- Change "Update Rule" to "Cascade" if it is not already
	- Hit "Close" and save the table (ctr + s)
	- You will get a warning box about changes, hit "Yes"
	
	Stage 4:
	- Expand "Databases\v3_character\Tables"
	- Right click on "LobbyServers" and choose "Relationships"
	- There should be one relationship, "FK_LobbyConnections_LobbyServers" 
	- For each relationship:
	-- Expand "INSERT And UPDATE Specification" at the bottom
	-- Change "Delete Rule" to "Cascade" if it is not already
	-- Change "Update Rule" to "Cascade" if it is not already
	- Hit "Close" and save the table (ctr + s)
	- You will get a warning box about changes, hit "Yes"
*/
/*
	AFTER YOU RUN (optional?):

	Go through the above steps again, but change the "Cascade"
	back to "None".
	
	I'm not sure if this has to be done or not or what implications 
	arise if you do or don't.
*/

DECLARE @SERVERNAME varchar(50)

SET @SERVERNAME = 'MyServerName'

/********************/

use [Billing]
go

	/* Remove all old data */
	truncate table CardList
	truncate table CardUseLog
	truncate table CashPoints
	truncate table CashUseLog
	go

/********************/

use [v3_gate]
go

	/* Clear existing data */
	truncate table Connections

	/* Add our new server's data */
	insert into Connections(serverCode, serverName, connectionCount, lastUpdated)
	values (126, @SERVERNAME, 0, GETDATE())
	go

/********************/

use [v3_guild]
go

	/* Remove all old data */
	delete from guild where 1=1
	delete from guildGrade where 1=1
	truncate table family
	truncate table familyMember
	truncate table guildNexon
	truncate table guildLevel
	truncate table guildMaintain
	truncate table guildMember
	truncate table guildRank
	truncate table guildShopProduct
	go

/********************/

use [v4_stage]
go

	/* Remove all old data */
	truncate table ActiveStages
	truncate table Connections
	truncate table InActiveStages
	truncate table LastPlayedStage
	truncate table PvpChannels
	truncate table PvpConnections
	truncate table SquareStages
	truncate table StageGroups
	truncate table StageServers

	/* NOTE: PvpChannels / StageServers are setup for us automatically! */
	
	go

/********************/

use [v3_character]
go
	
	/* Seems to be some temp table, I *think*... */
	drop table aa
	
	/* Remove all old data */
	delete from Accounts where 1=1 /* This might take some time to run */
	delete from Characters where 1=1 /* This might take some time to run */
	truncate table SkillLicenses
	truncate table BankItems
	truncate table BankBags
	truncate table Bags
	truncate table WorkingQuests
	truncate table CharacterRebirth
	truncate table CharacterLicenses
	truncate table Blocking
	truncate table CompletedQuests
	truncate table InvalidString
	truncate table PlayTime
	truncate table web_MailItems_History
	truncate table web_Mails_History
	truncate table LobbyConnections
	truncate table PetItems
	truncate table PetTraining
	truncate table Pets
	truncate table Event_PlayTime
	truncate table Items
	truncate table FriendList
	truncate table Event_0901_3Year
	truncate table CashItemStorage
	truncate table Event_090827_ExpBox
	truncate table AddedSkillPoint
	truncate table jiangli
	truncate table CharacterRename
	truncate table Skills
	truncate table Market
	truncate table QuickSlots
	truncate table Licenses
	truncate table SelectedCharacters
	truncate table Event_PcRoom
	truncate table Event_ExpBox
	truncate table KeySetting
	truncate table Market_History
	truncate table MailItems
	truncate table Mails
	
	/* TODO: Work this table's data out */
	update Constants set CharValue=@SERVERNAME where KeyName='ServerName'

	/* Note: LobbyServers is setup for us at runtime */
	delete from LobbyServers where 1=1

	go
	
/********************/
	
	use [d-shop]
	go
	
	/* TODO: Work out and clean up this database
		There's too much interconnected data to try and hard wipe it. The 
		SP's need to be gone through and used to cleanup. The shop's web
		pages' data also needs to be examined during this process as well
		for compatibility issues.
	*/
	
/********************/

/*
I think this isn't needed since we truncated all the old data from the 
database. I'll leave it in here for reference for future maintence though.
It will generate quite a few (harmless) errors.

use Billing
EXECUTE sp_MSforeachtable 'DBCC CHECKIDENT ([?], RESEED, 1)';

use v3_character
EXECUTE sp_MSforeachtable 'DBCC CHECKIDENT ([?], RESEED, 1)';

use v3_gate
EXECUTE sp_MSforeachtable 'DBCC CHECKIDENT ([?], RESEED, 1)';

use v3_guild
EXECUTE sp_MSforeachtable 'DBCC CHECKIDENT ([?], RESEED, 1)';

use v4_stage
EXECUTE sp_MSforeachtable 'DBCC CHECKIDENT ([?], RESEED, 1)';
*/

/********************/

KeyTransform.cs - This is a tool I wrote to work with the passwords of the zip files. The current password of the zip files in 99lunia is "JuhaniHonkala". However, the client stores the password as "JvjdrnNvvtkwm". This simple code does the encoding/decoding back and forth using their algorithm (simple, but a real PITA to find & reverse). An usage/example output would be:
Usage:
KeyTransform.exe -d JvjdrnNvvtkwm -e JuhaniHonkala
Output:
Decrypting: JvjdrnNvvtkwm => JuhaniHonkala
Encrypting: JuhaniHonkala => JvjdrnNvvtkwm
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace KeyTransform
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int x = 0; x < args.Length; x += 2)
            {
                String key = args[x + 1];
                if (args[x] == "-d")
                {
                    Console.Write("Decrypting: ");
                    String src = "";
                    for (int y = 0; y < key.Length; ++y)
                    {
                        char c = (char)(key[y] - y);
                        src += c;
                    }
                    Console.WriteLine("{0} => {1}", key, src);
                }
                else if (args[x] == "-e")
                {
                    Console.Write("Encrypting: ");
                    String dst = "";
                    for (int y = 0; y < key.Length; ++y)
                    {
                        char c = (char)(key[y] + y);
                        dst += c;
                    }
                    Console.WriteLine("{0} => {1}", key, dst);
                }
                Console.WriteLine();
            }
        }
    }
}

connectinfo.xml - This is the connectinfo.b that is used by the 99Lunia client dumped to XML. Someone mentioned another connectinfo.xml exists, but I don't have it to compare to see how different it is. I've only modified a few urls and settings, but they should be obvious. Some of the extra data is still unknown and I'm working through what it is used for. NOTE: To use it with your 99Lunia client, rename it to connectinfo.b, the client will handle it still. I'm looking for the settings to make the client read the XML rather than the .b still, but for now renaming works.
Code:
<allm version="(0,0)">
	<ClientInfo type="ClientBasicInfo">
		<GameCode value="94213" />
		<ErrorReportAddress type="wstring" value="http://192.168.1.148/manage/error_report.asp" />
		<ServerPopulationAddress type="wstring" value="http://192.168.1.148/Client/ListConnections.asp" />
		<ResearchPingAndPCInfosAddress type="wstring" value="http://192.168.1.148/etc/client.asp" />
		<GetPollAddressPage type="wstring" value="" />
		<PollAddress type="wstring" value="" />
	</ClientInfo>

	<ServerTable type="associative_array">
		<item type="pair">
			<key type="int32" value="0" />
			<value type="ServerInfo">
				<Code type="uint8" value="0" />
				<PossibleAge type="uint32" value="0" />
				<Id type="wstring" value="pushedx1" />
				<Name type="wstring" value="pushedx1" />
				<DisplayName type="wstring" value="pushedx1" />
				<DisplayTooltip type="wstring" value="Server pushedx1" />
				<Addr type="wstring" value="192.168.1.148" />
				<Port type="uint16" value="15550" />
				<CashWebpageAddr type="wstring" value="http://192.168.1.148/g/encrypt.asp" />
				<GuildPvPInfoAddr type="wstring" value="" />
				<ShopInfoAddr type="wstring" value="" />
				<PartyServerAddr type="wstring" value="192.168.1.148" />
				<PartyServerPort type="int32" value="15557" />
				<FamilyServerAddr type="wstring" value="192.168.1.148" />
				<FamilyServerPort type="int32" value="15555" />
				<GuildServerAddr type="wstring" value="192.168.1.148" />
				<GuildServerPort type="int32" value="15556" />
				<GuildIconUpload type="wstring" value="http://192.168.1.148/guild.aspx" />
				<GuildIconSource type="wstring" value="http://192.168.1.148/showicon.aspx" />
				
				<ItemToLinkTable type="associative_array">
					<item type="pair">
						<key type="uint32" value="11838961" />
						<value type="wstring" value="oidProduct=1526" />
					</item>

					<item type="pair">
						<key type="uint32" value="15310266" />
						<value type="wstring" value="oidProduct=1525" />
					</item>

					<item type="pair">
						<key type="uint32" value="16856317" />
						<value type="wstring" value="oidProduct=1548" />
					</item>

					<item type="pair">
						<key type="uint32" value="19897741" />
						<value type="wstring" value="oidProduct=1549" />
					</item>

					<item type="pair">
						<key type="uint32" value="36359512" />
						<value type="wstring" value="oidProduct=1949" />
					</item>

					<item type="pair">
						<key type="uint32" value="50646546" />
						<value type="wstring" value="oidProduct=1550" />
					</item>

					<item type="pair">
						<key type="uint32" value="53145434" />
						<value type="wstring" value="oidProduct=1527" />
					</item>

					<item type="pair">
						<key type="uint32" value="59815993" />
						<value type="wstring" value="oidProduct=1528" />
					</item>
				</ItemToLinkTable>

				<ChattingBlockUpdateUrl type="wstring" value="http://192.168.1.148/invalid-str/list.asp" />
				<InGameNoticeUpdateUrl type="wstring" value="http://192.168.1.148/m/notice/list.asp" />
				<ServerEventType type="uint8" value="0" />

				<CashItemPreviewServerInfo type="AllM::XRated::LuniaBase::Info::SeverConnectInfo::CashItemPreviewServerInfo">
					<AddressPreviewList type="wstring" value="http://192.168.1.148/g/preview_v1/preview_list.asp" />
					<AddressHotList type="wstring" value="http://192.168.1.148/g/preview_v1/hot_list.asp" />
					<AddressCategoryList type="wstring" value="http://192.168.1.148/g/preview_v1/category_list.asp" />
					<AddressPurchase type="wstring" value="oidProduct=" />
					<AddressDirectPurchase type="wstring" value="http://192.168.1.148/g/preview_v1/preview_info.asp" />
				</CashItemPreviewServerInfo>

				<PingProfileAddr type="wstring" value="http://192.168.1.148/crm/ping.asp" />
				<TingProfileAddr type="wstring" value="http://192.168.1.148/crm/ting.asp" />
				<LowerFrameProfileAddr type="wstring" value="http://192.168.1.148/crm/low_frame.asp" />
				<DpsAddr type="wstring" value="" />
			</value>
		</item>
	</ServerTable>
</allm>

NewLuniaArchive.cs - This is my current WIP Lunia cfp/cpv extractor. There's still some work left to do with figuring stuff out, but for now it seems to be able to extract the files. It requires the "LZMA.dll" from the Lunia directory to run (put it in same folder as exe). After you compile it, you will want to run: "NewLuniaArchive <base name> <output dir>" from a folder with the cfp/cpv files where "base name" is the base name of the cfp/cpv (such as Animation, Database, Locales, etc..) and "output" is the directory to extract to.
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Cryptography;

namespace NewLuniaArchive
{
    class LuniaArchive
    {
        [DllImport("LZMA.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern int LzmaUncompress(byte[] dest, ref int destLen, byte[] src, ref int srcLen, byte[] propData, int propSize);

        public class EntryChecksum
        {
            public String name;
            public String md5;
        }

        public class EntryHeader
        {
            public const UInt16 DirPath = 0x5044;
            public const UInt16 FilePath = 0x5046;

            public Int32 DirCount { get { if (type != DirPath) throw new Exception("A DirCount property is not valid for this object."); return val1; } }
            public Int32 FileCount { get { if (type != DirPath) throw new Exception("A DirCount property is not valid for this object."); return val2; } }

            public Int32 FileOffset { get { if (type != FilePath) throw new Exception("A FileOffset property is not valid for this object."); return val1; } }
            //public Int32 FileSize { get { if (type != FilePath) throw new Exception("A FileSize property is not valid for this object."); return val2; } } // not sure yet

            internal Int16 type;
            Int32 val1;
            Int32 val2;
            public String Name { get; set; }

            public bool IsFile { get { return type == FilePath; } }
            public bool IsDir { get { return type == DirPath; } }

            public EntryHeader parent;

            public EntryChecksum checksum;

            public EntryHeader()
            {
            }

            public EntryHeader(BinaryReader br)
            {
                type = br.ReadInt16();
                val1 = br.ReadInt32();
                val2 = br.ReadInt32();
                Int16 len = br.ReadInt16();
                if (len > 0)
                {
                    Name = Encoding.Unicode.GetString(br.ReadBytes(len * 2));
                }
            }
        }

        void Recurse(EntryHeader parent, BinaryReader br)
        {
            for (int x = 0; x < parent.DirCount; ++x)
            {
                EntryHeader e2 = new EntryHeader(br);
                if (e2.type != EntryHeader.DirPath)
                {
                    throw new Exception("Invalid entry type - DirPath expected.");
                }
                e2.parent = parent;
                entries.Add(e2);
                for (int y = 0; y < e2.DirCount; ++y)
                {
                    EntryHeader e3 = new EntryHeader(br);
                    if (e3.type != EntryHeader.DirPath)
                    {
                        throw new Exception("Invalid entry type - DirPath expected.");
                    }
                    e3.parent = e2;
                    entries.Add(e3);
                    Recurse(e3, br);
                }
                for (int y = 0; y < e2.FileCount; ++y)
                {
                    EntryHeader e5 = new EntryHeader(br);
                    if (e5.type != EntryHeader.FilePath)
                    {
                        throw new Exception("Invalid entry type - FilePath expected.");
                    }
                    e5.parent = e2;
                    entries.Add(e5);
                }
            }
            for (int x = 0; x < parent.FileCount; ++x)
            {
                EntryHeader e4 = new EntryHeader(br);
                if (e4.type != EntryHeader.FilePath)
                {
                    throw new Exception("Invalid entry type - FilePath expected.");
                }
                e4.parent = parent;
                entries.Add(e4);
            }
        }

        EntryHeader root_entry;
        List<EntryHeader> entries = new List<EntryHeader>();
        Dictionary<String, EntryChecksum> checksums = new Dictionary<String, EntryChecksum>();
        String m_basename;

        public byte[] Extract(EntryHeader entry)
        {
            using (FileStream fs = new FileStream(m_basename + ".cfp", FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    br.BaseStream.Position = entry.FileOffset;
                    Int32 decompressed_size = br.ReadInt32();
                    Int32 compressed_size = br.ReadInt32();
                    byte[] propData = br.ReadBytes(5);
                    byte[] compressed = br.ReadBytes(compressed_size);
                    byte[] decompressed = new byte[decompressed_size];
                    int result = LzmaUncompress(decompressed, ref decompressed_size, compressed, ref compressed_size, propData, 5);
                    if (result != 0)
                    {
                        throw new Exception(String.Format("LzmaUncompress returned error code {0}", result));
                    }
                    return decompressed;
                }
            }
        }

        public EntryHeader GetEntry(String name)
        {
            String[] parts = name.ToLower().Split(new char[] { '\\', '/' });
            EntryHeader p = null;
            EntryHeader e = null;
            int x = 0;
            for (int y = 0; y < parts.Length; ++y )
            {
                String part = parts[y];
                for (; x < entries.Count; ++x)
                {
                    e = entries[x];
                    if (p != null)
                    {
                        if (e.parent != p)
                            continue;
                    }
                    if (e.Name.ToLower() == part)
                    {
                        p = e;
                        break;
                    }
                    e = null;
                }
            }
            if (e != null)
            {
                e.checksum = checksums[name];
            }
            return e;
        }

        public List<String> GetFileNames()
        {
            List<String> names = new List<String>();
            foreach(var kvp in checksums)
            {
                if (kvp.Key.Length > 0 && kvp.Key[0] != '/')
                {
                    names.Add(kvp.Key);
                }
            }
            return names;
        }

        public void Load(String basename)
        {
            m_basename = basename;
            using (FileStream fs = new FileStream(m_basename + ".cfp", FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    Int16 type = br.ReadInt16();
                    Int64 magic = br.ReadInt64();
                    Int64 header_offset = br.ReadInt64();

                    if (type != 0x4150)
                    {
                        throw new Exception("Invalid archive type - 0x4150 expected.");
                    }

                    br.BaseStream.Position = header_offset;

                    root_entry = new EntryHeader(br);
                    Recurse(root_entry, br);
                }
            }
            using (FileStream fs = new FileStream(m_basename + ".cpv", FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    Int16 type = br.ReadInt16();
                    Int64 magic = br.ReadInt64();
                    Int32 count = br.ReadInt32();

                    if (type != 0x4649)
                    {
                        throw new Exception("Invalid archive type - 0x4649 expected.");
                    }

                    for (int x = 0; x < count; ++x)
                    {
                        EntryChecksum e = new EntryChecksum();

                        UInt16 len = br.ReadUInt16();
                        e.name = Encoding.Unicode.GetString(br.ReadBytes(len * 2), 0, len * 2);

                        len = br.ReadUInt16();
                        e.md5 = Encoding.ASCII.GetString(br.ReadBytes(len), 0, len);

                        checksums.Add(e.name.ToLower(), e);
                    }

                    long p = br.BaseStream.Length - br.BaseStream.Position;
                    if (p != 0)
                    {
                        throw new Exception(String.Format("There are {0} bytes left to parse.", p));
                    }
                }
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            LuniaArchive archive = new LuniaArchive();

            archive.Load(Directory.GetCurrentDirectory() + "\\" + args[0]);
            String output = Directory.GetCurrentDirectory() + "\\" + args[1] + "\\" + args[0] + "\\";

            List<String> filenames = archive.GetFileNames();
            foreach (String filename in filenames)
            {
                try
                {
                    LuniaArchive.EntryHeader e = archive.GetEntry(filename);
                    if (e == null)
                    {
                        Console.WriteLine("Error: The file {0} could not be found in {1}!", filename, args[0]);
                        continue;
                    }
                    byte[] bytes = archive.Extract(e);
                    if (bytes == null)
                    {
                        Console.WriteLine("Error: The file {0} could not be extracted!", filename);
                        continue;
                    }
                    Directory.CreateDirectory(Path.GetDirectoryName(output + filename));
                    using (FileStream fs = new FileStream(output + filename, FileMode.Create, FileAccess.Write))
                    {
                        using (BinaryWriter bw = new BinaryWriter(fs))
                        {
                            bw.Write(bytes);
                            bw.Flush();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("There was an error processing {0}{1}{2}", filename, Environment.NewLine, ex);
                }
            }
        }
    }
}

ChineseT.zip - This is just the current Lunia global's Locales files zipped up using the right password. Some stuff is not translated because this is not a merge, it's simply a replacement. You will need to go through and add any missing or untranslated defines to continue working, but it cuts down on a lot. Make sure you don't change the password! (Unless you know how to change it in the client or remove it, I know neither yet).
Link:
Zip Password: JuhaniHonkala

Notes on server configs:
* You can replace all JP related console stuff with (if you want):
Code:
<ConsoleInput value="en" />
<LocalCharacterLowerBound_0 value="65" />
<LocalCharacterUpperBound_0 value="97" />
But I'm not sure if it really makes a difference or is used for anything.
* Setup wise, you just have to fix addresses and make sure the ports are linked correctly. The files as-is are configured pretty well, they just need some minor editing. A full guide for everything will come later though.
* If you have not already, read this thread! It contains a lot of useful information. When it is mentioned the Stage/Square servers take a long time to start, they really do mean a long time. If you don't have a very high end PC/Server to work with, be prepared to wait (on my PC takes about 5 mins or so, on a VM, 10+).
* Web shop stuff is still being looked at, but it seems partially working.
* In terms of character classes and playing the game, the files seem complete and very stable. I've had no issues so far and I've been testing via VirtualBox. How everything will fare on a live server with more users is for future exploration.
 
Junior Spellweaver
Joined
May 14, 2008
Messages
161
Reaction score
66
connectinfo.xml - This is the connectinfo.b that is used by the 99Lunia client dumped to XML. Someone mentioned another connectinfo.xml exists, but I don't have it to compare to see how different it is. I've only modified a few urls and settings, but they should be obvious. Some of the extra data is still unknown and I'm working through what it is used for. NOTE: To use it with your 99Lunia client, rename it to connectinfo.b, the client will handle it still. I'm looking for the settings to make the client read the XML rather than the .b still, but for now renaming works.
Code:
<allm version="(0,0)">
	<ClientInfo type="ClientBasicInfo">
		<GameCode value="94213" />
		<ErrorReportAddress type="wstring" value="http://192.168.1.148/manage/error_report.asp" />
		<ServerPopulationAddress type="wstring" value="http://192.168.1.148/Client/ListConnections.asp" />
		<ResearchPingAndPCInfosAddress type="wstring" value="http://192.168.1.148/etc/client.asp" />
		<GetPollAddressPage type="wstring" value="" />
		<PollAddress type="wstring" value="" />
	</ClientInfo>

	<ServerTable type="associative_array">
		<item type="pair">
			<key type="int32" value="0" />
			<value type="ServerInfo">
				<Code type="uint8" value="0" />
				<PossibleAge type="uint32" value="0" />
				<Id type="wstring" value="pushedx1" />
[COLOR="Red"]				<Name type="wstring" value="pushedx1" />
				<DisplayName type="wstring" value="pushedx1" />
				<DisplayTooltip type="wstring" value="Server pushedx1" />[/COLOR]
				<Addr type="wstring" value="192.168.1.148" />
				<Port type="uint16" value="15550" />
				<CashWebpageAddr type="wstring" value="http://192.168.1.148/g/encrypt.asp" />
				<GuildPvPInfoAddr type="wstring" value="" />
				<ShopInfoAddr type="wstring" value="" />
				<PartyServerAddr type="wstring" value="192.168.1.148" />
				<PartyServerPort type="int32" value="15557" />
				<FamilyServerAddr type="wstring" value="192.168.1.148" />
				<FamilyServerPort type="int32" value="15555" />
				<GuildServerAddr type="wstring" value="192.168.1.148" />
				<GuildServerPort type="int32" value="15556" />
				<GuildIconUpload type="wstring" value="http://192.168.1.148/guild.aspx" />
				<GuildIconSource type="wstring" value="http://192.168.1.148/showicon.aspx" />
				
[COLOR="Red"]				<ItemToLinkTable type="associative_array">
					<item type="pair">
						<key type="uint32" value="11838961" />
						<value type="wstring" value="oidProduct=1526" />
					</item>

					<item type="pair">
						<key type="uint32" value="15310266" />
						<value type="wstring" value="oidProduct=1525" />
					</item>

					<item type="pair">
						<key type="uint32" value="16856317" />
						<value type="wstring" value="oidProduct=1548" />
					</item>

					<item type="pair">
						<key type="uint32" value="19897741" />
						<value type="wstring" value="oidProduct=1549" />
					</item>

					<item type="pair">
						<key type="uint32" value="36359512" />
						<value type="wstring" value="oidProduct=1949" />
					</item>

					<item type="pair">
						<key type="uint32" value="50646546" />
						<value type="wstring" value="oidProduct=1550" />
					</item>

					<item type="pair">
						<key type="uint32" value="53145434" />
						<value type="wstring" value="oidProduct=1527" />
					</item>

					<item type="pair">
						<key type="uint32" value="59815993" />
						<value type="wstring" value="oidProduct=1528" />
					</item>
				</ItemToLinkTable>[/COLOR]

				<ChattingBlockUpdateUrl type="wstring" value="http://192.168.1.148/invalid-str/list.asp" />
				<InGameNoticeUpdateUrl type="wstring" value="http://192.168.1.148/m/notice/list.asp" />
				<ServerEventType type="uint8" value="0" />

				<CashItemPreviewServerInfo type="AllM::XRated::LuniaBase::Info::SeverConnectInfo::CashItemPreviewServerInfo">
					<AddressPreviewList type="wstring" value="http://192.168.1.148/g/preview_v1/preview_list.asp" />
					<AddressHotList type="wstring" value="http://192.168.1.148/g/preview_v1/hot_list.asp" />
					<AddressCategoryList type="wstring" value="http://192.168.1.148/g/preview_v1/category_list.asp" />
					<AddressPurchase type="wstring" value="oidProduct=" />
					<AddressDirectPurchase type="wstring" value="http://192.168.1.148/g/preview_v1/preview_info.asp" />
				</CashItemPreviewServerInfo>

				<PingProfileAddr type="wstring" value="http://192.168.1.148/crm/ping.asp" />
				<TingProfileAddr type="wstring" value="http://192.168.1.148/crm/ting.asp" />
				<LowerFrameProfileAddr type="wstring" value="http://192.168.1.148/crm/low_frame.asp" />
				<DpsAddr type="wstring" value="" />
			</value>
		</item>
	</ServerTable>
</allm>
I am redownloading the client, but the connectinfo looked almost exactly the same. It was missing the things in red.

When I finish downloading it, I will be glad to post it.

LanLunia ConnectInfo.b :


PHP:
<?xml version="1.0" encoding="utf-16"?>
<allm>
	<ClientInfo type="ClientBasicInfo">
		<GameCode                        type="uint64"          value="0" />
		<ErrorReportAddress              type="wstring"         value="/manage/error_report.asp" />
		<ServerPopulationAddress         type="wstring"		value="http://u-lunia-gw01.pubgame.ijji.com/Client/ListConnections.asp" />
		<ResearchPingAndPCInfosAddress		type="wstring"		value="" />
	</ClientInfo>
	<ServerTable type="associative_array">
		<item type="pair">
			<key type="uint32" value="0" />
			<value type="ServerInfo">
				<Code type="uint8" value="0" />
				<PossibleAge type="uint32" value="0" />
				<Id type="wstring" value="Soldin" />
				<Name type="wstring" value="Bloody Lunia" />
				<DisplayName type="wstring" value="Bloody Lunia" />
				<DisplayTooltip type="wstring" value="Bloody Lunia" />
				<Addr type="wstring" value="46.4.9.89" />
				<Port type="uint16" value="13221" />
				<CountryCode type="wstring" value="US" />
				<CashWebpageAddr type="wstring" value="http://46.4.9.89/lunia/g/encrypt.asp" />
				<GuildPvPInfoAddr type="wstring" value="http://lunia.ijji.com/clientSupport/character_pvp_rank.nhn" />
				<ShopInfoAddr type="wstring" value="" />

				<PartyServerAddr type="wstring" value="46.4.9.89" />
				<PartyServerPort type="uint16" value="15557" />
				<GuildServerAddr type="wstring" value="46.4.9.89" />
				<GuildServerPort type="wstring" value="15556" />
				<FamilyServerAddr type="wstring" value="46.4.9.89" />
				<FamilyServerPort type="uint16" value="15555" />
				<ChattingBlockUpdateUrl type="wstring" value="http://u-lunia-er01.pubgame.ijji.com/invalid-str/list.asp" /> 
				<InGameNoticeUpdateUrl type="wstring" value="http://46.4.9.89/lunia/notice/list.asp" />
				<GuildIconUpload type="wstring" value="http://lunia.ijji.com/guildmark/uploadGuildMark.nhn" />
				<GuildIconSource type="wstring" value="http://downimage.ijjimax.com/lunia" />
				
				<WebBrowserSizes type="associative_array" >					
				</WebBrowserSizes>
				
				<CashItemPreviewServerInfo type="AllM::XRated::LuniaBase::Info::SeverConnectInfo::CashItemPreviewServerInfo" >
					<AddressPreviewList type="wstring" value="http://46.4.9.89/lunia/g/preview_v1/preview_list.asp" />
					<AddressHotList type="wstring" value="http://46.4.9.89/lunia/g/preview_v1/hot_list.asp" />
					<AddressCategoryList type="wstring" value="http://46.4.9.89/lunia/g/preview_v1/category_list.asp" />
					<AddressPurchase type="wstring" value="http://46.4.9.89/lunia/g/encrypt.asp" />
					<AddressDirectPurchase type="wstring" value="http://46.4.9.89/lunia/g/encrypt.asp" />
				</CashItemPreviewServerInfo>
				
				<DpsAddr type="wstring" value="" />
				<PingProfileAddr type="wstring" value="http://u-lunia-er01.pubgame.ijji.com/crm/ping.asp" />				
				<TingProfileAddr type="wstring" value="http://u-lunia-er01.pubgame.ijji.com/crm/ting.asp" />
				<LowerFrameProfileAddr type="wstring" value="http://u-lunia-er01.pubgame.ijji.com/crm/low_frame_v2.asp" />
				<ServerEventType type="uint8" value="0" />	
			</value>
		</item>
	</ServerTable>
</allm>
Also in the client, I found this:
PHP:
<allm version="(0,0)">
	<NewTutorialInfos type="associative_array">
		<item type="pair">
			<key                             type="wstring"         value="allm01" />
			<value type="associative_array">
				<item type="pair">
					<key                             type="wstring"         value="PartyListWindow" />
					<value                           type="bool"            value="[COLOR="false" />//perhaps hide ADMIN from appearing in PT list?
				</item>
			</value>
		</item>
	</NewTutorialInfos>
</allm>

In another file,
normal characters are:
PHP:
		<item type="pair">
			<key                             type="wstring"         value="DarkEir" />
			<value type="associative_array">
				<item type="pair">
					<key                             type="int32"           value="0" />
					<value type="associative_array">
					</value>
				</item>
			</value>
		</item>
A "GM" is
PHP:
		<item type="pair">
			<key                             type="wstring"         value="GM_Wind" />
			<value type="associative_array">
				<item type="pair">
					<key                             type="int32"           value="0" />
					<value type="associative_array">
					</value>
				</item>
				<item type="pair">
					<key                             type="int32"           value="1" />
					<value type="associative_array">
					</value>
				</item>
			</value>
		</item>
The Admin's Kali:
PHP:
			<key                             type="wstring"         value="Kali" />
			<value type="associative_array">
				<item type="pair">
					<key                             type="int32"           value="0" />
					<value type="associative_array">
						<item type="pair">
							<key                             type="int32"           value="-4" />
							<value                           type="bool"            value="true" />
						</item>
						<item type="pair">
							<key                             type="int32"           value="0" />
							<value                           type="bool"            value="true" />
						</item>
						<item type="pair">
							<key                             type="int32"           value="1" />
							<value                           type="bool"            value="true" />
						</item>
					</value>
				</item>
				<item type="pair">
					<key                             type="int32"           value="1" />
					<value type="associative_array">
					</value>
				</item>
			</value>
		</item>
Another one of the Admin's characters
PHP:
		<item type="pair">
			<key                             type="wstring"         value="Tiadesu" />
			<value type="associative_array">
				<item type="pair">
					<key                             type="int32"           value="0" />
					<value type="associative_array">
						<item type="pair">
							<key                             type="int32"           value="-4" />
							<value                           type="bool"            value="true" />
						</item>
						<item type="pair">
							<key                             type="int32"           value="0" />
							<value                           type="bool"            value="true" />
						</item>
						<item type="pair">
							<key                             type="int32"           value="1" />
							<value                           type="bool"            value="true" />
						</item>
					</value>
				</item>
				<item type="pair">
					<key                             type="int32"           value="1" />
					<value type="associative_array">
					</value>
				</item>
			</val

Others
PHP:
		<item type="pair">
			<key                             type="wstring"         value="allm01" />
			<value type="associative_array">
				<item type="pair">
					<key                             type="int32"           value="0" />
					<value type="associative_array">
					</value>
				</item>
				<item type="pair">
					<key                             type="int32"           value="1" />
					<value type="associative_array">
					</value>
				</item>
			</value>
		</item>
		<item type="pair">
			<key                             type="wstring"         value="allm02" />
			<value type="associative_array">
				<item type="pair">
					<key                             type="int32"           value="0" />
					<value type="associative_array">
					</value>
				</item>
			</value>
		</item>

The thing I am wondering, is what are these for? And how come the ADMIN has different values?
And
PHP:
	<TutorialCompleteTable type="associative_array">
Could that mean that all of this is just users completing the tutorial? ~Just something that caught my eye.

There's the scammer WalterNgo who collected donations and fled ^-^ [Also a source that this client was leeched from him xD]
PHP:
		<item type="pair">
			<key                             type="wstring"         value="walterngo" />
			<value type="associative_array">
				<item type="pair">
					<key                             type="int32"           value="0" />
					<value type="associative_array">
					</value>
				</item>
			</value>
		</item>
 
Last edited:
Newbie Spellweaver
Joined
Oct 22, 2008
Messages
75
Reaction score
143
Thanks, it looks like they have almost everything there, but the stuff they are missing I wonder if they didn't add it or if that client just wasn't coded for it. Here's a reference ASM snippet from the 99Lunia client where I pulled my format from (just some of the code, it branches out to other places as well):
Code:
00739C20                                 > \56            PUSH ESI
00739C21                                 .  8B7424 08     MOV ESI, DWORD PTR SS:[ESP+8]
00739C25                                 .  8B06          MOV EAX, DWORD PTR DS:[ESI]
00739C27                                 .  57            PUSH EDI
00739C28                                 .  6A 00         PUSH 0
00739C2A                                 .  6A 00         PUSH 0
00739C2C                                 .  8BF9          MOV EDI, ECX
00739C2E                                 .  68 98EACD00   PUSH LuniaCli.00CDEA98                                      ;  UNICODE "ServerInfo"
00739C33                                 .  8BCE          MOV ECX, ESI
00739C35                                 .  FF50 08       CALL NEAR DWORD PTR DS:[EAX+8]
00739C38                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739C3A                                 .  33C0          XOR EAX, EAX
00739C3C                                 .  8A47 04       MOV AL, BYTE PTR DS:[EDI+4]
00739C3F                                 .  8BCE          MOV ECX, ESI
00739C41                                 .  50            PUSH EAX
00739C42                                 .  68 8CEACD00   PUSH LuniaCli.00CDEA8C                                      ;  UNICODE "Code"
00739C47                                 .  FF52 4C       CALL NEAR DWORD PTR DS:[EDX+4C]
00739C4A                                 .  8B87 98000000 MOV EAX, DWORD PTR DS:[EDI+98]
00739C50                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739C52                                 .  50            PUSH EAX
00739C53                                 .  68 74EACD00   PUSH LuniaCli.00CDEA74                                      ;  UNICODE "PossibleAge"
00739C58                                 .  8BCE          MOV ECX, ESI
00739C5A                                 .  FF52 3C       CALL NEAR DWORD PTR DS:[EDX+3C]
00739C5D                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739C5F                                 .  8D47 08       LEA EAX, DWORD PTR DS:[EDI+8]
00739C62                                 .  50            PUSH EAX
00739C63                                 .  68 5C69C900   PUSH LuniaCli.00C9695C                                      ;  UNICODE "Id"
00739C68                                 .  8BCE          MOV ECX, ESI
00739C6A                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739C6D                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739C6F                                 .  8D47 24       LEA EAX, DWORD PTR DS:[EDI+24]
00739C72                                 .  50            PUSH EAX
00739C73                                 .  68 406CC900   PUSH LuniaCli.00C96C40                                      ;  UNICODE "Name"
00739C78                                 .  8BCE          MOV ECX, ESI
00739C7A                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739C7D                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739C7F                                 .  8D47 40       LEA EAX, DWORD PTR DS:[EDI+40]
00739C82                                 .  50            PUSH EAX
00739C83                                 .  68 F477C900   PUSH LuniaCli.00C977F4                                      ;  UNICODE "DisplayName"
00739C88                                 .  8BCE          MOV ECX, ESI
00739C8A                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739C8D                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739C8F                                 .  8D47 5C       LEA EAX, DWORD PTR DS:[EDI+5C]
00739C92                                 .  50            PUSH EAX
00739C93                                 .  68 54EACD00   PUSH LuniaCli.00CDEA54                                      ;  UNICODE "DisplayTooltip"
00739C98                                 .  8BCE          MOV ECX, ESI
00739C9A                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739C9D                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739C9F                                 .  8D47 78       LEA EAX, DWORD PTR DS:[EDI+78]
00739CA2                                 .  50            PUSH EAX
00739CA3                                 .  68 48EACD00   PUSH LuniaCli.00CDEA48                                      ;  UNICODE "Addr"
00739CA8                                 .  8BCE          MOV ECX, ESI
00739CAA                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739CAD                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739CAF                                 .  33C0          XOR EAX, EAX
00739CB1                                 .  66:8B87 94000>MOV AX, WORD PTR DS:[EDI+94]
00739CB8                                 .  8BCE          MOV ECX, ESI
00739CBA                                 .  50            PUSH EAX
00739CBB                                 .  68 20E1C800   PUSH LuniaCli.00C8E120                                      ;  UNICODE "Port"
00739CC0                                 .  FF52 44       CALL NEAR DWORD PTR DS:[EDX+44]
00739CC3                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739CC5                                 .  8D87 9C000000 LEA EAX, DWORD PTR DS:[EDI+9C]
00739CCB                                 .  50            PUSH EAX
00739CCC                                 .  68 28EACD00   PUSH LuniaCli.00CDEA28                                      ;  UNICODE "CashWebpageAddr"
00739CD1                                 .  8BCE          MOV ECX, ESI
00739CD3                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739CD6                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739CD8                                 .  8D87 B8000000 LEA EAX, DWORD PTR DS:[EDI+B8]
00739CDE                                 .  50            PUSH EAX
00739CDF                                 .  68 04EACD00   PUSH LuniaCli.00CDEA04                                      ;  UNICODE "GuildPvPInfoAddr"
00739CE4                                 .  8BCE          MOV ECX, ESI
00739CE6                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739CE9                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739CEB                                 .  8D87 D4000000 LEA EAX, DWORD PTR DS:[EDI+D4]
00739CF1                                 .  50            PUSH EAX
00739CF2                                 .  68 E8E9CD00   PUSH LuniaCli.00CDE9E8                                      ;  UNICODE "ShopInfoAddr"
00739CF7                                 .  8BCE          MOV ECX, ESI
00739CF9                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739CFC                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739CFE                                 .  8D87 F0000000 LEA EAX, DWORD PTR DS:[EDI+F0]
00739D04                                 .  50            PUSH EAX
00739D05                                 .  68 C8E9CD00   PUSH LuniaCli.00CDE9C8                                      ;  UNICODE "PartyServerAddr"
00739D0A                                 .  8BCE          MOV ECX, ESI
00739D0C                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739D0F                                 .  8B87 0C010000 MOV EAX, DWORD PTR DS:[EDI+10C]
00739D15                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739D17                                 .  50            PUSH EAX
00739D18                                 .  68 A8E9CD00   PUSH LuniaCli.00CDE9A8                                      ;  UNICODE "PartyServerPort"
00739D1D                                 .  8BCE          MOV ECX, ESI
00739D1F                                 .  FF52 3C       CALL NEAR DWORD PTR DS:[EDX+3C]
00739D22                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739D24                                 .  8D87 10010000 LEA EAX, DWORD PTR DS:[EDI+110]
00739D2A                                 .  50            PUSH EAX
00739D2B                                 .  68 84E9CD00   PUSH LuniaCli.00CDE984                                      ;  UNICODE "FamilyServerAddr"
00739D30                                 .  8BCE          MOV ECX, ESI
00739D32                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739D35                                 .  8B87 2C010000 MOV EAX, DWORD PTR DS:[EDI+12C]
00739D3B                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739D3D                                 .  50            PUSH EAX
00739D3E                                 .  68 60E9CD00   PUSH LuniaCli.00CDE960                                      ;  UNICODE "FamilyServerPort"
00739D43                                 .  8BCE          MOV ECX, ESI
00739D45                                 .  FF52 3C       CALL NEAR DWORD PTR DS:[EDX+3C]
00739D48                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739D4A                                 .  8D87 30010000 LEA EAX, DWORD PTR DS:[EDI+130]
00739D50                                 .  50            PUSH EAX
00739D51                                 .  68 40E9CD00   PUSH LuniaCli.00CDE940                                      ;  UNICODE "GuildServerAddr"
00739D56                                 .  8BCE          MOV ECX, ESI
00739D58                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739D5B                                 .  8B87 4C010000 MOV EAX, DWORD PTR DS:[EDI+14C]
00739D61                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739D63                                 .  50            PUSH EAX
00739D64                                 .  68 20E9CD00   PUSH LuniaCli.00CDE920                                      ;  UNICODE "GuildServerPort"
00739D69                                 .  8BCE          MOV ECX, ESI
00739D6B                                 .  FF52 3C       CALL NEAR DWORD PTR DS:[EDX+3C]
00739D6E                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739D70                                 .  8D87 6C010000 LEA EAX, DWORD PTR DS:[EDI+16C]
00739D76                                 .  50            PUSH EAX
00739D77                                 .  68 00E9CD00   PUSH LuniaCli.00CDE900                                      ;  UNICODE "GuildIconUpload"
00739D7C                                 .  8BCE          MOV ECX, ESI
00739D7E                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739D81                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739D83                                 .  8D87 50010000 LEA EAX, DWORD PTR DS:[EDI+150]
00739D89                                 .  50            PUSH EAX
00739D8A                                 .  68 E0E8CD00   PUSH LuniaCli.00CDE8E0                                      ;  UNICODE "GuildIconSource"
00739D8F                                 .  8BCE          MOV ECX, ESI
00739D91                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739D94                                 .  8D8F F8010000 LEA ECX, DWORD PTR DS:[EDI+1F8]
00739D9A                                 .  51            PUSH ECX                                                    ; /Arg2
00739D9B                                 .  68 C0E8CD00   PUSH LuniaCli.00CDE8C0                                      ; |Arg1 = 00CDE8C0
00739DA0                                 .  8BCE          MOV ECX, ESI                                                ; |
00739DA2                                 .  E8 091CE2FF   CALL LuniaCli.0055B9B0                                      ; \LuniaCli.0055B9B0
00739DA7                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739DA9                                 .  8D87 04020000 LEA EAX, DWORD PTR DS:[EDI+204]
00739DAF                                 .  50            PUSH EAX
00739DB0                                 .  68 90E8CD00   PUSH LuniaCli.00CDE890                                      ;  UNICODE "ChattingBlockUpdateUrl"
00739DB5                                 .  8BCE          MOV ECX, ESI
00739DB7                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739DBA                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739DBC                                 .  8D87 20020000 LEA EAX, DWORD PTR DS:[EDI+220]
00739DC2                                 .  50            PUSH EAX
00739DC3                                 .  68 64E8CD00   PUSH LuniaCli.00CDE864                                      ;  UNICODE "InGameNoticeUpdateUrl"
00739DC8                                 .  8BCE          MOV ECX, ESI
00739DCA                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739DCD                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739DCF                                 .  33C0          XOR EAX, EAX
00739DD1                                 .  8A87 3C020000 MOV AL, BYTE PTR DS:[EDI+23C]
00739DD7                                 .  8BCE          MOV ECX, ESI
00739DD9                                 .  50            PUSH EAX
00739DDA                                 .  68 44E8CD00   PUSH LuniaCli.00CDE844                                      ;  UNICODE "ServerEventType"
00739DDF                                 .  FF52 4C       CALL NEAR DWORD PTR DS:[EDX+4C]
00739DE2                                 .  8D8F 40020000 LEA ECX, DWORD PTR DS:[EDI+240]
00739DE8                                 .  51            PUSH ECX                                                    ; /Arg2
00739DE9                                 .  68 10E8CD00   PUSH LuniaCli.00CDE810                                      ; |Arg1 = 00CDE810
00739DEE                                 .  8BCE          MOV ECX, ESI                                                ; |
00739DF0                                 .  E8 FBC6FFFF   CALL LuniaCli.007364F0                                      ; \LuniaCli.007364F0
00739DF5                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739DF7                                 .  8D87 88010000 LEA EAX, DWORD PTR DS:[EDI+188]
00739DFD                                 .  50            PUSH EAX
00739DFE                                 .  68 F0E7CD00   PUSH LuniaCli.00CDE7F0                                      ;  UNICODE "PingProfileAddr"
00739E03                                 .  8BCE          MOV ECX, ESI
00739E05                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739E08                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739E0A                                 .  8D87 A4010000 LEA EAX, DWORD PTR DS:[EDI+1A4]
00739E10                                 .  50            PUSH EAX
00739E11                                 .  68 D0E7CD00   PUSH LuniaCli.00CDE7D0                                      ;  UNICODE "TingProfileAddr"
00739E16                                 .  8BCE          MOV ECX, ESI
00739E18                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739E1B                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739E1D                                 .  8D87 C0010000 LEA EAX, DWORD PTR DS:[EDI+1C0]
00739E23                                 .  50            PUSH EAX
00739E24                                 .  68 A4E7CD00   PUSH LuniaCli.00CDE7A4                                      ;  UNICODE "LowerFrameProfileAddr"
00739E29                                 .  8BCE          MOV ECX, ESI
00739E2B                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739E2E                                 .  8B16          MOV EDX, DWORD PTR DS:[ESI]
00739E30                                 .  81C7 DC010000 ADD EDI, 1DC
00739E36                                 .  57            PUSH EDI
00739E37                                 .  68 94E7CD00   PUSH LuniaCli.00CDE794                                      ;  UNICODE "DpsAddr"
00739E3C                                 .  8BCE          MOV ECX, ESI
00739E3E                                 .  FF52 0C       CALL NEAR DWORD PTR DS:[EDX+C]
00739E41                                 .  5F            POP EDI
00739E42                                 .  5E            POP ESI
00739E43                                 .  C2 0400       RETN 4

Anything you find in the client XML wise, should be client sided specific only. So the chat window stuff might just be the CEGUI settings, the files with various character names might actually be different login settings, and the TutorialCompleteTable might be the local file that determines if you are asked if you wish to start the tutorial on a character, or something like that.

I'm looking at the XML files that were generated and I see similar things with the names of my characters. I've not tried to set myself as Admin and login to see differences in GUIs and stuff, but that's on the todo list.

Do you have a link for that LanLunia client? I'd like to look through some of it's code. I saw a bunch of links on the "Lunia (CN) again" thread, but I'm not sure which one is which.
 
Newbie Spellweaver
Joined
Oct 22, 2008
Messages
75
Reaction score
143
Thanks, I got it and saw your earlier post. :) Their client is only like 4kb or so different than the 99Lunia, so they are pretty close to being the same I think. I've not looked through it much yet, but it seems they use the same connectinfo, they just didn't do the whole format (maybe the other stuff I have doesn't matter, but it's still there). For the other older and newer clients, the fields of the binary data would definitely make a difference. I'm still learning the system to see how the XML is parsed compared to the binary.

In other news, I started looking at an alternative to a web shop. They have so much code that I don't think it's worth trying to modify to fix it. Instead, I think a new cash shop could be developed. This is what I had in mind and am playing with right now:

Rather than use ASP(Classic), use PHP. While IIS supports PHP fine, since Lunia requires a Windows server, a portable web server could be used instead (at least for development, integrating into IIS can come later). Right now, I am using on my desktop while the server runs in a VM. As long as the two computers are on the same network so they can see each other, the idea works.

The PHP extension is no longer support in the latest PHP versions, so another driver has to be used. MS came up with driver to replace it. It's a little annoying to get setup at first, but it's actually really nice and easy to use.

Basically, the "g/encrypt.asp" page would be kept to decode the string from the client. Rather than it forwarding to another ASP page, it forwards to the PHP page instead. This is really easy to do, since it's just a matter of changing the URL. An example of what would result looks like this (I took out the extra stuff I don't use yet):
Code:
<%	Option Explicit %>
<!--#include virtual="/lib/include/function.asp"-->
<!--#include virtual="/lib/include/error.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<%
	Dim plainText, encText
    Dim strAccountName, strPassword

	encText = Request.QueryString
	plainText = Decrypt(encText)
	
	On Error Resume Next
	strAccountName	= Split(Split(plainText,"&")(0),"=")(1)
	strPassword		= Split(Split(plainText,"&")(1),"=")(1)
	If Err.number>0 Then
	End If
	On Error Goto 0
	
	Function Decrypt(encText)
		Dim oEnc,password
		password = "Wonder Girls"
		set oEnc = Server.CreateObject("DynuEncrypt.Functions")		
		
		Decrypt = oEnc.Decrypt(encText,password)
		
		set oEnc = Nothing		
	End Function
%>

<body  style="margin:0px;" onload="frm_login.submit();">
<form id="frm_login" name="frm_login" method="post" action="http://192.168.1.112:85/lunia/shop/login.php">
<input type="hidden" name="account" value="<%=strAccountName %>" />
<input type="hidden" name="password" value="<%=strPassword %>" />
<input type="hidden" name="auth" value="123456" />
</form>
</body>
</html>

So now comes the question of what to do once you have that login information. Basically, the same thing you would do with any login system. First, check the database to make sure it's valid. If it isn't return an error and exit out. If it is valid, you can then go to query the information about the user. In this case, the Billing database contains the nCash that is used in the CashPoints table. There's a handy SP called Public_Get_Money that returns the current user's cash. Likewise, there are also other SPs for adding, rolling back, etc.. that can be used.

Given that you can easily interface with the database from PHP using the sqlsvr driver and given how many SPs there are in the various databases, reconstructing a web shop from the ground up seems very doable, although still a lot of work.

For example, this is a new login.php that the encrypt.asp redirects to:
Code:
<?php
	session_start();

	$account = $_REQUEST['account'];
	$password = $_REQUEST['password'];
	$sid = session_id();

	// Data verification
	if( preg_replace('/[a-zA-Z0-9]/', '', $account ) )
	{
		die( "Invalid characters were detected in the account name." );
	}
	if( preg_replace('/[a-zA-Z0-9]/', '', $password ) )
	{
		die( "Invalid characters were detected in the password." );
	}

	// Connect using SQL Server Authentication.
	$v3_character = sqlsrv_connect( "Lunia\\Lunia", array( "UID"=>"sa", "PWD"=>"123456", "Database"=>"v3_character" ) );
	if( $v3_character === false )
	{
		 die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}

	$tsql = "SELECT * FROM Accounts WHERE accountName=? AND password=?";
	$params = array( $account, $password );
	$Accounts = sqlsrv_query( $v3_character, $tsql, $params );
	if( $Accounts === false )
	{
		sqlsrv_free_stmt( $Accounts );
		sqlsrv_close( $v3_character );
		die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}

	if( !( $row = sqlsrv_fetch_array( $Accounts, SQLSRV_FETCH_ASSOC ) ) )
	{
		// TODO: Log this and ban access to prevent exploitation
		echo( "The account/password are incorrect." );
		sqlsrv_free_stmt( $Accounts );
		sqlsrv_close( $Accounts );
		return;
	}
	sqlsrv_free_stmt( $Accounts );

	// TODO: Debugging information
	//print_r( $row );
	//print( "<br /><br />" );
	
	// Connect using SQL Server Authentication.
	$Billing = sqlsrv_connect( "Lunia\\Lunia", array( "UID"=>"sa", "PWD"=>"123456", "Database"=>"Billing" ) );
	if( $Billing === false )
	{
		sqlsrv_close( $v3_character );
		die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}

	$tsql = "SELECT * FROM CashPoints WHERE UserID=?";
	$params = array( $account );
	$CashPoints = sqlsrv_query( $Billing, $tsql, $params );
	if( $CashPoints === false )
	{
		sqlsrv_close( $v3_character );
		sqlsrv_close( $Billing );
		die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}

	if( !( $row = sqlsrv_fetch_array( $CashPoints, SQLSRV_FETCH_ASSOC ) ) )
	{
		sqlsrv_free_stmt( $CashPoints );
		echo( "The account does not exist in the CashPoints table." );
		sqlsrv_close( $v3_character );
		sqlsrv_close( $Billing );
		return;
	}
	sqlsrv_free_stmt( $CashPoints );

	$oid = $row["oidUser"];

	// TODO: Debugging information
	//print_r( $row );
	//print( "<br /><br />" );

	$frk_n4ErrorCode = 0;
	$frk_strErrorText = "";
	$frk_isRequiresNewTransaction = 1;
	$strUserID = $account;
	$nCash = 0;

	$tsql = "{call Public_Get_Money(?, ?, ?, ?, ?)}";
	$params = array
	(
		array( $frk_n4ErrorCode, SQLSRV_PARAM_OUT ),
		array( $frk_strErrorText, SQLSRV_PARAM_OUT ),
		array( $frk_isRequiresNewTransaction, SQLSRV_PARAM_IN ),
		array( $strUserID, SQLSRV_PARAM_IN ),
		array( $nCash, SQLSRV_PARAM_OUT )
    );
	$Public_Get_Money = sqlsrv_query( $Billing, $tsql, $params );
	if( $Public_Get_Money === false )
	{
		sqlsrv_close( $v3_character );
		sqlsrv_close( $Billing );
		die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}
	sqlsrv_free_stmt( $Public_Get_Money );

	if( $frk_n4ErrorCode != 0 )
	{
		// TODO: Debugging information
		echo( "frk_n4ErrorCode = $frk_n4ErrorCode" . "<br />" );
		echo( "frk_strErrorText = $frk_strErrorText" . "<br />" );
		return;
	}

	// TODO: At this point, store data into a table to check
	// for auth against session_id() on the other pages. Typical web security
	// stuff comes into play here. For now, we will just store into only the 
	// session variables.
	$_SESSION["account"] = $account;
	$_SESSION["password"] = $password;
	$_SESSION["oid"] = $oid;
	$_SESSION["sid"] = $sid;

	sqlsrv_close( $v3_character );
	sqlsrv_close( $Billing );
?>
<html>
<head>
<title>PHP Web Shop Demo - login</title>
</head>
<body>
<p>You have <?php echo( $nCash ); ?> nCash!</p>
<br />
<form name="input" action="ncash.php" method="post">
Add nCash: <input type="text" name="cash_amount" />
<input type="submit" value="Submit" />
</form>
<br />
<form name="input" action="item.php" method="post">
Add Item: <input type="text" name="item_oid" />
<input type="submit" value="Submit" />
</form>
</body>
</html>

When you start the web shop from the client, it will display how much nCash you have and let you add more. The ncash.php file looks like this:
Code:
<?php
	session_start();

	if( session_id() != $_SESSION["sid"] )
	{
		die( "Your session has expired. Please login again." );
	}

	$cash_amount = $_REQUEST["cash_amount"];
	if( $cash_amount <= 0 || $cash_amount > 1000 )
	{
		die( "An invalid cash_amount has been detected. Please select a value between [1, 1000]." );
	}
	
	// Connect using SQL Server Authentication.
	$Billing = sqlsrv_connect( "Lunia\\Lunia", array( "UID"=>"sa", "PWD"=>"123456", "Database"=>"Billing" ) );
	if( $Billing === false )
	{
		die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}

	$frk_n4ErrorCode = 0;
	$frk_strErrorText = "";
	$frk_isRequiresNewTransaction = 1;
	$oidUser = $_SESSION["oid"];
	$strUserID = $_SESSION["account"];
	$nPoint = $cash_amount;

	$tsql = "{call Public_Add_Money(?, ?, ?, ?, ?, ?)}";
	$params = array
	(
		array( $frk_n4ErrorCode, SQLSRV_PARAM_OUT ),
		array( $frk_strErrorText, SQLSRV_PARAM_OUT ),
		array( $frk_isRequiresNewTransaction, SQLSRV_PARAM_IN ),
		array( $oidUser, SQLSRV_PARAM_IN ),
		array( $strUserID, SQLSRV_PARAM_IN ),
		array( $nPoint, SQLSRV_PARAM_IN )
    );
	$Public_Add_Money = sqlsrv_query( $Billing, $tsql, $params );
	if( $Public_Add_Money === false )
	{
		sqlsrv_close( $Billing );
		die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}
	sqlsrv_free_stmt( $Public_Add_Money );

	if( $frk_n4ErrorCode != 0 )
	{
		// TODO: Debugging information
		echo( "frk_n4ErrorCode = $frk_n4ErrorCode" . "<br />" );
		echo( "frk_strErrorText = $frk_strErrorText" . "<br />" );
		return;
	}

	$frk_n4ErrorCode = 0;
	$frk_strErrorText = "";
	$frk_isRequiresNewTransaction = 1;
	$strUserID = $_SESSION["account"];
	$nCash = 0;

	$tsql = "{call Public_Get_Money(?, ?, ?, ?, ?)}";
	$params = array
	(
		array( $frk_n4ErrorCode, SQLSRV_PARAM_OUT ),
		array( $frk_strErrorText, SQLSRV_PARAM_OUT ),
		array( $frk_isRequiresNewTransaction, SQLSRV_PARAM_IN ),
		array( $strUserID, SQLSRV_PARAM_IN ),
		array( $nCash, SQLSRV_PARAM_OUT )
    );
	$Public_Get_Money = sqlsrv_query( $Billing, $tsql, $params );
	if( $Public_Get_Money === false )
	{
		sqlsrv_close( $Billing );
		die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}
	sqlsrv_free_stmt( $Public_Get_Money );

	if( $frk_n4ErrorCode != 0 )
	{
		// TODO: Debugging information
		echo( "frk_n4ErrorCode = $frk_n4ErrorCode" . "<br />" );
		echo( "frk_strErrorText = $frk_strErrorText" . "<br />" );
		return;
	}

	sqlsrv_close( $Billing );
?>
<html>
<head>
<title>PHP Web Shop Demo - ncash</title>
</head>
<body>
<p>You have <?php echo( $nCash ); ?> nCash!</p>
<br />
<form name="input" action="ncash.php" method="post">
Add nCash: <input type="text" name="cash_amount" />
<input type="submit" value="Submit" />
</form>
<br />
<form name="input" action="item.php" method="post">
Add Item: <input type="text" name="item_oid" />
<input type="submit" value="Submit" />
</form>
</body>
</html>

After you click the button to add the nCash, the ncash.php goes through the steps needed to call the appropriate SP in the database and then gets the result. I tested it out and it works great! For additional testing, I added items from the shop as well. This is what item.php looks like:
Code:
<?php
	session_start();

	if( session_id() != $_SESSION["sid"] )
	{
		die( "Your session has expired. Please login again." );
	}
	
	if( !isset( $_REQUEST["item_oid"] ) )
	{
		die( "No item_oid used." );
	}
	$item_oid = $_REQUEST["item_oid"];
	
	// Connect using SQL Server Authentication.
	$d_shop = sqlsrv_connect( "Lunia\\Lunia", array( "UID"=>"sa", "PWD"=>"123456", "Database"=>"d-shop" ) );
	if( $d_shop === false )
	{
		die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}
	
	$frk_n4ErrorCode = 0;
	$frk_strErrorText = "";
	$frk_isRequiresNewTransaction = 1;
	$oidUser = $_SESSION["oid"];
	$strUserID = $_SESSION["account"];
	$now = getdate();
	$TID = $now["year"] . $now["mon"] . $now["mday"] . $now["hours"] . $now["minutes"] . $now["seconds"] . "_" . $strUserID . "_" . md5(session_id());
	$TID = substr($TID , 0, 64);
	$nOrderMethod = 1; // Order from webshop
	$oidProduct = $item_oid;
	$nOrderQuantity = 1;
	$oidCoupon_User = NULL;
	$oidOrder = 0;

	$tsql = "{call public_Order_PurchaseProduct_v2(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}";
	$params = array
	(
		array( $frk_n4ErrorCode, SQLSRV_PARAM_OUT ),
		array( $frk_strErrorText, SQLSRV_PARAM_OUT ),
		array( $frk_isRequiresNewTransaction, SQLSRV_PARAM_IN ),
		array( $oidUser, SQLSRV_PARAM_IN ),
		array( $strUserID, SQLSRV_PARAM_IN ),
		array( $TID, SQLSRV_PARAM_IN ),
		array( $nOrderMethod, SQLSRV_PARAM_IN ),
		array( $oidProduct, SQLSRV_PARAM_IN ),
		array( $nOrderQuantity, SQLSRV_PARAM_IN ),
		array( $oidCoupon_User, SQLSRV_PARAM_IN ),
		array( $oidOrder, SQLSRV_PARAM_OUT )
    );
	$public_Order_PurchaseProduct_v2 = sqlsrv_query( $d_shop, $tsql, $params );
	if( $public_Order_PurchaseProduct_v2 === false )
	{
		echo( "frk_n4ErrorCode = $frk_n4ErrorCode" . "<br />" );
		echo( "frk_strErrorText = $frk_strErrorText" . "<br />" );
		sqlsrv_close( $d_shop );
		die( print_r( sqlsrv_errors(), true ) ); // TODO: In release mode, don't show this error
	}
	sqlsrv_free_stmt( $public_Order_PurchaseProduct_v2 );

	if( $frk_n4ErrorCode != 0 )
	{
		// TODO: Debugging information
		echo( "frk_n4ErrorCode = $frk_n4ErrorCode" . "<br />" );
		echo( "frk_strErrorText = $frk_strErrorText" . "<br />" );
		return;
	}

	sqlsrv_close( $d_shop );
?>
<html>
<head>
<title>PHP Web Shop Demo - item</title>
</head>
<body>
<p><?php echo( "Your order has been completed (#$oidOrder)!"); ?></p>
<br />
<form name="input" action="ncash.php" method="post">
Add nCash: <input type="text" name="cash_amount" />
<input type="submit" value="Submit" />
</form>
<br />
<form name="input" action="item.php" method="post">
Add Item: <input type="text" name="item_oid" />
<input type="submit" value="Submit" />
</form>
</html>

And here's a slime character with some stuff (bags + skin + random stuff I can't use)


To make a more functional web shop, a library of common functionality would need to be made first to cut down on the code and possible errors. More extensive and useful error handling and logging is important to help debug as development went along. Right now, the way my PHP is setup is really annoying since I don't know the errors, I only get http 500 errors. Finally, the web shop itself can be implemented using a lot of the existing functionality. For this, depending on how fancy people want to get, a simple multi-page system can be setup or a full fledged database driven system could be used.

The biggest obstacle at the moment seem to be working out how the current item shop works. I've been digging through it a while tonight and have a decent idea of how it works, but there's going to be a lot of little issues that have to be taken care of.

And on that note, here's how to get the admin system working for the shop:
1. Open "ewcfg8.asp" and go to around line 79. You should see a line that says:
Code:
EW_DB_CONNECTION_STRING = "Provider=SQLNCLI;Persist Security Info=False;Data Source=IBM-9598140AB99\SQLEXPRESS;Initial Catalog=d-shop;User Id=sa;Password=12345"

2. Replace that with the following (modify the params to your settings):
Code:
EW_DB_CONNECTION_STRING = "Provider=SQLOLEDB;Data Source=lunia\lunia;Initial Catalog=d-shop;user ID=sa;password=123456;"

3. Go to line 12 of the same file, you should see:
Code:
EW_LANGUAGE_FILE(0) = Array("ch", "", "ew.xml")

4. Replace "ew.xml" with "english.xml".

5. Log in using user: "bkitty" and pass: "bkitty12" (without quotes). The login address is simply the admin folder, so for me "http://192.168.1.148/admin".

You should see something like this:
Omikron - Lunia Files - RaGEZONE Forums


It's a really messy site, but from here you can start to manage the cash shop stuff. I'm looking into why the gold is not updating correctly after a purchase, but it seems purchasing does work so far. I just bought a pet dragon with the gold I set from my earlier examples and some other random stuff.

So that's just some more information maybe others can start working with. There's a ton of items in the web shop that need to be translated and a lot of tables need to be cleaned up still. Also, when you have a web shop item in the GUI in game, it's not translated correctly, but as soon as you move it to your inventory, it is. Maybe someone knows why that is?
 
Newbie Spellweaver
Joined
Aug 4, 2011
Messages
11
Reaction score
0
I'm really glad to see that somebody's working hard on Lunia.
It's been awhile since I've seen actual quality work.
 
Junior Spellweaver
Joined
May 14, 2008
Messages
161
Reaction score
66
;o; Are you planning to host your own server, pushedx? :] You seem to know what you are doing very well

*wooo I got a new name tag :D
 
Junior Spellweaver
Joined
Sep 21, 2008
Messages
103
Reaction score
26
Great progress. I would've loved to reply on stuff, but there was a flame war.
It seems like you've made a lot of progress. Good job. :)
 
Junior Spellweaver
Joined
May 26, 2005
Messages
101
Reaction score
6
sage, can you help me with the 'Unknown log-in error' problem? (IIS7)
 
Newbie Spellweaver
Joined
Oct 22, 2008
Messages
75
Reaction score
143
The question asked was about a "HTTP/1.1 400 Bad Request" with the url: "http://192.168.0.254/v4/lobby/Auth_Publisher.asp?...".

The problem is as follows:
- Lunia was written using ASP classic and IIS 5 (or lower).
- By default, those versions of IIS allow control characters (0x01..0x1D, other higher ranges) to be embedded into URL query strings.
- Lunia uses \b for a delimiter and \v as a sub-delimiter (configurable via the ASP pages, hard coded into the exes).
- In modern versions of IIS, these characters are not allowed.

Actually solving the problem remains a mystery still to me. In the other Lunia release, there was a reg file that works on IIS6 and Server 2003:
CtrlUrl.reg
Code:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters]
"DisableServerHeader"=dword:00000001
"AllowUnEscapedRestrictedChars"=dword:00000001
"AllowWeakHeaderValueSyntax"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\SslBindingInfo]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\UrlAclInfo]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\Synchronize]

After you merge it with your registry, you must restart your server completely. After you fix the ASP settings to allow parent paths, register the two web dlls, the server files work pretty easily in that environment.

For IIS7+ and Windows Vista+ (Vista, 7, Svr 2008), the registry keys seem different. For example, here are some links related to the issue:






I ended up having a lot of troubles actually getting the problem fixed on Win7 x64 and IIS 7.5. I tried a whole bunch of things that didn't work, then finally managed to get it work. Since I had tried so much though, I have no idea what exact settings or configurations are needed to fix it. As a result I have to go through and revert all changes and start over again to come up with the correct solution.

I'm still working through finding the settings and whatnot, but when I do, I'll post a more precise method for getting the problem fixed. The key thing though is you have to restart your PC, a lot of links say you need to only restart IIS, but I found that to not be the case.
 
Junior Spellweaver
Joined
May 26, 2005
Messages
101
Reaction score
6
The key thing though is you have to restart your PC, a lot of links say you need to only restart IIS, but I found that to not be the case.
This is very true... now the lobby server problem fixed, but another problem arised, after i create a char, i can't go further :(
PHP:
[Error]      Http response : http://127.0.0.1/v4/lobby/SelectCharacter
.asp?testTest
HTTP/1.1 601
The custom error module does not recognize this error.

and if i test via browser the above link: ERROR NUMBER :1

Edited: SECOND server RESTART make it WORKING completely :D

Edited 2: Item Store Error
PHP:
Microsoft VBScript runtime error '800a01ad'

ActiveX component can't create object

/g/encrypt.asp, line 28
Line 28: set oEnc = Server.CreateObject("DynuEncrypt.Functions")

I did registered it (DynuEncrypt.dll and TextCipher.dll) fyi...


Thank you pushedx
 
Last edited:
Banned
Banned
Joined
Sep 6, 2007
Messages
834
Reaction score
167
This is very true... now the lobby server problem fixed, but another problem arised, after i create a char, i can't go further :(
PHP:
[Error]      Http response : http://127.0.0.1/v4/lobby/SelectCharacter
.asp?testTest
HTTP/1.1 601
The custom error module does not recognize this error.
and if i test via browser the above link: ERROR NUMBER :1

Edited: SECOND server RESTART make it WORKING completely :D

Edited 2: Item Store Error
PHP:
Microsoft VBScript runtime error '800a01ad'

ActiveX component can't create object

/g/encrypt.asp, line 28
Line 28: set oEnc = Server.CreateObject("DynuEncrypt.Functions")

I did registered it (DynuEncrypt.dll and TextCipher.dll) fyi...


Thank you pushedx

You will need recode the shop to make it working :)

---------- Post added at 12:44 AM ---------- Previous post was at 12:28 AM ----------

Ok, let me share a working and secure shop.

The login post are fully recoded, i need share too the new procedure to their database, but i dont have access to mssql now, when disponible i will provite the newster procedure.
 
Newbie Spellweaver
Joined
Oct 22, 2008
Messages
75
Reaction score
143
Edited 2: Item Store Error
PHP:
Microsoft VBScript runtime error '800a01ad'

ActiveX component can't create object

/g/encrypt.asp, line 28
Line 28: set oEnc = Server.CreateObject("DynuEncrypt.Functions")

I did registered it (DynuEncrypt.dll and TextCipher.dll) fyi...

This is most likely caused by the AppPool settings you are using.

You need to use the "Classic .NET AppPool" with the site. If you created a new site or are using the Default site, you need to change it to that pool.

Once you have changed it to that pool, you nee to configure it. Go to advanced settings for the Classic .NET AppPool and:
-- enable 32-bit applications
-- change .NET Framework version to "No Managed Code"
-- make sure managed Pipeline Mode is Classic

Then you need to restart and try it again. I think that should fix that issue if you have already registered the DLLs.
 
Junior Spellweaver
Joined
Sep 21, 2008
Messages
103
Reaction score
26
@pushedx Do you perhaps know the version of this? I might be able to get more recent files.
 
Custom Title Activated
Loyal Member
Joined
Dec 20, 2005
Messages
2,046
Reaction score
117
lunia server looks great but may i ask a few questions about it?
how much Memory(Ram) I need to run it? pluses do I need MSSQL or MYSQL? please write a short guide it should helps us.. i read page 1-6 still don't know to how get this server up lol
 
Newbie Spellweaver
Joined
Oct 22, 2008
Messages
75
Reaction score
143
I've noticed one issue so far that I've not been able to work out: money doesn't drop!

I played the main English Lunia and coins drop every couple of monsters but in these files it doesn't. Items seem to drop fine, but it's only the money that doesn't. Does anyone know anything about this?
 
Junior Spellweaver
Joined
Sep 21, 2008
Messages
103
Reaction score
26
I don't think money actually dropped. Only items. I can't remember how you get money though, perhaps automatically distributed. Try translating text from system message. I'm pretty sure money never dropped, only items.
 
Status
Not open for further replies.
Back
Top