[help] trascina
#2
Inviato il 23 ottobre 2011 - 16:28
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

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

#3
Inviato il 23 ottobre 2011 - 17:11

#4
Inviato il 23 ottobre 2011 - 20:45

(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
#6
Inviato il 24 ottobre 2011 - 08:52
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; }
#8
Inviato il 24 ottobre 2011 - 13:06
#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
#10
Inviato il 24 ottobre 2011 - 16:13
Eddie_Scofield, il 23 ottobre 2011 - 17:28 ha detto:
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

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

Perché creare lag inutile? Basta un solo timer (anche globale)
#11
Inviato il 24 ottobre 2011 - 18:56
Ad ogni modo Lember, dovresti dargli anche la funzione dragplayer per completare.
#12
Inviato il 24 ottobre 2011 - 21:03
: 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"
#13
Inviato il 24 ottobre 2011 - 21:21
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
#14
Inviato il 24 ottobre 2011 - 21:32
: 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
#15
Inviato il 24 ottobre 2011 - 22:06
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
#17
Inviato il 24 ottobre 2011 - 23:47
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
#20
Inviato il 25 ottobre 2011 - 23:13
Pensavi ti avessi abbandonato?


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