[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
-
-
Wenn ich im Umkreis von 3 Metern bei nem Spieler sein möchte, muss ich dann auch GetPlayerPos verwenden ja oder ?
Genau.
Du nimmst die Position von pID und fragst ob playerid nahe dieser Position im Umkreis von 3.0 ist. -
Jeffry:
Wenn ich im Umkreis von 3 Metern bei nem Spieler sein möchte, muss ich dann auch GetPlayerPos verwenden ja oder ?Oder du erstellst nen Public:
public Float:GetDistanceBetweenPlayers(p1,p2)
{
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
{
return -1.00;
}
GetPlayerPos(p1,x1,y1,z1);
GetPlayerPos(p2,x2,y2,z2);
return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}Oben forward Float:GetDistanceBetweenPlayers(p1,p2);
Und fragst dann so ab: if(GetDistanceBetweenPlayers(Person1, Person2) UMKREIS)
-
Fernando.:
Das wird nicht funktionieren, wenn einer der Spieler nicht online ist, da -1 immer kleiner ist als irgendwie mögliche Abstände.return -1.00;
zu:
return 999999999.00;Generell wäre es so besser:
stock PlayerNearPlayer(p1,p2,Float:dist)
{
new Float:x,Float:y,Float:z;
GetPlayerPos(p2,x,y,z);
return IsPlayerInRangeOfPoint(p1, dist, x, y, z);
}
if(!PlayerNearPlayer(pID, playerid, 3.0)) return SCM(playerid, ROT, "Du bist nicht bei dem Spieler.");
-
Bei deiner PN wird das am params liegen, nimm einfach nen neuen array dafür.
Bei deinem Pay benutzt du IsPlayerInRangeOfPoint.
Dann bei der ersten abfrage fragst du ab ob der wert unter 0 liegt also >0.
Dann fragst ab ob die playerid die gewünschte playerid ist wenn ja gehts nicht. -
Fernando.:
warning 202: number of arguments does not match definition (Zeile ausgeklammert)
CMD:pay(playerid, params[])
{
new string[128], string2[128], pID, gID, player;
if(sscanf(params,"ud",pID,gID))return SCM(playerid, GRAU, "{CACA00}[INFO]{FFFFFF} /pay [Name] [Geldbetrag]");
if(gID < 1) return SCM(playerid, 0xFFFFFFFF, "Ungültiger Betrag.");
if(pID == playerid) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du kannst dir kein Geld selbst geben.");
if(!IsPlayerConnected(pID)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Der Spieler ist nicht online.");
//if(!GetDistanceBetweenPlayers(playerid, player, 3.0)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du bist nicht in der Nähe des Geldempfaengers.");
format(string, sizeof(string), "{CACA00}[INFO]{FFFFFF}%s hat dir %d$ gegeben.",PlayerName(player),gID);
format(string2, sizeof(string2), "{CACA00}[INFO]{FFFFFF}Du hast %s %d$ gegeben.",PlayerName(player), gID);
SendClientMessage(pID,GRAU,string);
SendClientMessage(playerid,GRAU,string2);
GivePlayerMoney(pID,gID);
GivePlayerMoney(playerid, -gID);
return 1;}
und vlt. schaffst du das auch noch oder Jeffry:
stock mysql_GetFloat(Table[], Field[], Where[], Is[])
{
new query[128], Float:sqlfloat;
mysql_real_escape_string(Table, Table);
mysql_real_escape_string(Field, Field);
mysql_real_escape_string(Where, Where);
mysql_real_escape_string(Is, Is);
format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
mysql_query(query);
mysql_store_result();
mysql_fetch_float(sqlfloat);
mysql_free_result();
//return sqlfloat;
}
warning 213: tag mismatch (Zeile ausgeklammert) -
1.)
//if(!GetDistanceBetweenPlayers(playerid, player, 3.0)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du bist nicht in der Nähe des Geldempfaengers.");
Nimm meins:
stock PlayerNearPlayer(p1,p2,Float:dist)
{
new Float:x,Float:y,Float:z;
GetPlayerPos(p2,x,y,z);
return IsPlayerInRangeOfPoint(p1, dist, x, y, z);
}
if(!PlayerNearPlayer(playerid, player, 3.0)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du bist nicht in der Nähe des Geldempfaengers.");2.)
stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[]) -
Jeffry:
error 017: undefined symbol "x2" (Bei deinem GetPlayerPos)Wenn ich den stock namen bekomm krieg ich einen haufen warnings/errors.
Code: warning 208: function with tag result used before definition, forcing reparse (937) : warning 219: local variable "query" shadows a variable at a preceding level (960) : warning 219: local variable "query" shadows a variable at a preceding level (972) : warning 219: local variable "query" shadows a variable at a preceding level (983) : warning 219: local variable "query" shadows a variable at a preceding level (1010) : warning 219: local variable "query" shadows a variable at a preceding level (1038) : error 029: invalid expression, assumed zero (1041) : error 021: symbol already defined: "mysql_real_escape_string" (1050) : error 010: invalid function or declaration (1132) : warning 203: symbol is never used: "sqlfloat"
-
Wenn ich den stock namen bekomm krieg ich einen haufen warnings/errors.
Wenn du was?Wegen dem x2, doofes Copy & Paste. Da hatte sich noch eine 2 eingeschlichen.
So natürlich:
stock PlayerNearPlayer(p1,p2,Float:dist)
{
new Float:x,Float:y,Float:z;
GetPlayerPos(p2,x,y,z);
return IsPlayerInRangeOfPoint(p1, dist, x, y, z);
} -
-
-
Habe das Problem mit dem 3 Passwortversuchen schon fast geschafft, jetzt gibt es nurnoch 2 Probleme.
1: Beim 2 mal, also bei Phase 2/3 wenn das Passwort richtig ist, Spawne ich mit dem CJ Skin, obwohl es der Skin 185 sein sollte.
2: Ich werde nach schritt 2/3 vom Server gekickt ( Bei falscher Passwort eingabe ), eigentlich sollte es erst nach der Phase 1/3 passieren. Woran kann es liegen?Script:
Spoiler anzeigen public LoadPlayerDataSequence(playerid, l_step)
{
switch(l_step)
{
case 1:
{
new count = cache_get_field_content_int(0,"count");
if(count)
{
ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"SmR: {0x3252BEFF}Einloggen","{FFFFFF}Sie m�ssen von unserem System Identifiziert werden.\nGeben Sie daf�r Ihr Passwort unten in das Feld ein.\n\n Klicken Sie anschlie�end auf Einloggen, damit Ihre Daten kontrolliert werden k�nnen.","Einloggen","Abbrechen");
return 1;
}
else
{
ShowPlayerDialog(playerid,Dialog_Register,DIALOG_STYLE_PASSWORD,"SmR: {0x3252BEFF}Registrierung","{FFFFFF}Herzlich Willkommen auf San Miami Roleplay\n\nUnser System hat Ihre Spielerinformationen\nnicht in unserer Datenbank gefunden. Um einen Charakter auf unserem Server zu Erstellen\nben�tigen wir einige Informationen. Als erstes tragen Sie Bitte ein Sicheres Passwort in das untere Feld ein.\n\nMerken Sie sich Ihr Passwort Gut.\n\nKlicken Sie anschlie�end auf Annehmen.","Annehmen","Abbrechen");
return 1;
}
}
case 2:
{
new count = cache_get_field_content_int(0,"count");
if(count)
{
new query[160 + MAX_PLAYER_NAME];
mysql_format(DBHandle, query ,sizeof(query),"SELECT * FROM `Accounts` WHERE `pName` = '%e'",Spieler[playerid][pName]);
mysql_function_query(DBHandle, query, true,"LoadPlayerDataSequence","dd",playerid,3);
return 1;
}
else
{
Login_Status[playerid]++;
switch(Login_Status[playerid])
{
case 0:
{
ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"{0x3252BEFF}Falsches Passwort","{FFFFFF}Das von Ihnen angegebene Passwort wurde abgelehnt,\ngeben Sie Bitte Ihr richtiges Passwort unten in das Feld ein.\nDrücken Sie danach auf Einloggen, damit Ihre Daten kontrolliert werden können.\n\nDenken Sie auch an die Groß-,Kleinschreibung\n\nSie haben 3/3 versuche!","Einloggen","Abbrechen");
return 1;
}
case 1:
{
Login_Status[playerid]++;
ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"{0x3252BEFF}Falsches Passwort","{FFFFFF}Das von Ihnen angegebene Passwort wurde abgelehnt,\ngeben Sie Bitte Ihr richtiges Passwort unten in das Feld ein.\nDrücken Sie danach auf Einloggen, damit Ihre Daten kontrolliert werden können.\n\nDenken Sie auch an die Groß-,Kleinschreibung\n\nSie haben noch 2/3 versuche!","Einloggen","Abbrechen");
return 1;
}
case 2:
{
Login_Status[playerid]++;
ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"{0x3252BEFF}Falsches Passwort","{FFFFFF}Das von Ihnen angegebene Passwort wurde abgelehnt,\ngeben Sie Bitte Ihr richtiges Passwort unten in das Feld ein.\nDrücken Sie danach auf Einloggen, damit Ihre Daten kontrolliert werden können.\n\nDenken Sie auch an die Groß-,Kleinschreibung\n\nSie haben nurnoch 1/3 versuche!","Einloggen","Abbrechen");
return 1;
}
case 3:
{
SendClientMessage(playerid,0x3252BEFF,"Sie haben zu oft Ihr Passwort falsch eingegeben, aus Sicherheitsgründen wurden Sie vom System gesperrt.");
SendClientMessage(playerid,0x3252BEFF,"Versuchen Sie es in einer Stunde nochmal, oder Melden Sie sich bei einem Administrator.");
SetTimerEx("KickPlayer",250,0,"i",playerid);
return 1;
}
}
}
}
case 3:
{
Spieler[playerid][pAlter] = cache_get_field_content_int(0,"pAlter");
Spieler[playerid][pAdminlevel] = cache_get_field_content_int(0,"pAdminlevel");
Spieler[playerid][pBanned] = cache_get_field_content_int(0,"pBanned");
Spieler[playerid][pBargeld] = cache_get_field_content_int(0,"pBargeld");
Spieler[playerid][pKontoguthaben] = cache_get_field_content_int(0,"pKontoguthaben");
cache_get_field_content(0,"pLastLogin",Spieler[playerid][pLastLogin],DBHandle,30);
cache_get_field_content(0,"pRegDatum",Spieler[playerid][pRegDatum],DBHandle,30);
Spieler[playerid][pWrongPass] = cache_get_field_content_int(0,"pVersuche");
Spieler[playerid][pLeben] = cache_get_field_content_float(0,"pLeben");
Spieler[playerid][pLogged] = true;
return 1;
}
default:
{
SendClientMessage(playerid,0x7D0000FF,"Es ist ein Fehler aufgetreten, Bitte starten Sie Ihren Clienten neu, und versuchen Sie es erneut,\nSollten weiterhin Fehler auftreten, so Melde Sie sich umgehend Bitte bei einem Teammitglied.");
return 1;
}
}
return 1;
} -
Ich kann es ganz normal kompilieren. Da musst du was falsch eingefügt haben.
//Edit: Hast's hinbekommen.Wegen den anderen Fehlern:
Du musst die Funktion vor der ersten Benutzung definieren, wegen dem "Tag" (Float:) vor der Funktion. Also entweder du packst die Funktion in eine Include und dann die Include oben hin schreiben, oder du definierst den stock direkt unter den Includes, eben bevor du die Funktion im Code verwendest. -
-
-
@.x22 Zieglein: Mach mich nicht dafür verantwortlich das du dir das Tutorial offensichtlich nicht richtig durchgelesen hast.
-
-
-
Nabend, weiß jemand was hier falsch ist?
//OnPlayerCommandText
new cmd[5];
sscanf(cmdtext, "s[5]", cmd);
if(!strcmp(cmd, "/time", true))
{
SendClientMessageToAll(COLOR_YELLOW, "a");
}
else
{
SendClientMessageToAll(COLOR_YELLOW, "b");
}
Es wird immer "b" ausgegeben, nie "a". Egal wie ich den Befehl eingebe.
Wenn ich die Abfrage so umändere, dass statt /time nur time steht, funktioniert es ebenfalls nicht.Vielleicht kann mir @Jeffy: ja helfen
LG
-
Jeffry: Danke, jetzt geht es soweit, aber nach dem letzten schritt, also 1/3 kommt nochmal der Standard Login Dialog und nach dem wird man Gekickt.
Was ist der Standard - Login Dialog? Unter welchem Callback lässt du den anzeigen?
Zur Not könntest du vor ShowPlayerDialog von dem Standard - Dialog Abfragen, ob Login_Status[playerid] auch -1 ist.Cal44:
Veruch mal:
new cmd[6];
Es gibt einen sogenannten 0-Terminator, der belegt die letzte Zelle.Eddy: (Post Unten) Kommt vor!
-
Danke dir, hat funktioniert.
LG
-