Jump to content

StrikerM

Membru
  • Posts

    514
  • Joined

  • Last visited

  • Days Won

    30

Posts posted by StrikerM

  1. Acum 31 minute, Anexy a spus:

    Cum sa fac sa nu mai treaca progress bar-ul de 100% cand player-ul atinge un numar de rp-uri mai mare decat cel pentru care ii trebuie pentru level up

    sa-mp-007.png

    In loc de pRespectPoints(asta find variabila ce determina respectul actual al jucatorului, pui sa fie ce-l necesar pentru level pe care jucatorul il are).

  2. Acum 41 minute, RoberTo a spus:

    Poate folosesti si un .inc care are o memorie foarte mare si posibil asta sa creasca .amx dar atata timp cat iti ruleaza sciptul fara probleme nui bai.

    Nu are treaba inc cu ce scrie in .amx, e acelasi lucru, si are treaba cum ii ruleaza pentru ca poate sa aibe lag cand sunt mai multi

  3. Acum 12 ore, IonutB a spus:
    
    YCMD:clans(playerid, params[], help) {
        new szDialog[1024], szDialog2[4048], x;
        strcat(szDialog2, "#. Clan\tOwner\tMembers/Slots\tZones\n");
        for(new h = 0; h < MAX_CLANS; h++) {
            if(strlen(ClanInfo[h][clName]) > 0) {
                x++;
                format(szDialog, sizeof(szDialog), "%d. %s - %s{FFFFFF}\t%s\t%d/%d\t%d\n", x, ClanInfo[h][clName], ClanInfo[h][clTag], ClanInfo[h][clOwner], GetCMembers(h), ClanInfo[h][clSlots], GetClanTurfs(h));
                strcat(szDialog2, szDialog);
            }        
        }
        ShowPlayerDialog(playerid, DIALOG_NONE, DIALOG_STYLE_TABLIST_HEADERS, "Clans:", szDialog2, "Select", "Cancel");
        return 1; 
    }

    Nu imi merge, comanda nu-s ce are 

    
    [01:54:23] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [01:54:23] [debug]  Stack pointer (STK) is 0x3E796E8, heap pointer (HEA) is 0x3E7A708
    [01:54:23] [debug] AMX backtrace:
    [01:54:23] [debug] #0 0015e02c in public @yC_clans (... <4 arguments>)  at D:\Gamemode\gamemodes\GM.pwn:11686
    [01:54:23] [debug] #1 native CallRemoteFunction () from samp03svr
    [01:54:23] [debug] #2 0015e02c in public OnPlayerCommandText (playerid=0, cmdtext[]=@03e7a700 "", ... <2 arguments>) at D:\Gamemode\gamemodes\GM.pwn:11686

     

    Ai szDialog2[4048], maxim de string este 1024

  4. Acum 12 ore, IonutB a spus:
    
    YCMD:staff(playerid, params[], help) {
        if(PlayerInfo[playerid][pAdmin] < 1) return va_SendClientMessage(playerid, COLOR_WHITE, AdminOnly);    
        ShowPlayerDialog(playerid, DIALOG_STAFF, DIALOG_STYLE_LIST, "Staff", "Admins\nHelpers", "Ok", "Close");
        return 1; 
    }
    
            case DIALOG_STAFF: {
    			if(!response) return 1;
    			new szQuery[1024], szResult[1024], szDialog[1024], szDialog2[4000], Cache: result;
    			new szPlayers, szPlayersT;
    			new szName[180], szAdmin, szLastOn[180], x2, y, szTitle[180], warns, userID;
    			switch(listitem) 
    			{ 
    				case 0: {
    					format(szQuery, sizeof(szQuery), "SELECT * FROM `users` WHERE `Admin`>'0' ORDER BY `users`.`Admin` ASC LIMIT 50");
    					result = mysql_query(SQL, szQuery);			
    					strcat(szDialog2, "Name\tStatus\tRaport\tWarns\n");
    					for(new i, j = cache_get_row_count (); i < j; i++) 
    					{
    						cache_get_field_content(i, "name", szResult); format(szName, 256, szResult);
    						cache_get_field_content(i, "Admin", szResult); szAdmin = strval(szResult);
    						cache_get_field_content(i, "lastOn", szResult); format(szLastOn, 256, "Offline (%s)", szResult);	
    						cache_get_field_content(i, "HelpedPlayers", szResult); szPlayers = strval(szResult);
    						cache_get_field_content(i, "HelpedPlayersToday", szResult); szPlayersT = strval(szResult);
    						cache_get_field_content(i, "AW", szResult); warns = strval(szResult);
    						userID = GetPlayerID( szName );
    						userID = GetPlayerID( szName );
    						if(userID != INVALID_PLAYER_ID) format(szLastOn, 256, "Online (%d)", userID);
    						
    						x2++;
    						format(szDialog, sizeof(szDialog), "(%d) %s\t%s\t%d on this week / %d total\t%d/3\n", szAdmin, szName, szLastOn,
                            szPlayersT, szPlayers, warns);
                            strcat(szDialog2, szDialog);			
    					}
    					cache_delete(result);
    					format(szTitle, sizeof(szTitle), "{FFEE00}Admins (%d/%d)", GetStaffOnline(0), x2);
    				} 
    				case 1: {
    					format(szQuery, sizeof(szQuery), "SELECT * FROM `users` WHERE `Helper`>'0' ORDER BY `users`.`Helper` ASC LIMIT 50");
    					result = mysql_query(SQL, szQuery);				
    					strcat(szDialog2, "Name\tStatus\tRaport\tWarns\n");
    					for(new i, j = cache_get_row_count (); i < j; i++) 
    					{
    						cache_get_field_content(i, "name", szResult); format(szName, 256, szResult);
    						cache_get_field_content(i, "Helper", szResult); szAdmin = strval(szResult);
    						cache_get_field_content(i, "lastOn", szResult); format(szLastOn, 256, "Offline (%s)", szResult);	
    						cache_get_field_content(i, "HelpedPlayers", szResult); szPlayers = strval(szResult);
    						cache_get_field_content(i, "HelpedPlayersToday", szResult); szPlayersT = strval(szResult);
    						cache_get_field_content(i, "HW", szResult); warns = strval(szResult);
    						
    						userID = GetPlayerID( szName );
    						if(userID != INVALID_PLAYER_ID) format(szLastOn, 256, "Online (%d)", userID);
    						y++;
    						format(szDialog, sizeof(szDialog), "(%d) %s\t%s\t%d today / %d total\t%d/3\n", szAdmin, szName, szLastOn, szPlayersT, szPlayers, warns);
    						strcat(szDialog2, szDialog);		
    					}
    					cache_delete(result);
    					format(szTitle, sizeof(szTitle), "{FFEE00}Helpers (%d/%d)", GetStaffOnline(1), y);
    				}
    			} ShowPlayerDialog(playerid, DIALOG_STAFF1, DIALOG_STYLE_TABLIST_HEADERS, szTitle, szDialog2, "Ok", "Back");
    		} 
            case DIALOG_STAFF1: {
    			if(!response) return ShowPlayerDialog(playerid, DIALOG_STAFF, DIALOG_STYLE_LIST, "Staff", "Admins\nHelpers", "Ok", "Close");
    		} 

    Nu imi merge comanda /staff, nu stiu ce are cand ii dau pe helpers, admins nu merge 

    
    [01:52:53] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [01:52:53] [debug]  Stack pointer (STK) is 0x3E76F00, heap pointer (HEA) is 0x3E7A700
    [01:52:53] [debug] AMX backtrace:
    [01:52:53] [debug] #0 00024554 in public OnDialogResponse (playerid=0, dialogid=0, response=1, listitem=0, inputtext[]=@03e7a6e4 "Admins") at D:\Gamemode\pawno\include\YSI\y_hooks/impl.inc:2273
    [01:52:54] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [01:52:54] [debug]  Stack pointer (STK) is 0x3E76F00, heap pointer (HEA) is 0x3E7A704
    [01:52:54] [debug] AMX backtrace:
    [01:52:54] [debug] #0 00024554 in public OnDialogResponse (playerid=0, dialogid=0, response=1, listitem=1, inputtext[]=@03e7a6e4 "Helpers") at D:\Gamemode\pawno\include\YSI\y_hooks/impl.inc:2273
    [01:52:58] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [01:52:58] [debug]  Stack pointer (STK) is 0x3E796E8, heap pointer (HEA) is 0x3E7A708
    [01:52:58] [debug] AMX backtrace:


     

    Salut, in primul rand nu stiu daca este de la modul cum il ai tu aranjat, dar sarputea sa ai un dialog in altu-l, asta nu v-a exista si ai si 4000 string cand maxim este 1024, inlocuieste tot dialogul case DIALOG_STAFF cu ce iti dau eu, si pune case DIALOG_STAFF1 sub DIALOG_STAFF

    case DIALOG_STAFF: 
    {
    	if(!response) return 1;
    	
    	new szQuery[1024], szResult[1024], szDialog[1024], szDialog2[1024], Cache: result;
    	new szPlayers, szPlayersT;
    	new szName[180], szAdmin, szLastOn[180], x2, y, szTitle[180], warns, userID;
    	switch(listitem) 
    	{ 
    		case 0: 
    		{
    			format(szQuery, sizeof(szQuery), "SELECT * FROM `users` WHERE `Admin`>'0' ORDER BY `users`.`Admin` ASC LIMIT 50");
    			result = mysql_query(SQL, szQuery);			
    			strcat(szDialog2, "Name\tStatus\tRaport\tWarns\n");
    			for(new i, j = cache_get_row_count (); i < j; i++) 
    			{
    				cache_get_field_content(i, "name", szResult); format(szName, 21, szResult);
    				cache_get_field_content(i, "Admin", szResult); szAdmin = strval(szResult);
    				cache_get_field_content(i, "lastOn", szResult); format(szLastOn, 25, "Offline (%s)", szResult);	
    				cache_get_field_content(i, "HelpedPlayers", szResult); szPlayers = strval(szResult);
    				cache_get_field_content(i, "HelpedPlayersToday", szResult); szPlayersT = strval(szResult);
    				cache_get_field_content(i, "AW", szResult); warns = strval(szResult);
    				
    				userID = GetPlayerID( szName );
    				if(userID != INVALID_PLAYER_ID) format(szLastOn, 25, "Online (%d)", userID);
    				
    				x2++;
    				format(szDialog, sizeof(szDialog), "(%d) %s\t%s\t%d on this week / %d total\t%d/3\n", szAdmin, szName, szLastOn,
    				szPlayersT, szPlayers, warns);
    				strcat(szDialog2, szDialog);			
    			}
    			cache_delete(result);
    			format(szTitle, sizeof(szTitle), "{FFEE00}Admins (%d/%d)", GetStaffOnline(0), x2);
    		} 
    		case 1: 
    		{
    			format(szQuery, sizeof(szQuery), "SELECT * FROM `users` WHERE `Helper`>'0' ORDER BY `users`.`Helper` ASC LIMIT 50");
    			result = mysql_query(SQL, szQuery);				
    			strcat(szDialog2, "Name\tStatus\tRaport\tWarns\n");
    			for(new i, j = cache_get_row_count (); i < j; i++) 
    			{
    				cache_get_field_content(i, "name", szResult); format(szName, 21, szResult);
    				cache_get_field_content(i, "Helper", szResult); szAdmin = strval(szResult);
    				cache_get_field_content(i, "lastOn", szResult); format(szLastOn, 25, "Offline (%s)", szResult);	
    				cache_get_field_content(i, "HelpedPlayers", szResult); szPlayers = strval(szResult);
    				cache_get_field_content(i, "HelpedPlayersToday", szResult); szPlayersT = strval(szResult);
    				cache_get_field_content(i, "HW", szResult); warns = strval(szResult);
    				
    				userID = GetPlayerID( szName );
    				if(userID != INVALID_PLAYER_ID) format(szLastOn, 25, "Online (%d)", userID);
    				y++;
    				format(szDialog, sizeof(szDialog), "(%d) %s\t%s\t%d today / %d total\t%d/3\n", szAdmin, szName, szLastOn, szPlayersT, szPlayers, warns);
    				strcat(szDialog2, szDialog);		
    			}
    			cache_delete(result);
    			format(szTitle, sizeof(szTitle), "{FFEE00}Helpers (%d/%d)", GetStaffOnline(1), y);
    		}
    	} ShowPlayerDialog(playerid, DIALOG_STAFF1, DIALOG_STYLE_TABLIST_HEADERS, szTitle, szDialog2, "Ok", "Back"); 
    }	

     

  5. La 07.04.2020 la 19:12, SanckyAdv a spus:

    Salut, ma intreb oare, Iteratorii mananca memorie din .amx? Ca de cand am inceput sa pun sistemele pe iteratori, de la 17mb .amx mi-a crescut la 21, si mai am o intrebare, e bine sa ai .amx de 20mb+, adica afecteaza cu ceva?

    Si normal, orice adaugi iti creste memoria din 'amx', nu afecteaza mai multe ca orice alta variabila, oricum ar fi bine sa le folosesti doar atunci cand chiar ai nevoie de asa ceva.

  6. Acum 1 oră, Raul Tiganu a spus:

    (30312) : error 032: array index out of bounds (variable "PlayerNameTD")

    Linia: PlayerTextDrawHide(i, PlayerNameTD[2]);

    "Daca scot acel [2] imi da alta eroare: (30312)error 035: argument type mismatch (argument 2)

    Salut, ai folosit PlayerNameTD[2] sau chiar [3], de asta iti spune 'out of bounds' avand determinarea [2] poti folosi doar 0 si 1.

     

    1 oră în urmă, [El.Capo] a spus:

    PlayerNameTD[2] inlocuieste cu PlayerNameTD[playerid][2]

    Daca nu merge, arata unde ai creat variabila PlayerNameTD

    Nu are treaba, este out of bonds nu argument type mismatch

  7. Acum 8 ore, H3J0__ a spus:

    image.png.33529a55f31dda2b827d5788d584427c.png

    image.png.e28786e82741d785a0c4acab729a2f6c.png

    prima data cand intelnesc aceste warning-uri csf

    cauta functia update_shards si vezi acolo cum scrie, posibil sa fie update_shards(playerid), ar trebui sa fie update_shards(playerid, update), nu e necesar sa pui 'update' doar ti-am dat un exemplu, o sa folosesti un switch ca sa poti defini la ce dai update.

    Exemplu

    function FUpdate(factionid, type)
    {
    	new query[128];
    	switch(type)
    	{
    		case FacMoney: format(query, sizeof(query), "UPDATE `factions` SET `Money` = '%d' WHERE `FactionID` = '%d'", FactionInfo[factionid][FacMoney], factionid);
    	}
    	mysql_query(handle, query);
    	return 1;
    }

    Asta ar insemna ca eu cand ofer update la banii factiunilor o sa fie

    FUpdate(idfactiune, FacMoney);

  8. Acum 2 ore, Raul Tiganu a spus:

    (533) : error 021: symbol already defined: "LogoTD"

    Salut, ma puteti ajuta?

    Linia:     Text: GameTD[17], Text:WeekendTD, Text:LoginTD[2], Text: VoteTD[7], Text: Jailtime[MAX_PLAYERS],    Text: UpdateTD, Text: TradeTD[21], Text: LogoTD[2],

     

    LogoTD este definit deja, cauta logoTD in alta parte si vezi pe unde il mai ai, ori il stergi de acolo ori de la linia 533.

    Acum 51 minute, H3J0__ a spus:

    Linia:     Text: GameTD[17], Text:WeekendTD, Text:LoginTD[2], Text: VoteTD[7], Text: Jailtime[MAX_PLAYERS],    Text: UpdateTD, Text: TradeTD[21], Text: LogoTD,

     

    pune asa sa vezi daca merge

    Nu are treaba.

  9. Acum 1 oră, AleksanderAdv a spus:

    Salut. Astazi o sa aducem in discutie una dintre cele mai discutate lucruri legate de script, Optimizarea.

    - Ei bine cum am putea noi să optimizăm un gamemode? Ce metode ar putea fi pentru aceasta?

    - Ei bine dragilor, time-ul (timerele, task-urile, gettime-urile), etc, in mare partea, timpul conteaza foarte mult, pe baza unui gamemode.

    - Am facut acest topic pentru că doresc să aud si alte păreri inafară de ale mele, eu fiind nou aici, chiar mutat, unii, in mare parte ati auzit de mine, altii nu (sunt oleaca cam bătrân). :)

    - Well, in fiecare zi primesc noi mesaje, spre exemplu, m-ai putea ajuta să scriptez? eu făcând o serie de live-uri pe youtube, acum o lună, 2.. 

    - (Q) Ce scriptai?

    - (R) Am undeva la 33 de live-uri puse pe privat, am inceput un gamemode de la 0, continand cateva variabile globale, restul a fost, după părerea mea cât se poate de clean.

    - 1. In primul rând vreau să încep cu array-urile, să zicem că avem nevoie de comanda /mark si /gotomark. Ei bine, avem 2 solutii, fie definim new Float: thePos[3], Ori fie new Float: x, Float: y, Float: z;

    - Au fost discutii si discutii despre optimizarii, puteti vedea asta si pe comunitate, la acel an (2015-2016) eram si eu pe atunci un ușor avansat.

    - Ei bine da, este adevărat ca un array consumă mai mult decât o variabilă normală. Deci o sa ne folosim de x,y,z.

    - 2. s/pVar-urile sau variabila normala? Este adevărat, si asta nu are rost să negăm, toti am crezut la un moment dat că var-urile ajută mai mult la performanta gamemode-ului / sau la întărirea acestuia. Ulterior, diferentele s-au văzut, nu era mai performantă ca o variabilă normală. Dar asta tot nu ne împiedică să le folosim, cel putin pe mine ! :)

    - Small array sau large/big array?! Hm, toti am facut greseala de a face mari array-urile la inceput, asta este drept, nu are rost să folosesti mai mult de 144 de caractere (cât duce chat-ul, si credeți-mă, chiar nu e nevoie, cel putin eu nu am întâlnit acest caz, very useless). De ce ai folosi 256 de caractere la un mesaj de tip: Welcome to Etadon RPG! Please tap your password in the case.

    - Nu vreau să par crazy, dar să stiti ca pentru asta, ar fi mai bine să numărati caracterele, si să puneti cât este necesar.

    - By the way, 0 = numar null, exemplu: W = litera 0, e = litera 1. Tineti cont de asta.

    - 3. Define sau enum?!  Ei bine da, define-ul este little more faster, enum-ul este formatat astfel încât să nu incurci dialogurile, exemplu: #define alextare 112, #define alextare112, 2 define-uri, acestea pot duce la oprirea compilarii sau probabil la ceva errori, in alte locatii.

    - 4. Dialogurile, if sau switch?! Ei bine, stiintific, switch este mai rapid din orice punct de vere, pentru că vedeti voi, sau hai mai bine să vă dau un exemplu, si ca design, si ca utilitate. Avem nevoie de un mesaj, aici o sa intervin cu librăria YSI.

    - new mesaj[2]; switch(playerVariables[ x ] [ pVIP ] == 1) { 

    case 0: mesaj = "nu"

    case 1: mesaj = "da"

    }

    va_SendClientMessage( x , "cont vip: %s", mesaj);

    - 5. Nu are rost sa faceti o noua functie (forward, public), daca o utilizatii doar o dată (vorbesc din experiență), încercați să evitații acest lucru.

    - 6. OnPlayerUpdate - ei bine, aceasta functie se executa la absolut fiecare update al jucatorului (de x ori intr-o secunda), eu sincer, prefer chiar să n-o folosesc absolut deloc, pentru că dacă ai sa zic, 100 de jucatori online, performantele se vor vedea destul de eficient..

    - 7. Evitarea folosirii timerelor / task-urilor direct, spre exemplu sunt foarte multe metode pentru a evita asta, să nu vorbim de loop-uri că nu vreau să aud de ele.

    - 8. IsPlayerConnect - Ahm.. Daca esti deja conectat, de ce ai face incă o verficare ca să vezi daca acel jucator e conectat?..

    - 9. Evitarea callback-urilor, loop-urilor, iar ceea ce poti face doar la un jucator, recomand ptask, am vazut foarte multii cum pur si simplu creeaza un task doar ca să formateze o actiune. :)

    - 10. Primesc multe mesaje, cu text-ul, dacă lucrezi pe module, totul va fi mai ok, va fi mai bine? va duce server-ul mai multii jucatorii?! Ei bine, nu. Totul va fi la fel, doar că acesta este modul meu de a lucra, nu are nimic de a face.

    11. Procesorul de comenzii! Hmm, inca mai tin minte acum 3 ani cand ma laudam cu dc cmd, what a time, anyway, din cate stim totii, nu am putea să proclamăm încă un top 1 procesor de comenzii. Bătălia se lasa intre y_commands si Pawn.CMD.

    - Sincer să fiu, eu ma multumesc foarte bine cu pawn cmd, y_commands e doar dacă vrei ceva mai multe functii. Intotdeauna am fost bazat pe Simplitate, Optimizare și stil.

    - Râdem, glumim, f^tem plătim. Nu trebuie să tii cont de toate functiile posibile. Optimizare vine din părtii, si vine chiar de unde nu te astepti. (putin de aici, putin de acolo), cel putin, asta am realizat eu in anii petrecutii.

    - Time-ul este cel mai important in fata optimizarii, acolo e cheia, btw, un consum de kb nu inseamna nimic dacă tu stii că gamemode-ul va suporta si îndura. Deci daa, urmăresc de mult discutii cu scripterii ăstia si mai noi, si mai vechi, ma tot consultam cu AlexRap, cu souund cu baietii, daca vreti in smecheri geng, imi ziceti si gen va bag, discord.io/aleksanderadv. Astept noii parerii / sugestii dragilor! Va pup, cu stima si respect, Alexandru al vostru.

    Frumos tutorial, in opinia mea nu imi place si tot tutorialul este probabil luat de pe un alt site.

    La experienta pe care zici ca o ai tutorialul este mult prea usor, de aici si idea ca l-ai copiat si ca tu de fapt nici nu scriptezi.

    Ai raspuns intr-un topic cum ca un gamemode apare cu unknown cand e 'bum bum' in gm .. cand de fapt unknown iti iei in mare parte de la variantele diferite dintre plugin si .inc.

    • Upvote 1
  10. Acum 3 minute, AleksanderAdv a spus:

    poate fi din cauza streamer-ului, sau probabil din dll-uri, sau ce-l mai probabil a facut o 'buba' in gamemode, astfel incat sa-l refuze atat de urat. Spor!

    Citeste inainte sa postezi @AleksanderAdv stiu ca postezi pt post hunt dar ... i-am zis deja ce si cum si a si rezolvat, nu are cum sa faca o 'buba' in gm si sa primeasca unknown.

    T.C - Problema a fost rezolvata.

  11. Acum 34 minute, [emy] a spus:

    Am linia 

    
    ShowPlayerMarkers(2); 

    la

    
    OnGameModeInit()

    dar nu isi face efectul. 

    mai am si un 

    
    public OnPlayerStreamIn(playerid, forplayerid)

    dar nu inteleg cum din variabila asta nu mi arata nimic pe server.

    playerii nu se vad intre ei. 

    ar trebui sa adaug ceva la onplayerstreamin?

    Posibil sa ai la OnPlayerStreamIn ceva ce blocheaza, sterge tot de acolo si de la OnPlayerStreamOut si verifica dupa.

    • Like 1
  12. Acum 24 minute, AleksanderAdv a spus:

    salut, din moment ce ai optat pentru upgradarea plugin-urilor, gamemodeul actual nu mai recunoaste functiile vechi. Iti recomand sa te reintorci la mysql-ul r34 si probabil la streamer-ul 2.8.2, ca idee.

    Eroarea nu da din cauza la pluginul mysql.

×
×
  • 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.