[POMOC] - /report CMD


Započeo elemental., Avgust 26, 2011, 17:26:14 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Skripta koju koristim: Noxicus edit, kako vec xD
Detaljan opis problema: Ovako, napravio sam, ono kad posalje /report adminima, da mu pise ono: Vasa prijava je poslana online Administratorima. Vasa prijava glasi: Pa u drugom redu dolje napisem: - %s!. Al mi ne bude tako, evo dole slika.
Dio skripte:


Kod: c
COMMAND:report(playerid, params[])
	{
		new string[128];
		new sendername[MAX_PLAYER_NAME];
		new idx;
	    if(IsPlayerConnected(playerid))
	    {
			
	        GetPlayerName(playerid, sendername, sizeof(sendername));
			new length = strlen(params);
			while ((idx < length) && (params[idx] <= ' '))
			{
				idx++;
			}
			new offset = idx;
			new result[64];
			while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
			{
				result[idx - offset] = params[idx];
				idx++;
			}
			result[idx - offset] = EOS;
			if(!strlen(result))
			{
				SendClientMessage(playerid, COLOR_GRAD2, "{168BFF}Cyclone komanda | Komanda: {959561} /report [text]");
				return 1;
			}
			if(Reporter[playerid] == 1)
			{
            SendClientMessage(playerid, COLOR_GREY, "Moras sacekati minutu prije ponovnog slanja reporta.");
	    	return 1;
			}
			  if(PlayerInfo[playerid][pMuted] >= 1)
			{
					format(string, sizeof(string), " {FFFF80}Cyclone | {FF4444}Ne mozes pricati jer si utisan! Preostalo vrijeme: {FFFF80}%d sekundi(%d minuta)", PlayerInfo[playerid][pMuteTime], (PlayerInfo[playerid][pMuteTime]/60)+1);
				SCM(playerid, 0xFF4444FF, string);
				return 1;
			}
			format(string, sizeof(string), "Report od %s: {B1B1D8}*%s", sendername, (result));
			ABroadCast(0x8080C0FF,string,2);
			SendClientMessage(string, sizeof(string), "Tvoja prijava je poslana online {0x33CCFFAA}Adminima / GameMasterima. Vasa prijava glasi:",  (result));
			format(string, sizeof(string), "{0xF5DEB3AA}- %s!",  (result));
			SendClientMessage(playerid, 0x8080C0FF, string);
			Reporter[playerid] = 1;
			SetTimerEx("Report1",60000, false, "i", playerid);

	  	  	}
	    return 1;
	}


Neke slike/video za lakse dobijanje pomoci: Evo slika: Nema mi onog reda Vasa prijava je poslana online Administratorima. Vasa prijava glasi:
Poslednja Izmena: Avgust 26, 2011, 17:29:31 POSLE PODNE od [CY:RP & BM] × SpaMaster ×

dragan12

       COMMAND:report(playerid, params[])  
       {  
          new string[128];  
          new sendername[MAX_PLAYER_NAME];  
          new idx;  
           if(IsPlayerConnected(playerid))  
           {  
               
               GetPlayerName(playerid, sendername, sizeof(sendername));  
             new length = strlen(params);  
             while ((idx < length) && (params[idx] <= ' '))  
             {  
                idx++;  
             }  
             new offset = idx;  
             new result[64];  
             while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))  
             {  
                result[idx - offset] = params[idx];  
                idx++;  
             }  
             result[idx - offset] = EOS;  
             if(!strlen(result))  
             {  
                SendClientMessage(playerid, COLOR_GRAD2, "{168BFF}Cyclone komanda | Komanda: {959561} /report [text]");  
                return 1;  
             }  
             if(Reporter[playerid] == 1)  
             {  
                SendClientMessage(playerid, COLOR_GREY, "Moras sacekati minutu prije ponovnog slanja reporta.");  
              return 1;  
             }  
               if(PlayerInfo[playerid][pMuted] >= 1)  
             {  
                   format(string, sizeof(string), " {FFFF80}Cyclone | {FF4444}Ne mozes pricati jer si utisan! Preostalo vrijeme: {FFFF80}%d sekundi(%d minuta)", PlayerInfo[playerid][pMuteTime], (PlayerInfo[playerid][pMuteTime]/60)+1);  
                SCM(playerid, 0xFF4444FF, string);  
                return 1;  
             }  
             format(string, sizeof(string), "Report od %s: {B1B1D8}*%s", sendername, (result));  
             ABroadCast(0x8080C0FF,string,2);  
             format(string, sizeof(string), "Tvoja prijava je poslana online {0x33CCFFAA}Adminima / GameMasterima. Vasa prijava glasi: %s!",  (result));   
             SendClientMessage(playerid, 0x8080C0FF, string);  
             Reporter[playerid] = 1;  
             SetTimerEx("Report1",60000, false, "i", playerid);  
      
                 }  
           return 1;  
       } 

Mislim da si to hteo da uradis. U SCM nemoze ici onako kako si uradio. I da bolje koristi SSCANF jer je lakse napraviti komandu i brza je.

Citat: Gagi_Corleone poslato Avgust 26, 2011, 17:29:56 POSLE PODNE
       COMMAND:report(playerid, params[])  
       {  
          new string[128];  
          new sendername[MAX_PLAYER_NAME];  
          new idx;  
           if(IsPlayerConnected(playerid))  
           {  
               
               GetPlayerName(playerid, sendername, sizeof(sendername));  
             new length = strlen(params);  
             while ((idx < length) && (params[idx] <= ' '))  
             {  
                idx++;  
             }  
             new offset = idx;  
             new result[64];  
             while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))  
             {  
                result[idx - offset] = params[idx];  
                idx++;  
             }  
             result[idx - offset] = EOS;  
             if(!strlen(result))  
             {  
                SendClientMessage(playerid, COLOR_GRAD2, "{168BFF}Cyclone komanda | Komanda: {959561} /report [text]");  
                return 1;  
             }  
             if(Reporter[playerid] == 1)  
             {  
                SendClientMessage(playerid, COLOR_GREY, "Moras sacekati minutu prije ponovnog slanja reporta.");  
              return 1;  
             }  
               if(PlayerInfo[playerid][pMuted] >= 1)  
             {  
                   format(string, sizeof(string), " {FFFF80}Cyclone | {FF4444}Ne mozes pricati jer si utisan! Preostalo vrijeme: {FFFF80}%d sekundi(%d minuta)", PlayerInfo[playerid][pMuteTime], (PlayerInfo[playerid][pMuteTime]/60)+1);  
                SCM(playerid, 0xFF4444FF, string);  
                return 1;  
             }  
             format(string, sizeof(string), "Report od %s: {B1B1D8}*%s", sendername, (result));  
             ABroadCast(0x8080C0FF,string,2);  
             format(string, sizeof(string), "Tvoja prijava je poslana online {0x33CCFFAA}Adminima / GameMasterima. Vasa prijava glasi: %s!",  (result));   
             SendClientMessage(playerid, 0x8080C0FF, string);  
             Reporter[playerid] = 1;  
             SetTimerEx("Report1",60000, false, "i", playerid);  
      
                 }  
           return 1;  
       } 

Mislim da si to hteo da uradis. U SCM nemoze ici onako kako si uradio. I da bolje koristi SSCANF jer je lakse napraviti komandu i brza je.

Nisam na to mislio. Mislio sam da bude ovako, npr:

Vasa prijava je poslana online Administratorima. Vasa prijava glasi:

- ID 3 ima cheat ! (( npr ))

evo ti moja...

Kod: c
COMMAND:report(playerid, params[])
	{
		new string[128];
		new sendername[MAX_PLAYER_NAME];
		new idx;
	    if(IsPlayerConnected(playerid))
	    {
			
	        GetPlayerName(playerid, sendername, sizeof(sendername));
			new length = strlen(params);
			while ((idx < length) && (params[idx] <= ' '))
			{
				idx++;
			}
			new offset = idx;
			new result[64];
			while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
			{
				result[idx - offset] = params[idx];
				idx++;
			}
			result[idx - offset] = EOS;
			if(!strlen(result))
			{
				SendClientMessage(playerid, COLOR_GRAD2, "{00C0FF}Koristi:{FFFFFF} /report [text]");
				return 1;
			}
			if(Reporter[playerid] == 1)
			{
            SendClientMessage(playerid, COLOR_GRAD1, "Moras sacekati minutu prije ponovnog slanja reporta.");
	    	return 1;
			}
			  if(PlayerInfo[playerid][pMuted] >= 1)
			{
					format(string, sizeof(string), "  Utisan | Zabranjeno ti je pisanje jos %d sekundi(%d minuta)", PlayerInfo[playerid][pMuteTime], (PlayerInfo[playerid][pMuteTime]/60)+1);
				SCM(playerid, COLOR_YELLOW, string);
				return 1;
			}
			format(string, sizeof(string), "Report od %s[%d]: {B1B1D8}*%s", sendername, playerid, (result));
			ABroadCast(COLOR_NEWS,string,1);
			format(string, sizeof(string), "*Vas report glasi: {FFFFFF}*%s",  (result));
			SendClientMessage(playerid, COLOR_WHITE, string);
            SendClientMessage(playerid, COLOR_YELLOW, "*CroSvera: Hvala na upitu! Admini ce brzo odgovoriti!");
			Reporter[playerid] = 1;
			SetTimerEx("Report1",60000, false, "i", playerid);

	  	  	}
	    return 1;
	}
â˜... â–,â–ƒâ–...▆▇█ G â–ˆ O â–ˆ F â–ˆ █▇▆â–...â–ƒâ–, â˜...

â–'█▀▀█ █▀▀█ █▀▀ ▀▀█▀▀ █▀▀█ █▀▀█
â–'â–ˆâ–'â–'â–' â–ˆâ–,,â–,,â–ˆ ▀▀█ â–'â–'â–ˆâ–'â–' â–ˆâ–,,â–,,â–€ â–ˆâ–'â–'â–ˆ
â–'â–ˆâ–,,â–,,â–ˆ â–€â–'â–'â–€ ▀▀▀ â–'â–'â–ˆâ–'â–' â–€â–'▀▀ ▀▀▀▀



Dude

*

zerocoolos

koristite sscanf za parametre, puno je efikasnije i brze...

Citat: Gagi_Corleone poslato Avgust 26, 2011, 17:29:56 POSLE PODNE
       COMMAND:report(playerid, params[])  
       {  
          new string[128];  
          new sendername[MAX_PLAYER_NAME];  
          new idx;  
           if(IsPlayerConnected(playerid))  
           {  
               
               GetPlayerName(playerid, sendername, sizeof(sendername));  
             new length = strlen(params);  
             while ((idx < length) && (params[idx] <= ' '))  
             {  
                idx++;  
             }  
             new offset = idx;  
             new result[64];  
             while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))  
             {  
                result[idx - offset] = params[idx];  
                idx++;  
             }  
             result[idx - offset] = EOS;  
             if(!strlen(result))  
             {  
                SendClientMessage(playerid, COLOR_GRAD2, "{168BFF}Cyclone komanda | Komanda: {959561} /report [text]");  
                return 1;  
             }  
             if(Reporter[playerid] == 1)  
             {  
                SendClientMessage(playerid, COLOR_GREY, "Moras sacekati minutu prije ponovnog slanja reporta.");  
              return 1;  
             }  
               if(PlayerInfo[playerid][pMuted] >= 1)  
             {  
                   format(string, sizeof(string), " {FFFF80}Cyclone | {FF4444}Ne mozes pricati jer si utisan! Preostalo vrijeme: {FFFF80}%d sekundi(%d minuta)", PlayerInfo[playerid][pMuteTime], (PlayerInfo[playerid][pMuteTime]/60)+1);  
                SCM(playerid, 0xFF4444FF, string);  
                return 1;  
             }  
             format(string, sizeof(string), "Report od %s: {B1B1D8}*%s", sendername, (result));  
             ABroadCast(0x8080C0FF,string,2);  
             format(string, sizeof(string), "Tvoja prijava je poslana online {0x33CCFFAA}Adminima / GameMasterima. Vasa prijava glasi: %s!",  (result));   
             SendClientMessage(playerid, 0x8080C0FF, string);  
             Reporter[playerid] = 1;  
             SetTimerEx("Report1",60000, false, "i", playerid);  
      
                 }  
           return 1;  
       } 

Mislim da si to hteo da uradis. U SCM nemoze ici onako kako si uradio. I da bolje koristi SSCANF jer je lakse napraviti komandu i brza je.

Ovako bi ja ;)

dragan12

Citat: Dude poslato Avgust 26, 2011, 17:48:42 POSLE PODNE
koristite sscanf za parametre, puno je efikasnije i brze...
Sa tim se slazem ali neki opet idu na to Sto jednostavno kada moze komplikovano.


Evo komanda /report sa sscanf sada sam je pisao:
CMD:report(playerid, params[])
{
	new text[128],string[128];
    if(sscanf(params, "s[128]", text)) return SendClientMessage(playerid, -1, "Uputstvo: /report [Text]");
	if(Reporter[playerid] == 1) return SendClientMessage(playerid, COLOR_GRAD1, "Moras sacekati minutu prije ponovnog slanja reporta.");
    if(PlayerInfo[playerid][pMuted] >= 1)
    {
    format(string, sizeof(string), "  Utisan | Zabranjeno ti je pisanje jos %d sekundi(%d minuta)", PlayerInfo[playerid][pMuteTime], (PlayerInfo[playerid][pMuteTime]/60)+1);
    SCM(playerid, COLOR_YELLOW, string);
	return 1;
    }
         format(string, sizeof(string), "Report od %s[%d]: {B1B1D8}*%s", sendername, playerid, text);
         ABroadCast(COLOR_NEWS,string,1);
         SendClientMessage(playerid, COLOR_WHITE, *Vasa prijava je poslana online Administratorima. Vasa prijava glasi:);
		format(string, sizeof(string), "%s", text);
         SendClientMessage(playerid, COLOR_YELLOW, string);
         Reporter[playerid] = 1;
         SetTimerEx("Report1",60000, false, "i", playerid);
		 return 1;
	}

Mozda ima neka greska posto sam napisao u notepad-u. Pa ti sada vidi sta je tebi jednostavnije.

N0NE

new text[128];
if(sscanf(params,"s",text))return SendClientMessage(playerid, 0xFF0000AA, "INFO: /report [text]");


evo ti linija tj 2 lakse ti je sa ovim

@Gagi

Neka ude primjer 50 ljudi na server i neka 25 posalju /report pa onda neka izadu svih 50 i neka udu NOVIH 50 i neka ponovno 25 koristi /report to ti je 50 timera koje ti NE UBIJAS sto znaci da ce ova tvoj komanda kad-tad crashati server! Za ovakve stvari nema potrebe za pravljenje novog timera nego se varijablama spoji na jedan lokalni ili koristi TickCount kako i ja koristim za ovakve stvari npr.

static SomeVar[MAX_PLAYERS char]; // jer vjerojatno neces koristiti za vise od 255 max input

// i onda koristis
if(SomeVar{playerid} != 0 && GetTickCount() - SomeVar{playerid} < Sec(60)) // ako NIJE proslo 60 sekundi (1 minuta)

// i evo ti ovaj Sec() koji sam objavio u korisne skripte i kodove

#define Sec(%0) \
                  ((%0*1000))
Poslednja Izmena: Avgust 26, 2011, 18:08:27 POSLE PODNE od [H]265
Kristijan Stipić

dragan12

Citat: [H]265 poslato Avgust 26, 2011, 18:06:40 POSLE PODNE
@Gagi

Neka ude primjer 50 ljudi na server i neka 25 posalju /report pa onda neka izadu svih 50 i neka udu NOVIH 50 i neka ponovno 25 koristi /report to ti je 50 timera koje ti NE UBIJAS sto znaci da ce ova tvoj komanda kad-tad crashati server! Za ovakve stvari nema potrebe za pravljenje novog timera nego se varijablama spoji na jedan lokalni ili koristi TickCount kako i ja koristim za ovakve stvari npr.

static SomeVar[MAX_PLAYERS char]; // jer vjerojatno neces koristiti za vise od 255 max input

// i onda koristis
if(SomeVar{playerid} != 0 && GetTickCount() - SomeVar{playerid} < Sec(60))

// i evo ti ovaj Sec() koji sam objavio u korisne skripte i kodove

#define Sec(%0) \
                  ((%0*1000))

Ja sam njegovu komandu samo prebacio u ZCMD + SSCANF u kojoj je vec bio timer. Ali ovo sto si rekao to stoji i tako i jeste. ;)

Kod: c
CycloneRPG.pwn(27185) : error 017: undefined symbol "sendername"


Kod: c
         format(string, sizeof(string), "Report od %s[%d]: {B1B1D8}*%s", sendername, playerid, text);

Dodaj new sendername[MAX_PLAYER_NAME]; u cmd

Citat: - Nickâ,,¢ poslato Avgust 26, 2011, 18:13:15 POSLE PODNE
Dodaj new sendername[MAX_PLAYER_NAME]; u cmd

Gdje ?

Pod sto da dodam ?
Poslednja Izmena: Avgust 26, 2011, 18:18:10 POSLE PODNE od [CY:RP & BM] × SpaMaster ×

dragan12

new sendername[MAX_PLAYER_NAME]; 
GetPlayerName(playerid, sendername, sizeof(sendername)); 

To dodas ispod:
new text[128],string[128];
Ako si dodao tu moj komandu.