GTA-Expert Forum: [help] trascina - GTA-Expert Forum

Salta al contenuto

  • (2 Pagine)
  • +
  • 1
  • 2
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[help] trascina

#1 L'utente è offline   terminetor 

  • Fuorilegge
  • Gruppo: Utenti
  • Messaggi: 310
  • Iscritto il: 02/08/11
  • GTA Preferito:GTA: San Andreas

Inviato il 23 ottobre 2011 - 15:39

salve ragazzi come faccio un comando che mi permette di trascinare un player tipo cosi /trascina id
grazie in anticipo
0

#2 L'utente è offline   Eddie_Scofield 

  • Vandalo
  • Gruppo: Utenti
  • Messaggi: 52
  • Iscritto il: 18/09/11
  • GTA Preferito:GTA: San Andreas

Inviato il 23 ottobre 2011 - 16:28

Settando una variabile al Player che vuoi trascinare prima di tutto, tipo Trascina.
Settata la variabile fai partire un Timer per i 2 player. Un TimerEx(playerid, giveplayerid).
Nella funzione richiamata dal timer Get(tti) la posizione del PlayerID, e la setti al GivePlayerID (Ovviamente mettiglielo un po' piu' dietro magari, a decisione tua...)
Per farlo reale il Trascina, dovresti settare il Timer tipo a 200, se ci sai fare, usa il SetPlayerVelocity, rende il tutto molto piu' fluido e reale Immagine Postata
Ti servira' anche un comando /StopTrascina per Killare il Timer,
e settare la Variabile Trascina a 0 al giveplayerid.
Se salvi il Player trascinato in una variabile hai la situazione sotto controllo per piu' cose Immagine Postata
Bee the change you want see in the world... http://www.legacyproject.it/
0

#3 L'utente è offline   terminetor 

  • Fuorilegge
  • Gruppo: Utenti
  • Messaggi: 310
  • Iscritto il: 02/08/11
  • GTA Preferito:GTA: San Andreas

Inviato il 23 ottobre 2011 - 17:11

mmmm grazie ma mi sono confuso :) ihihihihi ti ringrazio in anticipo ma non mi potresti fare tu questo comando? siccome tu sei più pratico di me? perchè nella mia gm ammanetto i player ma se cammino loro restano nello stesso punta mi servirebbe solo il comando per trascinarlo sia quando sono a piedi e sia quando salgo in auto se e possibile grazie in anticipo
0

#4 L'utente è offline   Eddie_Scofield 

  • Vandalo
  • Gruppo: Utenti
  • Messaggi: 52
  • Iscritto il: 18/09/11
  • GTA Preferito:GTA: San Andreas

Inviato il 23 ottobre 2011 - 20:45

Beh, se e' ammanettato, nel comando /Trascina ID ricordati di Unfreezare il Player. Immagine Postata
(sempre se stai usando SetPlayterVelocity)

Se entri in un veicolo e stai trascinando il Player, segui questi punti:
- Killa il Timer
- Setta la variabile Trascinato a 0
- Put (metti) il Player nel veicolo con te. (Decidi tu il Posto)
- Freeza il Player

Quando scendi dal Veicolo:
- Rimetti le funzioni di /Trascina
- Ricordati di Unfreezare il Player

Bee the change you want see in the world... http://www.legacyproject.it/
0

#5 L'utente è offline   terminetor 

  • Fuorilegge
  • Gruppo: Utenti
  • Messaggi: 310
  • Iscritto il: 02/08/11
  • GTA Preferito:GTA: San Andreas

Inviato il 23 ottobre 2011 - 22:25

non ci sto capendo niente ahahahahahaha non c'è un metodo più semplice o un comando più semplice o pure uno script?
0

#6 L'utente è offline   lember 

  • Cleptomane
  • Gruppo: Utenti
  • Messaggi: 167
  • Iscritto il: 18/07/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 08:52

Questo è quello che uso io però adesso tu lo devi adattare alla tua gm

dcmd_trascina(playerid, params[])
{
	new giveplayerid, s[228], Float:x, Float:y, Float:z;
	GetPlayerPos(playerid,x,y,z);
	if (sscanf(params, "d", giveplayerid)) SendClientMessage(playerid, COLOR_ALERT, "Usa: /trascina [playerid]");
	else if(!IsPlayerConnected(giveplayerid)) SendClientMessage(playerid, COLOR_NO, "Giocatore non trovato");
	else if(GetPlayerDistanceToPointEx(giveplayerid,x,y,z)>3 && (IsPlayerInAnyVehicle(playerid) && IsPlayerInAnyVehicle(giveplayerid) && GetPlayerVehicleID(playerid)==GetPlayerVehicleID(giveplayerid))) SendClientMessage(playerid, COLOR_NO, "Questo giocatore è troppo lontano");
	else
	{
		if(PlayerInfo[giveplayerid][pisdragged]==-1)
		{
	 	if(!PlayerInfo[giveplayerid][pishandcuffed] && !PlayerInfo[giveplayerid][pisbound])return SendClientMessage(playerid, COLOR_NO, "Il Giocatore deve essere legato o ammanettato");
			format(s,sizeof(s),"* %s trascina %s *",PlayerInfo[playerid][pname],PlayerInfo[giveplayerid][pname]);
			SendRangedMessage(playerid,COLOR_SERVERME,s);
			PlayerInfo[giveplayerid][pisdragged]=playerid;
			TogglePlayerControllable(giveplayerid,0);
			SetTimerEx("dragplayer",1500,false,"dd",playerid,giveplayerid);
		}
		else if(PlayerInfo[giveplayerid][pisdragged]==playerid)
		{
			format(s,sizeof(s),"* %s lascia %s *",PlayerInfo[playerid][pname],PlayerInfo[giveplayerid][pname]);
			SendRangedMessage(playerid,COLOR_SERVERME,s);
			PlayerInfo[giveplayerid][pisdragged]=-1;
			TogglePlayerControllable(giveplayerid,1);
		}
		else return SendClientMessage(playerid,COLOR_ALERT,"Il giocatore è già trascinato da qualcuno");
	}
	return 1;
}

0

#7 L'utente è offline   terminetor 

  • Fuorilegge
  • Gruppo: Utenti
  • Messaggi: 310
  • Iscritto il: 02/08/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 12:26

va messo su: commandtext?
0

#8 L'utente è offline   lember 

  • Cleptomane
  • Gruppo: Utenti
  • Messaggi: 167
  • Iscritto il: 18/07/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 13:06

In cima
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1



OnPlayerCommandText
dcmd(trascina,8,cmdtext);



Fuori da tutto:


stock sscanf(string[], format[], {Float,_}:...)
{
	#if defined isnull
		if (isnull(string))
	#else
		if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
	#endif
		{
			return format[0];
		}
	#pragma tabsize 4
	new
		formatPos = 0,
		stringPos = 0,
		paramPos = 2,
		paramCount = numargs(),
		delim = ' ';
	while (string[stringPos] && string[stringPos] <= ' ')
	{
		stringPos++;
	}
	while (paramPos < paramCount && string[stringPos])
	{
		switch (format[formatPos++])
		{
			case '\0':
			{
				return 0;
			}
			case 'i', 'd':
			{
				new
					neg = 1,
					num = 0,
					ch = string[stringPos];
				if (ch == '-')
				{
					neg = -1;
					ch = string[++stringPos];
				}
				do
				{
					stringPos++;
					if ('0' <= ch <= '9')
					{
						num = (num * 10) + (ch - '0');
					}
					else
					{
						return -1;
					}
				}
				while ((ch = string[stringPos]) > ' ' && ch != delim);
				setarg(paramPos, 0, num * neg);
			}
			case 'h', 'x':
			{
				new
					num = 0,
					ch = string[stringPos];
				do
				{
					stringPos++;
					switch (ch)
					{
						case 'x', 'X':
						{
							num = 0;
							continue;
						}
						case '0' .. '9':
						{
							num = (num << 4) | (ch - '0');
						}
						case 'a' .. 'f':
						{
							num = (num << 4) | (ch - ('a' - 10));
						}
						case 'A' .. 'F':
						{
							num = (num << 4) | (ch - ('A' - 10));
						}
						default:
						{
							return -1;
						}
					}
				}
				while ((ch = string[stringPos]) > ' ' && ch != delim);
				setarg(paramPos, 0, num);
			}
			case 'c':
			{
				setarg(paramPos, 0, string[stringPos++]);
			}
			case 'f':
			{

				new changestr[16], changepos = 0, strpos = stringPos;
				while(changepos < 16 && string[strpos] && string[strpos] != delim)
				{
					changestr[changepos++] = string[strpos++];
					}
				changestr[changepos] = '\0';
				setarg(paramPos,0,_:floatstr(changestr));
			}
			case 'p':
			{
				delim = format[formatPos++];
				continue;
			}
			case '\'':
			{
				new
					end = formatPos - 1,
					ch;
				while ((ch = format[++end]) && ch != '\'') {}
				if (!ch)
				{
					return -1;
				}
				format[end] = '\0';
				if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
				{
					if (format[end + 1])
					{
						return -1;
					}
					return 0;
				}
				format[end] = '\'';
				stringPos = ch + (end - formatPos);
				formatPos = end + 1;
			}
			case 'u':
			{
				new
					end = stringPos - 1,
					id = 0,
					bool:num = true,
					ch;
				while ((ch = string[++end]) && ch != delim)
				{
					if (num)
					{
						if ('0' <= ch <= '9')
						{
							id = (id * 10) + (ch - '0');
						}
						else
						{
							num = false;
						}
					}
				}
				if (num && IsPlayerConnected(id))
				{
					setarg(paramPos, 0, id);
				}
				else
				{
					#if !defined foreach
						#define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
						#define __SSCANF_FOREACH__
					#endif
					string[end] = '\0';
					num = false;
					new
						name[MAX_PLAYER_NAME];
					id = end - stringPos;
					foreach (Player, playerid)
					{
						GetPlayerName(playerid, name, sizeof (name));
						if (!strcmp(name, string[stringPos], true, id))
						{
							setarg(paramPos, 0, playerid);
							num = true;
							break;
						}
					}
					if (!num)
					{
						setarg(paramPos, 0, INVALID_PLAYER_ID);
					}
					string[end] = ch;
					#if defined __SSCANF_FOREACH__
						#undef foreach
						#undef __SSCANF_FOREACH__
					#endif
				}
				stringPos = end;
			}
			case 's', 'z':
			{
				new
					i = 0,
					ch;
				if (format[formatPos])
				{
					while ((ch = string[stringPos++]) && ch != delim)
					{
						setarg(paramPos, i++, ch);
					}
					if (!i)
					{
						return -1;
					}
				}
				else
				{
					while ((ch = string[stringPos++]))
					{
						setarg(paramPos, i++, ch);
					}
				}
				stringPos--;
				setarg(paramPos, i, '\0');
			}
			default:
			{
				continue;
			}
		}
		while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
		{
			stringPos++;
		}
		while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
		{
			stringPos++;
		}
		paramPos++;
	}
	do
	{
		if ((delim = format[formatPos++]) > ' ')
		{
			if (delim == '\'')
			{
				while ((delim = format[formatPos++]) && delim != '\'') {}
			}
			else if (delim != 'z')
			{
				return delim;
			}
		}
	}
	while (delim > ' ');
	return 0;
}





sotto a tutto

stock GetPlayerDistanceToPointEx(playerid,Float:x,Float:y,Float:z) //By Sacky
{
	new Float:x1,Float:y1,Float:z1;
	new Float:tmpdis;
	GetPlayerPos(playerid,x1,y1,z1);
	tmpdis = floatsqroot(floatpower(floatabs(floatsub(x,x1)),2)+floatpower(floatabs(floatsub(y,y1)),2)+floatpower(floatabs(floatsub(z,z1)),2));
	return floatround(tmpdis);
}

Messaggio modificato da lember il 24 ottobre 2011 - 13:07

0

#9 L'utente è offline   Mozilla 

  • Assassino
  • Gruppo: Utenti
  • Messaggi: 2525
  • Iscritto il: 10/09/10
  • Provenienza:Palermo
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 14:02

Ricordati di disattivare le variabili quando un player muore o si disconnette :)
Immagine Postata
0

#10 L'utente è offline   Rapgangsta 

  • Tirapiedi
  • Gruppo: Banned
  • Messaggi: 1044
  • Iscritto il: 21/10/09
  • GTA Preferito:Sconosciuto

Inviato il 24 ottobre 2011 - 16:13

Visualizza MessaggiEddie_Scofield, il 23 ottobre 2011 - 17:28 ha detto:

Settando una variabile al Player che vuoi trascinare prima di tutto, tipo Trascina.
Settata la variabile fai partire un Timer per i 2 player. Un TimerEx(playerid, giveplayerid).
Nella funzione richiamata dal timer Get(tti) la posizione del PlayerID, e la setti al GivePlayerID (Ovviamente mettiglielo un po' piu' dietro magari, a decisione tua...)
Per farlo reale il Trascina, dovresti settare il Timer tipo a 200, se ci sai fare, usa il SetPlayerVelocity, rende il tutto molto piu' fluido e reale Immagine Postata
Ti servira' anche un comando /StopTrascina per Killare il Timer,
e settare la Variabile Trascina a 0 al giveplayerid.
Se salvi il Player trascinato in una variabile hai la situazione sotto controllo per piu' cose Immagine Postata

Perché creare lag inutile? Basta un solo timer (anche globale)
0

#11 L'utente è offline   Eddie_Scofield 

  • Vandalo
  • Gruppo: Utenti
  • Messaggi: 52
  • Iscritto il: 18/09/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 18:56

beh si, giusto Rap. Poi sono decisioni che sapra' prendere lui stesso adottandole al suo Script.
Ad ogni modo Lember, dovresti dargli anche la funzione dragplayer per completare.
Bee the change you want see in the world... http://www.legacyproject.it/
0

#12 L'utente è offline   terminetor 

  • Fuorilegge
  • Gruppo: Utenti
  • Messaggi: 310
  • Iscritto il: 02/08/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 21:03

raga aiutatemi non riesco a risolvere questi errori di questa discussione gli errori sono questi:



: error 017: undefined symbol "GetPlayerDistanceToPointEx"
: error 017: undefined symbol "pisdragged"
: error 017: undefined symbol "pishandcuffed"
: error 017: undefined symbol "pname"
: error 017: undefined symbol "SendRangedMessage"
: error 017: undefined symbol "pisdragged"
: error 017: undefined symbol "pisdragged"
: error 017: undefined symbol "pname"
: error 017: undefined symbol "SendRangedMessage"
: error 017: undefined symbol "pisdragged"
: error 021: symbol already defined: "sscanf"
: error 021: symbol already defined: "sscanf"
0

#13 L'utente è offline   Eddie_Scofield 

  • Vandalo
  • Gruppo: Utenti
  • Messaggi: 52
  • Iscritto il: 18/09/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 21:21

Se segui la risposta di lamber risolvi gia' i seguenti errori:
undefined symbol "GetPlayerDistanceToPointEx"
symbol already defined: "sscanf"


Per undefined symbol "SendRangedMessage", deve darti la funzione,
il resto sono variabili, e devi inserirle tu.
Se non erro, sono tutte da inserire in PlayerInfo
Bee the change you want see in the world... http://www.legacyproject.it/
0

#14 L'utente è offline   terminetor 

  • Fuorilegge
  • Gruppo: Utenti
  • Messaggi: 310
  • Iscritto il: 02/08/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 21:32

io o seguito i codici di lamber ma mi da sempre errori ora mi da questi:


: warning 219: local variable "giveplayerid" shadows a variable at a preceding level
: warning 219: local variable "giveplayerid" shadows a variable at a preceding level
: warning 219: local variable "giveplayerid" shadows a variable at a preceding level
: error 017: undefined symbol "GetPlayerDistanceToPointEx"
: warning 215: expression has no effect
: error 001: expected token: ";", but found ")"
: error 029: invalid expression, assumed zero
: fatal error 107: too many error messages on one line

AIUTATEMI
0

#15 L'utente è offline   Eddie_Scofield 

  • Vandalo
  • Gruppo: Utenti
  • Messaggi: 52
  • Iscritto il: 18/09/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 22:06

Sostituisci questa stringa:

new giveplayerid, s[228], Float:x, Float:y, Float:z;

con:

new s[228], Float:x, Float:y, Float:z;

Dammi le stringhe di questi Errori:
: warning 215: expression has no effect
: error 001: expected token: ";", but found ")"
: error 029: invalid expression, assumed zero
: fatal error 107: too many error messages on one line

Bee the change you want see in the world... http://www.legacyproject.it/
0

#16 L'utente è offline   terminetor 

  • Fuorilegge
  • Gruppo: Utenti
  • Messaggi: 310
  • Iscritto il: 02/08/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 22:14

scusami se ripeto sempre :) ma no me lo potresti fare tu come oggi pomeriggio tramite teamwiever? se e possibile perchè gia sto uscendo pazzo :(
0

#17 L'utente è offline   Eddie_Scofield 

  • Vandalo
  • Gruppo: Utenti
  • Messaggi: 52
  • Iscritto il: 18/09/11
  • GTA Preferito:GTA: San Andreas

Inviato il 24 ottobre 2011 - 23:47

A me piace dare una mano, pero' mi piace aiutare chi ci prova...
Se tu mi dai una base di Comando, io sono felice di dirti dove hai sbagliato.
Odio chi richiede Script senza averci nemmeno provato...
Siete fortunati ad avere Forum come questo che vi assiste, io ho imparato tutto da solo,
non ho fatto una scuola informatica, e ti lascio immaginare le difficolta'.
Ormai si trova tutto pronto, potete Editare quello che volete, ma se volete essere
un passo avanti, dovete creare voi, realizzare cose nuove.
Scusate l' "OT". Cmq si, per questa volta si te lo scrivo io, ti spiego passo passo.
PS: Domani che ora devo staccare xD
Bee the change you want see in the world... http://www.legacyproject.it/
0

#18 L'utente è offline   terminetor 

  • Fuorilegge
  • Gruppo: Utenti
  • Messaggi: 310
  • Iscritto il: 02/08/11
  • GTA Preferito:GTA: San Andreas

Inviato il 25 ottobre 2011 - 13:33

ok grazie della tua generosità e poi io ci o provato a farlo ma senza successo
0

#19 L'utente è offline   terminetor 

  • Fuorilegge
  • Gruppo: Utenti
  • Messaggi: 310
  • Iscritto il: 02/08/11
  • GTA Preferito:GTA: San Andreas

Inviato il 25 ottobre 2011 - 21:42

ragazzi potete aiutarmi nessuno che mi aiuta :(
0

#20 L'utente è offline   Eddie_Scofield 

  • Vandalo
  • Gruppo: Utenti
  • Messaggi: 52
  • Iscritto il: 18/09/11
  • GTA Preferito:GTA: San Andreas

Inviato il 25 ottobre 2011 - 23:13

Scusa se non ho mantenuto la parola, pessima giornata oggi, domani ti spiego tutto...
Pensavi ti avessi abbandonato? Immagine Postata Deludente da parte tua! Tranquillo... Immagine Postata

Messaggio modificato da Eddie_Scofield il 25 ottobre 2011 - 23:14

Bee the change you want see in the world... http://www.legacyproject.it/
0

  • (2 Pagine)
  • +
  • 1
  • 2
  • 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