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!

[REL] Barber+Hair dyes for CoEmu v2

Junior Spellweaver
Joined
Jan 14, 2007
Messages
140
Reaction score
5
in npc talk:

Code:
case 10002://Barber
{
if (LinkBack == 0)
{
CSocket.Client.Hair_old = CSocket.Client.Hair;
Text("I'm capable of changing your hairstyles at a cost of 500 silvers.", CSocket);
Link("New Dynasty Hairstyles.", 1, CSocket);
Link("New Styles.", 2, CSocket);
Link("Nostalgic styles.", 3, CSocket);
Link("PC Styles", 4, CSocket);
Link("Keep my current style.", 255, CSocket);
Face(30, CSocket);
End(CSocket);
}
else if (LinkBack == 1)
{
Text("Which style would you like to select from?", CSocket);
Link("New Dynasty 1", 5, CSocket);
Link("New Dynasty 2", 6, CSocket);
Link("New Dynasty 3", 7, CSocket);
Link("New Dynasty 4", 8, CSocket);
Link("New Dynasty 5", 9, CSocket);
Link("Next Page", 60, CSocket);
Face(30, CSocket); End(CSocket);
}
else if (LinkBack == 60)
{
Text("Which style would you like to select from?", CSocket);
Link("New Dynasty 6", 10, CSocket);
Link("New Dynasty 7", 11, CSocket);
Link("New Dynasty 8", 12, CSocket);
Link("New Dynasty 9", 13, CSocket);
Link("New Dynasty 10", 14, CSocket);
Link("Next Page", 61, CSocket);
Face(30, CSocket); End(CSocket);
}
else if (LinkBack == 61)
{
Text("Which style would you like to select from?", CSocket);
Link("New Dynasty 11", 15, CSocket);
Link("I changed my mind.", 65, CSocket);
Face(30, CSocket); End(CSocket);
}

else if (LinkBack == 2)
{

Text("Which style would you like to select from?", CSocket);
Link("New Style 1", 16, CSocket);
Link("New Style 2", 17, CSocket);
Link("New Style 3", 18, CSocket);
Link("New Style 4", 19, CSocket);
Link("New Style 5", 20, CSocket);
Link("Next Page", 62, CSocket);
Face(30, CSocket); End(CSocket);
}
else if (LinkBack == 62)
{
Text("Which style would you like to select from?", CSocket);
Link("New Style 6", 21, CSocket);
Link("New Style 7", 22, CSocket);
Link("New Style 8", 23, CSocket);
Link("New Style 9", 24, CSocket);
Link("New Style 10", 25, CSocket);
Link("Next Page", 63, CSocket);
Face(30, CSocket); End(CSocket);
}
else if (LinkBack == 63)
{
Text("Which style would you like to select from?", CSocket);
Link("New Style 11", 26, CSocket);
Link("I changed my mind.", 65, CSocket);
Face(30, CSocket); End(CSocket);
}
else if (LinkBack == 3)
{

Text("Which style would you like to select from?", CSocket);
Link("Nostalgic 1", 27, CSocket);
Link("Nostalgic 2", 28, CSocket);
Link("Nostalgic 3", 29, CSocket);
Link("Nostalgic 4", 30, CSocket);
Link("Nostalgic 5", 31, CSocket);
Link("Next Page", 64, CSocket);
Face(30, CSocket); End(CSocket);

}
else if (LinkBack == 64)
{
Text("Which style would you like to select from?", CSocket);
Link("Nostalgic 6", *** CSocket);
Link("Nostalgic 7", 33, CSocket);
Link("Nostalgic 8", 34, CSocket);
Link("I changed my mind.", 65, CSocket);
Face(30, CSocket); End(CSocket);
}
else if (LinkBack == 4)
{
Text("Which style would you like to select from?", CSocket);
Link("PC Style 1", 35, CSocket);
Link("PC Style 2", 36, CSocket);
Link("PC Style 3", 37, CSocket);
Link("PC Style 4", 38, CSocket);
Link("PC Style 5", 39, CSocket);
Link("I changed my mind.", 65, CSocket);
Face(30, CSocket); End(CSocket);
}
else if (LinkBack >= 5 && LinkBack <= 15)
{
CSocket.Client.Hair = calcHairColor(CSocket.Client.Hair) + 36 + LinkBack; // change hair
ConquerPacket.ToLocal(ConquerPacket.Effect(CSocket.Client.ID, "Health"), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, 0);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
Text("Your hair style has been changed. Are you satisfied with it?", CSocket);
Link("Yes. Thank you", 50, CSocket);
Link("Pick another style", 1, CSocket);
Face(30, CSocket);
End(CSocket);
}
else if (LinkBack >= 16 && LinkBack <= 26)
{
CSocket.Client.Hair = calcHairColor(CSocket.Client.Hair) + 14 + LinkBack; // change hair
ConquerPacket.ToLocal(ConquerPacket.Effect(CSocket.Client.ID, "Health"), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, 0);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
Text("Your hair style has been changed. Are you satisfied with it?", CSocket);
Link("Yes. Thank you", 50, CSocket);
Link("Pick another style", 2, CSocket);
Face(30, CSocket);
End(CSocket);
}
else if (LinkBack >= 27 && LinkBack <= 34)
{
CSocket.Client.Hair = calcHairColor(CSocket.Client.Hair) - 17 + LinkBack; // change hair
ConquerPacket.ToLocal(ConquerPacket.Effect(CSocket.Client.ID, "Health"), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, 0);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
Text("Your hair style has been changed. Are you satisfied with it?", CSocket);
Link("Yes. Thank you", 50, CSocket);
Link("Pick another style", 3, CSocket);
Face(30, CSocket);
End(CSocket);
}
else if (LinkBack >= 35 && LinkBack <= 39)
{
CSocket.Client.Hair = calcHairColor(CSocket.Client.Hair) - 14 + LinkBack; // change hair
ConquerPacket.ToLocal(ConquerPacket.Effect(CSocket.Client.ID, "Health"), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, 0);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
Text("Your hair style has been changed. Are you satisfied with it?", CSocket);
Link("Yes. Thank you", 50, CSocket);
Link("Pick another style", 4, CSocket);
Face(30, CSocket);
End(CSocket);
}
else if (LinkBack == 50) //check/deduct money
{
if (CSocket.Client.Money >= 500)
{
Money(-500, CSocket);
Text("I hope you enjoy your new hair style.", CSocket);
Link("Thanks.", 255, CSocket);
Face(30, CSocket);
End(CSocket);
}
else
{
CSocket.Client.Hair = CSocket.Client.Hair_old;
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
Text("You do not have 500 Silvers to change your hair style.", CSocket);
Link("Sorry sir.", 255, CSocket);
Face(30, CSocket);
End(CSocket);
}
}
else if (LinkBack == 65)
{
CSocket.Client.Hair = CSocket.Client.Hair_old;
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
Text("Dare you try to rip me off?! Be gone, fool!", CSocket);
Link("Sorry sir.", 255, CSocket);
Face(30, CSocket); End(CSocket);
}
else
{
CSocket.Client.Hair = CSocket.Client.Hair_old;
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
Text("Dare you try to rip me off?! Be gone, fool!", CSocket);
Link("Sorry sir.", 255, CSocket);
Face(30, CSocket); End(CSocket);
}
break;
}
in the same file find:
Code:
public static void Text(string value, ClientSocket CSocket)
above it add:
Code:
public static int calcHairColor(int hairID)
{
return (int)(hairID / 100) * 100;
}
that should be it for the barber npc.

Dyes:
in useitem.cs:
Code:
#region Hair Dyes
case 1060030: //black dye
{
CSocket.Client.Hair = 300 + calcHairStyle(CSocket.Client.Hair);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
break;
}
case 1060090: //white dye
{
CSocket.Client.Hair = 400 + calcHairStyle(CSocket.Client.Hair);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
break;
}
case 1060080: //red dye
{
CSocket.Client.Hair = 500 + calcHairStyle(CSocket.Client.Hair);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
break;
}
case 1060070://brown dye
{
CSocket.Client.Hair = 600 + calcHairStyle(CSocket.Client.Hair);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
break;
}
case 1060060://green dye
{
CSocket.Client.Hair = 700 + calcHairStyle(CSocket.Client.Hair);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
break;
}
case 1060050://blue dye
{
CSocket.Client.Hair = 800 + calcHairStyle(CSocket.Client.Hair);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
break;
}
case 1060040://violet dye
{
CSocket.Client.Hair = 900 + calcHairStyle(CSocket.Client.Hair);
CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle));
break;
}
#endregion
in useitem.cs find (its towards the end of the file):
Code:
if (Delete)
{
CSocket.Client.Inventory.Remove(Item.UID);
CSocket.Send(ConquerPacket.ItemUsage(Item.UID, 255, Struct.ItemUsage.RemoveItem));
Database.Database.DeleteItem(Item.UID);
}
}
add right after:
Code:
public static int calcHairStyle(int hair)
{
return hair % 100;
}
and that should be it.

Credits to iamanoob on epvpers this thread is created to get the section alive again
 
Newbie Spellweaver
Joined
Feb 22, 2008
Messages
81
Reaction score
0
u forgot to add
Code:
public int Hair_old = 0;
In Entities/Character.cs
 
Joined
Mar 8, 2010
Messages
2
Reaction score
0
This code is bugged. A character can pick their hair style, then close the NPC dialog and get it for free. There needs to be some kind of check to make sure they have been through LinkBack == 50 before finalizing the hair style.

Its a difficult problem, because you can try insert something like...

File: PacketProcessor.cs

Code:
case 2032: //Reply NPC Talk
{	
     NPCs NPC = CSocket.Client.LastNPC;
     int LinkBack = Data[10];
     if(LinkBack != 255)
          Handler.NpcTalk(CSocket, NPC, LinkBack);

     // try change the hair back to the old style
     if (NPC == NPCs.Barber && LinkBack != 50) // deduct money case
          CSocket.Client.Hair = CSocket.Client.Hair_old;

     break;
}

But, because of the loop back, it results in your hair changing, and then changing back so fast that you cant even notice a difference. Can anyone else see a work around?
 
Back
Top