Why Release it?
- It is fairly easy to figure out, and if you have decent knowledge of C# and of the source you use, then you can figure it out.
- Also, I believe that open source coding for servers is a lot more efficient, and produces better/more advanced results.
What does a Warehouse Password do?
- This makes it so when you go to your warehouse for the first time after you login, you have to put in a password to open it and view your warehouse possessions.
What will I need?
- Brain w/ common sense
- LOTF source [Link:
]How to Code Warehouse Passwords
Database:
- To access the database:

- You need to create 2 new Tables in Characters:
WHPW
Definition of these tables:
WHPW: The password to your Warehouse.
Source:
Define our variables, etc
In Character.cs:
Code:
public string WHPW = "";
Code:
public byte WHOpen = 0;
Code:
if (WHOpen == 1)
{
SendPacket(General.MyPackets.ETCPacket(MyChar, 4));
}
else
{
if (MyChar.WHPW == "")
{
SendPacket(General.MyPackets.ETCPacket(MyChar, 4));
}
else
{
SendPacket(General.MyPackets.NPCSay("You have created a password for your warehouse. Please input the password to open it."));
SendPacket(General.MyPackets.NPCLink2("Password.", 1));
SendPacket(General.MyPackets.NPCLink("Let me see.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
}
- Now, under case 2032:, add this:
Code:
if (CurrentNPC == 8)
{
if (Control == 1)
{
string WHPW1 = "";
bool ValidPW1 = false;
for (int i = 14; i < 14 + Data[13]; i++)
{
WHPW1 += Convert.ToChar(Data[i]);
}
if (WHPW1 == MyChar.WHPW)
{
ValidPW1 = true;
}
try
{
if (ValidPW1)
{
SendPacket(General.MyPackets.ETCPacket(MyChar, 4));
WHOpen = 1;
}
else
{
SendPacket(General.MyPackets.NPCSay("Wrong Password. Try again."));
SendPacket(General.MyPackets.NPCLink("Ok.", 0));
SendPacket(General.MyPackets.NPCLink("Let me see.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
}
catch (Exception Exc) { General.WriteLine(Exc.ToString()); }
break;
}
}
- Now we have the Warehousemen setup so that they see if you have a password. We now need the NPC to set the warehouse password.
In Client.cs:
Code:
if (CurrentNPC == 9543)
{
if (MyChar.WHPW == "")
{
SendPacket(General.MyPackets.NPCSay("Thieves are only one step behind security. Even those who hoard their treasures"));
SendPacket(General.MyPackets.NPCSay(" in their warehouse are at risk. So, I offer you the opportunity to set a special"));
SendPacket(General.MyPackets.NPCSay(" password for your warehouse. What do you say?"));
SendPacket(General.MyPackets.NPCLink("I want to set a password.", 1));
SendPacket(General.MyPackets.NPCLink("Let me see.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
else
{
SendPacket(General.MyPackets.NPCSay("You have created a password for your warehouse successfully. Do you want to change or delete the password?"));
SendPacket(General.MyPackets.NPCLink("I wanna change it.", 4));
SendPacket(General.MyPackets.NPCLink("Let me see.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
}
Code:
if (CurrentNPC == 9543)
{
if (Control == 1)
{
SendPacket(General.MyPackets.NPCSay("Passwords can be up to nine digits long, the first of which cannot be zero."));
SendPacket(General.MyPackets.NPCSay(" Enter numbers only. If you make a mistake your warehouse will be locked."));
SendPacket(General.MyPackets.NPCSay(" Please check carefully before you enter the password."));
SendPacket(General.MyPackets.NPCLink2("Password.", 2));
SendPacket(General.MyPackets.NPCLink("Let me think.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
if (Control == 2)
{
string WHPW = "";
bool ValidPW = true;
for (int i = 14; i < 14 + Data[13]; i++)
{
WHPW += Convert.ToChar(Data[i]);
}
if (WHPW.IndexOfAny(new char[27] { ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }) > -1)
{
ValidPW = false;
}
try
{
if (ValidPW)
{
MyChar.WHPW = WHPW;
SendPacket(General.MyPackets.SendMsg(MessageId, "SYSTEM", MyChar.Name, "Warehouse password set to " + MyChar.WHPW, 2005));
MyChar.SaveWHPW();
}
else
{
SendPacket(General.MyPackets.NPCSay("That name is not valid!"));
SendPacket(General.MyPackets.NPCLink("Try Again.", 1));
SendPacket(General.MyPackets.NPCLink("I see.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
}
catch (Exception Exc) { General.WriteLine(Exc.ToString()); }
break;
}
if (Control == 4)
{
SendPacket(General.MyPackets.NPCSay("Please enter your old password in order to change it."));
SendPacket(General.MyPackets.NPCLink2("Password.", 5));
SendPacket(General.MyPackets.NPCLink("Let me think.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
if (Control == 5)
{
string WHPW2 = "";
bool ValidPW2 = false;
for (int i = 14; i < 14 + Data[13]; i++)
{
WHPW2 += Convert.ToChar(Data[i]);
}
if (WHPW2 == MyChar.WHPW)
{
ValidPW2 = true;
}
try
{
if (ValidPW2)
{
SendPacket(General.MyPackets.NPCSay("Do you want to change the password, or delete it?"));
SendPacket(General.MyPackets.NPCLink("Change it.", 6));
SendPacket(General.MyPackets.NPCLink("Delete it.", 7));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
else
{
SendPacket(General.MyPackets.NPCSay("Wrong Password, Please enter again."));
SendPacket(General.MyPackets.NPCLink("Okay.", 4));
SendPacket(General.MyPackets.NPCLink("I see.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
}
catch (Exception Exc) { General.WriteLine(Exc.ToString()); }
break;
}
if (Control == 6)
{
WHOpen = 0;
SendPacket(General.MyPackets.NPCSay("Passwords can be up to nine digits long, the first of which cannot be zero."));
SendPacket(General.MyPackets.NPCSay(" Enter numbers only. If you make a mistake your warehouse will be locked."));
SendPacket(General.MyPackets.NPCSay(" Please check carefully before you enter the password."));
SendPacket(General.MyPackets.NPCLink2("Password.", 2));
SendPacket(General.MyPackets.NPCLink("Let me think.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
if (Control == 7)
{
MyChar.WHPW = "";
WHOpen = 0;
SendPacket(General.MyPackets.NPCSay("Password deleted."));
SendPacket(General.MyPackets.NPCLink("Thanks.", 255));
SendPacket(General.MyPackets.NPCSetFace(30));
SendPacket(General.MyPackets.NPCFinish());
}
}
In Character.cs, search for public void SaveKO(), above that add:
Code:
public void SaveWHPW()
{
if (MyClient.There)
if (MyClient.Online)
DataBase.SaveWHPW(this);
}
Code:
public static void SaveWHPW(Character Charr)
{
try
{
MySqlCommand Command = new MySqlCommand("UPDATE `Characters` SET `WHPW` = '" + Charr.WHPW + "' WHERE `Account` = '" + Charr.MyClient.Account + "'", Connection);
Command.ExecuteNonQuery();
}
catch (Exception Exc) { General.WriteLine(Convert.ToString(Exc)); }
}
Code:
Charr.WHPW = (string)DR["WHPW"];
I think thats everything! Enjoy your new Warehouse Password Script!
Press Thanks if this helped!
EDIT: Updated/Fixed
Thanks to © Haydz for pointing out a very simple, yet effective way to make this script better






