CSREmu

02/21/2010 12:14 Shadowz75#1
Revision 22

Now the autospawn + skill use bug,... bugs SHOULD be fixed

Download

[Only registered and activated users can see links. Click Here To Register...]

Regards

Revision 21:
It seems like csremu cant load the textdata at some/most of the pcs. thats why it crashes at levelup+ there is no autospawn. Let me find the problem, and i will try to fix it as soon as possible

Fixed the Alexandria NPC's

HOW TO:

delete your current textdata folder and extract the new one that you downloaded here.

Download:

[Only registered and activated users can see links. Click Here To Register...]


Revision 20:

Delete your database and use the new one.

I have only 2 solutions for the Requesting.. Bug:

Restart the sro_client until it works. And dont press Enter to login click with your mouse!

Fixes:

-the bug that you can only create +1 weapons

-the crash when you pick up gold

-minor bugs

Added:


Alexandria Shops and Teleports - Thanks to Foma for collecting some infos on ISRO that i needed : [Only registered and activated users can see links. Click Here To Register...]

Thanks to Windrius for the new protection

Download
[Only registered and activated users can see links. Click Here To Register...]

Regards

[Only registered and activated users can see links. Click Here To Register...]

Revision 19:

Silkroad Version:1.252

movement - groundwalking works, sykwalking doesnt(didnt figured it out yet)
item movement - working
item usage - only capes,pots till now
autospawn - monsters,npcs,teleports(you can use the teleports to alexandria, but the npcs there wont work)
npc shop usage- except alexandria(i still need a lvl 95+ on isro to collect some packets in/around alexandria)
npc storage - not working
npc teleports - working
chat - public,party,whisper,notice
skills - working(no skill effects)
buffs - working(only imbue increase the dmg,so other buffs are useless for now)
stats - working
leveling - working(skillpoint calculation sucks, but is ok)
pvp - working ,buy capes on the grocery traders
party - working
hotkeys - working
autopotion - working, but it doesnt get saved for now
pets&horses - not working

best feature: mangyang giants! :P

csremu commands:
createuser - creates a new user in the database
clear - clears the console
notice - send a global server notice
pflow game- see the packetflow of the gameserver
pflow login- see the packetflow of the loginserver
exit - exit this application

English:

Some changes to old revisions:

- Every 20 sec new users get loaded. E.g. if you create a user wait 20 sec and you can use it

-No Europe Support. They are working like on the other version, but i will focus on Chinese

For Tutorials look at this page : [Only registered and activated users can see links. Click Here To Register...]

They should still work. You still need the mediapatcher and loader from the old tutorial: [Only registered and activated users can see links. Click Here To Register...]

Well here is the old videotutorial :

The source is closed, means only i got the newest one. If you still want to look at the old sources( i improved/changed a lot since Rev 18) : [Only registered and activated users can see links. Click Here To Register...]

The Download:

[Only registered and activated users can see links. Click Here To Register...]

Finally the thanks and credits to other people how helped me:

Thanks to Eckoro,Windrius,SREMU Team,Lyzerk,Cheat Project Germany,Elitepvpers,ProjectHax,Stealthex and Drew Benton

Regards Shadowz75

Deutsch:

Ein paar kleine Änderungen:

- Jede 20 sekunden werden die user neu geladen.Wenn man z.b. einen neuen user erstellt wartet man 20 sekunden , dann kann man ihn benutzen

- Kein Euro Support(vorerst).Allerdings geht immenoch alles was man auch mit ihnen in Rev 18 machen konnte

Alle Tutorials zusammgenfasst :s.oben bei English
Man braucht immernoch den Mediapatcher:s.oben bei English

Readme s.oben bei English

Das alte Videotutorial : s.oben bei English

Die Source ist jetzt closed, dh nur ich habe sie. Die alten Sources sind immernoch verfügbar: [Only registered and activated users can see links. Click Here To Register...]

Download:
s.oben bei English

Finally the thanks and credits to other people how helped me:

Thanks to Eckoro,Windrius,SREMU Team,Lyzerk,Cheat Project Germany,Elitepvpers,ProjectHax,Stealthex and Drew Benton

Grüße Dickernoob

Tutorial
Quote:
CSREMU(C# Silkroad Emulator)
############################

THIS IS A PRE-ALPHA AND THERE'S STILL MUCH TO DO, SO IF YOU CAN HELP DO IT.

Video Tutorial:
[Only registered and activated users can see links. Click Here To Register...]

Tutorial:
Download & install TortoiseSVN : [Only registered and activated users can see links. Click Here To Register...]
Create a new folder in your Silkroad folder. Right click->SVN Checkout .At the URL of repository use this link:
[Only registered and activated users can see links. Click Here To Register...]
Now download those things:
Download this: [Only registered and activated users can see links. Click Here To Register...]
Download this: [Only registered and activated users can see links. Click Here To Register...]
Install both.(you can use this Tutorial: [Only registered and activated users can see links. Click Here To Register...])
Dump the .sql file(Database\\emulator.sql) into your database with e.g. Navicat Lite.
Configure your settings in the Binary\\Settings.txt file.
Extract the data.rar into your Binary\\ folder and a new folder ('data') will appear.
Start the GameServer.exe and then the LoginServer.exe.
Create a new user account with the UserManager.exe.

Patch your Media.pk2 with the MediaPatcher(thanks to the creator,i changed 15778 to 15779) in the Binary folder.
Then copy the Loadersremu(created by the SREmu team) and the silkhook.dll into your Silkroad Folder.
Start the Loadersremu and a errormessage will appear:OMG- Unable to patch nprotect(cause nprotect was removed,
hackshield is the new anticheat).Just press ok and Silkroad will start

Then log in and create a new Character the normal way.
Then go to your database in the character table and change the your character settings.

Use the GM Console to load Monsters/Items.(shift + ~ = american keybord)
e.g. /loadmonster MOB_ then press F2 and you see a list.
e.g. /makeitem ITEM_ then press F3 and see the list.
e.g. ~TEST = notice

Test Video:
[Only registered and activated users can see links. Click Here To Register...]

Credits:
The SREMU Team,Eckoro,Cheat Project Germany,ProjectHax,Elitepvpers and Drew Benton

Submitting a patch:
Create a .patch File and create a new thread at [Only registered and activated users can see links. Click Here To Register...]
or pm me on epvpers(username Shadowz75)

Got Errors?
Go to [Only registered and activated users can see links. Click Here To Register...] and create a new thread.



###########
#Shadowz75#
###########[/url]
or pm me on epvpers(username Shadowz75)

Got Errors?
Go to [Only registered and activated users can see links. Click Here To Register...] and create a new thread.



###########
#Shadowz75#
###########
02/21/2010 15:41 Exploiter~Li#2
Nice Emulator.
02/21/2010 15:44 Windrius#3
Ok let me start.

What do we have here?
Changed function names, added some easy shit.
50% here is same as lyzerks emu :)

I'd post some examples if I had lyzerks emu decompiled atm, but look at the database. Thats the same. Code. Most functions are same.
Anyway.. Next time remember to give lyzerk credits :)
02/21/2010 15:58 Shadowz75#4
Wtf, did you looked over it?I guess not. I used Lyzerks way to save skills,masteries. Thats all.Did Lyzerk used sth like this:
[Only registered and activated users can see links. Click Here To Register...]
.Could you use europe characters on Lyzerk Source?Could you drop items and pick them up?
02/21/2010 16:05 Windrius#5
Quote:
Originally Posted by Shadowz75 View Post
Wtf, did you looked over it?I guess not. I used Lyzerks way to save skills,masteries. Thats all.Did Lyzerk used sth like this:
[Only registered and activated users can see links. Click Here To Register...]
.Could you use europe characters on Lyzerk Source?Could you drop items and pick them up?
No.
I didn't say you completly copied it.
I said 50% of functions are same..

[Only registered and activated users can see links. Click Here To Register...] Did you see this? :) ALMOST everything here is a rip from lyzerks emu. Hmm... what does rip mean? :/

EDIT: You even missed 1 packet just like lyzerk in OnIngameRequest
02/21/2010 16:06 sakykBzz#6
Quote:
Originally Posted by Shadowz75 View Post
Wtf, did you looked over it?I guess not. I used Lyzerks way to save skills,masteries. Thats all.Did Lyzerk used sth like this:
[Only registered and activated users can see links. Click Here To Register...]
.Could you use europe characters on Lyzerk Source?Could you drop items and pick them up?
fight dude! fight!
and dont forget to proove -.-
02/21/2010 16:12 -[>Lucy_Nyu<]-#7
lyzerk emu = full of shit
02/21/2010 16:12 Shadowz75#8
Quote:
Originally Posted by Windrius View Post
No.
I didn't say you completly copied it.
I said 50% of functions are same..

[Only registered and activated users can see links. Click Here To Register...] Did you see this? :) ALMOST everything here is a rip from lyzerks emu. Hmm... what does rip mean? :/

EDIT: You even missed 1 packet just like lyzerk in OnIngameRequest
Wtf do you mean? Cause the packets are the same? Cause if you want to get data from the database you gotta use this way:
Code:
  Player.General[Index_].CharacterName = Char;
  272             Player.General[Index_].CharacterID = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "id");
  273             Player.General[Index_].UniqueID = Player.General[Index_].CharacterID + 300000;
  274             Player.Stats[Index_].HP = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "hp");
  275             Player.Stats[Index_].MP = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "mp");
  276             Player.Stats[Index_].CHP = Database.GetInt("SELECT * FROM characters WHERE name='" + Char + "'", "s_hp");
  277             Player.Stats[Index_].CMP = Database.GetInt("SELECT * FROM characters WHERE name='" + Char + "'", "s_mp");
  278             Player.Stats[Index_].Model = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "chartype");
  279             Player.Stats[Index_].Volume = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "volume");
  280             Player.Stats[Index_].Level = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "level");
  281             Player.Stats[Index_].Experience = Database.GetULong("SELECT * FROM characters WHERE name='" + Char + "'", "experience");
  282             Player.Stats[Index_].Gold = Database.GetULong("SELECT * FROM characters WHERE name='" + Char + "'", "gold");
  283             Player.Stats[Index_].Skillpoints = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "sp");
  284             Player.Stats[Index_].Attributes = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "attribute");
  285             Player.Stats[Index_].BerserkBar = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "berserkbar");
  286             Player.Flags[Index_].Berserk = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "berserking");
  287             Player.Speeds[Index_].WalkSpeed = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "walkspeed");
  288             Player.Speeds[Index_].RunSpeed = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "runspeed");
  289             Player.Speeds[Index_].BerserkSpeed = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "berserkspeed");
  290             Player.Stats[Index_].MinPhy = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "min_phyatk");
  291             Player.Stats[Index_].MaxPhy = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "max_phyatk");
  292             Player.Stats[Index_].MinMag = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "min_magatk");
  293             Player.Stats[Index_].MaxMag = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "max_magatk");
  294             Player.Stats[Index_].PhyDef = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "phydef");
  295             Player.Stats[Index_].MagDef = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "magdef");
  296             Player.Stats[Index_].Hit = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "hit");
  297             Player.Stats[Index_].Parry = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "parry");
  298             Player.Stats[Index_].Strength = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "strength");
  299             Player.Stats[Index_].Intelligence = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "intelligence");
  300             Player.Stats[Index_].SkillpointBar = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "skillpointbar");
  301             Player.Flags[Index_].GM = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "gm");
  302             Player.Flags[Index_].PvP = -1;
  303             Player.Position[Index_].XSector = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "xsect");
  304             Player.Position[Index_].YSector = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "ysect");
  305             Player.Position[Index_].X = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "xpos");
  306             Player.Position[Index_].Y = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "ypos");
  307             Player.Position[Index_].Z = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "zpos");
  308             Player.General[Index_].MaxSlots = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "maxitemslot");
  309
Or how would you do it?Simsalabim and the data is in your Player array?
btw here is the euro proof(i know that there is a error displayed, thats why someone sent me this picture):
[Only registered and activated users can see links. Click Here To Register...]
02/21/2010 16:16 Shadow_Soul#9
il test it its nice coz it works with the latest version of sro :)
02/21/2010 16:17 Windrius#10
Quote:
Originally Posted by Shadowz75 View Post
Wtf do you mean? Cause the packets are the same? Cause if you want to get data from the database you gotta use this way:
Code:
  Player.General[Index_].CharacterName = Char;
  272             Player.General[Index_].CharacterID = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "id");
  273             Player.General[Index_].UniqueID = Player.General[Index_].CharacterID + 300000;
  274             Player.Stats[Index_].HP = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "hp");
  275             Player.Stats[Index_].MP = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "mp");
  276             Player.Stats[Index_].CHP = Database.GetInt("SELECT * FROM characters WHERE name='" + Char + "'", "s_hp");
  277             Player.Stats[Index_].CMP = Database.GetInt("SELECT * FROM characters WHERE name='" + Char + "'", "s_mp");
  278             Player.Stats[Index_].Model = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "chartype");
  279             Player.Stats[Index_].Volume = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "volume");
  280             Player.Stats[Index_].Level = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "level");
  281             Player.Stats[Index_].Experience = Database.GetULong("SELECT * FROM characters WHERE name='" + Char + "'", "experience");
  282             Player.Stats[Index_].Gold = Database.GetULong("SELECT * FROM characters WHERE name='" + Char + "'", "gold");
  283             Player.Stats[Index_].Skillpoints = Database.GetUInt("SELECT * FROM characters WHERE name='" + Char + "'", "sp");
  284             Player.Stats[Index_].Attributes = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "attribute");
  285             Player.Stats[Index_].BerserkBar = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "berserkbar");
  286             Player.Flags[Index_].Berserk = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "berserking");
  287             Player.Speeds[Index_].WalkSpeed = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "walkspeed");
  288             Player.Speeds[Index_].RunSpeed = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "runspeed");
  289             Player.Speeds[Index_].BerserkSpeed = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "berserkspeed");
  290             Player.Stats[Index_].MinPhy = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "min_phyatk");
  291             Player.Stats[Index_].MaxPhy = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "max_phyatk");
  292             Player.Stats[Index_].MinMag = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "min_magatk");
  293             Player.Stats[Index_].MaxMag = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "max_magatk");
  294             Player.Stats[Index_].PhyDef = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "phydef");
  295             Player.Stats[Index_].MagDef = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "magdef");
  296             Player.Stats[Index_].Hit = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "hit");
  297             Player.Stats[Index_].Parry = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "parry");
  298             Player.Stats[Index_].Strength = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "strength");
  299             Player.Stats[Index_].Intelligence = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "intelligence");
  300             Player.Stats[Index_].SkillpointBar = Database.GetUShort("SELECT * FROM characters WHERE name='" + Char + "'", "skillpointbar");
  301             Player.Flags[Index_].GM = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "gm");
  302             Player.Flags[Index_].PvP = -1;
  303             Player.Position[Index_].XSector = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "xsect");
  304             Player.Position[Index_].YSector = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "ysect");
  305             Player.Position[Index_].X = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "xpos");
  306             Player.Position[Index_].Y = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "ypos");
  307             Player.Position[Index_].Z = Database.GetFloat("SELECT * FROM characters WHERE name='" + Char + "'", "zpos");
  308             Player.General[Index_].MaxSlots = Database.GetByte("SELECT * FROM characters WHERE name='" + Char + "'", "maxitemslot");
  309
Or how would you do it?Simsalabim and the data is in your Player array?
btw here is the euro proof(i know that there is a error displayed, thats why someone sent me this picture):
[Only registered and activated users can see links. Click Here To Register...]
I DON'T MEAN THAT OMG!!! LOOK AT THE PACKETS >_<

Quote:
writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_CHARDA TA);
writer.AppendDword(Player.Stats[Index_].Model);
writer.AppendByte(Player.Stats[Index_].Volume);
writer.AppendByte(Player.Stats[Index_].Level);
writer.AppendByte(Player.Stats[Index_].Level);
writer.AppendLword(Player.Stats[Index_].Experience);
writer.AppendWord(Player.Stats[Index_].SkillpointBar);
writer.AppendWord(0);
writer.AppendLword(Player.Stats[Index_].Gold);
writer.AppendDword(Player.Stats[Index_].Skillpoints);
writer.AppendWord(Player.Stats[Index_].Attributes);
writer.AppendByte(Player.Stats[Index_].BerserkBar);
writer.AppendDword(0);
writer.AppendDword(Player.Stats[Index_].HP);
writer.AppendDword(Player.Stats[Index_].MP);
if (Player.Flags[Index_].GM == 1)
writer.AppendByte(1);
else
writer.AppendByte((byte)(Player.Stats[Index_].Level < 20 ? 1 : 0));

writer.AppendByte(0);
writer.AppendWord(0);
writer.AppendDword(0);

writer.AppendByte(0);

writer.AppendByte(Player.General[Index_].MaxSlots);

byte itemcount = 0;
for (int j = 0; j <= Player.General[Index_].MaxSlots; j++)
{
if (Database.GetUInt("SELECT * FROM items WHERE owner='" + Char + "' AND itemnumber='item" + j + "'", "itemid") != 0)
itemcount++;

}
writer.AppendByte(itemcount);
int count;
for (byte i = 0; i <= Player.General[Index_].MaxSlots; i++)
{
if (Player.Items[Index_].Item(i).model != 0)
{
writer.AppendByte(i);
writer.AppendDword(Player.Items[Index_].Item(i).model);
switch (Player.Items[Index_].Item(i).type)
{
case 0:
writer.AppendByte(Player.Items[Index_].Item(i).plusvalue);
writer.AppendLword(0);
writer.AppendDword(Player.Items[Index_].Item(i).durability);
writer.AppendByte(Player.Items[Index_].Item(i).blueamount);
count = 1;
while (count <= 9)
{
uint blue = Database.GetUInt("SELECT * FROM items WHERE slot='" + i + "'", "blue" + count);
if (blue != 0)
{
uint blueamount = Database.GetUInt("SELECT * FROM items WHERE slot='" + i + "'", "blue" + count + "amount");
writer.AppendDword(blue);
writer.AppendDword(blueamount);
}
count++;
}
break;
case 1:
writer.AppendWord(Player.Items[Index_].Item(i).quantity);
break;
case 2:
writer.AppendByte(0);
writer.AppendWord(1);
break;
}
}
}

writer.AppendByte(5);
writer.AppendByte(0);

writer.AppendByte(0);

uint[] mastery = new uint[8];
byte[] level = new byte[8];
for (uint i = 1; i <= 7; i++)
{
mastery[i] = Database.GetUInt("SELECT * FROM mastery WHERE owner='" + Char + "' AND mastery_row='mastery_" + i + "'", "mastery");
if (mastery[i] != 0)
{
level[i] = Database.GetByte("SELECT * FROM mastery WHERE owner='" + Char + "' AND mastery_row='mastery_" + i + "'", "level");
writer.AppendByte(1);
writer.AppendDword(mastery[i]);
writer.AppendByte(level[i]);
}
}

writer.AppendWord(2);

Player.Skills[Index_].SkillAmount = Database.GetInt("SELECT * FROM skills WHERE owner='" + Char + "'", "AmountSkill");

for (int i = 1; i <= Player.Skills[Index_].SkillAmount; i++)
{
Player.Skills[Index_].Skilllist[i] = Database.GetUInt("SELECT * FROM skills WHERE owner='" + Char + "'", "Skill" + i);
writer.AppendByte(1);
writer.AppendDword(Player.Skills[Index_].Skilllist[i]);
writer.AppendByte(1);
}

writer.AppendByte(2);
writer.AppendWord(1);
writer.AppendDword(0);

writer.AppendByte(0);
writer.AppendByte(0);
writer.AppendDword(Player.General[Index_].UniqueID);

writer.AppendByte(Player.Position[Index_].XSector);
writer.AppendByte(Player.Position[Index_].YSector);
writer.AppendFloat(Player.Position[Index_].X);
writer.AppendFloat(Player.Position[Index_].Z);
writer.AppendFloat(Player.Position[Index_].Y);

writer.AppendWord(0);
writer.AppendByte(0);
writer.AppendByte(1);
writer.AppendByte(0);
writer.AppendWord(0);
writer.AppendWord(0);

writer.AppendByte(Player.Flags[Index_].Berserk);
writer.AppendFloat(Player.Speeds[Index_].WalkSpeed);
writer.AppendFloat(Player.Speeds[Index_].RunSpeed);
writer.AppendFloat(Player.Speeds[Index_].BerserkSpeed);

writer.AppendByte(0);

if (Player.Flags[Index_].GM == 1)
{
string gmname = string.Format("[GM]{0}", Char);
writer.AppendWord((ushort)gmname.Length);
writer.AppendString(false, gmname);
}
else
{
writer.AppendWord((ushort)Char.Length);
writer.AppendString(false, Char);
}

writer.AppendWord(0);
writer.AppendDword(0x00000100);
writer.AppendDword(0);
writer.AppendDword(0);
writer.AppendDword(0);
writer.AppendByte(0);

writer.AppendByte((byte)Player.Flags[Index_].PvP);
writer.AppendDword(0);
writer.AppendDword(Player.General[Index_].AccountID);
writer.AppendByte(Player.Flags[Index_].GM);

writer.AppendDword(0);
writer.AppendDword(0);
writer.AppendWord(0);
writer.AppendWord(1);
writer.AppendWord(1);
writer.AppendWord(0);
ServerSocket.Send(writer.getWorkspace(), Index_);

Stats.OnStatPacket(Index_);

writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_LOADIN G_END);
ServerSocket.Send(writer.getWorkspace(), Index_);
}
02/21/2010 16:20 Shadowz75#11
Quote:
Originally Posted by Windrius View Post
I DON'T MEAN THAT OMG!!! LOOK AT THE PACKETS >_<
its the ingame request , and?do you mean that i miss the packet including the uniqueid and another dword? this shit isnt needed
02/21/2010 16:23 Shadow_Soul#12
i believe shadow, i never saw exp on lyzerk's server before.. iam downloading and installing stuff now,ty shadowz75 for this emu,we apreciate it,i thinck that windrius is jealous or something :)
02/21/2010 16:24 Windrius#13
Quote:
Originally Posted by Shadowz75 View Post
its the ingame request , and?do you mean that i miss the packet including the uniqueid and another dword? this shit isnt needed
No I mean look inside.
EVERYTHING IS SAME.
omg must I show every letter here that is same?
look at attack function. Same too.
I'm telling you. This is so copied from lyzerks emu :)

Quote:
Originally Posted by Shadow_Soul View Post
i believe shadow, i never saw exp on lyzerk's server before.. iam downloading and installing stuff now,ty shadowz75 for this emu,we apreciate it,i thinck that windrius is jealous or something :)
Ou mai gawd. get exp so hard to add. omfg impossible.
02/21/2010 16:26 Shadowz75#14
Quote:
Originally Posted by Windrius View Post
No I mean look inside.
EVERYTHING IS SAME.
omg must I show every letter here that is same?
look at attack function. Same too.
I'm telling you. This is so copied from lyzerks emu :)
funny guy, cause the packet is the same? look at the sremu c++ source and tell me and you'll see its almost the same. thats because the structure is the same.i already parsed this packet: (thanks for the quest part, eckoro)
Code:
public static void GetCharacterDat a(HandshakeApi.TPacket packet)
        {
            PacketReader reader = new PacketReader(new IntPtr(packet.data), packet.size);
            uint model = reader.Read<uint>();
            byte volume = reader.Read<byte>();
            byte level = reader.Read<byte>();
            byte highestlevel = reader.Read<byte>();
            ulong exp = reader.Read<ulong>();
            ushort xpbar = reader.Read<ushort>();
            ushort spbar = reader.Read<ushort>();
            ulong gold = reader.Read<ulong>();
            uint sp = reader.Read<uint>();
            ushort avaiblestatpoints = reader.Read<ushort>();
            reader.Read<uint>();
            byte berserkguage = reader.Read<byte>();
            uint curhp = reader.Read<uint>();
            uint curmp = reader.Read<uint>();
            byte noobicon = reader.Read<byte>();
            byte dailypl = reader.Read<byte>();
            ushort totalpk = reader.Read<ushort>();
            uint pkpenaltypoint = reader.Read<uint>();
            byte rank = reader.Read<byte>();
            byte maxslots = reader.Read<byte>();
            byte itemcount = reader.Read<byte>();

            byte[] slot = new byte[itemcount];
            uint[] itemid = new uint[itemcount];
            byte[] plus = new byte[itemcount];
            ulong[] modifier = new ulong[itemcount];
            uint[] durability = new uint[itemcount];
            byte[] blueamount = new byte[itemcount];
            ushort[] quantitiy = new ushort[itemcount];
            uint[] blue = new uint[itemcount];
            uint[] blue2 = new uint[itemcount];

            byte count;
            for (byte i = 0; i < itemcount; i++)
            {
                slot[i] = reader.Read<byte>();
                itemid[i] = reader.Read<uint>();

                switch (DatabaseFiles.ItemData.Item[itemid[i]].type)
                {
                    case 0:
                        plus[i] = reader.Read<byte>();
                        modifier[i] = reader.Read<ulong>();
                        durability[i] = reader.Read<uint>();
                        blueamount[i] = reader.Read<byte>();
                        count = 1;
                        while (count <= 9)
                        {
                            if (blueamount[i] != 0)
                            {
                                blue[i] = reader.Read<uint>();
                                blue2[i] = reader.Read<uint>();
                            }
                            count++;
                        }
                        break;
                    case 1:
                        quantitiy[i] = reader.Read<ushort>();
                        break;
                    case 2:
                        reader.Read<byte>();
                        reader.Read<ushort>();
                        break;
                }
            }

            byte avatarliststart = reader.Read<byte>();

            byte avatarcount = reader.Read<byte>();
            uint[] avataritemid = new uint[avatarcount];

            for (byte i = 0; i < avatarcount; i++)            
                avataritemid[i] = reader.Read<uint>();
            
            byte avatarlistend = reader.Read<byte>();

            byte[] nextmastery = new byte[7];
            uint[] mastery = new uint[7];
            byte[] masterylevel = new byte[7];

            for (byte i = 0; i <7 ; i++)
            {
                nextmastery[i] = reader.Read<byte>();
                mastery[i] = reader.Read<uint>();
                masterylevel[i] = reader.Read<byte>();
            }

            byte skillliststart = reader.Read<byte>();
            byte skilllist = reader.Read<byte>();

            byte[] skillstart = new byte[skilllist];
            uint[] skillid = new uint[skilllist];
            byte[] skillevel = new byte[skilllist];

            for (byte i = 0; i < skilllist; i++)
            {
                skillstart[i] = reader.Read<byte>();
                skillid[i] = reader.Read<uint>();
                skillevel[i] = reader.Read<byte>();
            }
            byte skilllistend = reader.Read<byte>();

            byte questliststart = reader.Read<byte>();

            byte amountofcompletedquests = reader.Read<byte>();
            reader.Read<uint>();

            uint[] questidc = new uint[amountofcompletedquests];

            for (byte i = 0; i < amountofcompletedquests; i++)
            {
                questidc[i] = reader.Read<uint>();
            }

            byte amountofpendingquests = reader.Read<byte>();

            uint[] questid = new uint[amountofpendingquests];
            byte[] questrepetitionamount = new byte[amountofpendingquests];
            byte[] questcompletitionamount = new byte[amountofpendingquests];
            byte[] questtype = new byte[amountofpendingquests];
            byte[] objectiveorderno = new byte[amountofpendingquests];
            byte[] status = new byte[amountofpendingquests];
            ushort[] objectivereflength = new ushort[amountofpendingquests];
            string[] objectiveref = new string[amountofpendingquests];
            uint[] amountofitemsORkillsORnpcid = new uint[amountofpendingquests];
            byte[] amountofobjecttives = new byte[amountofpendingquests];
            uint[] questnpc = new uint[amountofpendingquests];
            byte[] amountquestnpc = new byte[amountofpendingquests];
            for (byte i = 0; i < amountofpendingquests; i++)
            {
                questid[i] = reader.Read<uint>();
                questrepetitionamount[i] = reader.Read<byte>();
                questcompletitionamount[i] = reader.Read<byte>();
                questtype[i] = reader.Read<byte>();
                reader.Read<byte>();
                reader.Read<byte>();
                objectiveorderno[i] = reader.Read<byte>();
                status[i] = reader.Read<byte>();
                objectivereflength[i] = reader.Read<ushort>();
                byte[] tmp = new byte[objectivereflength[i]];
                reader.ReadArray<byte>(tmp, tmp.Length);
                objectiveref[i] = Encoding.ASCII.GetString(tmp);
                switch (questtype[i])
                {
                    case 0x18:
                        amountofobjecttives[i] = reader.Read<byte>();
                        for (int l = 0; l < amountofobjecttives[i]; l++)
                            amountofitemsORkillsORnpcid[i] = reader.Read<uint>();
                        break;

                    case 0x58:
                        amountofobjecttives[i] = reader.Read<byte>();
                        for (int l = 0; l < amountofobjecttives[i]; l++)
                            amountofitemsORkillsORnpcid[i] = reader.Read<uint>();
                        amountquestnpc[i] = reader.Read<byte>();
                        for (int l = 0; l < amountquestnpc[i]; l++)
                            questnpc[i] = reader.Read<uint>();
                        break;
                }
            }

  
            byte questistend = reader.Read<byte>();


            uint playerid = reader.Read<uint>();
            byte xzone = reader.Read<byte>();
            byte yzone = reader.Read<byte>();
            float x = reader.Read<float>();
            float z = reader.Read<float>();
            float y = reader.Read<float>();
            ushort angle = reader.Read<ushort>();
            byte havedestination = reader.Read<byte>();
            byte nodestination = reader.Read<byte>();
            if (havedestination == 0)
            {
                byte nodest = reader.Read<byte>();
                ushort angle2 = reader.Read<ushort>();
            }
            else
            {
                byte xzone2 = reader.Read<byte>();
                byte yzone2 = reader.Read<byte>();
                ushort x2 = reader.Read<ushort>();
                ushort z2 = reader.Read<ushort>();
                ushort y2 = reader.Read<ushort>();
            }

            byte deathflag = reader.Read<byte>();
            byte moveementflag = reader.Read<byte>();
            byte berserkermode = reader.Read<byte>();
            float walkingspeed = reader.Read<float>();
            float runningspeed = reader.Read<float>();
            float berserkerspeed = reader.Read<float>();
            byte noofbuffs = reader.Read<byte>();

            uint[] buffskillid = new uint[noofbuffs];
            uint[] buffduration = new uint[noofbuffs];

            for (byte i = 0; i < noofbuffs; i++)
            {
                buffskillid[i] = reader.Read<uint>();
                buffduration[i] = reader.Read<uint>();
            }

            ushort playernamelength = reader.Read<ushort>();
            byte[] bplayername = new byte[playernamelength];
            reader.ReadArray<byte>(bplayername, bplayername.Length);
            string playername = Encoding.ASCII.GetString(bplayername);
            ushort aliasnamelength = reader.Read<ushort>();
            byte[] baliasname = new byte[aliasnamelength];
            reader.ReadArray<byte>(baliasname, baliasname.Length);
            string aliasname = Encoding.ASCII.GetString(baliasname);

            byte joblevel = reader.Read<byte>();
            byte jobtype = reader.Read<byte>();
            uint currentexp = reader.Read<uint>();
            uint thiefexp = reader.Read<uint>();
            uint hunterexp = reader.Read<uint>();
            reader.Read<byte>();
            reader.Read<byte>();
            reader.Read<byte>();
            byte pkflag = reader.Read<byte>();
            reader.Read<ushort>();
            reader.Read<uint>();
            reader.Read<ushort>();
            uint accountid = reader.Read<uint>();
            byte gmflag = reader.Read<byte>();
}
02/21/2010 16:26 Shadow_Soul#15
i realy don't care if it,is at least he is open source and give us,the emu to play with,not like greedy Lyzerk....so ty a lot shdowz,and ignore windrius :)