25.08.2012, 20:50
Okay this is my third tutorial on how to make a easy and a simple bank system.
Here is the full script,I have explained the whole in the script.
Usefull link are:
https://sampwiki.blast.hk/wiki/Format <<<< Info about formating messages.
https://sampforum.blast.hk/showthread.php?tid=175565<<<<<< info about y_ini (credits to ******)
http://forum.sa-mp.com/showthread.ph...hlight=sscanf2 <<<<<< info about sscanf
Hope this helped.
Here is the full script,I have explained the whole in the script.
PHP код:
#define filterscript//define of the filterscript.
//=========================Includes==============================//
#include <a_samp>//includes that include the files in the script.
#include <streamer>
#include <sscanf2>
#include <YSI\y_ini>
//=============================================================//
#define PATH "/BankAccounts/%s.ini"//This is the path that where you want to save the player's bank account data,in simple words,this will save player's data in a certain folder or some documents.
enum pInfo//this is the enum.
{
pBankAccount,//this variable will save the person's money in his account in the further codes,so in this code we are type or defining this.
pAccountdata//okay now this variable will save person's account data.
}
new PlayerInfo[MAX_PLAYERS][pInfo];//this is the define and the format in which we will insert our information.
forward LoadUser_data(playerid,name[],value[]);
stock GetName(playerid)//this is a stock,this will make our further codes more easy and not very long.
{
new Name[MAX_PLAYER_NAME];//this variable will hold the player's name.
if(IsPlayerConnected(playerid))//this will check that if you are connected to the server or not.
{
GetPlayerName(playerid, Name, sizeof(Name));//this will get player's name and store it in the variable we defined as Name[MAX_PLAYER_NAME].
}
return Name;//the return value.
}
public LoadUser_data(playerid,name[],value[])//this will load persons data.
{
INI_Int("BankAccount",PlayerInfo[playerid][pBankAccount]);//This will load player's money.
INI_Int("Datasaved",PlayerInfo[playerid][pAccountdata]);//this will load player's account data as a whole.
return 1;
}
stock UserPath(playerid)//now this is the path.This is pretty much like a format which will store player's information in an organized way.
{
new string[128],playername[MAX_PLAYER_NAME];//this are the variables which will store differnt informations.
GetPlayerName(playerid,playername,sizeof(playername));//this will get player's name,and store it in the variable we defined as playername.
format(string,sizeof(string),PATH,playername);//now this will insert player's name in player's file,and in the path we defined earlier.
return string;
}
public OnPlayerDisconnect(playerid, reason)
{
new INI:File = INI_Open(UserPath(playerid));//this will open player's file from the path we defined at the top of the script.
INI_SetTag(File,"data");//this will set it's tag as data.
INI_WriteInt(File,"BankAccount",PlayerInfo[playerid][pBankAccount]);//when a player will disconnect,it will store player's account money in his file.
INI_WriteInt(File,"Datasaved",PlayerInfo[playerid][pAccountdata]);//when a player will disconnect,it will store player's account data as a whole in his file.
INI_Close(File);//now after saving,this will save and close player's file.
return 1;
}
public OnPlayerConnect(playerid)
{
if(PlayerInfo[playerid][pAccountdata] == 0)//this will check that if player's account = 0 this will set his account balance to 0.
{
new INI:File = INI_Open(UserPath(playerid));//again this will open player's file from the player's file.
INI_SetTag(File,"data");//set's the tag to data.
INI_WriteInt(File,"BankAccount",0);//set's player bank balance to 0.
INI_WriteInt(File,"DataSaved",1);//Datasaved would be equal to 1.
INI_Close(File);//after saving it will close the file.
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);//and then after closing it will again load player's file from the created file.
}
else
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);//if player's account data is not equal to 0,this will load player's bank account data that was saved when he logged off last time.
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/bankhelp", cmdtext, true, 10) == 0)//the help command.Was not needed but will make the script and the function look good.
{
SendClientMessage(playerid,-1,"|___________________BANK HELP___________________|");//this will send player message.
SendClientMessage(playerid,-1,"/witdraw /deposit /bankhelp /checkbalance");
SendClientMessage(playerid,-1,"|______________________________________________|");//again the same.
}
else if (strcmp("/deposit", cmdtext, true, 10) == 0)//now the deposit command.
{
new string[256];//the variable which will store the information of a string that we will format after wards.
new type;//this variable will store player's input.
{
if(sscanf(cmdtext, "d", type)) return SendClientMessage(playerid, -1, "[USAGE]: /deposit [amount]");//this will check that if he inserted the write format or not,if it is and incorrect format,it will break the codes there and end the process with an error message.
if(type == 0)//this will check that if the type = 0.
if(GetPlayerMoney(playerid)< type)//this will check that if he is inserting a higher amount of money then he has in hand.
{
GivePlayerMoney(playerid,-type);//this minus his money from his hand.
PlayerInfo[playerid][pBankAccount] += type;//this will store the minused money in player's file,and will add money to his account.
format(string, sizeof(string), "INFO: You have successfully deposited $%d to your bank account.", type);//this is the format of the following message of how much money you deposited into your account.
SendClientMessage(playerid, 0xFFFFFF, string);//this will send the message which we formated above,the information was stored in the variable string.
}
else SendClientMessage(playerid, 0xFFFFFF, "SERVER: You do not have that much amount in your hand");//this will send an error message that if a player enter's an invalid amount.Or in simple words that if he enter's a higher amount then he has in hand.
}
}
else if (strcmp("/withidraw", cmdtext, true, 10) == 0)//now the withdraw command.
{
new string[256];//this is the variable that will store the formated message,we will format it in the following codes.
new type;////this variable will store player's input.
{
if(sscanf(cmdtext, "d", type)) return SendClientMessage(playerid, -1, "[USAGE]: /withdraw [amount]");//this will check that if he inserted the write format or not,if it is and incorrect format,it will break the codes there and end the process with an error message.
if(type == 0)//this will check that if the type = 0.
if(PlayerInfo[playerid][pBankAccount] >= type)//this will check that if the inputed amount is higher then the amount in the bank account.
{
PlayerInfo[playerid][pBankAccount] -= type;//this will minus the the amount or money he inserted, in the command.
GivePlayerMoney(playerid, type);//this will give the player money he wanted to withdraw from the bank.
format(string, sizeof(string), "INFO: You have successfully withdrawn $%d from your bank account.", type);//this is the formated message.This will store the formatted message in the variable we defined as string.
SendClientMessage(playerid, 0xFFFFFF, string);//will send the formated message we formatted above.
}
else SendClientMessage(playerid, 0xFFFFFF, "SERVER: You do not have that much amount in your account");//this will send an error message that if a player enter's an invalid amount.Or in simple words that if he enter's a higher amount then he has in bank account.
}
}
else if (strcmp("/checkbalance", cmdtext, true, 10) == 0)
{
new string[256];//the variable which will store the formatted message we will format in the next line.
format(string, sizeof(string), "You currently have $%d In your bank account.", PlayerInfo[playerid][pBankAccount]);//this is the formated message which will tell the player that how much money he deposited in the bank account.
SendClientMessage(playerid,-1,string);//this will send the formatted above,and which was stored in the variable above.
}
return 0;
}
https://sampwiki.blast.hk/wiki/Format <<<< Info about formating messages.
https://sampforum.blast.hk/showthread.php?tid=175565<<<<<< info about y_ini (credits to ******)
http://forum.sa-mp.com/showthread.ph...hlight=sscanf2 <<<<<< info about sscanf
Hope this helped.