Jump to content

irinelbro69

Membru
  • Posts

    113
  • Joined

  • Last visited

  • Days Won

    6

Posts posted by irinelbro69

  1. Salut! Vand gamemode de la 0 scris in perioada 14 oct 2021 - 1 iulie 2022. Gamemode-ul are in jur de 25,000 linii si este gata in proportie de 95 la suta (mai trebuiesc finalizate cateva). Poate fi pus si pe open.mp foarte usor (nu exista probleme, e adaptat 100% si pentru open.mp). Acesta a rulat pe comunitatea mea timp de o saptamana dar am decis impreuna cu celalalt fondator sa inchidem serverul si sa ne axam pe ceva mult mai interesant. In toata aceasta perioada cat timp serverul a fost online am avut ce-i drept cateva probleme dar le-am rezolvat cu succes, facandu-l foarte stabil. Gamemode-ul este foarte bun pentru a face update-uri pe el si are un cod scris foarte ok, cu multe functii ce pot usura treaba. La un numar de aproape 50 on am avut in jur de 195-196 tick-uri (e irelevant pentru un server de SA:MP cu 50 jucatori ca nu are ce performanta sa consume), dupa parerea mea ar mentine lejer 500+ jucatori.

    Gamemode-ul contine urmatoarele sisteme (in mare parte): 
    - sistem de logare / inregistrare 
    - sistem de admini + helperi pe puncte
    - contorizare ore jucatori in ultimele 7 zile
    - actiuni care se pot procesa de pe panel (trebuie doar sa inserati un query cand faceti o actiune pe panel si se proceseaza in maxim 10 secunde pe joc): kick-uri, ban-uri, mute-uri, warn-uri si poti da/lua ametiste jucatorilor
    - sistem de joburi dinamice
    - sistem de case dinamice
    - sistem de business-uri dinamice
    - sistem de vehicule personale
    - sistem de dealership dinamic (unic in mare parte)
    - sistem de skill-uri (se pot adauga skill-uri din baza de date si totodata si numarul de puncte necesare)
    - sistem de quest-uri zilnice
    - 8 joburi unice
    - sistem de cont premium pe zile
    - sistem de vehicule dinamice
    - sistem de rentcar (puteti face orice vehicul inchiriabil)
    - sistem de skinuri personale + beneficii
    - sistem de referal cu promo code-uri
    - sistem de barbut unic
    - sistem de clanuri bazate pe level si XP
    - sistem de scoala de soferi cu test teoretic + practic (se pot modifica intrebarile din baza de date)

    Mai multe video-uri in care este prezentat gamemode-ul (mai puteti cauta voi pe youtube):


    Pretul acestui gamemode este de 40 euro / 200 lei. Ca metode de plata accept doar PayPal / transfer bancar.
    Ofer suport 7 zile de la cumparare pentru rezolvarea bugurilor si a problemelor.
    Metode de contact:
    - Instagram: @irinelbro69
    - Discord: irinelbro69#8416
    - Email: [email protected]

    Rog seriozitate! :D 

  2. 2 hours ago, Raul112233 said:

    Cumpar server hostat cu un gm decent,cine vrea sa il vanda ,pm

    Daca ai nevoie de un gamemode mult mai mult decat decent, astept mesaj pe discord: irinel77#3505.

  3. 29 minutes ago, TheGodfather said:

    Am reusit sa rezolv asta, dar cand pornesc serverul pe localhost imi spune asta:

    image.thumb.png.485656ac7745d83b0a465b45a4735453.png

    EDIT:

    Am pus asta la inceput de gamemode #define CGEN_MEMORY 100000 dar primesc alte erori, pe langa astea 2:

    image.png.8aa7c04a479613322687e67dcf37b9dd.pngimage.thumb.png.364170f8ed924a694e4b75e3ea7a9a06.png

    EDIT 2: Asta am rezolvat punand #define MAX_COMMANDS 1000 la inceput de gamemode. Legat de acele scriptfiles, ce pot face?

    Pur si simplu faci 2 foldere numite fixes si temp in folderul scriptfiles.

  4.  Username: irinel77z

    Varsta: 16

    Ce vinzi?: Gamemode de la 0 RPG scris in perioada 2020-2021.

    Dovada (că sunteti in posesia produsului) OBLIGATORIU:

    image.png.a24a52508f8fde49420153364e0ea2cb.png

    image.thumb.png.93aed68850fcac49197c45e03d9ec39a.png

    Pret: 30 euro / 150 lei (PayPal / Transfer bancar).
    Detalii de contact: Discord: irinel77#3505, Instagram: @irinelbro69 sau email: [email protected]
    Alte precizari: Gamemode-ul a rulat in trecut pe rpg.l*******a.ro si a avut un numar de aprox. 190 tick-uri la 95 on. Am refacut si reparat cateva sisteme dupa ce am decis sa iesim din comunitate (din cauza unui singur om - pt cei care se intreaba de ce n-am continuat cu acest gm) si sa ne apucam de un alt gamemode de la 0 cu un cod foarte bun. Nu e cod scris cu picioarele, mai sunt probabil cateva functii neadaptate inca pentru un cod bine scris in zilele de astazi. Ofer suport 7 zile de la cumparare pentru repararea bugurilor (important e sa raportati orice bug in cele 7 zile de suport, le rezolv cu mare drag). O sa va las cateva video-uri cu cateva sisteme din acest gamemode mai jos si cam ce update-uri i-au fost aduse in timp ce a rulat pe comunitatea l*******a. Rog seriozitate! 

    ** Am decis sa cenzurez numele comunitatii deoarece nu doresc sa le fac reclama. **

    Lista update-uri: https://pastebin.com/3NnUC4vu

     

    image.png

  5. Iti recomand sa gandesti sistemul altfel, o sa-ti las un exemplu mai jos de la care poti porni la ceva mai complex:
    1. creeaza o enumeratie pentru a stoca fiecare radar in parte

    enum radars {
    	radarID,
    	Float:radarRadius,
    	Float:radarPositionX,
    	Float:radarPositionY,
    	Float:radarPositionZ,
    	radarPlacer, // player id
    	radarLimit, // limita in km/h
    }

    2. defineste variabilele pe care le vei folosi
     

    new server_radars[10][radars], // pe server sa poata exista maxim 10 radare
    	Iterator:sv_radars<10>; // definim iteratorul pentru radare
    
    new placed_radar[MAX_PLAYERS], // aici definim variabila care stocheaza ID-ul radar-ului plasat de catre jucator
    	radar_delay[MAX_PLAYERS]; // delay /radar

    3. creeaza o functie prin care inserezi un radar
     

    stock PlaceRadar(playerid, Float:radius, limit) {
    	new i = Iter_Free(sv_radars);
    
    	server_radars[i][radarID] = i+1;
    	server_radars[i][radarRadius] = radius;
    
    	new Float:X, Float:Y, Float:Z;
    	GetPlayerPos(playerid, X, Y, Z);
    
    	server_radars[i][radarPositionX] = X;
    	server_radars[i][radarPositionY] = Y;
    	server_radars[i][radarPositionZ] = Z;
    
    	server_radars[i][radarPlacer] = i;
    	server_radars[i][radarLimit] = limit;
    
    	Iter_Add(sv_radars, server_radars[i][radarID]);
    
    	return SCM(playerid, -1, "Radar %d placed (%d km/h) - radius: %0.1fm.", server_radars[i][radarID], limit, radius);
    }

    4. creeaza o alta functie prin care stergi radarul jucatorului:

    stock DestroyRadar(playerid) {
    	if(placed_radar[playerid] > 0) {
    		new r = placed_radar[playerid];
    
    		server_radars[r][radarRadius] = 0.0;
    		server_radars[r][radarPositionX] = server_radars[r][radarPositionY] = server_radars[r][radarPositonZ] = 0.0;
    		server_radars[r][radarPlacer] = INVALID_PLAYER_ID;
    		server_radars[r][radarLimit] = 0;
    		Iter_Remove(sv_radars, r);
    
    		placed_radar[playerid] = 0;
    		radar_delay[playerid] = 0;
    	}
    	return 1;
    }

    5. la conectare apeleaza functia DestroyRadar
    6. comanda /placeradar:

    YCMD:placeradar(playerid, params[], help) { 
    	// aici pui tu verificarile daca e copoi
    
    	if(radar_delay[playerid] > gettime()) return SCM(playerid, -1, "Poti folosi aceasta comanda din nou peste %d secunde.", radar_delay[playerid]-gettime());
    	if(placed_radar[playerid] != 0) return SCM(playerid, -1, "Ai deja un radar plasat!");
    	if(Iter_Count(sv_radars) >= 10) return SCM(playerid, -1, "Eroare: Pot fi maxim 10 radare deodata pe server.");
    
    	new radius, limit;
    	if(sscanf(params, "dd", radius, limit)) return SCM(playerid, -1, "/placeradar [raza] [limita de viteza]");
    	if(radius < 100 || radius > 300) return SCM(playerid, -1, "Eroare: Raza de actiune trebuie sa fie cuprinsa intre 100 si 300 metri.");
    	if(limit < 60 || limit > 200) return SCM(playerid, -1, "Eroare: Limita de viteza trebuie sa fie cuprinsa intre 60 si 200 km/h.");
    
    	PlaceRadar(playerid, radius, limit);
    	radar_delay[playerid] = gettime() + 45;
    
    	// pui tu un mesaj de ex care anunta politistii de pe server ca a pus x radar
    	return 1;
    }

    7. in final, timerul pentru verificarea vitezei:

    ptask check_radar[1000](playerid) {
    	if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && placed_radar[playerid] == 0) { // verificam daca e intr-un vehicul ca sofer si sa nu-l ia radaru' in caz de el l-a pus
    		new speed = Carspeed(playerid);
    		foreach(new r : sv_radars) {
    			if(IsPlayerInRangeOfPoint(playerid, server_radars[r][radarRadius], server_radars[r][radarPositionX], server_radars[r][radarPositionY], server_radars[r][radarPositionZ])) {
    				if((speed+10) >= server_radars[r][radarLimit]) { // verificam daca limita de viteza este incalcata cu minim 10km/h
    					// si aici pui sa-l ia radaru'
    				}
    			}
    		}
    	}
    }

    Sper sa te ajute si sa nu fie probleme (n-am testat, am gandit pe loc chestia). Succes!

  6. #1 "local variable "gString" shadows a variable at a preceding level"

    Aceasta variabila a fost definita probabil mai sus, incearca acest cod: 

    new nick[MAX_PLAYER_NAME];
    cache_get_field_content(0, "name", nick, MAX_PLAYER_NAME);     

    #2 

    Deoarece variabila ta este boolean, trebuie sa o incarci folosindu-te de chestia aceasta:

    image.png.97fba439e252cdaab2d50c8f3f36c371.png

     

    sau poti scrie direct:
     

    CarInfo[id][cRainBow] = bool:cache_get_field_content_int(0, "RainBow");
  7. Codul nu este aranjat corect. Pe viitor incearca sa aliniezi liniile corect, succes! :D

    public OnPlayerConnect(playerid)
    {
        new name[MAX_PLAYER_NAME], file[256];
        GetPlayerName(playerid, name, sizeof(name));
        format(file, sizeof(file), SAVE, name);
        if(!dini_Exists(file))
        {
            ShowPlayerDialog(playerid, Register, DIALOG_STYLE_INPUT, "Salut, nu ai un cont!", "Te rog scrie o parola !", "Register", "Inchide");
            TextDrawShowForPlayer(playerid, TDEditor_TD[7]);
            TextDrawShowForPlayer(playerid, TDEditor_TD[8]);
            format(ReportText[playerid], 256, "None");
            PlayerInfo[playerid][pFier] = FierVechi[playerid];
            UpdateSpeed[playerid] = false;
            SpdObj[playerid][0] = INVALID_OBJECT_ID;
            SpdObj[playerid][1] = INVALID_OBJECT_ID;
            PlayerJob[playerid] = 0;
            Checkpoint[playerid] = 0;
            JobVehicle[playerid] = 0;
            JobWorking[playerid] = 0;
            PlayerJob1[playerid] = 0;
            Checkpoint1[playerid] = 0;
            JobVehicle1[playerid] = 0;
            JobWorking1[playerid] = 0;
            PlayerJob2[playerid] = 0;
            Checkpoint2[playerid] = 0;
            JobVehicle2[playerid] = 0;
            JobWorking2[playerid] = 0;
            CursaCheckpoint[playerid] = 0;
            CursaCar[playerid] = 0;
            Report[playerid] = 0;
            masinaadmin[playerid] = 0;
            Event[playerid] = 0;
            pEvent[playerid] = 0;
            Gift[playerid] = 0;
            GiftC[playerid] = 0;
            Bonus[playerid] = 0;
            SpecialQuest[playerid] = 0;
            SpecialQuestCheckpoint[playerid] = 0;
            Salutare[playerid] = 0;
            DrivingCheckpoint[playerid] = 0;
            MasinaDMV[playerid] = 0;
            fPolitie[playerid] = 0;
            fMedic[playerid] = 0;
            fTaxi[playerid] = 0;
            fProTv[playerid] = 0;
            IsInCar[playerid] = 0;
            gPlayerLogged[playerid] = 0;
        }
        if(fexist(file))
        {
            if(PlayerInfo[playerid][pBan] == 1){
                SendClientMessage(playerid, 0xff0000FF, "Esti Banat !");
                Kick(playerid);
                return 1;
            }
            
            ShowPlayerDialog(playerid, Login, DIALOG_STYLE_INPUT, "Salut, ai deja un cont!", "Te rog scrie parola !", "Login", "Inchide");
            TextDrawShowForPlayer(playerid, TDEditor_TD[0]);
            TextDrawShowForPlayer(playerid, TDEditor_TD[1]);
            format(ReportText[playerid], 256, "None");
            PlayerInfo[playerid][pFier] = FierVechi[playerid];
            UpdateSpeed[playerid] = false;
            SpdObj[playerid][0] = INVALID_OBJECT_ID;
            SpdObj[playerid][1] = INVALID_OBJECT_ID;
            PlayerJob[playerid] = 0;
            Checkpoint[playerid] = 0;
            JobVehicle[playerid] = 0;
            JobWorking[playerid] = 0;
            PlayerJob1[playerid] = 0;
            Checkpoint1[playerid] = 0;
            JobVehicle1[playerid] = 0;
            JobWorking1[playerid] = 0;
            PlayerJob2[playerid] = 0;
            Checkpoint2[playerid] = 0;
            JobVehicle2[playerid] = 0;
            JobWorking2[playerid] = 0;
            CursaCheckpoint[playerid] = 0;
            CursaCar[playerid] = 0;
            Report[playerid] = 0;
            masinaadmin[playerid] = 0;
            Event[playerid] = 0;
            pEvent[playerid] = 0;
            Gift[playerid] = 0;
            GiftC[playerid] = 0;
            Bonus[playerid] = 0;
            SpecialQuest[playerid] = 0;
            SpecialQuestCheckpoint[playerid] = 0;
            Salutare[playerid] = 0;
            DrivingCheckpoint[playerid] = 0;
            MasinaDMV[playerid] = 0;
            fPolitie[playerid] = 0;
            fMedic[playerid] = 0;
            fTaxi[playerid] = 0;
            fProTv[playerid] = 0;
            IsInCar[playerid] = 0;
            gPlayerLogged[playerid] = 0;
        }
        return 1;
    }

     

  8. Inainte de aceasta linie:

    DestroyVehicle(car);

    Adauga:

    VehicleOccupied[car] = 0;

     

    Tu trebuie sa pui aceasta valoare pe 0 inainte de a distruge vehiculul, ca urmatorul vehicul ce va capata acest ID sa nu aiba valoarea pe 1 si sa fie 0. Sper ca te-am ajutat.

  9. Exemplu - se reseteaza la relog:

    public OnPlayerDisconnect(playerid, reason) {
    	SetPVarInt(playerid, "cmd_comanda_folosit", 0);
    	return 1;
    }
    YCMD:comanda(playerid, params[], help) {
    	if(GetPVarInt(playerid, "cmd_comanda_folosit") == 1) return SendClientMessage(playerid, -1, "Nu mai poti folosi aceasta comanda.");
    	SetPVarInt(playerid, "cmd_comanda_folosit", 1);
    	SendClientMessage(playerid, -1, "Nu vei mai putea folosi aceasta comanda pana la urmatorul relog.");
    	return 1;
    }

     

    Dacă vrei să poată folosi acea comanda doar o singură dată indiferent dacă dă relog sau nu, adaugă în baza de date în tabelul conturilor: "cmdComandaUsed" si te poti lua dupa urmatorul exemplu:

    YCMD:comanda(playerid, params[], help) {
    	if(playerVariables[playerid][pComandaUsed] == 1) return SendClientMessage(playerid, -1, "Nu mai poti folosi aceasta comanda.");
    	playerVariables[playerid][pComandaUsed] = 1;
    	SendClientMessage(playerid, -1, "Nu vei mai putea folosi aceasta comanda.");
    
    	gQuery[0] = EOS;
    	mysql_format(SQL, gQuery, sizeof(gQuery), "update `users` set `cmdComandaUsed` = '1' where `playerID` = '%d'", playerVariables[playerid][pSQLID]);
    	mysql_tquery(SQL, gQuery, "", "");
    	return 1;
    }

    Eu am folosit variabilele din gamemode-ul meu, poti adapta foarte usor. Mult succes!

  10. 3 hours ago, HPQ123 said:

    Și cât de eficient este?

     

    Pare destul de eficient, momentan...

    Poate o sa-l incerc si pe al tau.

     

    3 hours ago, segmentationfault said:

    nu așa funcționează numerele pe 64 de biți :)) varianta lui HPQ pare mai ok, având operatorii de bază și lucrând binar.  (ca sfat, ai putea trece logica pe C++ și să adaugi unit teste).

    Mersi de sfat, insa am preferat ceva mai simplu, nu sa ma folosesc de nu stiu cati operatori si alte chestii. 

  11. public OnPlayerCommandText(playerid, cmdtext[]) {
    	if(strcmp("/vreauarma", cmdtext, true, 10) == 0) {
    		if(GetPlayerMoney(playerid) < 15000) return SendClientMessage(playerid, 0x00FF00FF, "Nu ai bani suficienti.");
    		GivePlayerWeapon(playerid, 24, 100);
    		SendClientMessage(playerid, 0x5175adFF, "(-) Ai cumparat un Deagle pentru $15.000.");
    		GivePlayerMoney(playerid, -15000);
    		return 1;
    	}
    }

    Poftim.

×
×
  • 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. For more details you can also review our Terms of Use and Privacy Policy.