-
Hi
Nemtudom van e egyátalán ilyen, szóval azért leírom..
Olyan script kellene nekem, hogy a módba megkellene adni 1 vag több ip-címet, akik ugymond védettek lennének... Nemlehetne õket kickelni, még rconal se, és bannolni se, sõt az admint se lehetne elvenni tölle...
Ha valaki mondjuk azzal a névvel lépne be ami hozzá van rendelve az ip-hez akkor azt autómatán kickelné a szerver..
Remélem valaki tud rá megoldást
Elõre kössz
-
Nem teszteltem, de próbáld meg ezzel( az IP-ket nyilván helyettesítsd be ):
#include < a_samp >
#include < zcmd >
#include < sscanf2 >
#define COLOR_RED 0xFF0000AA
#define MAX_PROTECTED_IPS 3
new protectedIPs[ MAX_PROTECTED_IPS ][ 14 ] = {
\"80.98.22.124\",
\"80.98.22.125\",
\"80.98.22.126\"
};
CMD:kick( playerid, params[ ] ) {
new iPlayer;
if( unformat( params, \"d\", iPlayer ) ) {
SendClientMessage( playerid, COLOR_RED, \"Használat: /kick < JátékosID >\" );
} else {
new szIP[ 14 ];
GetPlayerIp( playerid, szIP, sizeof szIP );
for( new x = 0; x < sizeof protectedIPs; ++x ) {
if( !strcmp( szIP, protectedIPs[ x ] ) ) {
return SendClientMessage( playerid, COLOR_RED, \"Ezt a játékost nem rúgahtod ki!\" );
}
}
Kick( iPlayer );
}
return 1;
}
-
CMD:kick( playerid, params[ ] ) {
ezzel a sorral olyan baja van hogy:
C:\\Users\\Robi\\Desktop\\SA-MP\\pawno\\mode1.pwn(1601) : error 029: invalid expression, assumed zero
C:\\Users\\Robi\\Desktop\\SA-MP\\pawno\\mode1.pwn(1601) : error 017: undefined symbol \"cmd_kick\"
C:\\Users\\Robi\\Desktop\\SA-MP\\pawno\\mode1.pwn(1601) : error 029: invalid expression, assumed zero
C:\\Users\\Robi\\Desktop\\SA-MP\\pawno\\mode1.pwn(1601) : fatal error 107: too many error messages on one line
-
Ja igen, elfelejtettem írni, hogy én zcmd-t használtam. De ha te a dcmd-t, vagy csak a sima OnPlayerCommandText függvényt használod, akkor annak megfelelõen alakítsd át( ha nem megy, akkor írd le, hogy melyiket használod, és segítek ;) ).
-
A sima OnPlayerCommandtextet használom:) kérlek segíts :)
-
OnPlayerCommandText-et cseréld ki erre zcmd-nél:
OnPlayerCommandPerformed(playerid, cmdtext[], success)
A vége eredetileg így néz ki: ( OnPlayerCommandText legalja )
return 0;
És ezt cseréld ki erre:
return success;
U.I.: Az unformat mivel másobb, mint az sscanf ?
-
Ha még most sem jó, akkor másold be a /kick parancsodat( if( strcmp...)-tõl kezdve ), és akkor behelyettesítem. ;)
E: @Kurta,
A függvényt lehetõségünk van unformat néven is használni. Ezt az alternatív megoldást azért hozta létre Y_Less, hogy elkerülje a félreértéseket ezzel, és a C nyelv beli sscanf függvénnyel kapcsolatban.
-
public OnPlayerCommandPerformed(playerid, cmdtext[], success) {
if( !strcmp( \"/kick\", cmdtext, true ) ) {
new iPlayer;
if( unformat( params, \"d\", iPlayer ) ) {
SendClientMessage( playerid, COLOR_RED, \"Használat: /kick < JátékosID >\" );
} else {
new szIP[ 14 ];
GetPlayerIp( playerid, szIP, sizeof szIP );
for( new x = 0; x < sizeof protectedIPs; ++x ) {
if( !strcmp( szIP, protectedIPs[ x ] ) ) {
return SendClientMessage( playerid, COLOR_RED, \"Ezt a játékost nem rúgahtod ki!\" );
}
}
Kick( iPlayer );
}
return 1;
Hiba:C:\\Users\\Robi\\Desktop\\SA-MP\\pawno\\mode1.pwn(1611) : error 017: undefined symbol \"unformat\"
-
Szükséged van a sscanf nevû pluginra. Itt van a leírásom errõl a függvényrõl, az elején megtalálod a letöltési linket, és a telepítés módját. http://sampforum.hu/index.php?topic=4400.0
-
Na lenne még egy hülye kérdésem: Ha azt az iPlayer változót globálisan hozod létre, akkor az nemjobb, mint ha minden parancsnál ?
-
Na lenne még egy hülye kérdésem: Ha azt az iPlayer változót globálisan hozod létre, akkor az nemjobb, mint ha minden parancsnál ?
Szerintem jobb.
Különben:
if( unformat( params, \"d\", iPlayer ) ) {
Ide nem cmdtext kéne?
if( unformat( cmdtext, \"d\", iPlayer ) ) { ..... ?
-
Van egy kick parancsom, segítene valaki hozzáépíteni ezt az \"antikicket\"?
Elõre kössz
if(strcmp(cmd, \"/kick\", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(strlen(tmp) == 0) return SendClientMessage(playerid, COLOR_WHITE, \"Használat: /kick [JátékosID] [indok]\");
giveplayerid = strval(tmp);
if(PlayerInfo[playerid][pAdmin] >= 1)
{
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))
{
result = \" - \";
}
new playa;
format(string, sizeof(string), \"*AdmCmd: %s kickelve lett %s által. Indok:[%s]\", GetPlayerNameEx(giveplayerid), GetPlayerNameEx(playerid), result);
SendClientMessageToAll(COLOR_RED, string);
GetPlayerName(playa, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), \"Kickelve lettél %s által. Indok: [%s]\", GetPlayerNameEx(playerid), result);
SendClientMessage(giveplayerid, COLOR_LIGHTRED, string);
Kick(giveplayerid);
return 1;
}
}
else{
SendClientMessage(playerid, COLOR_RED, \"Nem vagy admin\");
}
}