Mal ne kleine Frage meiner Seits.
Es gibt ja diesen Stock ReturnUser(Parameter);
Wie kann man den User im strval returnen? (Ja ich hab im Wiki geschaut, bin aber noch nicht ganz hinter gekommen)
MFG
Mal ne kleine Frage meiner Seits.
Es gibt ja diesen Stock ReturnUser(Parameter);
Wie kann man den User im strval returnen? (Ja ich hab im Wiki geschaut, bin aber noch nicht ganz hinter gekommen)
MFG
Erklär mal etwas näher, ich versteh das nämlich nicht
Return user? find ich im Wiki nix zu. Gib mal den Link.
Erklär mal etwas näher, ich versteh das nämlich nicht
Also dieser Stock ReturnUser(PARAMETER); Kann ja in einem Dialog, den eingegeben Text zurückgeben und in einen Namen umwandeln.
Kleines Beispiel:
SpielerID = strval(inputtext); // -> Hier wird die ID, die eingegeben wurde zurück gegeben
SpielerID = ReturnUser(inputtext); // -> Hier wird der Name, der eingegeben wurde zurück gegeben.
Lässt sich der Name statt mit ReturnUser auch mit strval(PARAMETER); zurückgeben?
//Stock ReturnUser
stock ReturnUser(text[], playerid = INVALID_PLAYER_ID)
{
new pos = 0;
while (text[pos] < 0x21) // Strip out leading spaces
{
if (text[pos] == 0) return INVALID_PLAYER_ID; // No passed text
pos++;
}
new userid = INVALID_PLAYER_ID;
if (IsNumeric(text[pos])) // Check whole passed string
{
// If they have a numeric name you have a problem (although names are checked on id failure)
userid = strval(text[pos]);
if (userid >=0 && userid < MAX_PLAYERS)
{
if(!IsPlayerConnected(userid))
{
userid = INVALID_PLAYER_ID;
}
else
{
return userid; // A player was found
}
}
}
// They entered [part of] a name or the id search failed (check names just incase)
new len = strlen(text[pos]);
new count = 0;
new name[MAX_PLAYER_NAME];
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i))
{
GetPlayerName(i, name, sizeof (name));
if (strcmp(name, text[pos], true, len) == 0) // Check segment of name
{
if (len == strlen(name)) // Exact match
{
return i; // Return the exact player on an exact match
}
else // Partial match
{
count++;
userid = i;
}
}
}
}
if (count != 1)
{
if (playerid != INVALID_PLAYER_ID)
{
if (count)
{
SendClientMessage(playerid, 0xFF0000AA, "Multiple users found, please narrow search.");
}
else
{
SendClientMessage(playerid, 0xFF0000AA, "No matching user found.");
}
}
userid = INVALID_PLAYER_ID;
}
return userid; // INVALID_PLAYER_ID for bad return
}
//Funktion-Is Numeric
IsNumeric(const string[])
{
for (new i = 0, j = strlen(string); i < j; i++)
{
if (string[i] > '9' || string[i] < '0') return 0;
}
return 1;
}
//Edit: Stock & Funktion hinzugefügt
//Edit²: Der Stock ist aus dem englischen SA-MP Forum.
MFG
Ja, du fragst einfach ab, ob der eingegebene Text ausschließlich aus Zahlen besteht,
dann machst du strval, andernfalls ReturnUser.
Eh nein, da strval aus einem String einen Integer macht (sofern möglich). Also kannst du damit keinen Namen in eine ID verwandeln.
Du kannst aber alle Spieler mit einer for durchlaufen, von jedem den Namen auslesen und mit inputtext vergleichen (strcmp).
Ja, du fragst einfach ab, ob der eingegebene Text ausschließlich aus Zahlen besteht,
dann machst du strval, andernfalls ReturnUser.
Nein, ich möchte eben nicht, dass SpielerID = ReturnUser(inputtext); ist.
Sondern ob man Beispielsweise auch:
SpielerID = strval(SpielerName(playerid));
nutzen kann?
Hagi: Die ID soll ja auch in den Namen verwandelt werden und nicht andersrum
MFG
Also strval kann das nicht.
Aber du hast doch schon die playerid?
SpielerID = strval(SpielerName(playerid)); -> SpielerID = playerid;
Ne, das geht nicht, denn:
strval konvertiert einen string (Zeichnkette) in einen Integer (Ganzzahl).
Das bedeutet:
new string[100]="239";
new nummer;
nummer = strval(string); // nummer hat jetzt den Wert 239
ABER:
new string[100]="Hallo";
new nummer;
nummer = strval(string); // nummer hat jetzt wsl. den Wert 0 (weil 'Hallo' nichts ist was er in eine Zahl konvertieren kann)
Gut danke euch beiden, also weiterhin ReturnUser benutzen?
Wollte mein Script aufräumen und wissen obs dafür ne kürzere Funktion gibt.
Man soll ja in den Dialog Namen & ID eingeben können, Also Name von ID 1: = Test, Wenn Test eingeladen wurde, kriegt dieser Spieler (Test) die Anfrage, und bei ID 1 ebenfalls.
MFG
Du kannst dir ja eine eigene Funktion basteln.
Außerdem ist es glaube ich mit ReturnUser möglich sowohl eine Nummer als auch einen Namen einzugeben.
Du kannst dir ja eine eigene Funktion basteln.
Außerdem ist es glaube ich mit ReturnUser möglich sowohl eine Nummer als auch einen Namen einzugeben.
Joa, das geht ja auch soweit.
Wollt ja nur das Script etwas kürzen. (Scheint aber nicht möglich zu sein, ohne eigene Funktion zu schreiben)
Naja hat sich denn wohl erledigt, werds erst mal so lassen.
Danke euch beiden.
MFG
Naja das geht schon:
getPlayerIDFromString(idorname[])
{
if(strlen(idorname) == 0) return -1;
new id = -1;
if(isNumeric(idorname))
{
if(!IsPlayerConnected(strval(idorname))) return -1;
id = strval(idorname);
}
else
{
for(new i = 0;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i)) continue;
new pname[24];
GetPlayerName(i,pname,sizeof(pname));
if(strcmp(pname,idorname,true) == 0)
{
id = i;
break;
}
}
}
return id;
}
Alles anzeigenNaja das geht schon:
getPlayerIDFromString(idorname[])
{
new id;
if(isNumeric(idorname))
{
if = strval(idorname);
}
else
{
for(new i = 0;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i)) continue;
new pname[24];
GetPlayerName(i,pname,sizeof(pname));
if(strcmp(pname,idorname,true) == 0)
{
id = i;
break;
}
}
}
return id;
}
Gehen tuts zwar, aber wenn würd ich denn doch meine eigene Funktion dazu schreiben, lasse das vorerst so.
Danke euch dennoch.
Mit freundlichen grüßen.
Wie speicher ich GetTickCount korrekt in einer Datei?
new Platzi[100];
new timeMs = ( GetTickCount() - racestart );
new minuten = (timeMs/60000);
timeMs -= (minuten * 60000);
new sekunden = (timeMs/1000);
format(Platzi,sizeof(Platzi),"/Accounts/Platzierung.txt");
if(dini_Exists(Platzi) == 0) // Also sie ist nicht da
{
dini_Create(Platzi); // Erstellt die Datei
}
dini_IntSet(Platzi,"Zeit",???);
Ich habe jetzt soviel ausprobiert, hat alles nichts genützt immer wurden falsche Zahlen angegeben.
Ich möchte das Minuten sowie Sekunden gespeichert werden. Muss ich sie einzelnt speichern oder geht das auch nebeneinander?
Ich hatte das schon einmal richtig, aber ich musste es entfernen und weiß nicht mehr wie's korrekt war.
Wenn ich jemanden mein Perso zeige steht bei beidem mein name!
dcmd_showlic(playerid,params[])
{
new pID, name[MAX_PLAYER_NAME], Oname[MAX_PLAYER_NAME], str1[64], str2[64];
GetPlayerName(playerid,name,sizeof(name));
GetPlayerName(pID,Oname,sizeof(Oname));
if(sscanf(params,"u",pID))return SendClientMessage(playerid,Gelb,"Benutze:/showlic [id]");
format(str1,sizeof(str1),"Du zeigst %s deine Lizenzen",Oname);
format(str2,sizeof(str2),"%s zeigt dir seine Lizenzen",name);//3319
SendClientMessage(playerid,Grün,str1);
SendClientMessage(pID,Grün,str2);
ShowLicense(playerid,pID);
return 1;
}
Alles anzeigenWenn ich jemanden mein Perso zeige steht bei beidem mein name!
dcmd_showlic(playerid,params[])
{
new pID, name[MAX_PLAYER_NAME], Oname[MAX_PLAYER_NAME], str1[64], str2[64];
GetPlayerName(playerid,name,sizeof(name));
GetPlayerName(pID,Oname,sizeof(Oname));
if(sscanf(params,"u",pID))return SendClientMessage(playerid,Gelb,"Benutze:/showlic [id]");
format(str1,sizeof(str1),"Du zeigst %s deine Lizenzen",Oname);
format(str2,sizeof(str2),"%s zeigt dir seine Lizenzen",name);//3319
SendClientMessage(playerid,Grün,str1);
SendClientMessage(pID,Grün,str2);
ShowLicense(playerid,pID);
return 1;
}
new pID... // pID = 0 weil neu definiert
GetPlayerName(pID,Oname,sizeof(Oname)); //pID ist immer noch 0, da noch kein anderer wert gesetzt wurde
if(sscanf(params,"u",pID))return SendClientMessage(playerid,Gelb,"Benutze:/showlic [id]"); //pID wird gesetzt
verstanden ? Es wird immer der Name von ID 0 angezeigt
Nop du musst des getplayername von pid unter deiner sscanf abfrage machen
Okay, und wie änder ich das?
Hat jemand eine Lösung für mein oben genanntes Problem?