Frodo is being rewritten from scratch and is now named Rice.
http://u.rtag.me/p/rice320.png
It is available on GitHub.
https://github.com/amPerl/RiceEmu
Printable View
Frodo is being rewritten from scratch and is now named Rice.
http://u.rtag.me/p/rice320.png
It is available on GitHub.
https://github.com/amPerl/RiceEmu
That just looks amazing. This going to be used for Enigma?
Yep. Cosmos and I started work on it again after we found out DC US was gonna close.
It's not much: auth, lobby, char creation/delete and you can see other players ingame most of the time*.
* - we don't know why yet, we're working on it
I'll post major updates in this thread, but every commit on the git repo is visible on my page as soon as it goes live.
Goodjob guys , look really nice.
Yes, very good..
Amazing development !
Really n1 work.
I hope you make bravely continued, so it can finally give proper server soon.
Don't give up please. :thumbup:
Faithfully yours Nicky
Hey Good Working pleas share me serverfiles :)
Sexy.
thats AMAZING!
Some one to reupload the files from server, so i can start to develop in my own way. I don't need the databases because I can create them by extracting the procedures from inside of the binaries. Thank you.
So hey, DC US is reported to be closing again. Frodo's back in development.
Strobots, when will ec back? ;D
~~firm
This is the kind of project I would like to see open source, for the best of all community :):
no announce of a close? but its cool that enigma comes finally back :)
Definitely worth an open-source, many people won't start from scratch. And 2 Developers are way not enough to keep it up for a long time..
Any news?
Well, I am still trying to unpack the latest DC USA client and run it with ollydbg. as soon as I achieve that I'll let you guys know... Regarding news from Frodo, I don't have any sorry
so savetherobots is not using the old server files why not share to community?
The old server files aren't for me to share. They're Cosmos's.
Frodo is being rewritten from scratch and is now named Rice.
It is available on GitHub.
https://github.com/amPerl/RiceEmu
- - - Updated - - -
Updated, now goes to character select.
Currently using a predefined set of characters, no database interaction yet. (not a priority)
- - - Updated - - -
Update:
Character / Vehicle / Crew info is still hardcoded, but you can now go in-game.
Oh, you are back... Waiting for server.. !! :D
was it supposed to react like this?Quote:
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
The thread 0x588 has exited with code 259 (0x103).
A first chance exception of type 'System.IO.IOException' occurred in mscorlib.dll
The program '[3560] Rice.vshost.exe: Program Trace' has exited with code 0 (0x0).
The program '[3560] Rice.vshost.exe' has exited with code -55 (0xffffffc9).
I went through the log-in screen and typed a random user, pass (e.g: admin, admin), then it was processing and Rice crashed. Server_Log below:
Quote:
[30/04/2014 21:11:48] Loading config.
[30/04/2014 21:11:48] Initializing RiceServer.
[30/04/2014 21:11:48] Added parser for packet 7 on 11005.
[30/04/2014 21:11:48] Added parser for packet 7 on 11011.
[30/04/2014 21:11:48] Added parser for packet 7 on 11021.
[30/04/2014 21:11:48] Added parser for packet 7 on 11031.
[30/04/2014 21:11:48] Added parser for packet 540 on 11031.
[30/04/2014 21:11:48] Added parser for packet 20 on 11005.
[30/04/2014 21:11:48] Added parser for packet 123 on 11021.
[30/04/2014 21:11:48] Added parser for packet 120 on 11021.
[30/04/2014 21:11:48] Added parser for packet 125 on 11021.
[30/04/2014 21:11:48] Added parser for packet 782 on 11021.
[30/04/2014 21:11:48] Added parser for packet 60 on 11011.
[30/04/2014 21:11:48] Added parser for packet 80 on 11011.
[30/04/2014 21:11:48] Added parser for packet 82 on 11011.
[30/04/2014 21:11:48] Added parser for packet 50 on 11011.
[30/04/2014 21:11:48] Added parser for packet 41 on 11011.
[30/04/2014 21:11:48] Starting RiceServer.
[30/04/2014 21:11:48] Started listening on 11005
[30/04/2014 21:11:48] Started listening on 11011
[30/04/2014 21:11:48] Started listening on 11021
[30/04/2014 21:11:48] Started listening on 11031
[30/04/2014 21:11:48] Started listening on 11041
[30/04/2014 21:12:47] Accepted client from 127.0.0.1:11905 on 11005
[30/04/2014 21:12:47] Killing off client 127.0.0.1:11905.
did it, you can see Log.cs here , don't know if I did it right tho. In login I get now "The client version is not up to date"Quote:
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\Users\Aviv.A\Desktop\Desktop\RiceEmu-master\Rice\bin\Debug\Rice.vshost.exe'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
The thread 0x1e6c has exited with code 259 (0x103).
The thread 0x13fc has exited with code 259 (0x103).
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\Users\Aviv.A\Desktop\Desktop\RiceEmu-master\Rice\bin\Debug\Rice.exe'. Symbols loaded.
'Rice.vshost.exe' (CLR v4.0.30319: Rice.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
The thread 0x7f0 has exited with code 259 (0x103).
The program '[6248] Rice.vshost.exe: Program Trace' has exited with code 0 (0x0).
The program '[6248] Rice.vshost.exe' has exited with code -55 (0xffffffc9).
and then Rice crashes. picture: http://i.imgur.com/yiD86mw.png
Yeah, and suddenly everything worked hahahah.
Go download the updated version guys. :)
Need a hand with something? Feel free to contact me.
Also:
If anyone needs a dedicated server for a test server or anything, give me a PM.
I talked with Romet / Savetherobots via skype and we walked it through :) so thanks. and btw. you are 2 kind, you got 2 many moniez to give dedis/vps for free ? haha, not that I need one. I manage an hosting company :>
When you guys want to open the server again?
I've got a few servers that are in stock and doing nothing.
managed to get ingame the server works and u can drive around!
waiting for the next updates :3
A friendly reminder that you all shouldn't expect me to work on it all the time. (even though I will push the odd update)
It was open sourced for a reason: to get people collaborating.
interesting,
So because savetherobots has not much time I'll try to help him with this :).
My fork:
https://github.com/exmex/RiceEmu
Figured the Chat structure out :):
Spoiler:
Shop structure :):
Spoiler:
Added chat, debug user
https://github.com/amPerl/RiceEmu/co...fb39db2256d1c7
Loading char info from db
https://github.com/amPerl/RiceEmu/co...26c495975b57a1
- - - Updated - - -
Added debug packet names
https://github.com/amPerl/RiceEmu/co...5ffa6f3781e265
http://u.rtag.me/p/Uwz4lv.png
Added DB dump, fixed some types
https://github.com/amPerl/RiceEmu/co...5ffa6f3781e265
what version of client being used?
I was looking at your code and a few things came up to me.
- Why are you using 4 if's if you can make it a switch? Would also save you the trouble to lowercase it.
- I'm not sure what channel means, but if possible you could use an enum. Avoid using magic numbers/strings
Because it was only a test. Before you can properly code you'll need to get the packet structure. I don't have a packet logger so I need to play around with things.. There is no proper code in the picture because the packet structure / variable types are unknown to me.
Anybody knows if this decryption method works with current client of drift city?
I asked that because of packet sniffing. I noticed the emulator is not very much completed, and if I can't sniff the official client for packets I couldnt do anything
To bad , this seems dead :)
Yes, still no notice about this encryption method.. not much for us to collaborate without it I suppose
Even though it shows that the server is running I can't connect (Login)
http://oi61.tinypic.com/zjdtw3.jpg
Servers stays offline , DB exists > db info correct > etc... any help?
I'm no expert of DC servers but I do know a few things that might help you out.
If you're trying to login on the same machine you're running the server, try to login with the IP of 127.0.0.1 or localhost.
If you're trying to login from a different machine, use the correct IP and open the right ports (or set it to DMZ host) on the host machine.
If both machines are connected to the same router, try login to the LAN IP of the machine within the network (e.g. 192.xxx.xxx.xxx/10.0.0.xx).
As of a week or so ago, RiceEmu on GitHub is only there to provide a base for the RZ community for Drift City emulator development. The open-source version is no longer being actively developed. I will be accepting any (reasonable) pull requests RZ users submit, but you're better off making a fork of the project.
EDIT: Made a price table on the shop structure i know its a bunch of ifs and else ifs but its just a test code!
Shop.cs (thx to GigaToni who made the original structure)
and it workedQuote:
using System;
using Rice.Server.Structures;
using System.Data.Common;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Rice.Server.Core;
namespace Rice.Server.Packets.Game
{
public static class Shop
{
[RicePacket(405, RiceServer.ServerType.Game)]
public static void BuyItem(RicePacket packet)
{
// 0 = Item ID
// 1 = Dont have any Idea
// 2 = Quantity
int itemID = packet.Reader.ReadInt16();
int unknown = packet.Reader.ReadInt16();
int quantity = packet.Reader.ReadInt16();
int price = 400;
Log.WriteLine ("{0} {1} {2}", itemID, unknown, quantity);
// 0 = Item ID
// 1 = Dont have any idea
// 2 = Qauntity
//Price Table With Item ID
if (itemID == 0)
price = 250;
else if (itemID == 5)
price = 400;
else if (itemID == 10)
price = 1050;
else if (itemID == 15)
price = 2000;
else if (itemID == 20)
price = 3250;
else if (itemID == 25)
price = 250;
else if (itemID == 30)
price = 400;
else if (itemID == 35)
price = 1050;
else if (itemID == 40)
price = 2000;
else if (itemID == 45)
price = 3250;
else if (itemID == 50)
price = 250;
else if (itemID == 55)
price = 400;
else if (itemID == 60)
price = 1050;
else if (itemID == 65)
price = 2000;
else if (itemID == 70)
price = 3250;
else if (itemID == 75)
price = 250;
else if (itemID == 80)
price = 400;
else if (itemID == 85)
price = 1050;
else if (itemID == 90)
price = 2000;
else if (itemID == 95)
price = 3250;
else if (itemID == 1445)
price = 5000 * quantity;
else if (itemID == 1488)
price = 50 * quantity;
else if (itemID == 1502)
price = 200 * quantity;
else if (itemID == 1503)
price = 1000 * quantity;
else if (itemID == 1504)
price = 30000 * quantity;
else if (itemID == 1516)
price = 5000 * quantity;
else if (itemID == 1554)
price = 100 * quantity;
else if (itemID == 1561)
price = 1000 * quantity;
else if (itemID == 1568)
price = 500 * quantity;
else if (itemID == 1569)
price = 1000 * quantity;
else if (itemID == 1570)
price = 2000 * quantity;
else if (itemID == 1665)
price = 1000 * quantity;
else if (itemID == 1666)
price = 1000 * quantity;
else if (itemID == 1667)
price = 1000 * quantity;
else if (itemID == 1818)
price = 3000 * quantity;
else if (itemID == 1874)
price = 49000 * quantity;
else if (itemID == 1875)
price = 63000 * quantity;
else if (itemID == 1876)
price = 98000 * quantity;
else if (itemID == 1877)
price = 196000 * quantity;
else if (itemID == 2546)
price = 4000 * quantity;
else if (itemID == 2547)
price = 6000 * quantity;
else if (itemID == 2548)
price = 7000 * quantity;
else if (itemID == 1979)
price = 1200 * quantity;
else if (itemID == 1980)
price = 700 * quantity;
else if (itemID == 1981)
price = 2000 * quantity;
else if (itemID == 1982)
price = 100 * quantity;
else if (itemID == 2032)
price = 1000 * quantity;
else if (itemID == 1989)
price = 10000 * quantity;
else if (itemID == 2013)
price = 15000 * quantity;
else if (itemID == 2014)
price = 15000 * quantity;
else if (itemID == 2015)
price = 15000 * quantity;
else if (itemID == 2034)
price = 10000 * quantity;
else if (itemID == 2068)
price = 5000 * quantity;
else if (itemID == 2069)
price = 7000 * quantity;
else if (itemID == 2070)
price = 10000 * quantity;
else if (itemID == 2700)
price = 10000 * quantity;
else if (itemID == 2708)
price = 10000 * quantity;
else if (itemID == 2709)
price = 10000 * quantity;
else if (itemID == 2003)
price = 10000 * quantity;
else if (itemID == 2004)
price = 12000 * quantity;
else if (itemID == 2005)
price = 15000 * quantity;
else if (itemID == 2031)
price = 12000 * quantity;
else if (itemID == 2036)
price = 20000 * quantity;
else if (itemID == 2025)
price = 30000 * quantity;
var ack = new RicePacket(406);
ack.Writer.Write(itemID);
ack.Writer.Write(quantity);
ack.Writer.Write(price);
packet.Sender.Send(ack);
packet.Sender.Error ("This Item Should be in your Inventory but... :(");
}
}
}
https://forum.ragezone.com/cache.php...%2Frs9k2RK.png
Added the Inventory Level on database (HancoinInven)
Character.cs (/Game/Character.cs)
and worked pretty wellQuote:
using Rice.Server.Structures;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rice.Game
{
public class Character
{
public User User;
public ulong UID;
public ulong CID;
public string Name;
public long Mito;
public int Avatar;
public int Level;
public int City;
public int CurrentCarID;
public int GarageLevel;
public int InventoryLevel;
public long TID;
private Character()
{
}
public CharInfo GetInfo()
{
return new CharInfo
{
Avatar = (ushort)Avatar,
Name = Name,
CID = CID,
City = City,
CurrentCarID = CurrentCarID,
ExpInfo = new ExpInfo // load this
{
BaseExp = 0,
CurExp = 0,
NextExp = 0
},
HancoinGarage = GarageLevel,
HancoinInven = InventoryLevel,
Level = (ushort)Level,
TeamId = TID,
TeamName = "Staff", // load this
MitoMoney = Mito
};
}
public static Character Retrieve(string charname)
{
DbConnection dbconn = Database.GetConnection();
DbCommand command = dbconn.CreateTextCommand("SELECT * FROM Characters WHERE Name = @char");
command.AddParameter("@char", charname);
Character character = null;
using (DbDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
character = new Character();
character.CID = Convert.ToUInt64(reader["CID"]);
character.UID = Convert.ToUInt64(reader["UID"]);
character.Name = reader["Name"] as string;
character.Mito = Convert.ToInt64(reader["Mito"]);
character.Avatar = Convert.ToInt32(reader["Avatar"]);
character.Level = Convert.ToInt32(reader["Level"]);
character.City = Convert.ToInt32(reader["City"]);
character.CurrentCarID = Convert.ToInt32(reader["CurrentCarID"]);
character.InventoryLevel = Convert.ToInt32(reader["InventoryLevel"]);
character.GarageLevel = Convert.ToInt32(reader["GarageLevel"]);
character.TID = Convert.ToInt64(reader["TID"]);
}
}
return character;
}
public static List<Character> Retrieve(ulong uid)
{
DbConnection dbconn = Database.GetConnection();
DbCommand command = dbconn.CreateTextCommand("SELECT * FROM Characters WHERE UID = @uid");
command.AddParameter("@uid", uid);
List<Character> chars = new List<Character>();
using (DbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
var character = new Character();
character.CID = Convert.ToUInt64(reader["CID"]);
character.UID = Convert.ToUInt64(reader["UID"]);
character.Name = reader["Name"] as string;
character.Mito = Convert.ToInt64(reader["Mito"]);
character.Avatar = Convert.ToInt32(reader["Avatar"]);
character.Level = Convert.ToInt32(reader["Level"]);
character.City = Convert.ToInt32(reader["City"]);
character.CurrentCarID = Convert.ToInt32(reader["CurrentCarID"]);
character.InventoryLevel = Convert.ToInt32(reader["InventoryLevel"]);
character.GarageLevel = Convert.ToInt32(reader["GarageLevel"]);
character.TID = Convert.ToInt64(reader["TID"]);
chars.Add(character);
}
}
return chars;
}
}
}
https://forum.ragezone.com/cache.php...%2FWyPLgFk.png
I'll keep this updated guys :)
UPDATE: i've not posted new things because i dont know anything about drift city packing method so i cant get the packets structures to keep this development
how to connect to run client?
configuration IP how
what you use client version ? for join game. i have client 2012 but got problem gameguard, can you help me join game ?
- - - Updated - - -
what a problem i use 2012 client.
http://i.imgur.com/K1tqmph.png
- - - Updated - - -
Delete Character Work
Quote:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Rice.Server.Core;
namespace Rice.Server.Packets.Lobby
{
public static class User
{
[RicePacket(60, RiceServer.ServerType.Lobby)]
public static void UserInfo(RicePacket packet)
{
Log.WriteLine("UserInfo request.");
var settings = new RicePacket(30);
settings.Writer.Write(Static.GameSettings);
packet.Sender.Send(settings);
packet.Sender.Player.Characters = Rice.Game.Character.Retrieve(packet.Sender.Player.User.UID);
var ack = new RicePacket(61);
ack.Writer.Write(0); // Permissions
ack.Writer.Write(packet.Sender.Player.Characters.Count); // Character Count
ack.Writer.WriteUnicodeStatic(packet.Sender.Player.User.Name, 18); // Username
ack.Writer.Write((long)0);
ack.Writer.Write((long)0);
ack.Writer.Write((long)0);
ack.Writer.Write(0);
foreach (var character in packet.Sender.Player.Characters)
{
ack.Writer.WriteUnicodeStatic(character.Name, 21); // Name
ack.Writer.Write(character.CID); // ID
ack.Writer.Write(character.Avatar); // Avatar
ack.Writer.Write(character.Level); // Level
ack.Writer.Write(1);
ack.Writer.Write(0x50);
ack.Writer.Write(0);
ack.Writer.Write(int.MaxValue / 2); // Creation Date
ack.Writer.Write(character.TID); // Crew ID
ack.Writer.Write(0L); // Crew Image
ack.Writer.WriteUnicodeStatic("Staff", 12); // Crew Name
ack.Writer.Write((short)0);
ack.Writer.Write((short)-1);
ack.Writer.Write((short)0);
}
packet.Sender.Send(ack);
Log.WriteLine("Sent character list.");
}
[RicePacket(80, RiceServer.ServerType.Lobby)]
public static void CheckCharacterName(RicePacket packet)
{
string characterName = packet.Reader.ReadUnicode();
Log.WriteLine("VerifyCharName: {0}", characterName);
// TODO: Verify
var ack = new RicePacket(81);
ack.Writer.WriteUnicodeStatic(characterName, 21);
ack.Writer.Write(1); // Availability. 1 = Available, 0 = Unavailable.
packet.Sender.Send(ack);
}
[RicePacket(82, RiceServer.ServerType.Lobby)]
public static void CreateCharacter(RicePacket packet)
{
string characterName = packet.Reader.ReadUnicode();
/*
string UIDCreate = packet.Reader.ReadUnicode();
DbConnection dbconn_c = Database.GetConnection();
DbCommand crechar = dbconn_c.CreateCommand();
crechar.CommandText = @"Insert into characters (UID, Name) values ('" + UIDCreate + "', '" + characterName + "')";
*/
Log.WriteLine("Create Character Success Name: {0}", characterName);
// TODO: Verify, Handle
}
[RicePacket(50, RiceServer.ServerType.Lobby)]
public static void DeleteCharacter(RicePacket packet)
{
string characterName = packet.Reader.ReadUnicode();
DbConnection dbconn_d = Database.GetConnection();
DbCommand delchar = dbconn_d.CreateCommand();
delchar.CommandText = @"Delete from characters Where Name =
'" + characterName + " ' ";
delchar.ExecuteNonQuery();
Log.WriteLine("Delete Character Success Name: {0}", characterName);
// TODO: Verify
var ack = new RicePacket(84);
ack.Writer.WriteUnicodeStatic(characterName, 21);
packet.Sender.Send(ack);
}
}
}
2013 client ?
Without knowing too much about coding, but can't you determine the method by looking at the code?
I'm pretty sure this is the Encryption key:
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x2F, 0x37, 0x05, 0x00, 0x00, 0x00, 0x0F, 0x00,
0xE4, 0xAF, 0x77, 0x00, 0xE8, 0x0F, 0x8B, 0x14, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF3, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0x29, 0x20, 0x1C, 0x08, 0x87, 0x01, 0x01, 0x58, 0x02, 0x00, 0x00,
0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7B, 0x27, 0xE3, 0xCD, 0xF0, 0x8C, 0x02,
0x0A, 0x5A, 0xAA, 0xD5, 0x29, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x05, 0xE0, 0x51, 0x00,
0x41, 0x60, 0xC8, 0x00, 0x00, 0x08, 0x28, 0x02, 0x58, 0x11, 0x83, 0x00, 0x64, 0x80, 0xF8, 0xCA,
0x01, 0x07, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3F
https://github.com/amPerl/RiceEmu/bl...kets/Static.cs
You use it to view the packets when you sniff them.
I assume you'll have all the packets in Hex form, which you will need to guess the bytes and types.
You can use winpcap to "record" all data going through your network but you'd still need to write your own program to print the data being sent from and to the server, through the client (DriftCity's client process).
Networking is not my forte, sorry for not being much helpful.
This "key" is probably used to build some cryptography class.. Like Blowfish or something. You have to guess the ecryption method used in the first place..
Compiled someone will have everything to do test
UID not read.Code:// Not Fix Create Account
[RicePacket(82, RiceServer.ServerType.Lobby)]
public static void CreateCharacter(RicePacket packet)
{
string characterName = packet.Reader.ReadUnicode();
string UIDCreate = packet.Reader.ReadUnicode();
DbConnection dbconn_c = Database.GetConnection();
DbCommand crechar = dbconn_c.CreateCommand();
crechar.CommandText = @"Insert into characters (UID, Name) values ('" + UIDCreate + "', '" + characterName + "')";
//Test
//crechar.CommandText = @"Insert into characters (UID, Name) values ('1', '" + characterName + "')";
crechar.ExecuteNonQuery();
Log.WriteLine("Create Character Success Name: {0}", characterName);
// TODO: Verify, Handle
var ack = new RicePacket(82);
ack.Writer.WriteUnicodeStatic(characterName, 21);
packet.Sender.Send(ack);
}
YO
Tryin to use Rice but (and laugh if im the only one who cant do it) it says cant connect to any of the mysql databases
https://forum.ragezone.com/image/jpe...8AcT/9Nl3QB//Z
Soo... yea i have no fix for that
IVE BEEN HAVIN THIS PROB SO I NEED HELP
Can 1 of ya help?
N1der5
Hello guys. I'm following with interest this project, mostly because i was an huge fan of the game since the iJJi times. Then i played DC Usa, JP and Eu. I'd like to run a "private" server on my pc just for fun. Can i join your "projects" even i have almost none exp in this field?
What tools you use to run the game on your pc? mySQL, Rice and Drift City?
If yes, what server files (and version) and what client (version) ?
Is the game playable even in part, or actually not?
Thanks for the attention
Regards,
Prize
The Rice emulator project is still up on Github so you're welcome to download it and start improving it. That said, we have worked on it privately and will probably revive the project now that US Drift City is probably due to close.
You need Visual Studio to compile Rice from the source that is on Github. You'll also need a MySQL database.
The Rice code that is up on Github should be compatible with the latest versions of the US Drift City client (through the Rice Launcher).
Barely. We've since improved on Rice in the non-github private version (quests, exp-level handling, etc), but it's still far from release worthy.
For anyone interested, the private version of Rice has a public commit log so you can see what we're up to: Rice Commit Log
Doubt it. I have university and other stuff to deal with, so development is slow.
Still want this so hard. But it's a pain in the ass to figure out the packets. I keep crashing when sending wrong packets :$:. It's so frustrating.
My first encounter with Drift City was 7 years ago *.*. And still love playing it.
Ye I could do that. Never done anything in regards of reverse engineering.
Btw game is protected with GameGuard and, apparently ?packed?
:( Could've been so easy.
Btw I know you said, make a memory dump ;)
Ollydbg says:
IDA Pro says:Quote:
---------------------------
Protection Error
---------------------------
Debugger detected - please close it down and restart!
Windows NT users: Please note that having the
WinIce/SoftIce service installed means that you are
running a debugger!
---------------------------
OK
---------------------------
Quote:
---------------------------
Warning
---------------------------
C:\Program Files (x86)\IDA 6.5\loaders\uimage.py: DLL load failed: %1 is not a valid Win32 application.
Traceback (most recent call last):
File "C:\Program Files (x86)\IDA 6.5\python\idaapi.py", line 564, in IDAPython_ExecScript
execfile(script, g)
File "C:/Program Files (x86)/IDA 6.5/loaders/uimage.py", line 50, in <module>
import ctypes
File "C:\Python\Lib\ctypes\__init__.py", line 10, in <module>
from _ctypes import Union, Structure, Array
ImportError: DLL load failed: %1 is not a valid Win32 application.
---------------------------
OK
---------------------------
I know a bit about it, just not really familiar with the process itself of unpacking it.
You could ask about it in http://forum.ragezone.com/f860/
There are some experienced people in Reverse Engineering and this process in particular in the MapleStory section, I'm pretty sure both require a very similar process for removing GameGuard, unpacking it and filling in the blanks, I guess you could ask there without directly referring to DriftCity.
Just out of curiosity. The game was on 3-4 different companies. Including some german ones... And we still only have a binary leak from 2007 and no recent source leak? I wonder why this is the case...
Like every respected company does;
SVN is only accessible in an offline network with physically connected machines, on which the developers develop the source. No usb ports, not connection to the outside.
Leaked files are always leaked due to idiocy of "security specialists" of the companies they work, because if they allow you to upload the server files/client files pdb to an ftp server, they are retarded. --Official MapleStory Brazil publisher got their server files leaked that way, Nexon almost sued RaGEZONE for releasing it here, the FTP server was hacked by a (now) RaGEZONE moderator, LOL.
That's right. But he said
Which implies yep thought so, the server is running on secured VPS with a possible VPN connection that requires a private key.Quote:
running in a secure environment without employee's that can steal stuff
But employees still had access to the source.. Because without access nobody could program the game lol.
And also, my point wasn't okay every company has the SVN/Git public. But rather.. Around ~5 companies had access. With it several german, korean and chinese ones.. You want to tell me that none of them made any mistake? Or is it BECAUSE the game is not interesting enough...
I think those 5 companies didn't had access to source at all, NPLUTO is the company that does all developing in the game, they build stuff in their secure probably offline environment like Kingslime said. Then updates wil get pushed towards the publisher and that's how most korean game developers work. Even if they have access to the source, i think no game publisher is stupid enough to let someone leak it because it could cost them a huge load of money.
>Nexon is just known for being sloppy with a lot of things.
Besides that securing a dedicated server against hacks isn't so hard, servers can run with many layers of security that are insanely hard to crack, not some easy FTP that can be hacked.
And if companies are smart, they give every user that is connecting to the server their own username and keys and log every action that's being done, once you do that, you have every right to sue the person who did it. For a large amount of money.
NPLUTO use a SVN server only accessible through their office network.
I'd like this to see this emulator growing big, I'm downloading it right now :)
So, You guys probably get this alot but this is a safe way to play drift city, Like I grew up on this game and today I went to download it and seen that it was shutdown, I went searching and I found this, I just wantedto know if this was exactly like the game used to be and If I would be able to play it again?
Of course it's still playable, you'll only need to find the right people who can help you to setup, develop and code the Drift City server with new functions and of course bug fixing. Also, you will need some people to beta test your server. And before you start asking, yes, I've got some experience :)
Can anyone share the client please?
DriftCity US clients:
Last Alpha (DriftCity.exe 2/16/2016):
https://mega.nz/#!jNljXIaS!HJCMirfLkQ_okoqvthvM9RtayjEzweOQkmxgkVcnpD0
Last Official (DriftCity.exe 1/27/2016):
https://mega.nz/#!CU9lTJAb!7fZ_iep-lvgpUTUEO8Lgchn_kswzkyYKVBPffMQ0XCQ
Thanks WWWWWWWWWWWWWW