Beiträge von Le FlasH

    Zusammenfassung:

    • Ein schreckliches Design
    • Eine Third-Level-Domain
    • Nichtmal einen eigenen Header
    • Ein angeblich mehrsprachiges Forum bei dem alles auf Deutsch ist
    • Ein unvollständiges Impressum
    • Ein unklares Konzept
    • Im Endeffekt eine Nachmache von Breadfish.

    Wenn du es schon Werbeforum (auf Deutsch!??) nennst, dann mach es auch zu einem Werbeforum, und nicht zu einem allgemeinen SA:MP Forum. Was haben Tutorials oder eine "Scripting Base" (gaarnicht nachgemacht :rolleyes: ) mit Werbung zu tun?


    Normalerweise bin ich nicht jemand, der anderen die Projekte ausreden will oder von Anfang an ohne Potenzial sieht, aber in diesem Fall muss ich mich Lifestyler anschließen und sagen: Lass es, du verschwendest nur deine Zeit.
    Tut mir leid, aber wenn man einfach nur ein Forum aufbauen will, ohne Konzept, ohne Plan, ohne Engagement, dann hat es wirklich keinen Sinn.

    Ich finde das einen absoluten Schwachsinn.
    Was hat ein Fernsehsender mit einem Cloud-Speicherservice zu tun?
    Oder eine Benutzeroberfläche mit einem Supermarkt?


    Man sollte so etwas nicht länger dulden, das ergibt überhaupt keinen Sinn.
    Bald gibt es gar keine Namen mehr, die man verwenden darf. Was dann?
    Metro heißt dann Design8237 und Skydrive heißt dann C923823?
    Ist ja völliger Schrott.

    Ich habe Kirils Maps schon live gesehen und finde sie wirklich gut.
    Er mappt sehr genau und mit Liebe zum Detail, so wie es sein sollte :)
    Wenn jemand eine Map braucht kann ich ihn sehr empfehlen.

    Der Ablauf ist ganz einfach.
    Du erstellst einen Dialog und bei OnDialogResponse erstellst du den nächsten.
    Das hat den Effekt, dass der User direkt nach dem Klicken eines Buttons im Dialog1 den Dialog2 angezeigt bekommt.

    Dann kann ich dir leider auch nicht mehr wirklich weiterhelfen.


    Die Datei ist aber jetzt erstellt?
    Evtl. unter Linux die Berechtigungen setzen bzw. unter Windows als Administrator ausführen.

    Code von Equ: per PN erhalten: new Biz1[60];
    if(!dini_Exists(Biz1))
    {
    format(Biz1,sizeof(Biz1),"stadthalle.ini");
    dini_Create(Biz1);
    }Du prüfst, ob die Datei mit dem String Biz1 existiert. In Biz1 steht aber zu dem Zeitpunkt noch gar nichts drin.
    Außerdem machst du dir den Code unnötig kompliziert.


    if(!dini_Exists("stadthalle.ini")) dini_Create("stadthalle.ini");

    nun, ist das Problem wenn ich dann InGame schaue nach den 3DTextLabel wird dieser nicht angezeigt ?


    Poste doch mal den Inhalt der stadthalle.ini aus dem Ordner scriptfiles.
    Möglicherweise wurde nicht alles korrekt gespeichert o.Ä.

    Kein Problem ;)


    Das mit dem Array verstehe ich nicht, was willst du machen?
    Der Error liegt daran, dass der String text zu klein ist, das war wohl mein Fehler. Versuch es mal mit 256 statt 128 Zeichen beim BizLaden. :)

    Der Error sagt, dass $db_erg == false ist.
    Das bedeutet, dass die SQL-Query keinen Wert zurückgegeben hat.
    Also entweder es liegt an den fehlenden Apostrophen beim String "code" oder in deiner Tabelle existiert kein Eintrag mit diesem Code.

    Nein keine Sorge, habe nur geschlafen :D
    Und ich habe gerade gesehen, dass ich die Übersicht nicht verlinkt habe: [ SCRIPTING ] Dateiensystem dini - Dateien erstellen, löschen, speichern, laden


    Also schau, du hast diese Codezeile:
    dini_IntSet("dateiname.ini", "farbe", BLAU);Gehen wir's durch: dini_IntSet ist die Funktion, die aufgerufen wird. "dateiname.ini" ist der Name der Datei, in die gespeichert werden soll. "farbe" ist der Name der Variable, die gespeichert wird. BLAU ist die definierte Farbe, die du gerne speichern würdest. In der Datei dateiname.ini würde also stehen_

    Code
    farbe=0000CCFF

    Das 0000CCFF (oder so ähnlich) ist die Definition der Konstante BLAU, die du irgendwo im Script hast. Darüber brauchst du dir aber eigentlich keine Gedanken machen, denk dir einfach es wäre blau ^^


    Normalerweise mache ich sowas nicht, aber da du anscheinend Interesse daran hast, etwas zu lernen, habe ich dir einen Beispielcode für die Stadthalle geschrieben:
    http://pastebin.de/35578
    Ich hoffe du verstehst den Code und lernst etwas daraus. Bei Fragen einfach melden.

    Okay. Also mal zu den Grundlagen:
    Einen ganzen 3D-Text auf einmal kann man nicht direkt speichern.
    Stattdessen musst du die Daten speichern, die du für die Erstellung eines neuen 3D-Textes brauchst.
    Create3DTextLabel(StadthallenText,BLAU,1481.1240,-1808.8945,18.7929,40.0,0,0);Hier musst du also erstmal den Text, die Farbe, die 3 Koordinaten, die DrawDistance, die VirtualWorld und den letzten Sichtbarkeits-Parameter speichern.


    Das bedeutet du hast 8 Variablen (davon 1 String, 3 Float und 4 Integer), die gespeichert werden müssen.
    Für die Speicherung würde ich dir erstmal dini empfehlen.
    Das dini-Include funktioniert ähnlich wie die PVars, die du schon kennst. Man kann also Werte setzen (set) und auslesen (get), zum Beispiel:
    new gespeichertefarbe;
    dini_IntSet("dateiname.ini", "farbe", BLAU); // Die Farbe für den 3DText wird gespeichert
    gespeichertefarbe = dini_Int("dateiname.ini", "farbe"); // Die Farbe wird wieder ausgelesenDas wäre schonmal eine der 8 Variablen, es ist also eigentlich ganz einfach.
    Eine Übersicht über alle vorhandenen dini-Funktionen findest du hier:


    Ich hoffe du hast alles verstanden. Wenn nicht, einfach nochmal posten ;)


    Grüße, FlasH

    Wenn du die Informationen auch nach einem Server-Restart noch zur Verfügung haben willst, musst du die Daten irgendwie speichern. WIe du das machst, kannst du dir aussuchen. Speichern kannst du z.B. in eine json-Datei, in eine ini-Datei, in eine MySQL-Datenbank, in eine SQLite-Datenbank,... Als Anfänger würde ich dir ini raten, z.B. mit dem dini-Include von DracoBlue.

    Der Fehler ist, dass du den Spieler spawnen lässt, ohne dass er die Spawnposition weiß.
    Verwende vor dem SpawnPlayer() die Funktion SetSpawnInfo(), dann sollte es funktionieren ;)


    Grüße, FlasH

    Wenn jemand konstruktive Tipps fürs Scripten haben will, bin ich gerne bereit zu helfen :)
    Ich werde auf ein paar Kleinigkeiten eingehen und meine Meinung/Erfahrungen zu den jeweiligen Details äußern.



    Verbesserung 1:
    new i = 0;
    for(;i < MAX_VEHICLES; i++)
    { // ...Es ist grundsätzlich sinnvoller, die i-Variable direkt in der for-Schleife zu erstellen, weil sie dann nach der for-Schleife sofort wieder "gelöscht" wird, also der Speicher wird freigegeben. Abgesehen davon muss man in Pawn Variablen nicht mit 0 initialisieren, weil alle Variablen bei der Erstellung automatisch auf 0 gesetzt werden.



    Verbesserung 2:
    if(SpielerInfo[i][pPayDayT] != 3600)
    {
    SpielerInfo[i][pPayDayT] ++;
    }
    else { PayDay(i); }Normalerweise ist es nicht wirklich notwendig, jede Sekunde die Payday-Zeit eine Sekunde herabzusetzen. Das würde auch einmal pro Minute reichen, schließlich kommt es ja nicht auf eine Sekunde mehr oder weniger an. Jede Sekunde alle Spieler durchzugehen und den Payday upzudaten ist jedenfalls relativ unnötig.



    Verbesserung 3:
    if(PlayerToPoint(1.0,playerid, 362.0060,173.4622,1008.3828) //...Die PlayerToPoint-Funktion ist schon seit laaanger Zeit veraltet und sollte durch IsPlayerInRangeOfPoint ersetzt werden.



    Verbesserung 4:
    for(;i < MAX_PLAYERS; i++)MAX_PLAYERS ist im Normalfall 500. Das bedeutet: ganz egal wie viele Spieler auf deinem Server sind, diese Schleife läuft 500 Mal durch. Ganz logisch ist, dass das unnötig ist und zu unnötiger CPU-Last führt. Eine Abhilfe ist, dass du die Konstante MAX_PLAYERS selbst definierst (wenn du nicht mehr als 50 Spieler erwartest, setzt du es z.B. auf 50). Wie das geht, findest du HIER ganz einfach erklärt.
    Wenn du das machst, laufen diese MAX_PLAYERS-Schleifen nur mehr 50 Mal statt 500 Mal durch. Das ist schonmal eine Verbesserung, aber wenn du 10 Spieler am Server hast, ist es immer noch 40 Mal zu viel. Die Lösung ist daher: foreach() benutzen. Das ist eine Schleife, die wirklich nur für die Spieler durchläuft, die gerade online sind. Die Include und eine ganz einfache Erklärung dafür findest du HIER



    Verbesserung 5:
    #define DIALOG_REGISTER 1
    #define DIALOG_LOGIN 2
    #define DIALOG_LOGINDRAWS 3
    #define DIALOG_SH 4
    #define DIALOG_SH0 5
    #define DIALOG_SHNAVI 6
    #define DIALOG_JOB 7Kein Performance-Problem, aber es verstärkt die Komplexität des Scriptens. Wenn du einen Dialog nachträglich zwischen zwei bereits erstellte Dialog-IDs setzen willst, musst du alle nachfolgenden IDs verändern etc. Einfacher ist es, wenn man statt lauter #defines die enum-Funktion verwendet. Dann brauchst du dir auch um die IDs keine Sorgen mehr machen. Der selbe Code wie deiner mit Hilfe eines enums: enum {
    DIALOG_REGISTER,
    DIALOG_LOGIN,
    DIALOG_LOGINDRAWS,
    DIALOG_SH
    DIALOG_SH0
    DIALOG_SHNAVI
    DIALOG_JOB
    }Wenn du jetzt irgendeine ID verändern willst, kannst du den DIALOG_XYZ einfach dazwischen setzen, das enum regelt alles weitere.



    Das wars von meiner Seite, genauer habe ich mich nicht mit dem Code beschäftigt.
    Ich hoffe ich konnte dir ein paar potenzielle Verbesserungen zeigen und dir ein bisschen weiterhelfen :)
    Edit: Rechtschreib- und Code-Fehler


    Liebe Grüße, FlasH