Angepinnt [SAMMELTHREAD] Kleine Scripting Fragen

  • Warum ist das Passwort immer falsch?
    Spoiler anzeigen

    PAWN-Quellcode

    1. if(dialogid == D_LOGIN){if(response){if(strlen(inputtext) < 5){ClearPlayerChat(playerid);SendClientMessage(playerid, COLOR_RED, "* Das eingegebene Passwort ist zu kurz!");new t_info[512];format(t_info, sizeof(t_info), ""HTML_WHITE"Willkommen "HTML_YELLOW"%s"HTML_WHITE", \nBitte gebe dein Passwort ein um dich einzuloggen! \nDeine IP: "HTML_YELLOW"%s", sI[playerid][pName], Spielerip(playerid));ShowPlayerDialog(playerid, D_LOGIN, DIALOG_STYLE_PASSWORD, ""SERVER_HTML""SERVER_TAG" - Registration", t_info, "Login", "Abbruch");}else{SHA256_PassHash(sI[playerid][pPasswort], SERVER_SALT, inputtext, 65);new query[256];mysql_format(handle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Spielername`='%e' AND `Passwort`='%e'", sI[playerid][pName], sI[playerid][pPasswort]);mysql_pquery(handle, query, "OnUserLogin", "d", playerid);}return 1;}else{KickMessage(playerid, COLOR_YELLOW, "["HTML_RED"KICK"HTML_YELLOW"]"HTML_RED" Du wurdest gekickt, da du den Login abgebrochen hast!");return 1;}}


    //ist gefixxt. hab das Passwort zu kurz definiert :/ :D

    Projekt - New Reallife
    Forum: forum.new-reallife.de
    UCP: coming soon...
    Server: coming soon...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mar.cel ()

  • Y3tti schrieb:

    Ich habe mal eine Frage an euch, wie kann ich es machen, das ein Fahrzeug was Gespawnt wird nur der Spieler nutzen kann, der es auch Gespawnt hat ?

    Globale Variable für alle Fahrzeuge erstellen:

    PAWN-Quellcode

    1. new vehicleOwner[MAX_VEHICLES]={INVALID_PLAYER_ID,...};


    und dann bei deinem Spawnbefehl:

    PAWN-Quellcode

    1. new vID = CreateVehicle(HIER DEINE PARAMETER);
    2. vehicleOwner[vID]=playerid;


    und dann noch unter "OnPlayerEnterVehicle":


    PAWN-Quellcode

    1. if(vehicleOwner[vehicleid]!=INVALID_PLAYER_ID&& vehicleOwner[vehicleid]!=playerid)
    2. ClearAnimations(playerid);
    //Edit: INVALID_VEHICLE_ID zu INVALID_PLAYER_ID geändert. Ist zwar der selbe Wert, sieht aber schöner aus.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Zim30 ()

  • So bin gerade dabei eine C Header Datei so umzuschreiben so dass ich Sie als Include fuer PAWN nutzen kann.
    Jedoch finde ich kein PAWN Aequivalent fuer "extern"

    Kennt da jemand was?

    Habe weiterhin vor double durch float zu ersetzen

    C-Quellcode

    1. #define _COMPLEX_H
    2. /* COMPLEX.H header file
    3. * use for complex arithmetic in C
    4. (part of them are from "C Tools for Scientists and Engineers" by L. Baker)
    5. */
    6. extern double cos(double);
    7. extern double sin(double);
    8. struct __COMPLEX{ double x,y; };
    9. typedef struct __COMPLEX COMPLEX;
    10. /* for below, X, Y are complex structures, and one is returned */
    11. /*//real part of the complex multiplication */
    12. #define CMULTR(X,Y) ((X).x*(Y).x-(X).y*(Y).y)
    13. /*//image part of the complex multiplication */
    14. #define CMULTI(X,Y) ((X).y*(Y).x+(X).x*(Y).y)
    15. /*// used in the Division : real part of the division */
    16. #define CDRN(X,Y) ((X).x*(Y).x+(Y).y*(X).y)
    17. /*// used in the Division : image part of the division */
    18. #define CDIN(X,Y) ((X).y*(Y).x-(X).x*(Y).y)
    19. /*// used in the Division : denumerator of the division */
    20. #define CNORM(X) ((X).x*(X).x+(X).y*(X).y)
    21. /*//real part of the complex */
    22. #define CREAL(X) ((double)((X).x))
    23. /*//conjunction value */
    24. #define CONJG(z,X) {(z).x=(X).x;(z).y= -(X).y;}
    25. /*//conjunction value */
    26. #define CONJ(X) {(X).y= -(X).y;}
    27. /*//muliply : z could not be same variable as X or Y, same rule for other Macro */
    28. #define CMULT(z,X,Y) {(z).x=CMULTR((X),(Y));(z).y=CMULTI((X),(Y));}
    29. /*//division */
    30. #define CDIV(z,X,Y){double d=CNORM(Y); (z).x=CDRN(X,Y)/d; (z).y=CDIN(X,Y)/d;}
    31. /*//addition */
    32. #define CADD(z,X,Y) {(z).x=(X).x+(Y).x;(z).y=(X).y+(Y).y;}
    33. /*//subtraction */
    34. #define CSUB(z,X,Y) {(z).x=(X).x-(Y).x;(z).y=(X).y-(Y).y;}
    35. /*//assign */
    36. #define CLET(to,from) {(to).x=(from).x;(to).y=(from).y;}
    37. /*//abstract value(magnitude) */
    38. #define cabs(X) sqrt((X).y*(X).y+(X).x*(X).x)
    39. /*//real to complex */
    40. #define CMPLX(X,real,imag) {(X).x=(real);(X).y=(imag);}
    41. /*//multiply with real */
    42. #define CTREAL(z,X,real) {(z).x=(X).x*(real);(z).y=(X).y*(real);}
    43. #define CEXP(z,phase) {(z).x = cos(phase); (z).y = sin(phase); }
    44. /* implementation using function : for compatibility */
    45. COMPLEX compdiv(COMPLEX ne,COMPLEX de);
    46. COMPLEX compexp(double theta);
    47. COMPLEX compmult(double scalar,COMPLEX compnum);
    48. COMPLEX compprod(COMPLEX compnum1, COMPLEX compnum2);
    49. COMPLEX comp2sum(COMPLEX summand1, COMPLEX summand2);
    50. COMPLEX comp3sum(COMPLEX summand1, COMPLEX summand2, COMPLEX summand3);
    51. COMPLEX compsubtract(COMPLEX complexA, COMPLEX complexB);
    52. double REAL(COMPLEX compnum);
    53. #endif
    Alles anzeigen
  • wie frage ich ab was der spieler im befehl eingegeben hat? also ich möchte das so machen, das wenn der spieler /testbefehl 1 spielerid eingibt, das Typ 1 ausgeführt wird und bei 0 Typ 0.

    PAWN-Quellcode

    1. CMD:testbefehl(playerid,params[])
    2. {
    3. new target, str[64], type;
    4. if(sscanf(params,"iu",type,target)) return
    5. SendClientMessage(playerid, rot,"Benutz: /testbefehl <Type> <ID/Name>");
    6. //Typ 0:
    7. SetPlayerHealth(playerid, 100);
    8. //Typ 1:
    9. SetPlayerArmour(playerid, 100);
    10. return 1;
    11. }
    Alles anzeigen
  • Da gibt es mehrere Möglichkeiten:

    1. Möglichkeit if-Abfrage:

    C-Quellcode

    1. CMD:testbefehl(playerid,params[])
    2. {
    3. new target, str[64], type;
    4. if(sscanf(params,"iu",type,target)) return SendClientMessage(playerid, rot,"Benutz: /testbefehl <Type> <ID/Name>");
    5. if(type==0) SetPlayerHealth(playerid, 100);
    6. else if(type==1) SetPlayerArmour(playerid, 100);
    7. else SendClientMessage(playerid,rot,"Ungültiger Type!");
    8. return 1;
    9. }


    2. Möglichkeit switch (das wäre schneller wenn noch mehr Types hinzu kommen):


    C-Quellcode

    1. CMD:testbefehl(playerid,params[])
    2. {
    3. new target, str[64], type;
    4. if(sscanf(params,"iu",type,target)) return SendClientMessage(playerid, rot,"Benutz: /testbefehl <Type> <ID/Name>");
    5. switch(type)
    6. {
    7. case 0: SetPlayerHealth(playerid, 100);
    8. case 1: SetPlayerArmour(playerid, 100);
    9. default: SendClientMessage(playerid,rot,"Ungültiger Type!");
    10. }
    11. return 1;
    12. }
    Alles anzeigen




    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :pinch:
  • Yo, hab mal 2 kleine Fragen:

    Ich frage Informationen von Spieler ab, doch es treten folgende Probleme auf:

    PAWN-Quellcode

    1. forward GetTargetSpecData(playerid, target);
    2. public GetTargetSpecData(playerid, target)
    3. {
    4. new str[128], Float:pHealth, Float:pArmour, Float:vehiclehealth, model;
    5. // new veh = GetPlayerVehicleID(target);
    6. format(str, sizeof(str),"%s (%d)", GetName(target), target);
    7. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][4], str);
    8. format(str, sizeof(str),"%.1f", GetPlayerHealth(target, pHealth));
    9. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][6], str);
    10. format(str, sizeof(str),"%.1f", GetPlayerArmour(target, pArmour));
    11. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][7], str);
    12. // format(str, sizeof(str),"%s (%d)", VehicleNames[model - 400], GetVehicleHealth(veh, vehiclehealth));
    13. // PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], str);
    14. format(str, sizeof(str),"%s (%d)", GetWeaponNameEx(GetPlayerWeapon(target)), GetPlayerAmmo(target));
    15. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][11], str);
    16. format(str, sizeof(str),"%d", GetPlayerPing(target));
    17. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][13], str);
    18. format(str, sizeof(str),"%d", GetPlayerPing(target)); //REPLACE WITH YOUR FPS FUNCTION!!!!!!!!!!!!!!!!!!!!!!!!
    19. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][14], str);
    20. format(str, sizeof(str),"%0.2f", GetPlayerPacketLoss(target));
    21. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][15], str);
    22. }
    Alles anzeigen


    1) Armour und Health gibt immer 0.0 zurück, obwohl ich beispielsweise 100 HP habe.
    2) Ich krieg folgende Error wenn ich den Teil von VehicleNames auskommentiere:

    [05:11:32] [debug] Run time error 4: "Array index out of bounds"
    [05:11:32] [debug] Accessing element at negative index -400
    [05:11:32] [debug] AMX backtrace:
    [05:11:32] [debug] #0 000077e8 in public GetTargetSpecData (playerid=0, target=0) at C:\Users\David\Desktop\BattleArena\filterscripts\spectate.pwn:88

    Wenn ich mein Fahrzeug mit der Funktion erstelle, funktioniert das problemlos..

    Mit freundlichen Grüßen
    JustMe.77 :)
  • JustMe.77 schrieb:

    Yo, hab mal 2 kleine Fragen
    GetPlayerArmour und GetPlayerHealth geben an sich nicht den Wert zurück den du suchst, dafür speicherst du ja die Werte in
    "Float:pHealth, Float:pArmour".

    Heißt: GetPlayerArmour an den Anfang setzen und dann bei format die Variable einfügen in der du den Wert gespeichert hast.

    Und was den Fehler mitm Array angeht, du kannst ja mal versuchen das Projekt einfach neu zu laden. Vlt liegts ja am Editor.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Zim30 ()

  • @Zim30 das hat absolut nichts mit dem Editor zu tun. Es wird schlichtweg einfach nicht Abgefragt ob die Vehicle ID überhaupt valide ist. Zumal auch model keinen Wert zugewiesen bekommt. Bei GetVehicleHealth wieder das selbe Problem wie über mir beschrieben.
    Genitiv ins Wasser weils Dativ ist
    :D
    Keine Hilfe via PM über SA-MP oder Allgemeines Coding Designen etc. ! Dafür ist das Forum und die Suchfunktion da

    Wer "zuviel" PSC Geld hat kann mir gerne den Code per PN schicken

    In dem Sinne

  • XeroX schrieb:

    @Zim30 das hat absolut nichts mit dem Editor zu tun
    Ich hab ja auch nicht behauptet dass es daran liegt oder? Ich habe gesagt "Vielleicht". Bin auch nicht allwissend aber helfe gerne und was Health und Armour angeht hatte ich schon recht, man kann den Rückgabewert dieser Funktion nicht als Float anwenden.

    //Edit: Und er hat auch ganz ausdrücklich geschrieben

    JustMe.77 schrieb:

    2) Ich krieg folgende Error wenn ich den Teil von VehicleNames auskommentiere:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Zim30 ()

  • Das Problem mit der Health / Armour Anzeige ist nun behoben, danke.

    Wie genau soll ich denn Abfragen ob die Vehicle ID valid ist, @XeroX ?

    Bei meinem Car Befehl mache ich folgendes um das Problem zu umgehen:

    PAWN-Quellcode

    1. if(model < 400 || model > 611) return SendClientMessage(playerid, COLOR_RED, "ERROR: Fahrzeug ID nur von 400-611 verfügbar..");


    So geht's aber bei meinen TextDraws nicht, muss das irgendwie anders schreiben :/

    Mit freundlichen Grüßen
    JustMe.77 :)
  • JustMe.77 schrieb:

    muss das irgendwie anders schreiben
    Hier, so:

    C-Quellcode

    1. GetPlayerHealth(target, pHealth);
    2. format(str, sizeof(str),"%.1f", pHealth);
    3. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][6], str);
    4. GetPlayerArmour(target, pArmour)
    5. format(str, sizeof(str),"%.1f", pArmour);
    6. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][7], str);
    7. if(400 <= model <= 611)
    8. {
    9. GetVehicleHealth(veh, vehiclehealth);
    10. format(str, sizeof(str),"%s (%d)", VehicleNames[model - 400], vehiclehealth);
    11. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], str);
    12. }
    13. else
    14. {
    15. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], "zu Fu\150"); //Hier sitzt er halt in keinem Fahrzeug...\150 = ß
    16. }
    Alles anzeigen




    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :pinch:
  • Das mit dem Heal / Armour hatte ich schon, egal :P

    Das scheint sich irgendwie nicht zu aktuallisieren bzw. es zeigt immer On Foot an, woran liegt's ?

    Aktuelle Code


    PAWN-Quellcode

    1. forward GetTargetSpecData(playerid, target);
    2. public GetTargetSpecData(playerid, target)
    3. {
    4. new str[128], Float:pHealth, Float:pArmour, Float:vehiclehealth, model;
    5. new veh = GetPlayerVehicleID(target);
    6. GetVehicleHealth(veh, vehiclehealth);
    7. GetPlayerHealth(target, pHealth);
    8. GetPlayerArmour(target, pArmour);
    9. format(str, sizeof(str),"%s (%d)", GetName(target), target);
    10. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][4], str);
    11. format(str, sizeof(str),"%.1f", pHealth);
    12. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][6], str);
    13. format(str, sizeof(str),"%.1f", pArmour);
    14. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][7], str);
    15. if(400 <= model <= 611)
    16. {
    17. GetVehicleHealth(veh, vehiclehealth);
    18. format(str, sizeof(str),"%s (%d)", VehicleNames[model - 400], vehiclehealth);
    19. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], str);
    20. print("in vehicle");
    21. }
    22. else
    23. {
    24. print("on foot");
    25. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], " On foot");
    26. }
    27. format(str, sizeof(str),"%s (%d)", GetWeaponNameEx(GetPlayerWeapon(target)), GetPlayerAmmo(target));
    28. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][11], str);
    29. format(str, sizeof(str),"%d", GetPlayerPing(target));
    30. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][13], str);
    31. format(str, sizeof(str),"%d", GetPlayerPing(target)); //REPLACE WITH YOUR FPS FUNCTION!!!!!!!!!!!!!!!!!!!!!!!!
    32. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][14], str);
    33. format(str, sizeof(str),"%0.2f", GetPlayerPacketLoss(target));
    34. PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][15], str);
    35. return 1;
    36. }
    Alles anzeigen


    Habe mal prints gesetzt, es wird nur on foot aufgerufen. Muss ich das ganze per OnPlayerEnterVehicle lösen oder geht's auch anders?

    Mit freundlichen Grüßen
    JustMe.77 :)
  • Neu

    Edit:

    Habe noch eine Frage:

    Ich muss die Spieler ID und den Namen auch außerhalb der Funktionen benutzen, wie soll ich das am besten machen?
    Benötige da einmal ein kleines Beispiel, aber bitte ohne PVars, die möchte ich vermeiden :)

    Beispiel:

    PAWN-Quellcode

    1. CMD:startspec(playerid,params[])
    2. {
    3. new target;
    4. if(sscanf(params,"u",target))
    5. return SendClientMessage(playerid, -1,"Use: /spectest {FF0000}<ID/Name>");
    6. if(!IsPlayerConnected(target)) return
    7. SendClientMessage(playerid, -1, "The player is not connected");
    8. if(textdrawscreated[playerid] == 0)
    9. {
    10. CreateSpectateTextDraws(playerid);
    11. textdrawscreated[playerid] = 1;
    12. }
    13. ShowSpectateTextDraws(playerid);
    14. SelectTextDraw(playerid, 0x00FF00FF);
    15. updatetargetinfo[playerid] = SetTimerEx("GetTargetSpecData", 500, 1, "i", playerid);
    16. SendClientMessage(playerid, -1, "Started spectating");
    17. return 1;
    18. }
    Alles anzeigen

    Mit freundlichen Grüßen
    JustMe.77 :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von JustMe.77 ()