Beiträge von JustMe.77

    Wenn du Fehler in einer bestimmten Sprache findest, kannst du diese im Bereich "Translation Mistakes" in unserem Forum melden. http://forum.ulclan.com/forum/134-translation-mistakes/
    Wir haben ein Tool entwickelt, was uns ermöglicht die Texte im Script zu ändern ohne den Server zu restarten - das für jede Sprache.


    Beispiel:





    Es gibt's noch kein genaues Datum, aber wir hatten jetzt geschätzt schon über 20 "Open Betas" in denen für einige Stunden der Server eröffnet wurde und darauf gespielt wurde damit man Bugs etc meldet und jetzt ist der Server relativ weit entwickelt. Sobald ich ein Datum habe, wird es hier angekündigt.

    Ich habe keine weiteren Ideen was ich noch hinzufügen könnte, falls du welche hast, lass es mich wissen :)


    Auf dem Gangwar Server wurde das System mit einer etwas veränderten Form hinzugefügt und schien auch gut zu klappen, doch seit etwa 2 Wochen haben sie ihr Gamemode komplett neugeschrieben und bereits online gebracht, nur weiß ich nicht ob es immernoch in Verwendung ist, da ich vorzeitig aus dem Team ausgetreten bin weil ich mich aktuell um 2 eigene Projekte kümmern muss und wenig Zeit habe um sie zu unterstützen.


    Aufjedenfall wird das System in meinen Projekten verwendet :)

    @N1co Nein, so wird das nicht funktionieren, hat sich aber sowieso erledigt, so funktionierts:



    forward UpdatePaintBallInfo();
    public UpdatePaintBallInfo()
    {
    if(paintballspieler < 1) //weniger als 1 Spieler
    {
    KillTimer(PaintBallEnde);
    timerstarted = false;
    RundeGestartet = false;
    //minutes = seconds = 0;
    roundTime = (15*60); // a.k.a 900sec / 15mins
    }
    else if(paintballspieler > 0) //mehr als 1 Spieler
    {
    //PaintBallEnde = SetTimer("PaintballRundeVorbei", 15 * 60 * 1000, false);
    if(timerstarted == false)
    {
    PaintBallEnde = SetTimer("PaintballRundeVorbei", 1* 60 * 1000, false);
    }
    timerstarted = true;
    RundeGestartet = true;



    new tmp[11];



    if (timerstarted)
    {
    roundTime --;



    new
    minutes = roundTime / 60,
    seconds = roundTime % 60
    ;

    format(tmp, sizeof(tmp), "%02d:%02d", minutes, seconds);
    }

    for(new i = GetPlayerPoolSize(); i != -1; i--)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i) || inRunde[i] == false) continue;
    TextDrawSetString(PBText2,tmp);
    }
    }
    return 1;
    }

    Hast du in deiner server.cfg maxnpc auch erhöht?


    Meine Frage:


    Wie lasse ich meinen Timer runterzählen anstatt hochzählen?



    forward UpdatePaintBallInfo();
    public UpdatePaintBallInfo()
    {
    static mi,se;
    if(paintballspieler < 1) //weniger als 1 Spieler
    {
    KillTimer(PaintBallEnde);
    timerstarted = false;
    RundeGestartet = false;
    mi = se = 0;
    }
    else if(paintballspieler > 0) //mehr als 1 Spieler
    {
    //PaintBallEnde = SetTimer("PaintballRundeVorbei", 15 * 60 * 1000, false);
    if(timerstarted == false)
    {
    PaintBallEnde = SetTimer("PaintballRundeVorbei", 5* 1000, false);
    }
    timerstarted = true;
    RundeGestartet = true;
    new tmp[11];
    if(++se == 60)
    {
    se = 0;
    mi++;
    }
    format(tmp,sizeof(tmp),"%02d:%02d",mi,se);
    for(new i=GetPlayerPoolSize(); i!=-1; i--)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i) || inRunde[i] == false) continue;
    TextDrawSetString(PBText2,tmp);
    }
    }
    return 1;
    }

    Das mache ich mit dem oben geposteten Code xD


    So besser?



    forward UpdatePaintBallInfo();
    public UpdatePaintBallInfo()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(paintballspieler < 1) //weniger als 1 Spieler
    {
    KillTimer(PaintBallEnde);
    timerstarted = false;
    RundeGestartet = false;
    }



    else if(paintballspieler > 0) //mehr als 1 Spieler
    {
    RundeGestartet = true;
    }
    }



    return 1;
    }




    forward RoundTimer();
    public RoundTimer()
    {



    if(RundeGestartet == true)
    {
    if(timerstarted == false)
    {
    PaintBallEnde = SetTimer("PaintballRundeVorbei", 5* 1000, false);
    }
    timerstarted = true;



    }



    }

    Habe im SAMP Forum ja geschrieben das ich das vermeiden will, musste das jetzt aber machen weil ich keine andere Lösung habe, funktioniert übrigens.


    Edit:


    Noch ne Frage, wie zeige ich am besten die Zeit einer Runde an? Eine Runde geht beispielsweise 10 Minuten und die Textdraws sollen die Zeit anzeigen und immer runterzählen.
    Habe bisher nur ein Timer der nach 10 Minuten die Runde beendet.



    forward UpdatePaintBallInfo();
    public UpdatePaintBallInfo()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(paintballspieler < 1) //weniger als 1 Spieler
    {
    KillTimer(PaintBallEnde);
    timerstarted = false;
    RundeGestartet = false;
    }



    else if(paintballspieler > 0) //mehr als 1 Spieler
    {
    //PaintBallEnde = SetTimer("PaintballRundeVorbei", 15 * 60 * 1000, false);
    if(timerstarted == false)
    {
    PaintBallEnde = SetTimer("PaintballRundeVorbei", 5* 1000, false);
    }
    timerstarted = true;
    RundeGestartet = true;
    }
    }



    return 1;
    }


    Mein Zeit Textdraw



    PBText2 = TextDrawCreate(299.000000, 428.000000, "00:00");
    TextDrawBackgroundColor(PBText2, 255);
    TextDrawFont(PBText2, 2);
    TextDrawLetterSize(PBText2, 0.380000, 2.100000);
    TextDrawColor(PBText2, -1);
    TextDrawSetOutline(PBText2, 1);
    TextDrawSetProportional(PBText2, 1);
    TextDrawSetSelectable(PBText2, 0);

    Wieso wird mein OnPlayerDeath Callback nicht aufgerufen? (Filterscript)



    public OnPlayerDeath(playerid, killerid, reason)
    {



    print("OPD aufgerufen");
    new str[64];
    if(inRunde[playerid] == true)
    {
    tode[playerid]++;
    format(str, sizeof(str),"Tode: ~g~%d",tode[playerid]);
    PlayerTextDrawSetString(playerid, KDText[playerid][1], str);
    }



    return 1;
    }

    Yo, wie ändere ich die Zahl in die Anzahl der Spieler die sich in der Arena befinden?


    Habe hier ein Objekt mit folgendem Text:



    tmpobjid = CreateDynamicObject(19483, 1305.009155, -1367.589599, 13.762177, -0.000007, -0.000000, -89.999977, -1, -1, -1, 50.00, 50.00);
    SetDynamicObjectMaterialText(tmpobjid, 0, "< Spieler >\n {FF0000}13", 90, "Ariel", 20, 1, 0xFF000000, 0x00000000, 1);


    So sieht meine Spieler Variable aus:


    new paintballspieler = 0;


    Wie ändere ich das jetzt um, dass wenn 5 Spieler drin sind, die Zahl auf 5 gesetzt wird?

    Habe ich voll verpeilt ^^


    Habe noch ein kleines Problem, wenn ich lange Befehle eingebe (die gar nicht existieren) werden mir immer Errors in der Server Log ausgegeben.
    Kann ich das irgendwie verhindern?


    [debug] Run time error 4: "Array index out of bounds"
    [debug] Accessing element at index 32 past array upper bound 31
    [debug] AMX backtrace:
    [debug] #0 0003153c in public OnPlayerCommandText (playerid=0, cmdtext[]=@00c91104 "/4578tz5r4785r474t7t4747334837u45893z45378z53785z347853") at C:\Users\David\Desktop\LnD\pawno\include\zcmd.inc:94

    Eigentlich nicht, hier ein Teil von meinem LoadAccount Public


    Hi, ich speichere die Wetter & die Time ID vom Spieler und setze die bei jedem Login zum alten Wert zurück, aber es scheint nicht zu funktionieren.
    In der Datenbank werden die Werte problemslos eingetragen & gespeichert, aber die Werte werden Ingame nicht gesetzt bzw. sind nach dem Login wieder standard.



    Hier mein Wetter Befehl:



    CMD:weather(playerid, params[]) {
    new w[128], wID = strval(params);



    if(isnull(params))
    return SendClientMessage(playerid, COLOR_RED, "Use: /weather <id>.");



    if(!IsNumeric(params))
    return SendClientMessage(playerid, COLOR_RED, "You need to put a number for weather id.");



    if(wID < 0 || wID > 500)
    return SendClientMessage(playerid, COLOR_RED, "Invalid Weather.");



    SetPlayerWeather(playerid, wID);
    pData[playerid][P_Weather] = wID;




    format(w, sizeof(w), "Weather changed to %d", wID);
    SendClientMessage(playerid, COLOR_ORANGE, w);



    format(w, sizeof(w), "UPDATE `players` SET Weather = %d WHERE Name = '%s'", wID, GetName(playerid));
    mysql_query(MySQL, w);
    mysql_store_result();
    return 1;
    }


    So lade ich das (bei OnPlayerConnect testweise hinzugefügt, hilft nicht)


    OnPlayerConnect:



    SetPlayerWeather(playerid, pData[playerid][P_Weather]);
    SetPlayerTime(playerid, pData[playerid][P_Time], 0);