[SAMMELTHREAD] Kleine Scripting Fragen

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • format(Query,sizeof(Query),"UPDATE players SET Admin = '%d', Level = '%d', Kills = '%d', Deaths = '%d', Ratio = '%f', Weed = '%d', Exp = '%d', MExp = '%d', Banned = '%d', Skin = '%d', Color = '%d', Weather = '%d', Time = '%d', AL = '%d', ReceivedBonus = '%d', DoubleEXP = '%d' WHERE Name = '%s'",


    Versuch es mal so. Habe es bei mir fast so gehabt.

    ...Lerne C#, JS für RageMP...

  • Welchen denn genau? Davon steht ja nichts in der Log.
    Eventuell die hier?


    format(Query,sizeof(Query),"UPDATE `players` SET Admin = %d, Level = %d, Kills = %d, Deaths = %d, Ratio = '%f', Weed = %d, Exp = %d, MExp = %d, Banned = %d, Skin = %d, Color = %d, Weather = %d, Time = %d, AL = %d, ReceivedBonus = %d, DoubleEXP = %d, WHERE Name = '%s'",

    Code
    format(Query,sizeof(Query),"UPDATE `players` SET Admin = %d, Level = %d, Kills = %d, Deaths = %d, Ratio = '%f', Weed = %d, Exp = %d, MExp = %d, Banned = %d, Skin = %d, Color = %d, Weather = %d, Time = %d, AL = %d, ReceivedBonus = %d, DoubleEXP = %d WHERE Name = '%s'",


    Der Fehler ist das Komma nach DoubleEXP = %d

  • Beitrag von Genadj_Andrenov ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Hat sich erledigt! ().
  • hey,


    es werden beim folgenden Code die Accounts in der Datenbank immer verdoppelt.
    Sprich wenn sich ein neuer Spieler registriert wird sein Account in der Datenbank doppelt gespeichert... und kann sich so nicht mehr anmelden...


    Code:


    Habe den Query geprintet und es wir mir nur einmal angezeigt, in der Datenbank jedoch ist der Account Doppelt :/
    Was habe ich denn da falsch gemacht? Ich vermute es ist wieder ein Denkfehler oder so...


    //Edit:
    Ist es möglich 2 Primary Keys zu vergeben, denn einen Primary Key verwende ich für die Spalte ID.
    Wenn ich 2 Primary Keys hätte ebenfalls beim Namen, dann würde doch nur eines der neu registrierten Accounts da stehe nund nicht doppelt... Aber ich verstehe nicht warum 2 Accounts gleiche Accounts gespeichert werden...


    //Edit2:
    Fehler behoben, lag darin das ich die selben querys in dem Function verwendet hatte und beim 2. falsche Datenbank eingetragen habe^^
    Erledigt

  • Hallo, habe mal eine Frage.


    Ich bin dabei ein "Skill System" zu erstellen und ich weiß auch wie ich genau vorgehen muss, aber ich bin mir 100 % sicher das sich das auch einfacher lösen lässt, nur habe ich keine Ahnung wie genau ich das anstellen soll.


    Nehmen wir folgendes Beispiel:


    Wenn man einen bestimmten Spieler tötet, erhält man Geld. Je nach Skill Level, hat man eine CHANCE doppeltes Geld zu bekommen. In OnPlayerDeath erstelle ich nun 5 "Skill Level" Abfragen womit ich ihn dann verschiedene Werte gebe.


    Nun habe ich mir das so vorgestellt (ungetestet)



    if(pData[playerid][P_DoubleEXP] == 0) // Double EXP Skill Level 0
    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    pData[killerid][P_Weed] += 5;
    GivePlayerExp(killerid, 25);
    }






    if(pData[playerid][P_DoubleEXP] == 1) //Double EXP Skill Level 1
    switch(random(10))
    {



    case 0..1:
    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][0], "+50");
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][1], "Double EXP");
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    GivePlayerExp(killerid, 50);
    return 1;
    }



    }

    }
    }


    Könnte ich nicht irgendwie einfach nur das Geld/die EXP multiplizieren beim jeweiligen Skill Level anstatt immer wieder alles davon zu kopieren?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • So?
    if(pData[playerid][P_DoubleEXP] == 0) // Double EXP Skill Level 0
    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    pData[killerid][P_Weed] += 5;
    GivePlayerExp(killerid, 25);
    }
    else if(pData[playerid][P_DoubleEXP] >= 1)//Double EXP Skill Level 1+
    {
    switch(random(10))
    {
    case 0..1:
    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    new exp = 25*(pData[playerid][P_DoubleEXP]+1);
    new str[16];
    format(str, sizeof(str), "+%d", exp);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][0], str);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][1], "Double EXP");
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    GivePlayerExp(killerid, exp);
    }
    }
    }

  • new exp = 25*(pData[playerid][P_DoubleEXP]+1);


    schaut schonmal gut aus, so werde ich es versuchen (btw, wofür steht die +1 dahinter)


    Aber ich rede auch z.B. von den restlichen Funktionen. Es wird ja, wie bereits erwähnt 5 Skill Level geben (+ normale (0)) und ich möchte nicht jedes mal folgendes bei jeder Abfrage verwenden.


    Edit:


    Ach, ich bemerke gerade ich kanns ja so machen, habe das übersehen


    else if(pData[playerid][P_DoubleEXP] >= 1)//Double EXP Skill Level 1+


    dachte ich hätte jetzt jedes mal else if(pData[playerid][P_DoubleEXP] = 1)//Double EXP Skill Level 1+ (mit 1, 2, 3, 4, & 5) machen müssen.


    Aber wenn ich das so wie du machst mit >=1 dann kann ich nicht verschiedene Zufallschancen bestimmen, oder?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Dann muss ich ein anderen Weg wählen..


    Hatte das so geplant.


    Double EXP (EXP x2) Level 0: Normale EXP (+25 XP) , Level 1: (10 %), Level 2 (20%), Level 3(30%), Level 4(40%), Level 5(50%) - Chance das man doppelte EXP Bekommt.


    Also muss ich das doch so umständlich machen und für jedes Skill Level die Funktionen erneut kopieren und einfügen?


    Sprich so, mit der jeweiligen Zufälligkeit pro Level?




    if(pData[playerid][P_DoubleEXP] == 1)
    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][0], "+50");
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][1], "Double EXP");
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    GivePlayerExp(killerid, 50);



    }



    else if(pData[playerid][P_DoubleEXP] == 2)



    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][0], "+50");
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][1], "Double EXP");
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    GivePlayerExp(killerid, 50);



    }



    else if(pData[playerid][P_DoubleEXP] == 3)
    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][0], "+50");
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][1], "Double EXP");
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    GivePlayerExp(killerid, 50);
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Double EXP (EXP x2) Level 0: Normale EXP (+25 XP) , Level 1: (10 %), Level 2 (20%), Level 3(30%), Level 4(40%), Level 5(50%) - Chance das man doppelte EXP Bekommt.

    Das wiederrum geht, da es linear ist.
    Das sähe dann so aus:
    if(pData[playerid][P_DoubleEXP] == 0) // Double EXP Skill Level 0
    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    pData[killerid][P_Weed] += 5;
    GivePlayerExp(killerid, 25);
    }
    else if(pData[playerid][P_DoubleEXP] >= 1)//Double EXP Skill Level 1+
    {
    if(random(10) < pData[playerid][P_DoubleEXP])
    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    new exp = 25*(pData[playerid][P_DoubleEXP]+1);
    new str[16];
    format(str, sizeof(str), "+%d", exp);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][0], str);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][1], "Double EXP");
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    GivePlayerExp(killerid, exp);
    }
    }

  • Hmm, die Double XP Funktion wird irgendwie nicht aufgerufen, kommt immer nur die "normale" EXP Anzahl.



    if(pData[playerid][P_DoubleEXP] == 0) // Double EXP Skill Level 0



    {
    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    pData[killerid][P_Weed] += 5;
    GivePlayerExp(killerid, 25);
    SendClientMessageToAll(COLOR_RED , "DEBUG: Normal EXP called");
    }



    else if(pData[playerid][P_DoubleEXP] >= 1)//Double EXP Skill Level 1+
    {



    if(random(10) < pData[playerid][P_DoubleEXP])
    {



    PlayerTextDrawShow(killerid, PlayerKill[killerid][0]);
    PlayerTextDrawShow(killerid, PlayerKill[killerid][1]);
    new exp = 25*(pData[playerid][P_DoubleEXP]+1);
    new str[16];
    format(str, sizeof(str), "+%d", exp);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][0], str);
    PlayerTextDrawSetString(playerid, PlayerKill[killerid][1], "Double EXP");
    SetTimerEx("KillTextdrawPlayerKill", 3000, false, "ii", killerid, 0);
    GivePlayerExp(killerid, exp);
    SendClientMessageToAll(COLOR_GREEN , "DEBUG: DOUBLE EXP called");
    }
    }



    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Habe mein Level auf 5 gesetzt und mit folgendem Befehl überprüft ob ich auch Level 5 habe.


    EDIT:


    Ach ich denke ich weiß woran das liegt, müsste playerid zu killerid umändern da dass ganze ja in OnPlayerDeath stattfindet, ich versuch's mal :) !


    Mit freundlichen Grüßen
    JustMe.77 8)