Jump to content

[PAWN] Dice(Barbut) System


Tupi
 Share

Recommended Posts

Deoarece vad că foarte multe persoane care au impresia că animatiile "te ajuta să căștigi",

în acest tutorial am să vă arăt baza unui sistem de dice(barbut) intalnit pe aproape orice server.

 

 

Înainte de toate eu am folosit urmatoarele include-uri: a_samp, zcmd, sscanf2, am definit SCM-ul.

#include <a_samp>
#include <zcmd>
#include <sscanf2>
  
#define SCM SendClientMessage

 

1. Pentru început vom crea comanda prin care trimitem o învitație jucătorului pentru dice(barbut).

CMD:dice(playerid, params[])
{
    new id, moneyAmount; //cream doua variabile pentru a lua id-ul jucatorului pe care vrem sa-l invitam si suma de bani pe care vrem sa jucam
    if(sscanf(params, "ui", id, moneyAmount)) return SCM(playerid, -1, "Foloseste: /dice <PlayerID/Name> <Amount>"); //verificam daca in comanda s-a folosit un nume/id si o suma de bani 
    if(!IsPlayerConnected(id) || id == INVALID_PLAYER_ID) return SCM(playerid, -1, "Eroare: Acel jucator nu este conectat!"); //verificam daca jucatorul este conectat, in cazul in care nu este, vom trimite un mesaj informativ
    if(id == playerid) return SCM(playerid, -1, "Eroare: Nu poti folosi aceasta comanda asupra ta"); //verificam daca ID-ul celui invitat nu este chiar ID-ul celui care invita
    if(moneyAmount < 1000 || moneyAmmount > 500000) return SCM(playerid, -1, "Eroare: Suma invalida! (1,000 - 500,000)"); //verificam daca suma introdusa de invitant nu este mai mica de 1.000$ sau mai mare de 500.000$
    if(GetPlayerMoney(playerid) < moneyAmount) return SCM(playerid, -1, "Eroare: Nu ai aceasta suma de bani!"); //verificam daca invitantul are suma de bani pe care vrea sa joace
    if(GetPlayerMoney(id) < moneyAmount) return SCM(playerid, -1, "Eroare: Acel jucator nu are aceasta suma de bani!"); //verificam daca invitatul are suma de bani pe care vrea invitantul sa joace.
    if(GetPVarInt(id, "DiceInvited") == 1) return SCM(playerid, -1, "Eroare: L-ai invitat deja pe acest jucator!"); verificam daca nu cumva i-a trimis deja o invitatie acelui jucator   	
    SetPVarInt(id, "DiceInvited", 1); //setam o variabila pe ID-ul celui invitat (DiceInvited in cazul meu) pe 1 pentru a nu se face spam cu invitatie tot aceluiasi jucator.
    SetPVarInt(id, "InvitationID", playerid); //setam o varibla pe ID-ul celui invitat cu ID-ul invitantului pentru a sti cine l-a invitat sa joace.
    SetPVarInt(id, "DiceMoney", moneyAmount); //setam o variabila pe ID-ul celui invitat cu suma de bani pe care vrea invitantul sa joace.
    
    new message[128], player1[16], player2[16]; //cream o variabila pentru a formata mesajele de informare si doua variabile pentru a lua numele invitantului si numele invitatului
    GetPlayerName(playerid, player1, 16); //luam jumele invitantului
    GetPlayerName(id, player2, 16); //luam numele invitatului
    
    format(message, 128, "Jucatorul %s te-a invitat sa joci barbut pe %d$. Tasteaza (/accept dice %d) pentru a juca cu el.", player1, moneyAmount, playerid); //formatam un mesaj pentru a informa respectivul jucator ca a fost invitat de cineva sa joace barbut
    SCM(id, -1, message); //ii trimitem mesajul formatat mai sus
    format(message, 128, "L-ai invitat pe %s sa joace barbut pe %d$. Asteapta un raspuns.", player2, moneyAmount); //formatam un mesaj pentru a il informa pe cel care trimite invitatia
    SCM(playerid, -1, message); //ii trimitem mesajul
    return 1;
}

2. Vom crea comanda pentru a accepta o invitatie pentru barbut.

CMD:accept(playerid, params[])
{
    new item[20], id, player1[16], player2[16], string[180];
    if(sscanf(params, "s[20]u", item, id)) {
	SCM(playerid, -1, "Foloseste: /accept <item> <Playerid/Name>");
        SCM(playerid, -1, "Disponibilitati: dice");
        return 1;
    }
    if(!IsPlayerConnected(id) || id == INVALID_PLAYER_ID) return SCM(playerid, -1, "Eroare: Acel jucator nu este conectat"); //Verificam daca jucatorul caruia i se accepta invitatia este conectat sau nu
          
    if(strcmp(item, "dice", true) == 0) //daca primul lucru scris dupa /accept este "dice"
    {
	if(GetPVarInt(playerid, "DiceInvited") == -1) return SCM(playerid, -1, "Eroare: Nu ai fost invitat sa joci barbut."); //verificam daca jucatorul a fost invitat sa joace barbut
	if(id == playerid) return SCM(playerid, -1, "Eroare: Nu poti folosi aceasta comanda asupra ta!"); //verificam daca nu isi introduce chiar propriul ID
	if(GetPVarInt(playerid, "DiceInvited") == id) { //verificam daca variabila "DiceInvited" a jucatorul care foloseste comanda de accept este egala cu ID-ul introdus dupa "dice" 
		if(GetPlayerMoney(playerid) < GetPVarInt(playerid, "DiceMoney") return SendClientMessage(playerid, -1, "Eroare: Nu ai suficienti bani!"); //verificam daca jucatorul care accepta invitatia are suma necesara de bani
		if(GetPlayerMoney(id) < GetPVarInt(playerid, "DiceMoney") return SendClientMessage(playerid, -1, "Eroare: Acel jucator nu are suma de bani!"); //verificam daca jucatorul care a trimis invitatia are suma necesara de bani
           
		new diceX[MAX_PLAYERS], diceY[MAX_PLAYERS]; //cream cate o variabila pentru ambii jucatori
		diceX[playerid] = random(6); //variabilei pentru jucatorul care accepta invitatia i se atribuieste o valoare LA INTAMPLARE de la 1 la 6 (valorile maxime de pe un zar)
		diceY[id] = random (6); // variabilei pentru jucatorul care trimite invitatie i se atribuieste o valoare LA INTAMPLARE de la 1 la 6 (valori maxime de pe un zar)
            
        	GetPlayerName(playerid, player1, 16); //luam numele jucatorului care a fost invitat
        	GetPlayerName(id, player2, 16); //luam numele jucatorului care a invitat
            
		if(diceX[playerid] > diceY[id]) { //Primul caz. Atunci cand jucatorul care a fost invitat are o valoare mai mare "pe zar" decat jucatorul care a invitat
			format(string, 128, "%s a dat %d iar %s a dat %d.", player1, diceX[playerid], player2, diceY[id]); //formatam un mesaj de informare cat a dat fiecare si il trimitem catre ambii
			SCM(playerid, -1, string);
    			SCM(id, -1, string);
    			format(string, 128, "%s a castigat %d$", player1, GetPVarInt(playerid, "DiceMoney")); //formatam un mesaj de informare cu cine a castigat, suma castigata si il trimitem catre ambii
    			SCM(playerid, -1, string);
    			SCM(id, -1, string);
                
    			GivePlayerMoney(playerid, GetPVarInt(playerid, "DiceMoney")); //jucatorului care accepta invitatia ii dam suma de bani pusa la bataie deoarece el are valoare mai mare "pe zar"
    			GivePlayerMoney(id, -GetPVarInt(playerid, "DiceMoney")); //jucatorului care trimite invitatia ii luam suma de bani pusa la bataie deoarece are valoare mai mica "pe zar"
	
		}
		if(diceY[id] > diceX[playerid]) { //Al doilea caz. Atunci cand jucatorul care invita are o valoare mai mare "pe zar" decat jucatorul invitat
			format(string, 128, "%s a dat %d iar %s a dat %d.", player1, diceX[playerid], player2, diceY[id]); //formatam un mesaj de informare cat a dat fiecare si il trimitem catre ambii
			SCM(playerid, -1, string);
        		SCM(id, -1, string);
        		format(string, 128, "%s a castigat %d$", player2, GetPVarInt(playerid, "DiceMoney")); //formatam un mesaj de informare cu cine a castigat, suma castigata si il trimitem catre ambii
        		SCM(playerid, -1, string);
        		SCM(id, -1, string);
                
        		GivePlayerMoney(id, GetPVarInt(playerid, "DiceMoney")); //jucatorului care trimite invitatia ii dam suma de bani pusa la bataie deoarece el are valoare mai mare "pe zar"
        		GivePlayerMoney(playerid, -GetPVarInt(playerid, "DiceMoney")); //jucatorului care accepta invitatia ii luam suma de bani pusa la bataie deoarece el are valoare mai mica "pe zar"
		}
		if(diceX[playerid] == diceY[id]) { //Ultimul caz. Atunci cand ambii jucatori au aceiasi valoare "pe zar"
			format(string, 128, "%s a dat %d iar %s a dat %d.", player1, diceX[playerid], player2, diceY[id]); //formatam un mesaj de informare cat a dat fiecare si il trimitem catre ambii
			SCM(playerid, -1, string);
            	SCM(id, -1, string);
            	SCM(playerid, -1, "Nimeni nu a castigat banii!"); //Trimitem un mesaj ca precum este egalitate
            	SCM(id, -1, "Nimeni nu a castigat banii!"); // -//-
		}
	
		SetPVarInt(playerid, "DiceInvited", 0); //Setam variabila "DiceInvited" pentru jucatorul invitat pe 0 pentru a mai putea primi o urmatoare invitatie
    		SetPVarInt(playerid, "InvitationID, -1"); //Setam variabila "InvitationID" pentru jucatorul invitat pe -1 pentru a mai putea primi o urmatoare invitatie (aici nu putem folosi 0 deoarece exista posibilitatea sa primeasca invitatie de la jucatorul cu ID 0, de aceea trebuie sa o setam pe -1 deoarece nu exista jucator cu ID -1
    		SetPVarInt(playerid, "DiceMoney", 0); //Setam variabila "DiceMoney" pe 0 pentru a nu se incurca suma la urmatoarea invitatie
	}
	else SCM(playerid, -1, "Eroare: Acel jucator nu te-a invitat sa joci barbut!"); //In cazul in care jucatorul care foloseste comanda de /accept dice nu a fost invitat de catre jucatorul cu ID-ul introdus ii trimitem un mesaj de informare.
    }
    return 1;
}

 

Cam aceasta este baza unui sistem de dice(barbut), de aici se poate pleca la ceva mult mai complex, timere, textdraw-uri, etc. Sper că v-ați lămurit că animațiile nu au ABOSULT NICIO LEGĂTURĂ cu alegerea câștigătorului la dice(barbut), este pur și simplu random(la întâmplare), in funcție de norocul fiecăruia. În același timp sper că v-a fost de ajutor acest tutorial. Pentru orice întrebare/nelămurire puteți trimite un PM la un Programmer sau să deschideți un topic in secțiunea Help and Discussions.

 

 

Edited by Tupi
Link to comment
Share on other sites

  • Tupi locked this topic
Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.