GTA-Expert Forum: [ARG] Funzioni e Comandi Utili - GTA-Expert Forum

Salta al contenuto

  • (18 Pagine)
  • +
  • « Primo
  • 10
  • 11
  • 12
  • 13
  • 14
  • Ultimo »
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[ARG] Funzioni e Comandi Utili

#221 L'utente è offline   .ReVo^ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1402
  • Iscritto il: 20/11/08
  • GTA Preferito:GTA: TBoGT

Inviato il 05 luglio 2010 - 22:24

AddCommand


Simile al dcmd.
in fondo a tutto
AddCommand(playerid, command[], function[], cmdtext[])
{
        if(strcmp(cmdtext,command,true)==0)
        {
                CallLocalFunction(function,"i",playerid);
        }

}


L'Uso e molto semplice, bisogna mettere sotto OnPlayerCommandText
AddCommand(playerid, nomedelcomando, lafunzionedachiamare, cmdtext);

Esempio:
AddCommand(playerid,"/prova","provacall",cmdtext);


forward provacall(playerid);
public provacall(playerid)
{
	SendClientMessage(playerid, COLOR_RED,"ok");
}


Ricordate il forward + public.

Per ora non e nulla di speciale,poi ci lavorerò meglio ;).

Messaggio modificato da .ReVo^ il 11 luglio 2010 - 19:42

Immagine Postata
0

#222 L'utente è offline   _All3Xz_ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1512
  • Iscritto il: 05/01/09
  • GTA Preferito:GTA: San Andreas

Inviato il 11 luglio 2010 - 12:26

nella funzione usa strcmp non strfind :m:
My Works
[FS]_All3Xz_ Anti-Cheat 4
[FS]_All3Xz_ Anti-Cheat 7
[FS]_All3Xz_ Anti-Cheat 8
[GM] PVCM Training 0.? (MySQL)
[APP]_All3Xz_ NPC Generator
[GUIDA] Leggere da file usando dini
[GUIDA] Scripting GTA:IV - Callbacks
[GM] PVCM Training 1 (MySQL)
[GM] PVCM A/D
[GUIDA] Leggere da file usandi dini 2
0

#223 L'utente è offline   .ReVo^ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1402
  • Iscritto il: 20/11/08
  • GTA Preferito:GTA: TBoGT

Inviato il 11 luglio 2010 - 19:42

Modificato.
Immagine Postata
0

#224 L'utente è offline   KevinGenoves3 

  • Tirapiedi
  • Gruppo: Utenti
  • Messaggi: 609
  • Iscritto il: 05/07/10
  • Provenienza:Zena

Inviato il 12 luglio 2010 - 03:42

Visualizza Messaggi.ReVo^, il 05 luglio 2010 - 23:24 ha detto:

AddCommand


Simile al dcmd.
in fondo a tutto
AddCommand(playerid, command[], function[], cmdtext[])
{
 if(strcmp(cmdtext,command,true)==0)
 {
 CallLocalFunction(function,"i",playerid);
 }

}


L'Uso e molto semplice, bisogna mettere sotto OnPlayerCommandText
AddCommand(playerid, nomedelcomando, lafunzionedachiamare, cmdtext);

Esempio:
AddCommand(playerid,"/prova","provacall",cmdtext);


forward provacall(playerid);
public provacall(playerid)
{
	SendClientMessage(playerid, COLOR_RED,"ok");
}


Ricordate il forward + public.

Per ora non e nulla di speciale,poi ci lavorerò meglio ;).

Il codice è più leggibile se preso a singoli blocchi, ma è un pò incasinato nel suo totale, si fa prima senza.
Immagine Postata


Immagine PostataRegisterMe v 2.0 Immagine PostataImmagine PostataImmagine PostataImmagine PostataImmagine PostataImmagine Postata




0

#225 L'utente è offline   _All3Xz_ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1512
  • Iscritto il: 05/01/09
  • GTA Preferito:GTA: San Andreas

Inviato il 13 luglio 2010 - 11:48

potresti metterci l'auto forward :asd:
My Works
[FS]_All3Xz_ Anti-Cheat 4
[FS]_All3Xz_ Anti-Cheat 7
[FS]_All3Xz_ Anti-Cheat 8
[GM] PVCM Training 0.? (MySQL)
[APP]_All3Xz_ NPC Generator
[GUIDA] Leggere da file usando dini
[GUIDA] Scripting GTA:IV - Callbacks
[GM] PVCM Training 1 (MySQL)
[GM] PVCM A/D
[GUIDA] Leggere da file usandi dini 2
0

#226 L'utente è offline   .ReVo^ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1402
  • Iscritto il: 20/11/08
  • GTA Preferito:GTA: TBoGT

Inviato il 13 luglio 2010 - 22:02

E Un piccolo script fatto per perdere tempo eh.
Immagine Postata
0

#227 L'utente è offline   _All3Xz_ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1512
  • Iscritto il: 05/01/09
  • GTA Preferito:GTA: San Andreas

Inviato il 17 luglio 2010 - 10:20

Vabbè se vuoi migliorarlo..
My Works
[FS]_All3Xz_ Anti-Cheat 4
[FS]_All3Xz_ Anti-Cheat 7
[FS]_All3Xz_ Anti-Cheat 8
[GM] PVCM Training 0.? (MySQL)
[APP]_All3Xz_ NPC Generator
[GUIDA] Leggere da file usando dini
[GUIDA] Scripting GTA:IV - Callbacks
[GM] PVCM Training 1 (MySQL)
[GM] PVCM A/D
[GUIDA] Leggere da file usandi dini 2
0

#228 L'utente è offline   KevinGenoves3 

  • Tirapiedi
  • Gruppo: Utenti
  • Messaggi: 609
  • Iscritto il: 05/07/10
  • Provenienza:Zena

Inviato il 18 luglio 2010 - 07:33

Ah, per curiosità, funziona come il sscanf o strtok? nel senso di fare comado + opzione
Immagine Postata


Immagine PostataRegisterMe v 2.0 Immagine PostataImmagine PostataImmagine PostataImmagine PostataImmagine PostataImmagine Postata




0

#229 L'utente è offline   .ReVo^ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1402
  • Iscritto il: 20/11/08
  • GTA Preferito:GTA: TBoGT

Inviato il 18 luglio 2010 - 10:22

Visualizza MessaggiKevinGenoves3, il 18 luglio 2010 - 08:33 ha detto:

Ah, per curiosità, funziona come il sscanf o strtok? nel senso di fare comado + opzione

Il fatto tipo /prova we we lo fatto :zese: lo devo solo testare e provare e per ora non ho molto tempo.

Messaggio modificato da .ReVo^ il 18 luglio 2010 - 10:22

Immagine Postata
0

#230 L'utente è offline   Skiaffo 

  • Boss
  • Gruppo: Moderatori
  • Messaggi: 14732
  • Iscritto il: 08/12/05
  • Provenienza:Urbs Aeterna
  • GTA Preferito:GTA V

Inviato il 13 agosto 2010 - 11:32

Il codice del countdown che c'era in prima pagina risaliva all'età della pietra, quindi visto che mi sono trovato a doverne fare un altro, aggiorno il codice che c'era con questo che è un codice un po' più bello da vedere...

Il comando è: /count [secondi (3 - 10)]

In cima allo script:

new counton = 0;
forward CountDown(time);


Sotto OnPlayerCommandText:

if ((strcmp(cmd, "/cdown", true) == 0) || (strcmp(cmd, "/count", true) == 0) || (strcmp(cmd, "/countdown", true) == 0)) {
  new tmp[256];
  if (counton == 1) {
    SendClientMessage(playerid, 0x00E800FF, "C'è già un countdown attivo");
    return 1;
  }
  tmp = strtok(cmdtext, idx);
  if (!strlen(tmp)) {
    counton = 1;
    CountDown(3);
    return 1;
  }
  new time = strval(tmp);
  if ((time < 3) || (time > 10)) {
    SendClientMessage(playerid, 0x00E800FF, "Scegli un tempo tra 3 e 10 secondi.");
    return 1;
  }
  counton = 1;
  CountDown(time);
  return 1;
}


In fondo allo script:

public CountDown(time) {
  new string[32];
  if (time > 0) {
    format(string, 32, "Count: %d", time);
  } else {
    format(string, 32, "Count: VIA!!");
    counton = 0;
  }
  SendClientMessageToAll(0x00E800FF, string);
  if (counton == 0) return 1;
  SetTimerEx("CountDown", 1000, 0, "d", time - 1);
  return 1;
}

"Audentes Fortuna iuvat"
0

#231 L'utente è offline   _All3Xz_ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1512
  • Iscritto il: 05/01/09
  • GTA Preferito:GTA: San Andreas

Inviato il 13 agosto 2010 - 19:45

FORALLE (nientaltro che una ridefinizione del ciclo for,creata solo perchè più veloce e più breve da scrivere)
#define foralle(%1,%2) for(new %1=0; %1<%2; %1++)

TEST:
new primofori = GetTickCount();
    for(new i=0; i<MAX_PLAYERS;i++)
    {
		print("\n");
	}
	new primoforf = GetTickCount();
	new secondofori = GetTickCount();
	foralle(i,MAX_PLAYERS)
	{
	   print("\n");
	}
	new secondoforf = GetTickCount();
	printf("\n\n\n\n\n");
	printf(" RISULTATI ");
	printf(" CICLO NORMALE %dms",primoforf-primofori);
	printf(" CICLO ALLE %dms",secondoforf-secondofori);


testato sul mio pc:
CICLO NORMALE 95ms
CICLO ALLE 25ms
My Works
[FS]_All3Xz_ Anti-Cheat 4
[FS]_All3Xz_ Anti-Cheat 7
[FS]_All3Xz_ Anti-Cheat 8
[GM] PVCM Training 0.? (MySQL)
[APP]_All3Xz_ NPC Generator
[GUIDA] Leggere da file usando dini
[GUIDA] Scripting GTA:IV - Callbacks
[GM] PVCM Training 1 (MySQL)
[GM] PVCM A/D
[GUIDA] Leggere da file usandi dini 2
0

#232 L'utente è offline   Peppe951 

  • Tirapiedi
  • Gruppo: Utenti
  • Messaggi: 899
  • Iscritto il: 14/07/09
  • GTA Preferito:Sconosciuto

Inviato il 13 agosto 2010 - 21:52

Visualizza Messaggi_All3Xz_, il 13 agosto 2010 - 20:45 ha detto:

FORALLE (nientaltro che una ridefinizione del ciclo for,creata solo perchè più veloce e più breve da scrivere)
#define foralle(%1,%2) for(new %1=0; %1<%2; %1++)

TEST:
new primofori = GetTickCount();
    for(new i=0; i<MAX_PLAYERS;i++)
    {
		print("\n");
	}
	new primoforf = GetTickCount();
	new secondofori = GetTickCount();
	foralle(i,MAX_PLAYERS)
	{
	   print("\n");
	}
	new secondoforf = GetTickCount();
	printf("\n\n\n\n\n");
	printf(" RISULTATI ");
	printf(" CICLO NORMALE %dms",primoforf-primofori);
	printf(" CICLO ALLE %dms",secondoforf-secondofori);


testato sul mio pc:
CICLO NORMALE 95ms
CICLO ALLE 25ms

Ma è una gran cazzata che è più veloce D:

foralle(i, MAX_PLAYERS) viene trasformato dal compilatore automaticamente in
for(new i=0; i<MAX_PLAYERS;i++)
quindi i due cicli sono identici e non c'è nessuna differenza di velocità.
0

#233 L'utente è offline   Peppe951 

  • Tirapiedi
  • Gruppo: Utenti
  • Messaggi: 899
  • Iscritto il: 14/07/09
  • GTA Preferito:Sconosciuto

Inviato il 13 agosto 2010 - 22:10

ForeachPVar, funzione creata da me al momento per passare il tempo D:
Non l'ho testata in un server ma dovrebbe funzionare.

* -------------------------------------
ForeachPVar(playerid, varName[], varType);

Esegue un ciclo con tutte le PVar di un
player, dando alla stringa varName il
nome della PVar e all'intero varType
l'id corrispondente al tipo della PVar
(1 = intero, 2 = stringa, 3 = float).
Utile ad esempio per agire su tutte le
PVar di un player senza fare una o più
righe di codice per ogni PVar... 
------------------------------------- */

#define ForeachPVar(%1,%2,%3) \
    for(new _index = 0, _numVars = GetPVarsUpperIndex(playerid); _index < _numVars; _index++) \
    { \
        GetPVarNameAtIndex(%1, _index, %2, sizeof(%2)); \
	%3 = GetPVarType(%1, %2); \
    }


Esempio:
public OnPlayerSpawn(playerid)
{
    //Porta a dei valori prestabiliti tutte le PVar di un player
    new
        varName[128],
        varType;
    ForeachPVar(playerid, varName, varType)
    {
        switch(varType)
        {
            case 1:
            {
		SetPVarInt(playerid, varName, 2);
	    }
	    case 2:
	    {
	        SetPVarString(playerid, varName, "LoL");
	    }
	    case 3:
	    {
	        SetPVarFloat(playerid, varName, 0.255);
	    }
	}
    }
    return 1;
}


Un altro esempio pratico sarebbe quello di usare questa macro per salvare tutte le PVar di un player in un file...
Naturalmente potrete escludere delle particolari PVar dal ciclo in vari modi, ad esempio usando lo strcmp per vedere se il varName corrisponde a quello della PVar da escludere.

Messaggio modificato da Peppe951 il 14 agosto 2010 - 07:31

0

#234 L'utente è offline   Fab10 

  • Teppista
  • Gruppo: Banned
  • Messaggi: 699
  • Iscritto il: 10/06/09
  • Provenienza:Palermo
  • GTA Preferito:GTA: San Andreas

Inviato il 13 agosto 2010 - 22:27

raga una dritta velocina, a cosa servono sti PVAR che hanno aggiunto dalla r5 in poi
0

#235 L'utente è offline   .ReVo^ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1402
  • Iscritto il: 20/11/08
  • GTA Preferito:GTA: TBoGT

Inviato il 14 agosto 2010 - 09:30

Visualizza MessaggiFab10, il 13 agosto 2010 - 23:27 ha detto:

raga una dritta velocina, a cosa servono sti PVAR che hanno aggiunto dalla r5 in poi

Sono come le array, (new Ciao[MAX_PLAYERS]) solo che sprecano meno memoria di un array normale e vengono automaticamente cancellate quando un player si disconnette.
Immagine Postata
0

#236 L'utente è offline   Skiaffo 

  • Boss
  • Gruppo: Moderatori
  • Messaggi: 14732
  • Iscritto il: 08/12/05
  • Provenienza:Urbs Aeterna
  • GTA Preferito:GTA V

Inviato il 17 agosto 2010 - 19:10

Comando /admins

Dice quali sono gli amministratori connessi in quel momento:

if (!strcmp("/admins", cmdtext, true)) {
  new pname[24];
  new admincount = 0;
  SendClientMessage(playerid, 0x00D90044,"----------------------------");
  SendClientMessage(playerid, 0x00D90044, "Admins Online:");
  for (new i = 0; i < GetMaxPlayers(); i++) {
    if (IsPlayerConnected(i) && IsPlayerAdmin(i)) {
      admincount ++;
      GetPlayerName(i, pname, 24);
      SendClientMessage(playerid, 0x00D90044, pname);
  } }
  if (admincount == 0) SendClientMessage(playerid, 0x00D90044, "Non ci sono Admins connessi");
  SendClientMessage(playerid, 0x00D90044,"----------------------------");
  return 1;
}


Comando /respawncars

Respawna tutti i veicoli del server tranne quelli che hanno un player alla guida:

if (!strcmp(cmdtext, "/respawncars", true)) {
  if (IsPlayerAdmin(playerid) == 1) {
    new pname[24];
    new str[128];
    new bool:NoRS[MAX_VEHICLES];
    for (new i=0; i<MAX_PLAYERS; i++) {
      if (IsPlayerInAnyVehicle(i)) NoRS[GetPlayerVehicleID(i)] = true;
    }
    for (new v=0; v<MAX_VEHICLES; v++) {
      if (NoRS[v] == false) SetVehicleToRespawn(v);
    }
    GetPlayerName(playerid, pname, 24);
    format(str, 128, "Respawn dei veicoli effettuato dall'Admin %s", pname);
    SendClientMessageToAll(0x00D90044, str);
  } else {
    SendClientMessage(playerid, 0x00D90044, "Devi essere un admin");
  }
  return 1;
}


Comando /car [id / nome veicolo]

Spawna un veicolo sia se lo specificate come ID, sia se lo scrivete per interno, per esempio /car landstalker.

if (!strcmp(cmd, "/car", true)) {
  new Float:vx, Float:vy, Float:vz, vid;
  tmp = strtok(cmdtext, idx);
  if (!strlen(tmp)) return SendClientMessage(playerid, 0x00D90044, "Utilizzo: /car [vehicleid/nome]");
  if (IsNumeric(tmp) == 1) {
    vid = strval(tmp);
  } else {
    vid = GetVehicleIDFromName(tmp);
  }
  if ((vid < 400) || (vid > 611) || (vid == 590) || (vid == 569) || (vid == 570) || (vid == 537) || (vid == 538) || (vid == 449)) {
    return SendClientMessage(playerid, 0x00D90044, "Veicolo non riconosciuto.");
  } else {
    GetPlayerPos(playerid, vx, vy, vz);
    CreateVehicle(vid, vx + random(9) - 4, vy + random(9) - 4, vz, 0, -1, -1, -1);
  }
  return 1;
}


In Cima allo script:

Spoiler

"Audentes Fortuna iuvat"
0

#237 L'utente è offline   Peppinux aka Peppe_Stasu 

  • Sicario
  • Gruppo: Utenti
  • Messaggi: 2056
  • Iscritto il: 16/04/10
  • GTA Preferito:GTA: San Andreas

Inviato il 18 agosto 2010 - 14:15

Non so se le funzioni sottostanti sono già state pubblicate non posso leggermi 12 pagine di topic tutte in una volta comunque questi qui sono create interamente da me:

PlayerName(playerid)//By peppinux aka Peppe_Stasu
{
new playerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,playerName,sizeof(playerName));
return playerName;
}

SetPlayerMoney(playerid,soldi);
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid,soldi);
}

TeleportPlayerToPlayer(p1,p2)//By peppinux aka Peppe_Stasu
{
new Float:x,Float:y,Float:z,Float:ang;
GetPlayerPos(p2,x,y,z);
GetPlayerFacingAngle(p2,ang);
if(!IsPlayerInAnyVehicle(p1))
{
SetPlayerPos(p1,x,y,z);
SetPlayerFacingAngle(p1,ang);
}
else
{
new veicolo = GetPlayerVehicleID(p1);
new seatid = GetPlayerVehicleSeat(p1);
SetVehiclePos(veicolo,x,y,z);
PutPlayerInVehicle(p1,veicolo,seatid);
}
return 1;
}

SetPlayerPos2(playerid,Float:x,Float:y,Float:z,Float:ang)//By peppinux aka Peppe_Stasu
{
SetPlayerPos(playerid,x,y,z);
SetPlayerFacingAngle(playerid,ang);
}

SetPlayerPosWithVehicle(playerid,Float:x,Float:y,Float:z)//By peppinux aka Peppe_Stasu
{
if(IsPlayerInAnyVehicle(playerid))
{
new veicolo = GetPlayerVehicleID(playerid);
new seatid = GetPlayerVehicleSeat(playerid);
SetVehiclePos(veicolo,x,y,z);
PutPlayerInVehicle(playerid,veicolo,seatid);
return 1;
}
return 0;
}

PS: Funzioni non testate. Se ci sono bugs segnalate.
0

#238 L'utente è offline   _All3Xz_ 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1512
  • Iscritto il: 05/01/09
  • GTA Preferito:GTA: San Andreas

Inviato il 18 agosto 2010 - 17:50

IsPlayerInClan(playerid,clan[]);
non l'ho testato ma dovrebbe andare... :)
stock IsPlayerInClan(playerid,clan[])
{
new nome[24];
GetPlayerName(playerid,nome,sizeof(nome));
return strfind(nome,clan,true)==0 ? 1:0;
}
My Works
[FS]_All3Xz_ Anti-Cheat 4
[FS]_All3Xz_ Anti-Cheat 7
[FS]_All3Xz_ Anti-Cheat 8
[GM] PVCM Training 0.? (MySQL)
[APP]_All3Xz_ NPC Generator
[GUIDA] Leggere da file usando dini
[GUIDA] Scripting GTA:IV - Callbacks
[GM] PVCM Training 1 (MySQL)
[GM] PVCM A/D
[GUIDA] Leggere da file usandi dini 2
0

#239 L'utente è offline   Peppinux aka Peppe_Stasu 

  • Sicario
  • Gruppo: Utenti
  • Messaggi: 2056
  • Iscritto il: 16/04/10
  • GTA Preferito:GTA: San Andreas

Inviato il 18 agosto 2010 - 17:53

Visualizza Messaggi_All3Xz_, il 18 August 2010 - 18:50 ha detto:

IsPlayerInClan(playerid,clan[]);
non l'ho testato ma dovrebbe andare... :)
stock IsPlayerInClan(playerid,clan[])
{
new nome[24];
GetPlayerName(playerid,nome,sizeof(nome));
return strfind(nome,clan,true)==0 ? 1:0;
}

Non riesco a capire il funzionamento :blink:
0

#240 L'utente è offline   Skiaffo 

  • Boss
  • Gruppo: Moderatori
  • Messaggi: 14732
  • Iscritto il: 08/12/05
  • Provenienza:Urbs Aeterna
  • GTA Preferito:GTA V

Inviato il 18 agosto 2010 - 18:48

Visualizza Messaggipeppinux aka Peppe_Stasu, il 18 agosto 2010 - 18:53 ha detto:

Visualizza Messaggi_All3Xz_, il 18 August 2010 - 18:50 ha detto:

IsPlayerInClan(playerid,clan[]);
non l'ho testato ma dovrebbe andare... :)
stock IsPlayerInClan(playerid,clan[])
{
new nome[24];
GetPlayerName(playerid,nome,sizeof(nome));
return strfind(nome,clan,true)==0 ? 1:0;
}

Non riesco a capire il funzionamento :blink:


if (IsPlayerInClan(playerid, RLZ) == 1) blabla

per esempio. è molto utile
"Audentes Fortuna iuvat"
0

  • (18 Pagine)
  • +
  • « Primo
  • 10
  • 11
  • 12
  • 13
  • 14
  • Ultimo »
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

1 utenti stanno leggendo questa discussione
0 utenti, 1 ospiti, 0 utenti anonimi