08.06.2013, 08:00
Introduction
This is my second tutorial at Forum SAMP and hope you all like it.
Content
1) LOGIN+REGISTER system YINI+WHIRLPOOL explained !
2) RANDOM MESSAGES explained !
3) SIMPLE COMMANDS ZCMD and STRCMP explained !
Last But Not Least
Any typo? error? bug? Please inform me.
Any problem? Post your problem here.
This is my second tutorial at Forum SAMP and hope you all like it.
Content
1) LOGIN+REGISTER system YINI+WHIRLPOOL explained !
2) RANDOM MESSAGES explained !
3) SIMPLE COMMANDS ZCMD and STRCMP explained !
pawn Code:
// ========================================================================
// LOGIN REGISTER SYSTEM Y_INI + WHIRLPOOL explained !
// SIMPLE COMMAND USING STRCMP and ZCMD explained !
// RANDOM MESSAGES explained !
// Credits : Giroud12
// Contact : *******/mrzackysevenfold or forum.sa-mp.com/member.php?u=198770
// Any typo? mistake? bug? and blablabla? please inform to me
// Same as newbienoob tutorial but this explained more thing such as......
// Why do you need to learn from this tutorial?
// 1)lol, why not 2)explained login + register 3)will help newbie
// 4)explained simple commands 5)random message explained
// 6)because this is tutorial 7)will help you to improve your knowledge
// Any suggestion for updates? Just post it :)
// More commands will add in the next update
// ========================================================================
// Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase
// ========================================================================
#include < a_samp >
// credits to Team SAMP
// you need to put this in any script that related to SAMP !!
#include < zcmd >
// credits to ZeeX
// for command
#include < YSI\y_ini >
// credits to Alex Cole aka Y_Less
// this is for LOGIN REGISTER system
native WP_Hash(buffer[],len,const str[]);
// this is whirlpool native
// for hashing
#define as FILTERSCRIPT
// this will define it as filterscript
#define X My Server
// this will define "X" to "My Server"
// it means "#X" is same with "My Server"
// I make it short
#define USE_ZCMD_COMMANDS true // true / false
#define USE_STRCMP_COMMANDS false // true / false
// if you make this two define true, the command will not 100% works
#define RED 0xAA3333AA
#define YELLOW 0xFFFF00AA
#define PURPLE 0x9370DBFF
// this is the colour defines, it use when send message
#define DIALOG_REGISTER 2011
#define DIALOG_LOGIN 2012
// this is the dialog define, I put 2011/2012 to prevent the dialog will mix
#define UserPath "Users/%s.ini"
// here is the userpath that will be use in saving player data
// "Users" is name of a folder that you need to put in "scriptfiles" folder
// You can change "Users" to any name you want
enum PlayerInfo
{
Pass[129],
// pass
Adminlevel,
// adminlevel
VIPlevel,
// viplevel
Money,
// money/cash
Scores,
// scores
Kills,
// kills
Deaths
// deaths
}
// all this enum will be use in saving players data
new pInfo[MAX_PLAYERS][PlayerInfo];
// make the script short/new variable that can be use
new RandomMSG[][] =
{
"Welcome To "#X" server v0.3x",
"Visit our website at forum.sa-mp.com",
"Play fair and dont cheating/hacking",
"Cheating/hacking will cause you kick/ban"
// above is all random messages, last random messages dont need to put ","
// edit or add more if you want
};
stock Path(playerid)
// create new stock for load the user data
{
new str[128],name[MAX_PLAYER_NAME];
// new string and name variable
GetPlayerName(playerid,name,sizeof(name));
// get player name
format(str,sizeof(str),UserPath,name);
return str;
}
forward loadaccount_user(playerid, name[], value[]);
// forward new function of loadaccount_user
public loadaccount_user(playerid, name[], value[])
// public for loadaccount_user
{
INI_String("Password", pInfo[playerid][Pass],129);
// this is a password so we use INI_STRING
INI_Int("AdminLevel",pInfo[playerid][Adminlevel]);
// this an AdminLevel so we use INI_INT Info:
INI_Int("VIPLevel",pInfo[playerid][VIPlevel]);
// same like above
INI_Int("Money",pInfo[playerid][Money]);
// same like above
INI_Int("Scores",pInfo[playerid][Scores]);
// same like above
INI_Int("Kills",pInfo[playerid][Kills]);
// same like above
INI_Int("Deaths",pInfo[playerid][Deaths]);
// same like above
return 1;
}
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print("TUTORIAL BY GIROUD12 loaded !");
print("--------------------------------------\n");
// this will shown in samp-server.exe
SetTimer("SendMSG", 1000*60*2, true);
// the timer for random message
// the timer will send the random message in 2 minutes
return 1;
}
public OnFilterScriptExit()
{
print("\n----------------------------------");
print("TUTORIAL BY GIROUD12 unloaded !");
print("----------------------------------\n");
// this will shown in samp-server.exe
return 1;
}
forward SendMSG();
// forward to send the random messages
public SendMSG()
// new public for send the random messages
{
new randMSG = random(sizeof(RandomMSG));
// new randMSG = the random messages that we write
SendClientMessageToAll(YELLOW, RandomMSG[randMSG]);
// will send the random messages
}
public OnPlayerConnect(playerid)
// when player connect
{
new name[MAX_PLAYER_NAME], str[128];
// new variable called "name"
GetPlayerName(playerid,name,sizeof(name));
// get player name
format(str, sizeof(str), "Welcome %s to "#X" server v0.3x", name);
SendClientMessage(playerid, YELLOW, str);
// will send player welcome message
if(fexist(Path(playerid)))
// check the player registered or not
{
INI_ParseFile(Path(playerid),"loadaccount_user", .bExtra = true, .extra = playerid);
// load user data
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Welcome back. This account is registered. \nInsert your password to login to your account","Login","Quit");
// if they registered, show login dialog
}
else
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Welcome! This account is not registered.\nEnter your own password to create a new account.","Register","Quit");
// if they not register, show register dialog
return 1;
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
// when player response to dialog
{
if(dialogid == DIALOG_REGISTER)
// if dialog id is register dialog
{
if(!response) return Kick(playerid);
// if they click 2nd button, then automatically they will be kicked
if(response)
// if they click 1st button
{
if(!strlen(inputtext))
// if they didnt put password
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Welcome! This account is not registered.\nEnter your own password to create a new account.\nPlease enter the password!","Register","Quit");
// show register dialog
return 1;
}
// if they succesfull put their new password
new hashpass[129];
// new variable for hashing
WP_Hash(hashpass,sizeof(hashpass),inputtext);
// whirlpool will has their password
new INI:file = INI_Open(Path(playerid));
// open new file to save their data
INI_SetTag(file,"Player's Data");
// set title in the player data file
INI_WriteString(file,"Password",hashpass);
// this will right the hashed password
INI_WriteInt(file,"AdminLevel",0);
// set his admin level to 0 when he registered
INI_WriteInt(file,"VIPLevel",0);
// same like above
INI_WriteInt(file,"Money",0);
// same like above
INI_WriteInt(file,"Scores",0);
// same like above
INI_WriteInt(file,"Kills",0);
// same like above
INI_WriteInt(file,"Deaths",0);
// same like above
INI_Close(file);
// will close file
SendClientMessage(playerid,YELLOW,"You have been successfully registered");
// send player message that they sucessfully registered
}
}
if(dialogid == DIALOG_LOGIN)
// if dialog id is dialog login
{
if(!response) return Kick(playerid);
// if they click 2nd button, then automatically they will be kicked
if(response)
// if they kicked 1st button
{
new hashpass[129];
// new variable to hashing
WP_Hash(hashpass,sizeof(hashpass),inputtext);
// whirlpool will hash their password
if(!strcmp(hashpass,pInfo[playerid][Pass]))
// if they insert correct password
{
INI_ParseFile(Path(playerid),"loadaccount_user",.bExtra = true, .extra = playerid);
// this will load player data
SetPlayerScore(playerid,pInfo[playerid][Scores]);
// will set his score to the score in their files
GivePlayerMoney(playerid,pInfo[playerid][Money]);
// same as above
SendClientMessage(playerid,YELLOW,"Welcome back! You have successfully logged in");
// send player message that they have succesfully login
}
else
// if they put the wrong password
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Welcome back. This account is registered. \nInsert your password to login to your account.\nIncorrect password!","Login","Quit");//We will tell to them that they've entered an incorrect password
// show login dialog
return 1;
}
}
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new INI:file = INI_Open(Path(playerid));
// open their file
INI_SetTag(file,"Player's Data");
// set the title in player dile
INI_WriteInt(file,"AdminLevel",pInfo[playerid][Adminlevel]);
// get latest adminlevel
INI_WriteInt(file,"VIPLevel",pInfo[playerid][VIPlevel]);
// same as above
INI_WriteInt(file,"Money",GetPlayerMoney(playerid));
// same as above
INI_WriteInt(file,"Scores",GetPlayerScore(playerid));
// same as above
INI_WriteInt(file,"Kills",pInfo[playerid][Kills]);
// same as above
INI_WriteInt(file,"Deaths",pInfo[playerid][Deaths]);
// same as above
INI_Close(file);
// close file
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
pInfo[killerid][Kills]++;
// will add 1 kill to the killer
pInfo[playerid][Deaths]++;
// will add 1 death to the dead player
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
#if USE_STRCMP_COMMANDS == true
// if u make it true on top of the script
if (strcmp("/kill", cmdtext, true, 4) == 0)
{
if(GetPlayerMoney(playerid) <1000) return SendClientMessage(playerid,RED, "ERROR: You don't have $1000 !");
// if player money below 1000 then it will send player message
SetPlayerHealth(playerid, 0.0);
// set player health to 0/die
SendClientMessage(playerid, RED, "You just killed yourself");
// send player message
SendClientMessageToAll(RED, "Someone using /kill and kill him/herself and paid $1000 !");
// send message to all player in server
GivePlayerMoney(playerid, -1000);
// minus 1000 from player money
return 1;
}
if (strcmp("/heal", cmdtext, true, 4) == 0)
// /heal is the command/4 is how many letter in the command/true is to make the command work
{
if(GetPlayerMoney(playerid) <500) return SendClientMessage(playerid,RED, "ERROR: You don't have $500 !");
// if player money below 500 then it will send player message
SetPlayerHealth(playerid, 100.0);
// set player health to 100/full
SendClientMessage(playerid, RED, "You just healed yourself");
// send player message
SendClientMessageToAll(RED, "Someone using /heal and heal him/herself and paid $500 !");
// send message to all player
GivePlayerMoney(playerid, -500);
// minus -500 from player money
return 1;
}
if (strcmp("/spawnme", cmdtext, true, 7) == 0)
// /spawnme is the command/7 is how many letter in the command/true is to make the command work
{
SpawnPlayer(playerid);
// spawn player
SendClientMessage(playerid, RED, "You have been spawned");
// send player message
return 1;
}
if (strcmp("/kickme", cmdtext, true, 6) == 0)
// /kickme is the command/6 is how many letter in the command/true is to make the command work
{
SendClientMessageToAll(RED, "1 of the player has been kicked | Reason: He/She want it");
// send message to all player in server
Kick(playerid);
// kick player
return 1;
}
if (strcmp("/banme", cmdtext, true, 5) == 0)
// /banme is the command/5 is how many letter in the command/true is to make the command work
{
SendClientMessageToAll(RED, "1 of the player has been banned | Reason: He/She want it");
// send message to all player in server
BanEx(playerid, "You're banned !");
// send player message with ban player
return 1;
}
if (strcmp("/godon", cmdtext, true, 5) == 0)
// /godon is the command/5 is how many letter in the command/true is to make the command work
{
if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED,"ERROR: You are'nt Rcon Admin");
// check if the player is rcon admin or not
// if not it will send message
SetPlayerHealth(playerid, 99999999999.0);
// set player health to infinite
SetPlayerArmour(playerid, 99999999999.0);
// set player armour to infinite
SendClientMessageToAll(RED, "Rcon Admin has turned on his God Mode");
// send message to all player in server
return 1;
}
if (strcmp("/godoff", cmdtext, true, 6) == 0)
// /godon is the command/5 is how many letter in the command/true is to make the command work
{
if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED,"ERROR: You are'nt Rcon Admin");
// check if the player is rcon admin or not
// if not it will send message
SetPlayerHealth(playerid, 100.0);
// set player health to 100/full
SetPlayerArmour(playerid, 100.0);
// set player armour to 100/full
SendClientMessageToAll(RED, "Rcon Admin has turned off his God Mode");
// send message to all player in server
return 1;
}
#endif
// if you put #if so you need to put #endif to prevent errors
return SendClientMessage(playerid, RED, "ERROR: Unknown Command");
// if player make /troll but the command not exist in your server then it will send player message
}
#if USE_ZCMD_COMMANDS == true
// if u make it true on top of the script
CMD:kill(playerid, params[])
// the cmd is /kill
{
if(GetPlayerMoney(playerid) <1000) return SendClientMessage(playerid,RED, "ERROR: You don't have $1000 !");
// if player money below 1000 then it will send player message
SetPlayerHealth(playerid, 0.0);
// set player health to 0/die
SendClientMessage(playerid, RED, "You just killed yourself");
// send player message
SendClientMessageToAll(RED, "Someone using /kill and kill him/herself and paid $1000 !");
// send message to all player in server
GivePlayerMoney(playerid, -1000);
// minus 1000 from player money
return 1;
}
CMD:heal(playerid, params[])
// the cmd is /heal
{
if(GetPlayerMoney(playerid) <500) return SendClientMessage(playerid,RED, "ERROR: You don't have $500 !");
// if player money below 500 then it will send player message
SetPlayerHealth(playerid, 100.0);
// set player health to 100/full
SendClientMessage(playerid, RED, "You just healed yourself");
// send player message
SendClientMessageToAll(RED, "Someone using /heal and heal him/herself and paid $500 !");
// send message to all player in server
GivePlayerMoney(playerid, -500);
// minus 500 from player money
return 1;
}
CMD:spawnme(playerid, params[])
// the cmd is /spawnme
{
SpawnPlayer(playerid);
// spawn player
SendClientMessage(playerid, RED, "You have been spawned");
// send player message
return 1;
}
CMD:kickme(playerid, params[])
// the cmd is /kickme
{
SendClientMessageToAll(RED, "1 of the player has been kicked | Reason: He/She want it");
// send player message
Kick(playerid);
// kick player
return 1;
}
CMD:banme(playerid, params[])
// the cmd is /banme
{
SendClientMessageToAll(RED, "1 of the player has been banned | Reason: He/She want it");
// send player message
BanEx(playerid, "You're banned !");
// send player message and ban the player
return 1;
}
CMD:godon(playerid, params[])
// the cmd is /godon
{
if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED,"ERROR: You are'nt Rcon Admin");
// check if the player is rcon admin or not
// if not it will send message
SetPlayerHealth(playerid, 99999999999.0);
// set player health to infinite
SetPlayerArmour(playerid, 99999999999.0);
// set player armour to infinite
SendClientMessageToAll(RED, "Rcon Admin has turned on his God Mode");
// send message to all player in server
return 1;
}
CMD:godoff(playerid, params[])
// the cmd is /godoff
{
if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED,"ERROR: You are'nt Rcon Admin");
// check if the player is rcon admin or not
// if not it will send message
SetPlayerHealth(playerid, 100.0);
// set player health to 100/full
SetPlayerArmour(playerid, 100.0);
// set player armour to 100/full
SendClientMessageToAll(RED, "Rcon Admin has turned off his God Mode");
// send message to all player in server
return 1;
}
#endif
// if you put #if so you need to put #endif to prevent errors
Last But Not Least
Any typo? error? bug? Please inform me.
Any problem? Post your problem here.