Beiträge von Padarom

    Die kann man leider nicht erstellen (nur modifizieren, was dann aber auch nur lokal ist).
    Eine Liste gibt es u.A. hier. Als Icon gibst du dann beispielsweise an: LD_BEAT:upr (Für den Pfeil nach Oben rechts).
    Ich weiß leider selbst nicht so genau, ob das eine vollständige Liste ist oder nicht.

    Wie gesagt, wenn du stündlich 3000$ verdienst, sind 400 wie ein Tropfen auf'm heißen Stein. Arbeitest du wieder 1 1/3 Stunden und hast das 10-fache verdient.
    Aber egal, ich habe absolut keine Lust über sowas zu diskutieren.

    Auf vielen Servern kosten Waffen Geld im 4-stelligen Bereich (Das ist dann teuer). Ein Payday ist auf Reallifeservern für gewöhnlich stündlich. Wenn du also 1/8 deines Stunden-Gehalts für eine Waffe ausgibst, ist das gewiss nicht teuer.

    Abgesehen von deiner eigentlichen Frage sind viele Waffen in echt nicht besonders teuer.
    Eine Schrotflinte kannst du beispielsweise in Amerika schon für $300 kaufen. Pistolen kosten auch "nur" $300-$800 und selbst Sturmgewehre kosten (im günstigen Bereich) maximal $2000. Dort kannst du die auch im Internet bestellen.

    Hallo und willkommen zu meinem neuen Scriptingtutorial.
    Heute wollen wir uns sowohl mit Erfolgen beschäftigen, als aber auch ein wenig mit Datenbanken.


    Was erstellen wir?
    Wir erstellen ein "dynamisches" Erfolgssystem, welches wir beliebig per Datenbankzugriff ändern können und im Script Erfolge durch lediglich eine Zeile vergeben.
    Dies hat vielleicht nicht immer einen wirklich praktischen Sinn, kann dafür aber sowohl den Anreiz der Spieler erhöhen, als auch für Spannung sorgen wenn die Erfolge bekannt sind.


    Erste Überlegungen...
    Der Einfachheit halber nutze ich für die grafische Darstellung den TextDraw Editor von Zamaroth. Alternativ könnt ihr aber gerne auch den Editor von iPLEOMAX verwenden, welcher meiner Meinung nach ein bisschen ausgereifter ist (nicht zuletzt wegen der neueren Version).
    Welchen Editor ihr letztendlich verwendet, ist natürlich egal. Ihr könnt gerne auch per Hand eure Textdraws schreiben. Hierbei geht es lediglich um den Komfort.


    Als nächstes müssen wir uns überlegen welche Datenspeicherungsart wir verwenden. Dabei habe ich mich für MySQL entschieden. Es gibt vielleicht auch einfachere Speicherungsmöglichkeiten
    für solch ein "kleineres" Projekt, allerdings ist dieses meiner Meinung nach am einfachsten zu bedienen. Zur Nutzung davon verwenden wir das MySQL-Plugin von Strickenkid. Solltet ihr ein anderes
    verwenden, passt euren Code bitte dementsprechend an.


    Die letzte Frage wäre dann wo wir das Script erstellen. Sicherlich wäre es möglich, dieses als Filterscript oder Include zu schreiben, doch für unsere Ansprüche (und der Einfachheit für Neulinge halber)
    werden wir es einfach in unseren Gamemode integrieren.


    Erstellen des Textdraws
    Wie erwähnt, nutze ich den Editor von Zamaroth. Deshalb könnte es Ungleichheiten zwischen diesem Code und eurem geben, wenn ihr einen anderen Editor verwendet.
    Meine Idee war für die folgenden Dinge Textdraws zu erstellen:


    • Schwarze Hintergrundbox
    • Überschrift
    • Erfolgsbeschreibung
    • Belohnung
    • "Icon" (sofern mit Texturen gearbeitet wird)


    Nach einigen Minuten Arbeit kam ich auf folgendes, meiner Meinung nach ansehnliches, Ergebnis:

    Ich habe hier zwei weitere Textdraws angebracht. Einmal den Text oben links, welcher zur Verdeutlichung des errungenen Erfolges sein soll, sowie das kleine Icon oben rechts, welches nicht wirklich einen praktischen Nutzen hat, aber wie ich finde gut aussieht.
    Nachdem ihr mit eurem Ergebnis zufrieden seid, könnt ihr es exportieren (ich habe die klassische Exportmethode verwendet). Ebenfalls müsst ihr (bei Zamaroht's leider manuell) alle TextDraws zu PlayerTextDraws umwandeln. Schaut dabei ggf. in die Wiki um die genauen Funktionsbezeichnungen und Parameter zu sehen.


    Mein Textdraw hat diesen Code:

    Textdraw Code
    new PlayerText:Box[MAX_PLAYERS];
    new PlayerText:MiniIcon[MAX_PLAYERS];
    new PlayerText:Titel[MAX_PLAYERS];
    new PlayerText:MiniInfo[MAX_PLAYERS];
    new PlayerText:Info[MAX_PLAYERS];
    new PlayerText:Belohnung[MAX_PLAYERS];
    new PlayerText:Icon[MAX_PLAYERS];

    Textdraw Code
    Box[playerid] = CreatePlayerTextDraw(playerid, 400.000000, 283.000000, "~n~");
    MiniIcon[playerid] = CreatePlayerTextDraw(playerid, 387.000000, 274.000000, "LD_CHAT:badchat");
    MiniInfo[playerid] = CreatePlayerTextDraw(playerid, 242.000000, 264.000000, "Erfolg errungen:");
    Titel[playerid] = CreatePlayerTextDraw(playerid, 320.000000, 273.000000, "Erfolgstitel");
    Info[playerid] = CreatePlayerTextDraw(playerid, 390.000000, 292.000000, "Erhalte deinen ersten Erfolg~n~und sei froh!");
    Belohnung[playerid] = CreatePlayerTextDraw(playerid, 243.000000, 320.000000, "~g~+ $500 ~w~...~g~ +10 Punkte");
    Icon[playerid] = CreatePlayerTextDraw(playerid, 245.000000, 279.000000, "ld_grav:bee1");

    Textdraw Code
    PlayerTextDrawBackgroundColor(playerid, Box[playerid], 255);
    PlayerTextDrawFont(playerid, Box[playerid], 1);
    PlayerTextDrawLetterSize(playerid, Box[playerid], 0.569998, 5.399999);
    PlayerTextDrawColor(playerid, Box[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Box[playerid], 0);
    PlayerTextDrawSetProportional(playerid, Box[playerid], 1);
    PlayerTextDrawSetShadow(playerid, Box[playerid], 1);
    PlayerTextDrawUseBox(playerid, Box[playerid], 1);
    PlayerTextDrawBoxColor(playerid, Box[playerid], 150);
    PlayerTextDrawTextSize(playerid, Box[playerid], 240.000000, 0.000000);

    Textdraw Code
    PlayerTextDrawBackgroundColor(playerid, MiniIcon[playerid], 255);
    PlayerTextDrawFont(playerid, MiniIcon[playerid], 4);
    PlayerTextDrawLetterSize(playerid, MiniIcon[playerid], 0.500000, 1.000000);
    PlayerTextDrawColor(playerid, MiniIcon[playerid], -1);
    PlayerTextDrawSetOutline(playerid, MiniIcon[playerid], 0);
    PlayerTextDrawSetProportional(playerid, MiniIcon[playerid], 1);
    PlayerTextDrawSetShadow(playerid, MiniIcon[playerid], 1);
    PlayerTextDrawUseBox(playerid, MiniIcon[playerid], 1);
    PlayerTextDrawBoxColor(playerid, MiniIcon[playerid], 255);

    Textdraw Code
    PlayerTextDrawTextSize(playerid, MiniIcon[playerid], 20.000000, 20.000000);

    Textdraw Code
    PlayerTextDrawAlignment(playerid, Titel[playerid], 2);
    PlayerTextDrawBackgroundColor(playerid, Titel[playerid], 255);
    PlayerTextDrawFont(playerid, Titel[playerid], 0);
    PlayerTextDrawLetterSize(playerid, Titel[playerid], 0.519999, 1.700000);
    PlayerTextDrawColor(playerid, Titel[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Titel[playerid], 1);
    PlayerTextDrawSetProportional(playerid, Titel[playerid], 1);

    Textdraw Code
    PlayerTextDrawBackgroundColor(playerid, MiniInfo[playerid], 255);
    PlayerTextDrawFont(playerid, MiniInfo[playerid], 2);
    PlayerTextDrawLetterSize(playerid, MiniInfo[playerid], 0.209999, 1.000000);
    PlayerTextDrawColor(playerid, MiniInfo[playerid], -65281);
    PlayerTextDrawSetOutline(playerid, MiniInfo[playerid], 1);
    PlayerTextDrawSetProportional(playerid, MiniInfo[playerid], 1);

    Textdraw Code
    PlayerTextDrawAlignment(playerid, Info[playerid], 3);
    PlayerTextDrawBackgroundColor(playerid, Info[playerid], 255);
    PlayerTextDrawFont(playerid, Info[playerid], 1);
    PlayerTextDrawLetterSize(playerid, Info[playerid], 0.209999, 1.299999);
    PlayerTextDrawColor(playerid, Info[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Info[playerid], 0);
    PlayerTextDrawSetProportional(playerid, Info[playerid], 1);
    PlayerTextDrawSetShadow(playerid, Info[playerid], 1);

    Textdraw Code
    PlayerTextDrawBackgroundColor(playerid, Belohnung[playerid], 255);
    PlayerTextDrawFont(playerid, Belohnung[playerid], 1);
    PlayerTextDrawLetterSize(playerid, Belohnung[playerid], 0.209999, 1.299999);
    PlayerTextDrawColor(playerid, Belohnung[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Belohnung[playerid], 0);
    PlayerTextDrawSetProportional(playerid, Belohnung[playerid], 1);
    PlayerTextDrawSetShadow(playerid, Belohnung[playerid], 1);

    Textdraw Code
    PlayerTextDrawBackgroundColor(playerid, Icon[playerid], 255);
    PlayerTextDrawFont(playerid, Icon[playerid], 4);
    PlayerTextDrawLetterSize(playerid, Icon[playerid], 0.500000, 1.000000);
    PlayerTextDrawColor(playerid, Icon[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Icon[playerid], 0);
    PlayerTextDrawSetProportional(playerid, Icon[playerid], 1);
    PlayerTextDrawSetShadow(playerid, Icon[playerid], 1);
    PlayerTextDrawUseBox(playerid, Icon[playerid], 1);
    PlayerTextDrawBoxColor(playerid, Icon[playerid], 255);
    PlayerTextDrawTextSize(playerid, Icon[playerid], 40.000000, 40.000000);


    Coding:
    Da wir nun alle Informationen und vor allem unsere TextDraw's haben, ist unser jetziger Schritt das eigentliche Coden. Zuerst müssen wir alle PlayerText-Variablen deklarieren. Also ganz oben, außerhalb jedes Callbacks in das Script:
    new PlayerText:Box[MAX_PLAYERS];
    new PlayerText:MiniIcon[MAX_PLAYERS];
    new PlayerText:Titel[MAX_PLAYERS];
    new PlayerText:MiniInfo[MAX_PLAYERS];
    new PlayerText:Info[MAX_PLAYERS];
    new PlayerText:Belohnung[MAX_PLAYERS];
    new PlayerText:Icon[MAX_PLAYERS]; 
    Ausnahmsweise gilt hier fast ausschließlich Copy and Paste. Wir wollen ja nicht immer alles aus unserem Textdokument abschreiben.
    Auch kann es ziemlich irritierend sein, die TextDraws für jeden Spieler bereits bei OnPlayerConnect/Spawn zu initialisieren, also schreiben wir uns dafür eine neue Funktion:
    InitialisePlayerAchievements(playerid)
    {
    Box[playerid] = CreatePlayerTextDraw(playerid, 400.000000, 283.000000, "~n~");
    MiniIcon[playerid] = CreatePlayerTextDraw(playerid, 387.000000, 274.000000, "LD_CHAT:badchat");
    MiniInfo[playerid] = CreatePlayerTextDraw(playerid, 242.000000, 264.000000, "Erfolg errungen:");
    Titel[playerid] = CreatePlayerTextDraw(playerid, 320.000000, 273.000000, "");
    Info[playerid] = CreatePlayerTextDraw(playerid, 390.000000, 292.000000, "");
    Belohnung[playerid] = CreatePlayerTextDraw(playerid, 243.000000, 320.000000, "");
    Icon[playerid] = CreatePlayerTextDraw(playerid, 245.000000, 279.000000, "");


    PlayerTextDrawBackgroundColor(playerid, Box[playerid], 255);
    PlayerTextDrawFont(playerid, Box[playerid], 1);
    PlayerTextDrawLetterSize(playerid, Box[playerid], 0.569998, 5.399999);
    PlayerTextDrawColor(playerid, Box[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Box[playerid], 0);
    PlayerTextDrawSetProportional(playerid, Box[playerid], 1);
    PlayerTextDrawSetShadow(playerid, Box[playerid], 1);
    PlayerTextDrawUseBox(playerid, Box[playerid], 1);
    PlayerTextDrawBoxColor(playerid, Box[playerid], 150);
    PlayerTextDrawTextSize(playerid, Box[playerid], 240.000000, 0.000000);


    PlayerTextDrawBackgroundColor(playerid, MiniIcon[playerid], 255);
    PlayerTextDrawFont(playerid, MiniIcon[playerid], 4);
    PlayerTextDrawLetterSize(playerid, MiniIcon[playerid], 0.500000, 1.000000);
    PlayerTextDrawColor(playerid, MiniIcon[playerid], -1);
    PlayerTextDrawSetOutline(playerid, MiniIcon[playerid], 0);
    PlayerTextDrawSetProportional(playerid, MiniIcon[playerid], 1);
    PlayerTextDrawSetShadow(playerid, MiniIcon[playerid], 1);
    PlayerTextDrawUseBox(playerid, MiniIcon[playerid], 1);
    PlayerTextDrawBoxColor(playerid, MiniIcon[playerid], 255);
    PlayerTextDrawTextSize(playerid, MiniIcon[playerid], 20.000000, 20.000000);


    PlayerTextDrawAlignment(playerid, Titel[playerid], 2);
    PlayerTextDrawBackgroundColor(playerid, Titel[playerid], 255);
    PlayerTextDrawFont(playerid, Titel[playerid], 0);
    PlayerTextDrawLetterSize(playerid, Titel[playerid], 0.519999, 1.700000);
    PlayerTextDrawColor(playerid, Titel[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Titel[playerid], 1);
    PlayerTextDrawSetProportional(playerid, Titel[playerid], 1);


    PlayerTextDrawBackgroundColor(playerid, MiniInfo[playerid], 255);
    PlayerTextDrawFont(playerid, MiniInfo[playerid], 2);
    PlayerTextDrawLetterSize(playerid, MiniInfo[playerid], 0.209999, 1.000000);
    PlayerTextDrawColor(playerid, MiniInfo[playerid], -65281);
    PlayerTextDrawSetOutline(playerid, MiniInfo[playerid], 1);
    PlayerTextDrawSetProportional(playerid, MiniInfo[playerid], 1);


    PlayerTextDrawAlignment(playerid, Info[playerid], 3);
    PlayerTextDrawBackgroundColor(playerid, Info[playerid], 255);
    PlayerTextDrawFont(playerid, Info[playerid], 1);
    PlayerTextDrawLetterSize(playerid, Info[playerid], 0.209999, 1.299999);
    PlayerTextDrawColor(playerid, Info[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Info[playerid], 0);
    PlayerTextDrawSetProportional(playerid, Info[playerid], 1);
    PlayerTextDrawSetShadow(playerid, Info[playerid], 1);


    PlayerTextDrawBackgroundColor(playerid, Belohnung[playerid], 255);
    PlayerTextDrawFont(playerid, Belohnung[playerid], 1);
    PlayerTextDrawLetterSize(playerid, Belohnung[playerid], 0.209999, 1.299999);
    PlayerTextDrawColor(playerid, Belohnung[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Belohnung[playerid], 0);
    PlayerTextDrawSetProportional(playerid, Belohnung[playerid], 1);
    PlayerTextDrawSetShadow(playerid, Belohnung[playerid], 1);


    PlayerTextDrawBackgroundColor(playerid, Icon[playerid], 255);
    PlayerTextDrawFont(playerid, Icon[playerid], 4);
    PlayerTextDrawLetterSize(playerid, Icon[playerid], 0.500000, 1.000000);
    PlayerTextDrawColor(playerid, Icon[playerid], -1);
    PlayerTextDrawSetOutline(playerid, Icon[playerid], 0);
    PlayerTextDrawSetProportional(playerid, Icon[playerid], 1);
    PlayerTextDrawSetShadow(playerid, Icon[playerid], 1);
    PlayerTextDrawUseBox(playerid, Icon[playerid], 1);
    PlayerTextDrawBoxColor(playerid, Icon[playerid], 255);
    PlayerTextDrawTextSize(playerid, Icon[playerid], 40.000000, 40.000000);
    }Nun haben wir alle Initialisierungen in einer neuen Funktion, welche wir am besten an das Ende des Scripts setzen. Beachtet jedoch, dass wenn ihr eine normale Funktion verwendet (Anstatt stock/public), dass ihr dann auch keine Fehlermeldungen bekommt, wenn etwas daran falsch ist, solange ihr sie nirgends verwendet.
    Mit der Funktion, welche den Übergabeparameter playerid möchte, können wir nun vorzugsweise in OnPlayerConnect alle Erfolgstextdraws initialisieren:
    InitialisePlayerAchievements(playerid);


    Damit haben wir alle Textdraws im Script und können das vom Editor exportierte Dokument schließen. Als nächstes wollen wir uns nämlich für die MySQL-Verbindung vorbereiten. Bitte seht euch z.B. dieses MySQL-Tutorial an, damit ihr in der Lage seid eine Verbindung zu eurem Server herzustellen. Eine genaue Erklärung zu MySQL und seiner Funktionsweise in PAWN findet ihr dort, bei mir geht es nur um das Erfolgssystem, weshalb ich gar nicht zu lange auf diese Funktionen eingehen möchte.
    Für den Erfolgsaufruf benötigen wir eine Abfrage, einen Timer und ein wenig Wissen. Wir erstellen uns also eine neue Funktion:
    AwardAchievement(playerid, achievementid)
    {
    new query[64], z[24], titel[24], inhalt[64], geld, punkte, icon[64];
    format(query, sizeof(query), "SELECT * WHERE ID = %i", achievementid);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_field("titel", titel);
    mysql_fetch_field("inhalt", inhalt);
    mysql_fetch_field("icon", icon);
    mysql_fetch_field("geld", z);
    geld = strval(z);
    mysql_fetch_field("punkte", z);
    punkte = strval(z);
    mysql_free_result();

    Hieran sehen wir bereits wie unsere MySQL-Tabelle aufgebaut sein muss:
    [table='6''][*]ID[*]titel[*]inhalt[*]icon[*]geld[*]punkte[*]1[*]Erfolgstitel[*]Erhalte deinen ersten Erfolg und sei froh![*]ld_grav:bee1[*]500[*]100[/table]


    Aktuell macht unsere Funktion allerdings noch nichts, als alle Daten aus der Datenbank mit der ID = achievementid abzufragen. Verarbeitet wird aktuell noch nichts. Das wollen wir ändern. Folgendes kommt nach der MySQL-Abfrage:
    GivePlayerMoney(playerid, geld); // Addiert das Belohnungsgeld zum aktuellen Spielergeld
    SetPlayerScore(playerid, GetPlayerScore(playerid)+punkte); // Addiert die Belohnungspunkte zur aktuellen Spielerpunktzahl


    PlayerTextDrawSetString(playerid, Titel[playerid], titel); // Setzt den Titel auf den abgefragten Titel
    PlayerTextDrawSetString(playerid, Info[playerid], info); // ...
    PlayerTextDrawSetString(playerid, Icon[playerid], icon); // ...


    new belohnung[48]; // Deklariert einen neuen String, welcher uns für die Belohnung dient.
    if (geld > 0) // Gibt es eine Geldbelohnung?
    {
    format(belohnung, sizeof(belohnung), "~g~+ $%i", geld); // Wenn ja, dann formatiere sie.
    if(punkte > 0) // Gibt es auch Punkte?
    {
    new punktebelohnung[24];
    format(punktebelohnung, sizeof(punktebelohnung), " ~w~... ~g~+ %i Punkte", punkte); // Wenn ja, dann formatiere sie...
    strcat(belohnung, punktebelohnung); // ... und füge sie mit dem Geldstring zusammen.
    }
    }
    else if (punkte > 0) // Gibt es kein Geld, sondern nur Punkte:
    {
    format(belohnung, sizeof(belohnung), "~g~+ %i Punkte", punkte); // Formatiere sie
    }
    else format(belohnung, sizeof(belohnung), " "); // Gibt es garnichts: Lass es leer.
    PlayerTextDrawSetString(playerid, Belohnung[playerid], belohnung); 
    Dieser Abschnitt sieht vielleicht schon etwas komplizierter aus, doch ich hoffe, dass euch die Kommentare genug Aufschluss darüber geben, was hier vonstatten geht. Hauptsächlich kommt es dabei auf die Formatierung des Belohnungs-Textes an.


    Nun, da alle Texte ihre Richtigkeit haben, müssen wir sie darstellen:
    PlayerTextDrawShow(playerid, Box[playerid]);
    PlayerTextDrawShow(playerid, MiniIcon[playerid]);
    PlayerTextDrawShow(playerid, MiniInfo[playerid]);
    PlayerTextDrawShow(playerid, Titel[playerid]);
    PlayerTextDrawShow(playerid, Info[playerid]);
    PlayerTextDrawShow(playerid, Belohnung[playerid]);
    PlayerTextDrawShow(playerid, Icon[playerid]);
    SetTimerEx("AchievementEnd", 5000, false, "i", playerid); 
    Nun werden alle TextDraw's, die zum Erfolg gehören angezeigt und ein Timer gestartet, welcher die playerid übergibt. Die Zeit für die Anzeige der TextDraw's steht derzeit auf 5 Sekunden (5000 Millisekunden).
    Spieler in der Nähe sollen aber auch sehen, wenn jemand einen Erfolg erringt:
    new pName[MAX_PLAYER_NAME], nachricht[68], Float:pX, Float:pY, Float:pZ;
    GetPlayerName(playerid, pName, sizeof(pName));
    format(nachricht, sizeof(nachricht), "* %s hat den Erfolg \"%s\" errungen!", pName, titel);
    GetPlayerPos(playerid, pX, pY, pZ);
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    if (IsPlayerInRangeOfPoint(i, 15, pX, pY, pZ) SendClientMessageToPlayer(i, COLOR_RED, nachricht);
    }
    }  
    Nun wird also erstmal der Text für die anderen Spieler definiert, woraufhin eine Schleife alle Spieler durchläuft und denjenigen in der Nähe die Nachricht schickt. Theoretisch fehlt uns jetzt nur noch eine Funktion: Das Beenden des Erfolgs. Dafür müssen wir erstmal das Callback AchievementEnd(playerid) 'forwarden'. Danach erstellen wir dieses:
    public AchievementEnd(playerid)
    {
    PlayerTextDrawHide(playerid, Box[playerid]);
    PlayerTextDrawHide(playerid, MiniIcon[playerid]);
    PlayerTextDrawHide(playerid, MiniInfo[playerid]);
    PlayerTextDrawHide(playerid, Titel[playerid]);
    PlayerTextDrawHide(playerid, Info[playerid]);
    PlayerTextDrawHide(playerid, Belohnung[playerid]);
    PlayerTextDrawHide(playerid, Icon[playerid]);
    return 1;

    Dies funktioniert theoretisch genauso wie die Anzeige der TextDraw's, bis auf die Tatsache dass sie nun wieder versteckt werden.
    Um nun Erfolge an Spieler zu vergeben müssen wir folgendes tun:
    Wir gehen an den entsprechenden Teil im Script (z.B. Registrierung) und fügen dort die Funktion ein:
    AwardAchievement(playerid, achievementid); wobei achievementid für die ID steht, welche wir in der MySQL-Tabelle eingetragen haben.


    Ein Icon muss in diesem Falle nichtmal zwangsläufig eingetragen werden. Wenn keins existiert und das Feld leer ist, wird einfach nichts angezeigt.


    Dies war der erste Teil meines Tutorials. Der zweite Teil (welcher ebenfalls hier im Thread geschrieben wird, wenn sich diesen genug Leute wünschen), wird sich mit der Speicherung der errungenen Erfolge beschäftigen.


    Gerne höre ich mir jede konstruktive Kritik an und freue mich über eure Rückmeldungen. Leider konnte ich in diesem Tutorial nicht so viel zum Code selbst erklären wie in meinen anderen Tutorials üblich, allerdings sollten die meisten Dinge hier so oder so selbsterklärend sein.


    Mit freundlichen Grüßen
    Padarom


    PS: Bitte entschuldigt die fehlende Einrückung. Seit Tagen spinnen Foren bei jedem meiner Browser so stark, dass bei jedem Klick auf Vorschau 3 Leerzeilen pro Zeile eingebaut werden. Sobald ich die rausmache, ist die Einrückung vom Code weg.
    Wenn ich diesen wieder reinmache, sind dann die 3 Leerzeilen wieder da.

    [Sun Oct 07 18:26:10 2012] Error (0): Function: mysql_connect failed, mysql was not initialized on this handle.


    Ich bin mir nicht mehr so ganz sicher, habe schon lange nichts mehr gescriptet (v.A. nicht mit Datenbankanbindung), aber ich meine das Plugin von Strickenkid genutzt zu haben.
    Im Download habe ich aber G-Stylezzz Plugin angegeben (Oder andersrum, mit dem Script schon viel länger nicht mehr beschäftigt^^).
    Wenn du das Strickenkid-Plugin hast, musst du noch mysql_init vor dem mysql_connect verwenden (siehe 2.1).
    Wenn das nicht klappt, einfach mal in die beigefügte Include gucken welches MySQL das ist und die jeweils andere verwenden. Ich weiß, ich bin dämlich :D


    Hoffe das hilft.


    Mit freundl. Grüßen
    Padarom

    Da kann ich dir leider nicht wirklich weiterhelfen. Ggf. kannst du überall eine if(!IsPlayerNPC(playerid))-Abfrage reinbauen, damit diese Scriptteile nur von Spielern aufgerufen werden können.
    Ansonsten wüsste ich nicht, wieso das Tanksystem so mit den NPC's interagiert :/

    Ich glaube kaum, dass namhafte Unternehmen wie Google deine Handynummer weitergeben.
    Ich habe bereits des Öfteren bei Google eine Handyverifizierung durchgeführt. Da wird dir dann per SMS ein Code geschickt den du online eingeben musst.
    Angerufen wurde ich bisher von garnichts. Google hat auch genug Geld, dass sie nicht die Schiene des Datenverkaufs fahren müssen um irgendetwas zu fnanzieren.


    new Text3D:GM3D[MAX_PLAYERS]; // Zu deinen Variablendefinitionen


    public CheckWantedText()
    {
    new string[126];
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(WantedLevel[i] > 0)
    {
    format(string, sizeof(string), "[%d] %s\n Wanteds: %d\n \n",i,spName(i),WantedLevel[i]);
    GM3D[i] = Create3DTextLabel(string,0xB70000FF,0,0,0,70.5,1);
    Attach3DTextLabelToPlayer(wanted3d[playerid], playerid, 0.0, 0.0, 0.45);
    }
    }
    }
    }

    Sollte so funktionieren. GM3D hat scheinbar nicht existiert, bzw. wurde unzureichend deklariert (Ohne Text3D). Außerdem hast du in der Schleife playerid verwendet, was nirgends definiert ist. Daher zu i umändern.
    Die anderen Fehler sollten sich deshalb erübrigen.


    Mit freundlichen Grüßen
    Padarom


    if(newkeys==KEY_JUMP)
    {
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new car = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(car) == 509 || GetVehicleModel(car) == 481 || GetVehicleModel(car) == 510)
    {
    SendClientMessage(playerid,ROT,"Ein Fahrrad hat kein Motor.");
    }
    else
    {
    if(Motor[car] == false)
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = true;
    }
    else
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = false;
    }
    }
    }
    }

    So müsste es eigentlich gehen.


    Mit freundl. Grüßen
    Padarom

    Hier hast du den SQL-Code:


    Weiter kann ich dir leider nicht dienen.


    Mit freundl. Grüßen
    Padarom

    Ich frag mich wieso hier alle so rummachen?
    Ständig werden in Kriegssituationen oder aus Notwehr Leute weltweit erschossen. Ständig gibt es Morde, regelrechte Abschlachtungen. Und dann beschwert man sich, wenn eine Person, die offensichtlich eine Bedrohung sowohl für Polizei, als auch Zivilisten darstellt erschossen wird?
    @djandre: Oh mein Gott, da kommen 3 Streifenwagen zur Unterstützung, in Deutschland wird das auch nicht viel anders gehandhabt. Sich dann aber darüber lächerlich zu machen, dass sie lieber mehr Polizisten am Einsatz beteiligt haben ist aber unnötig. Und du glaubst doch wohl ernsthaft nicht, dass jeder Polizist dich sofort erschießt, wenn du ihn mal anrempelst. Fangt doch bitte nicht wieder mit 'ner Grundsatzdiskussion an Leute -.-


    Poseidon: Auch dein Beitrag ist nicht wirklich hilfreich. Du vereinheitlichst das Verhalten von Individuen auf eine gesamte Nation. Wieso steht das komplette Land in einem schlechten Licht, wenn einige "normale" Polizisten mal einen Fehler machen (Abgesehen davon, dass ich es nicht als Fehler sehe)? Auch "Typisch Amerikaner, sind doch alle Rassisten" ist aus der Luft gegriffen. Kennst du mehr als 10 Amerikaner? Amerika ist groß, ich glaube nicht dass auch nur ansatzweise ein größerer Anteil der Bürger Rassist ist, als es in Deutschland der Fall ist.

    Du kannst auch solche Feuchttücher (z.B. zum Abstauben) vor'm Fenster aufhängen.
    Der Chemiegeruch davon sollte die Fliegen (oder andere Insekten) stören, weshalb sie lieber gleich wegbleiben.
    Hab jetzt seit einer Woche so'n Teil an meiner Lampe hängen und selbst wenn das Fenster (ohne Fliegengitter) auf ist und Licht an, kommt keine Fliege mehr hier rein. Auch wenn ich den Geruch von dem Teil garnicht merke (zumal es ja bereits 'ne Woche alt und deswegen schon trocken ist).

    Man verfolgt sie schon seit dem Mitteralter aus, sprich schon aber-tausende Jahre.


    Das Mittelalter ist noch kein ganzes Jahrtausend her, Abertausend Jahre kannst du also nicht sagen. Abgesehen davon, dass hier keine Juden verfolgt werden wie NIKEiD schon sagte.