Jump to content
  • 0

pomoc Jméno


Stellet

Dotaz

Ahoj, chtěl bych se zeptat jak udělat že když se někdo odpojí, ale něco udělal tak ho musím potrestat normál je to toto:

 

 

CMD:prison(playerid, params[])
{
    new string[500];
    new Pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Pname, sizeof(Pname));
    format(string, sizeof(string), "/Players/%s.ini",Pname);
    new ID,Cas,str[128];
    if(Hrac[playerid][AdminLevel] <= 2) return SendClientMessage(playerid,-1,"Nejsi Administrátor!");
    else if(sscanf(params,"uis",ID,Cas,params)) return SendClientMessage(playerid,-1,"/prison [ID] [CAS] [DUVOD]");
    else  if(!IsPlayerConnected(ID)) return SendClientMessage(playerid,-1,"Tento hráč není na serveru.");
    else if(ajail[ID] == 1) return SendClientMessage(playerid,-1,"Tento hráč už je v prisonu.");
    if(Hrac[playerid][AdminLevel] == 2)
    {
        format(str,sizeof(str),"Moderátor %s udělil prison hráči %s na %i minut [Důvod: %s ]",GetName(playerid),GetName(ID),Cas,params);
        SendClientMessageToAll(COLOR_RED,str);
        ajail[ID] = 1;
        SpawnPlayer(ID);
        SetTimerEx("P_Propust",60000*Cas,false,"i",ID);
        return 1;
    }
    return true;
}

No ale já potřebuju jak udělat: /oprison [JMENO][CAS][DUVOD] Děkuji :)

Link to comment
Share on other sites

18 odpovědí na tuto otázku

Recommended Posts

  • 0

Hmm, trošku nechápem... prečo chceš potrestať niekoho, kto už nie je na servery?

 

 

 

No dalo by sa to pomocou includov na ukladanie do súborov (konkrétne registrácia).

Namiesto ID dáš MENO (namiesto integeru string) v SSCANF.

Potom zistíš či je na dané meno vytvorený súbor a ak áno, uložíš tam čas a dôvod...

Potom pri spawnutí hráča skontroluješ či je čas viac ako 0 a ak áno, potrestáš ho :d

 

Dal by som ti aj kód ale v pawne som dobré 2 roky nerobil tak si na to netrúfam :d

Link to comment
Share on other sites

  • 0

Pokuď jsem dobře rozuměl myslel jsi to takto:

 

CMD:oprison(playerid, params[])
{
new string[150];
new Pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Pname, sizeof(Pname));
format(string,sizeof(string),"/Players/%s.ini",Pname);
new JMENO,Cas,str[128];
if(sscanf(params,"sis",JMENO,Cas,params)) return SendClientMessage(playerid,-1,"/oprison [JMENO] [CAS] [DŮVOD]");
else if(ajail[JMENO] == 1) return SendClientMessage(playerid,-1,"Tento hráč už je v prisonu.");
if(Hrac[playerid][AdminLevel] == 7)
{
   if(!DOF2_FileExists(JMENO))
   {
       SendClientMessage(playerid,COLOR_RED,"Hráč %s není zaregistrovanej.",JMENO);
   }
   if(DOF2_FileExists(JMENO))
   {
   format(str,sizeof(str),"Administrátor %s udělil Offline Prison hráči %s na 0i minut [Důvod: %s]",GetName(playerid),GetName(JMENO),Cas,params);
   SendClientMessageToAll(COLOR_RED,str);
   ajail[JMENO] = 1;
   SetPlayerPos(JMENO, -1790.7722, 567.2419, 333.3382);
   prisonTime[JMENO] = Cas;
DOF2_SetInt(string, "PrisonTime", Cas);
}
return 1;
   }
   return 1;
}

Jenže mám tam errory:

 

C:\Users\Milan\Desktop\Český Role-Play Pawning\gamemodes\S-RP.pwn(2518) : error 035: argument type mismatch (argument 1)
C:\Users\Milan\Desktop\Český Role-Play Pawning\gamemodes\S-RP.pwn(2520) : warning 202: number of arguments does not match definition
C:\Users\Milan\Desktop\Český Role-Play Pawning\gamemodes\S-RP.pwn(2522) : error 035: argument type mismatch (argument 1)
C:\Users\Milan\Desktop\Český Role-Play Pawning\gamemodes\S-RP.pwn(2533) : warning 217: loose indentation
Pawn compiler 3.2.3664     Copyright (c) 1997-2006, ITB CompuPhase
 
 
2 Errors.
 
No a řádky:
2518: if(!DOF2_FileExists(JMENO))
2520: SendClientMessage(playerid,COLOR_RED,"Hráč %s není zaregistrovanej.",JMENO);
2522: if(DOF2_FileExists(JMENO))
2533:    return 1;
Edited by FeedBoss
Link to comment
Share on other sites

  • 0
SendClientMessage(playerid,COLOR_RED,"Hráč %s není zaregistrovanej.",JMENO);//nelze


new str[100];
format(str,sizeof(str),"Hráč %s není zaregistrovanej.",JMENO);
SendClientMessage(playerid,COLOR_RED,str);

//JMENO tvoříš jako integer, ale ukládáš tam string a dál s nim nakládáš jak s ID.

Edited by Matess
Link to comment
Share on other sites

  • 0
CMD:oprison(playerid, params[])
{
new string[60];
new JMENO[MAX_PLAYER_NAME],Cas,str[128];
if(sscanf(params,"sis",JMENO,Cas,params)) return SendClientMessage(playerid,-1,"/oprison [JMENO] [CAS] [DŮVOD]");
if(Hrac[playerid][AdminLevel] == 7)
{
   format(string,sizeof(string),"/Players/%s.ini",JMENO);
   if(!DOF2_FileExists(string))
   {
       SendClientMessage(playerid,COLOR_RED,"Hráč není zaregistrovanej.");
   }
   if(DOF2_FileExists(string))
   {
   format(str,sizeof(str),"Administrátor %s udělil Offline Prison hráči %s na %i minut [Důvod: %s]",GetName(playerid),JMENO,Cas,params);
   SendClientMessageToAll(COLOR_RED,str);
   DOF2_SetInt(string, "PrisonTime", Cas);
   }
}
return 1;
}

Dovolil som si upraviť tvoj script, takto by mal vyzerať (aspoň myslím)

 

Ešte 1 pripomienka:

nezabudni v OnPlayerSpawn ošetriť aby ho to hodilo do vezenia keď má PrisonTime (vytiahneš zo súboru) väčší ako 0.

Edited by Quiter
Link to comment
Share on other sites

  • 0

a ještě šlo by něják udělat že když se připojí, aby věděl od koho dostal prison, tak třeba odemě: Administrátor FeedBoss vám dal Offline Prison na %i minut [Důvod: %d] .. ale jak to udělám že zjistí že jsem mu ho dal já ?

Link to comment
Share on other sites

  • 0

Třeba takto:

CMD:oprison(playerid, params[])
{
new string[60], Name[24]; //tu jsem přidal proměnnou Name
GetPlayerName(playerid, Name, 24); //funkce která zjistí jméno a zapíše ho do pr. Name
new JMENO[MAX_PLAYER_NAME],Cas,str[128];
if(sscanf(params,"sis",JMENO,Cas,params)) return SendClientMessage(playerid,-1,"/oprison [JMENO] [CAS] [DŮVOD]");
if(Hrac[playerid][AdminLevel] == 7)
{
   format(string,sizeof(string),"/Players/%s.ini",JMENO);
   if(!DOF2_FileExists(string))
   {
       SendClientMessage(playerid,COLOR_RED,"Hráč není zaregistrovanej.");
   }
   if(DOF2_FileExists(string))
   {
   format(str,sizeof(str),"Administrátor %s udělil Offline Prison hráči %s na %i minut [Důvod: %s]",Name,JMENO,Cas,params); //zde nahradíš GetName(playerid) Name - Quiter na to měl nejspíš nějaký stock, takže mu GetName funguje. Pokud to nechceš udělat jako já, tak si můžeš taky vytvořit stock
   SendClientMessageToAll(COLOR_RED,str);
   DOF2_SetInt(string, "PrisonTime", Cas);
   }
}
return 1;
}

Stock pro tento příkaz: (pokud to uděláš přes tento stock, neměl by si nic v příkazu měnit a vše by mělo jet)

stock GetName(playerid)
{
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid,name,sizeof(name));
	return name;
}
Edited by D@ndys
Link to comment
Share on other sites

  • 0

D@ndys totálnu blbosť si mu napísal :d

Aj keďmusím uznať že ten stock sa mu hodí, ale keďže ho použil aj on tak som predpokladal že ho už v kóde má :)

 

_____________________________________________

 

Tam kde máš DOF2_SetInt(string, "PrisonTime", Cas);

daj pod to: DOF2_SetStr(string, "PrisonReason", str); // POZOR na PRIKAZ!! neviem ako sa v DOF2 ukladá string!!

 

 

A ešte v OnPlayerSpawn vytiahni ten string a načítaj ho do premennej ktorú mu potom pošlí ako SCM (SendClientMessage)

Edited by Quiter
Link to comment
Share on other sites

  • 0

Jo díky :)


if(ajail[playerid] == 0)
{
   new string[500];
new Pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, Pname, sizeof(Pname));
format(string, sizeof(string), "/Players/%s.ini",Pname);
  SetPlayerPos(playerid,DOF2_GetInt(string,"PoziceX"),DOF2_GetInt(string,"PoziceY"),DOF2_GetInt(string,"PoziceZ"));
} else {
new string[500];
new Pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, Pname, sizeof(Pname));
format(string, sizeof(string), "/Players/%s.ini",Pname);
  SetPlayerPos(playerid, -1790.7722, 567.2419, 333.3382);
  DOF2_GetString(string, "PrisonReason");
SendClientMessage(playerid,COLOR_RED,PrisonReason);
}

Ale jak načtu ten PrisonReason ? Když to dám takto skočí error, Undefined PrisonReason

Edited by FeedBoss
Link to comment
Share on other sites

  • 0

Jo díky :)

if(ajail[playerid] == 0)
{
   new string[50];
new Pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, Pname, sizeof(Pname));
format(string, sizeof(string), "/Players/%s.ini",Pname);
  SetPlayerPos(playerid,DOF2_GetInt(string,"PoziceX"),DOF2_GetInt(string,"PoziceY"),DOF2_GetInt(string,"PoziceZ"));
} else {
new string[50];
new Pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, Pname, sizeof(Pname));
format(string, sizeof(string), "/Players/%s.ini",Pname);
  SetPlayerPos(playerid, -1790.7722, 567.2419, 333.3382);
SendClientMessage(playerid,COLOR_RED,DOF2_GetString(string, "PrisonReason"));
}

Ale jak načtu ten PrisonReason ? Když to dám takto skočí error, Undefined PrisonReason

 

Takto :d (hore je upraveny ten script)

Link to comment
Share on other sites

  • 0

Když to udělám podle vás dohromady, přepsal jsem i na Qwera, napíše to Administrátor %s dal hráči ' Offline prison na %i minut. [Důvod: %s] Jen to jméno + neuloží mu to.

Link to comment
Share on other sites

  • 0

Trošku nechápem... To ti to napíše tie %s ?

 

Neviem ako na terajšej verzii, ale v predchádzajúcich to nebolo možné (pri napísaní % padol server)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...