Admin chat
#1

Heeft iemand misschien een goede admin chat,

ik probeer er wel een te maken maar het werkt steets niet, als ik /a [text] voorbeeld /a hoi dan gebeurd er niks,

hier heb je me code's

Quote:

dcmd_a(playerid, cmdtext[]) {
#pragma unused cmdtext
new sendername[MAX_PLAYER_NAME];
new string[256], idx;
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_WHITE, "USAGE: /a <message>");
return 1;
}
format(string, sizeof(string), "[AdminChat]%s: %s", sendername, result);
SendAdminMessage(COLOR_WHITE,string);
return 1;
}
return 1;
}

onplayercommandtext:
Quote:

dcmd(a, 1, cmdtext);

Moet er eigenlijk meer bij, of is het zo goed?
Reply
#2

Bedoel je dat ie errors geeft of total niks doet?
Compilen lukt wel gewoon?
Word ie geladen in console?

En je script is klote te lezen, toch maar even wat uitlijnen.
Reply
#3

^ Dat

En waar slaan die loops op? En er wordt niks aangewezen aan je index variabel.. Waarom gebruik je ьberhaupt in een EOS methode? Een admin chat command is zo simpel, maar jouw code slaat gewoon absoluut nergens op.. O.o
Reply
#4

heb jullie 1tje voor me? het is een FS adminscript (luxadmin)
Reply
#5

Kijk, dingen kopiлren van andere codes is riskant, want je vergeet soms dingen te kopieren.. (Denk aan define's etc.)

Zoek anders even op de wiki of in de tutorial sectie, ik denk dat je dan wel iets handigs kunt vinden.

Als je dan nog niks vind, Google dan even.
Reply
#6

Ik zou sowieso afstappen van het zeer verouderde DCMD systeem en overstappen op ZCMD of YCMD. (Op het forum zijn hier tientallen tutorials over te vinden.) ZCMD en YCMD zijn heel eenvoudig te combineren met sscanf en dan kun je zeer eenvoudig commando's maken.

Ik heb ff heel snel een stukje code in elkaar geflanst. Ik heb het niet getest, dus weet niet of het werkt. Het zou in ieder geval zoiets moeten zijn:
pawn Code:
#include <zcmd>
#include <sscanf2>

CMD:a(playerid, params[])
{
    if(IsPlayerAdmin(playerid))
    {
        new string[256], finalmessage[512], adminname[MAX_PLAYER_NAME];
        if(!sscanf(params, "s[256]", string)) return SendClienMessage(playerid, COLOR_RED, "Usage: /a[text]");
        GetPlayerName(playerid, adminname, sizeof adminname);
        format(finalmessage, sizeof finalmessage, "[Admin Chat]%s: %s", adminname, string);
        for(new i=0; i < MAX_PLAYERS; i++)
        {
            if(IsPlayerAdmin(i))
            {
                SendClientMessage(i, COLOR_WHITE, finalmessage);
            }
        }
    }
    else return SendClientMessage(playerid, COLOR_RED, "You are not allowed to use the command.");
    return 1;
}
Reply
#7

Henkie's code is correct, alleen staat er een overbodige return statement
Reply
#8

Quote:
Originally Posted by Biesmen
View Post
Henkie's code is correct, alleen staat er een overbodige return statement
Niet echt, hij returned niet in de code van de if statement zelf.. dus die return zal alsnog worden uitgevoerd.

De maximale output van text in de chat is 128 tekens.. in het voorbeeld zie ik 256 en 512 staan. Dat zou je dus kunnen veranderen naar 128. De input kan dus ook niet groter zijn, dus de sscanf moet je dan ook aanpassen naar 128.

Je kan zeggen dat ik mierenneuk, maar om deze code als voorbeeld te gebruiken moet het ook gewoon goed zijn. 1 command met zoveel onnodige bytes is niet erg, maar Rome bestaat ook niet uit ййn weg (hehe).
Reply
#9

Quote:
Originally Posted by HB
View Post
Niet echt, hij returned niet in de code van de if statement zelf.. dus die return zal alsnog worden uitgevoerd.

De maximale output van text in de chat is 128 tekens.. in het voorbeeld zie ik 256 en 512 staan. Dat zou je dus kunnen veranderen naar 128. De input kan dus ook niet groter zijn, dus de sscanf moet je dan ook aanpassen naar 128.

Je kan zeggen dat ik mierenneuk, maar om deze code als voorbeeld te gebruiken moet het ook gewoon goed zijn. 1 command met zoveel onnodige bytes is niet erg, maar Rome bestaat ook niet uit ййn weg (hehe).
Misschien is het ook slimmer om helemaal geen sscanf toe te passen op deze command, dat scheelt ook weer rekenkracht voor de server/plugin.
Reply
#10

Quote:
Originally Posted by HB
View Post
Niet echt, hij returned niet in de code van de if statement zelf.. dus die return zal alsnog worden uitgevoerd.

De maximale output van text in de chat is 128 tekens.. in het voorbeeld zie ik 256 en 512 staan. Dat zou je dus kunnen veranderen naar 128. De input kan dus ook niet groter zijn, dus de sscanf moet je dan ook aanpassen naar 128.

Je kan zeggen dat ik mierenneuk, maar om deze code als voorbeeld te gebruiken moet het ook gewoon goed zijn. 1 command met zoveel onnodige bytes is niet erg, maar Rome bestaat ook niet uit ййn weg (hehe).
ZCMD returned al uit zichzelf. Je hoord dan in dit geval in de if-statement te returnen..
Reply
#11

Volgens mij heeft hij die code niet eens zelf geschreven. Sendername komt ook voor in een populair admin filterscript
Reply
#12

Code:
	if(strcmp(cmd, "/admin", true) == 0 || strcmp(cmd, "/a", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
			GetPlayerName(playerid, sendername, sizeof(sendername));
			new length = strlen(cmdtext);
			while ((idx < length) && (cmdtext[idx] <= ' '))
			{
				idx++;
			}
			new offset = idx;
			new result[96];
			while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
			{
				result[idx - offset] = cmdtext[idx];
				idx++;
			}
			result[idx - offset] = EOS;
			if(!strlen(result))
			{
				SendClientMessage(playerid, COLOR_WHITE, "USAGE: (/a)dmin [admin chat]");
				return 1;
			}
			new atext[60];
			if(PlayerInfo[playerid][pAdmin] == 1){ atext = "SAdmin(1)"; }
			if(PlayerInfo[playerid][pAdmin] == 2){ atext = "Junior Admin(2)"; }
			if(PlayerInfo[playerid][pAdmin] == 3){ atext = "General Admin(3)"; }
			if(PlayerInfo[playerid][pAdmin] == 4){ atext = "Senior Admin(4)"; }
			if(PlayerInfo[playerid][pAdmin] == 1337){ atext = "Elite Admin(1337)"; }
			if(PlayerInfo[playerid][pAdmin] == 99998) { atext = "Head Scripter(99998)"; }
			if(PlayerInfo[playerid][pAdmin] == 99999) { atext = "Server Owner(99999)"; }
			format(string, sizeof(string), "ADMIN CHAT %s: %s",  sendername, result);
			if(PlayerInfo[playerid][pAdmin] >= 1)
			{
				SendAdminMessage(COLOR_LIGHTRED, string);
			}
		}
		return 1;
	}
Reply
#13

We hadden de oplossing al, maar toch bedankt voor het kopiлren en plakken.
Reply
#14

Waarom in godsnaam moeite doen als het zo ook kan?
Reply
#15

Quote:
Originally Posted by Screaming
View Post
Waarom in godsnaam moeite doen als het zo ook kan?
Tsja onze logica is meer van: waarom in godsnaam een oud topic bumpen?
Reply
#16

Stond hoog in de topic lijst
Reply
#17

Quote:
Originally Posted by Screaming
View Post
Stond hoog in de topic lijst
Naar de datum kijken helpt ook.
Reply
#18

Quote:
Originally Posted by Epic_Mickey
View Post
Naar de datum kijken helpt ook.
Kerel, de vorige post was amper twee weken geleden..
Reply
#19

Quote:
Originally Posted by mamorunl
View Post
Kerel, de vorige post was amper twee weken geleden..
Oooh, gelukkig maar 2 weken. >.<
Reply
#20

Quote:
Originally Posted by BlackBank3
View Post
Misschien is het ook slimmer om helemaal geen sscanf toe te passen op deze command, dat scheelt ook weer rekenkracht voor de server/plugin.
Dat klopt inderdaad, al maak ik zelf eigenlijk altijd gebruik van sscanf. sscanf is zodanig snel dat het qua performance niet heel veel scheelt, en je hebt wel de zekerheid dat je input goed is.. de error handling wordt namelijk voor je gedaan. Gewoon een kwestie van luiheid eigenlijk.

Quote:
Originally Posted by Biesmen
View Post
ZCMD returned al uit zichzelf. Je hoord dan in dit geval in de if-statement te returnen..
Ik ben me niet bewust van ZCMD die zelf al returned, weet je zeker dat dit zo is? Misschien eens handig om dat op te zoeken dan. Overigens klopt het dan alsnog niet, als ZCMD zelf returned, is een "return 1;" compleet overbodig, behalve als je wilt zorgen dat de rest van de code in die scope niet uitgevoerd moet worden (bij bijvoorbeeld een error).


@Duck: Alleen omdat iemand variabelnamen overneemt wil het niet direct zeggen dat het een 'gejat' script is. Ik kan me nog zo goed herinneren dat destijds het Godfather script (zover ik mij kan herinneren) een variabele 'giveplayerid' geintroduceerd had voor de commands waar een id ingevoerd moest worden. Tientallen dan wel niet honderden mensen maakten ineens gebruik van die variabele, terwijl hun script niets met het Godfather script te maken had..

Desalniettemin, het probleem is al lang opgelost, maar vond het toch nog even belangrijk om de hekkensluiter te zijn voor nu.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)