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:
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: (http://i.imgur.com/bxkXF.png) (http://imgur.com/bxkXF) Nema mi onog reda Vasa prijava je poslana online Administratorima. Vasa prijava glasi:
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...
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;
}
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.
(http://i.imgur.com/tp8b1.png) (http://imgur.com/tp8b1)
Ovako bi ja ;)
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.
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))
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. ;)
CycloneRPG.pwn(27185) : error 017: undefined symbol "sendername"
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 ?
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
To dodas ispod:
new text[128],string[128];
Ako si dodao tu moj komandu.