Beiträge von Kaliber

    versuch es so

    Du hast hier einen string quasi, der 2000 Indizes belegt.
    Das entspricht 2000 * 4 Byte = 8.000 Byte = 8kb die du da allozierst.
    Das geht aber auch mit 600. Somit würdest du (600 * 4 Byte = 2.400 Byte = 2.4kb) 5.6kb sparen.
    Das kann schon performanz technisch was aus machen.


    Dann kann man hier noch strcat nutzen, welches den String befüllt und zwar sehr schnell und effizient und am Ende nur ein format macht.


    So sieht das dann ordentlich aus:


    C
    new DialogString[600];
    strcat(DialogString,"{FFFFFF}Linie 1: LS Stadtlinie 1 {33AA33}(%d){FFFFFF}, ab Skill 0\n");
    strcat(DialogString,"{FFFFFF}Linie 2: LS Stadtlinie 2 {33AA33}(%d){FFFFFF}, ab Skill 2\n");
    strcat(DialogString,"{FFFFFF}Linie 3: LS Stadtlinie 3 (East) {33AA33}(%d){FFFFFF}, ab Skill 3\n");
    strcat(DialogString,"{FFFFFF}Linie 4: LS-SF {33AA33}(%d/5){FFFFFF}, ab Skill 4\n");
    strcat(DialogString,"{FFFFFF}Linie 5: SF-LS {33AA33}(%d/5){FFFFFF}, ab Skill 4\n");
    strcat(DialogString,"{FFFFFF}Linie 6: SF Stadtlinie 1 {33AA33}(%d/5){FFFFFF}, ab Skill 6\n");
    strcat(DialogString,"{FFFFFF}Linie 7: SF Stadtlinie 2 {33AA33}(%d/5){FFFFFF}, ab Skill 7\n");
    strcat(DialogString,"{FFFFFF}Linie 8: SF-LV {33AA33}(%d/5){FFFFFF}, ab Skill 8\n");
    format(DialogString,sizeof(DialogString),DialogString, linie[0], linie[1], linie[2], linie[3], linie[4], linie[5], linie[6], linie[7]);

    Ja klar, ich mein wer kennt es nicht, man downloadet sich ein Skript und will direkt einen Server starten.


    Ich frag mich wieso sich die Community hier wundert, wieso es nur noch 0815 Projekte gibt, wenn wir gerade hier mal ein Paradebeispiel von guter Konzeption und Planung haben, danke dafür :)


    Zu deinen Fehlern:


    • Du hast eine falsche Version vom MySQL Plugin
    • Dir fehlt das sscanf Plugin
    • Dir fehlt das streamer Plugin
    • Dir fehlt das Whirlpool Plugin
    • Dir fehlt das veraltete GeoIp Plugin

    Ohne Mist, würde man sich nur eine Sekunde minimal die fehlerhaften Funktions Namen anschauen, weswegen das nicht geht und diese 1:1 in google packen würde, würde man NIEMALS auf die oben genannte Liste kommen haha xD


    Viel Erfolg beim Projekt, genau sowas brauchen wir, ihr trefft damit genau das Bedürfnis der ganzen User hier :good:

    Auch wenn die Frage schon ne Ewigkeit alt ist, würde mich die antwort dennoch interessieren

    Okay, dann hier mal ein paar Infos:


    • Wenn man ein Jetpack hat und ENTER drückt ist dieses nicht für jeden zu haben, geschweige denn zu sehen.
      • Das ist client seitig und da wird auch kein Pickup erstellt für den Server oder sonst was. (Kann man auch nicht triggern mit OnPlayerPickUpPickup)
    • Die naive Herangehensweise wäre wahrscheinlich, man schaut unter OnPlayerKeyStateChange, ob man ENTER drückt und ob GetPlayerSpecialAction dem Jetpack entspricht und setzt ihn dann SPECIAL_ACTION_NONE. Hier liegen 2 Fehler:
      • Man kann nicht mehr mit GetPlayerSpecialAction prüfen, ob er ein Jetpack hat, da das bereits abgelegt wurde und somit schon 0 ist.
      • Hier sehen wir direkt den 2. Fehler, man kann ihm nicht das Jetpack mit SetPlayerSpecialAction wieder wegnehmen, da er ja schon in diesem State ist. (Deshalb bringt es auch für Part 1 nichts mit Variablen o.ä. zu arbeiten)
      • Da bringt auch SetPlayerPos o.ä. nichts xD (Immer mal wieder gesehen)
    • Also was tun?

    Die einzige Möglichkeit ihm das Jetpack zu entfernen ist es, wenn er dies auch auf dem Rücken hat, denn nur dann befindet er sich in der SpecialAction.
    Also musst du wenn du ihm ein Jetpack setzt, auch eine Variable setzen, dass du ihm das Jetpack gegeben hast.
    Dann prüfst du unter OnPlayerKeyState Change, ob er ENTER gedrückt hat und diese Variable gesetzt wurde.
    Wenn ja, dann setzt du eine weitere oder zählst diese Variable hoch (hier packst du das in den Timer, der über alle Spieler läuft) und prüfst wenn die Variable diesen State hat und er wieder ein Jetpack an hat, dann setzt du SPECIAL_ACTION_NONE und kannst die Variable resetten.


    Zudem kannst du die Variable nach glaube 1ner Minute oder so auch resetten, da dann das Jetpack client seitig entfernt wurde, also diese halten nicht ewig ^^


    Hoffe ich konnte ein wenig Klarheit verschaffen :)

    Meteoritenhagel (Kannst du zu dem Wetter hinzufügen / Wäre sowas überhaupt möglich? ^^)

    Das kommt darauf an, wie du dir das vorstellst.


    Aber gerade in 0.3.8 mit selbst designten Objekten sollte das sehr gut möglich sein ^^


    Was mir fehlt sind immer Wissenschaftler oder sowas, die forschen, Dinge entdecken können und eventuell eine Rakete und ein Mond, das wäre mal nice ^^

    Das ist zwar in der Java Welt ganz nett, aber wirklich zu empfehlen ist das in Pawn nicht.


    Man kann sowas basteln, aber Performanz technisch betrachtet ist das nicht so dolle, da ja immer der String erst aufgelöst werden müsste und je nachdem wie lang der ist...dauert das ein bisschen :rolleyes:


    Allerdings funktionieren die PVar Variablen so ;)


    [wiki]SetPVarInt[/wiki]

    if(IsAMemberFromFraktion(GetPlayerVehicleID(playerid)) != SpielerInfo[playerid][pMember] && IsAMemberFromFraktion(GetPlayerVehicleID(playerid)) != SpielerInfo[playerid][pLeader])return SendClientMessage(playerid, -1, "Du hast die Autoschlüssel nicht!");

    Also hier musst du || verwenden, sonst heißt es ja, dass er Member und Leader sein muss ^^


    Kannst ja mal wenn das nicht gehen sollte einen print Debug machen und schauen, was er da ausgibt :)

    Mein Problem ist jetzt aber, OnPlayerStateChange fragt es ja nur bei sich selbst ab, nicht per "pID" die ich Spectaten möchte, wie ich kann es dies nun anpassen?

    Da wo du den Spectate Befehl startest, musst du so eine Zeile machen:


    PS: Unter OnPlayerConnect solltest du sInfo[playerid][sSpectate] = -1; machen, damit da nichts passiert oder INVALID_PLAYER_ID.


    sInfo[playerid][sSpectate] = pID; //pID = Die Person die du spectaten willst


    Dann kannst du unter OnPlayerStateChange abfragen:


    C
    for(new i=GetPlayerPoolSize(); i!=-1; i--) //Loopst durch alle Spieler
    {
        if(IsPlayerConnected(i) && sInfo[i][sSpectate] == playerid)
        {
            //Hier entspricht i=der playerid, die den Spieler spectatet und playerid entspricht der pID, also der, der spectatet wird :)
        }
    }