Quest Sistem
#1

Salut,de curand am inceput sa lucrez la un sistem de quest.Acesta consta in gasirea a 15 obiecte plasate prin tot LS-ul.Am plasat obiectele,le-am creeat dupa care am facut ca ,atunci cand un jucator intra in acel obiect sa ii trimita un mesaj si sa ii seteze acel obiect pe 1 gen : obiect1[playerid] = 1; si daca a fost deja acolo sa ii trimita alt mesaj dar de aici incolo am o mica problema.
Cum pot face ca atunci cand jucatorul gaseste toate obiectele sa ii acorde un premiu si sa trimita un mesaj la tot server-ul.M-am gandit sa pun chestia asta la ultimul obiect dar daca gaseste ultimul obiect ca primul se incurca tot.Iar alta problema este ca,vreau sa ramana salvate obiectele gasite gen : daca jucatorul a gasit 5/15 la deconectare sa se salveze si dupa reconectare sa continue de unde a ramas iar daca acesta foloseste comanda /obiectegasit sa ii afiseze un mesaj in care sa ii spuna ai gasit x/15 obiecte.Mai trebuie sa gasesti x obiecte.

P.S: Niste ideei/sugestii/ceva..Chiar nu pot sa imi dau seama,m-am blocat pe loc.Cine incearca sa ma ajute daca se poate sa fie putin mai explicit.Multumesc anticipat.
Reply
#2

dump
Reply
#3

Sper sa intelegi cat de cat-..daca nu, imi zici unde si iti explic.

Код:
#define MAX_OBIECTE    15 // Cate obiecte vrei sa adaugi
new ObiecteGasiteTotal[MAX_PLAYERS]; // Totalul obiectelor gasite
new Obiecte[MAX_OBIECTE]; // variabila pentru pickups
new ObiecteGasite[MAX_PLAYERS][MAX_OBIECTE]; // variabila pentru jucatori
OnGameModeInit()

Код:
Obiecte[0] = AddStaticPickup(....); // Obiectul 1
Obiecte[1] = AddStaticPickup(....); // Obiectul 2
..............................................................
Obiecte[14] = AddStaticPickup(...); // Obiectul 15
OnPlayerConnect & OnPlayerDisconnect

Код:
public OnPlayerConnect(playerid)
{
        for(new j=0;j<MAX_OBIECTE;j++)
        {
	      ObiecteGasite[playerid][j]=0;
        }
        ObiecteGasiteTotal[playerid]=0;
	return 1;
}
// Aici le resetezi deoarece, de exemplu, daca cineva care are 3 obiecte gasite iese, si intra altcineva cu acelasi id, va avea si el 3 obiecte gasite, chit ca are mai multe / mai putine.

public OnPlayerDisconnect(playerid, reason)
{
	for(new j=0;j<MAX_OBIECTE;j++)
        {
	      ObiecteGasite[playerid][j]=0;
        }
        ObiecteGasiteTotal[playerid]=0;
	return 1;
}
Atunci cand un jucator intra intr-un obiect:

Код:
public OnPlayerPickUpPickup(playerid, pickupid)
{
	new string[128];
	for(new j=0;j<MAX_OBIECTE;++)
	{
	    if(pickupid == Obiecte[j])
	    {
			if(ObiecteGasite[playerid][j] == 0) // Compari daca jucatorul a mai gasit sau nu obiectul inainte.
  			{
                              ObiecteGasiteTotal[playerid]++;
                              ObiecteGasite[playerid][j]=1;
	        	      DestroyPickup(Obiecte[j]);
                              format(string,sizeof(string)," Felicitari! Ai gasit obiectul nr. {FF0000}%d{FFFFFF}! Acum ai {FF0000}%d / %d {FFFFFF}obiecte!",j,ObiecteGasite[playerid],MAX_OBIECTE);
                              SendClientMessage(playerid,-1,string);
                              if(ObiecteGasiteTotal[playerid] == MAX_OBIECTE) // Aici e premiul cand un jucator atinge maximum de obiecte gasite.
                              {
             		               for(new s=0;s<MAX_OBIECTE;s++)
                                       {
	                  	              ObiecteGasite[playerid][s]=0;
                                       }
                                       ObiecteGasiteTotal[playerid]=0; // Le resetam la 0
                                       // Aici pui ce premiu vrei si mesajul pentru intreg server-ul.
                              }
	    	      }
	    	      else
		      {
				format(string,sizeof(string)," Ai mai gasit obiectul cu nr. {FF0000}%d{FFFFFF}!",j);
				SendClientMessage(playerid,-1,string);
		      }
	    	
		}
	}
	return 1;
}
Si pentru comanda...

Код:
COMMAND:obiectegasite(playerid,params)
{
	new string[56];
	format(string,sizeof(string)," Ai {FF0000}%d / %d {FFFFFF}obiecte gasite! Mai ai nevoie de {FF0000}%d {FFFFFF}pentru a obtine premiul!",ObiecteGasiteTotal[playerid],MAX_OBIECTE,MAX_OBIECTE-ObiecteGasiteTotal[playerid]);
	SendClientMessage(playerid,-1,string);
	return 1;
}
In legatura cu salvarea, trebuie sa stiu in ce mod salvezi & citesti datele ( dini, Y_ini, MySQL... )
Reply
#4

Am inteles,multumesc frumos cu toate ca mi-ai dat mura-n gura
Server-ul ruleaza pe MYSQL.
Salvarea nu stiu cum sa o fac dar ar avea ceva daca ar fi pe dini ?

Edit : Am adaugat exact cum mi-ai dat tu si primesc :
Код:
C:\Users\Andrei\Downloads\BZONE\LTW ROMANIA\gamemodes\QuestSistem.pwn(184) : error 029: invalid expression, assumed zero
C:\Users\Andrei\Downloads\BZONE\LTW ROMANIA\gamemodes\QuestSistem.pwn(204) : error 017: undefined symbol "GivePlayerCash"
Linii respective :
Код:
new string[128];
for(new j=0;j<MAX_OBIECTE;++)
{
si
GivePlayerCash(playerid, 5000);
P.S : Am uitat sa mentionez ca acest lucru vreau sa fie FS nu il adaug in gm vreau sa il scot si sa il adaug fara sa mai dau restart la sv.
Reply
#5

Am gresit eu, pune asa:

Код:
for(new j=0;j<MAX_OBIECTE;j++)
{
Si pune GivePlayerMoney in loc de GivePlayerCash.
Eu personal folosesc Y_Ini pentru salvare

Daca vrei sa il faci ca FS, il poti lasa in GameMode si poti face doua comenzi de admin: una care distruge toate pickup-urile de Quest si una care le creeaza Parerea mea este ca ar fi mai simplu asa.
Reply
#6

Multumesc am sa incerc sa fac 2 comenzi.
Dar tot nu stiu cum sa fac modul de salvare..Nu cred ca INI este chiar asa rau.
Reply
#7

Dump,Lucky ma poti ajuta..
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)