[SAMMELTHREAD] Kleine Scripting Fragen

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
  • ( @Jeffry )


    Ich bin im Präsidium oder in der Garage von da kann ich hoch zum Dach,
    Wenn ich auf dem Dach bin und dort auf Garage oder Präsidium auswähle geht das nicht mehr.


    Also müsste dieser Code sein:


    Ich verstehe es nicht, denn wenn ich auf dem Dach bin und zur Garage möchte oder ins Präsidium geht das garnicht ...

  • Schonmal versucht die Range zu verkleinern?

    Habs versucht, hat aber nichts gebracht. Denke aber nicht das es an der Range war, trz ein versuch war's wert ;)


    Wie sieht denn dein Dialog dazu aus?
    Denn eigentlich passt das alles so.

    Code
    if(IsPlayerInRangeOfPoint(playerid, 3.0, 1572.7601, -1646.0165, 13.5639/*LSPD Hof*/) || IsPlayerInRangeOfPoint(playerid, 3.0, 1549.0814, -1673.4092, 44.8531/*LSPD Heliplatz*/) || IsPlayerInRangeOfPoint(playerid, 3.0, 1560.5579, -1689.9689, 25.5188/*LSPD Präsidium*/))
    {
    	if(IsACop(playerid))
    	{
    		ShowPlayerDialog(playerid, DIALOG_GARAGE, DIALOG_STYLE_LIST, "{FFFFFF}LSPD {35ABFF}Aufzug", "{35ABFF}1.{FFFFFF} Garage/Hof\n{35ABFF}2.{FFFFFF} Heliplatz\n{35ABFF}2.{FFFFFF} Präsidium","Weiter","Abbrechen");
    	}
    	else SendClientMessage(playerid, COLOR_WHITE, "Du bist {FF8484}kein{FFFFFF} Staatsbeamter!");
    }
  • Versuche es mal andersherum, das wäre sowieso besser, auch wenn weitere Plätze dazu kommen, also so:
    if(dialogid == DIALOG_GARAGE)
    {
    if(response)
    {
    if(listitem == 0)
    {
    // LSPD Hof
    if(!IsPlayerInRangeOfPoint(playerid, 6.0, 1572.7601, -1646.0165, 13.5639/* LSPD Hof */))
    {
    SetPlayerPos(playerid, 1572.7601, -1646.0165, 13.5639);
    CreateBox(playerid, "", "~w~Du ~g~bist~w~ nun am LSPD Hof.");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich {FF8484}bereits{FFFFFF} im LSPD Hof!");
    }
    if(listitem == 1)
    {
    // LSPD Heliplatz
    if(!IsPlayerInRangeOfPoint(playerid, 6.0, 1549.0814, -1673.4092, 44.8531/* LSPD Heliplatz */))
    {
    SetPlayerPos(playerid, 1549.0814, -1673.4092, 44.8531);
    CreateBox(playerid, "", "~w~Du ~g~bist~w~ nun am LSPD Heliplatz.");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich {FF8484}bereits{FFFFFF} im LSPD Heliplatz!");
    }
    if(listitem == 2)
    {
    // LSPD Präsidium
    if(!IsPlayerInRangeOfPoint(playerid, 6.0, 1560.5579, -1689.9689, 25.5188/* LSPD Interior */))
    {
    SetPlayerPos(playerid, 1560.5579, -1689.9689, 25.5188);
    CreateBox(playerid, "","~w~Du ~g~bist~w~ nun im LSPD Praesidium.");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich {FF8484}bereits{FFFFFF} im Präsidium!");
    }
    }
    else SendClientMessage(playerid, COLOR_WHITE, "{FF8484}Abgebrochen{FFFFFF}.");
    }

  • Versuche es mal andersherum, das wäre sowieso besser, auch wenn weitere Plätze dazu kommen, also so:
    if(dialogid == DIALOG_GARAGE){ if(response) { if(listitem == 0) { // LSPD Hof if(!IsPlayerInRangeOfPoint(playerid, 6.0, 1572.7601, -1646.0165, 13.5639/* LSPD Hof */)) { SetPlayerPos(playerid, 1572.7601, -1646.0165, 13.5639); CreateBox(playerid, "", "~w~Du ~g~bist~w~ nun am LSPD Hof."); } else SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich {FF8484}bereits{FFFFFF} im LSPD Hof!"); } if(listitem == 1) { // LSPD Heliplatz if(!IsPlayerInRangeOfPoint(playerid, 6.0, 1549.0814, -1673.4092, 44.8531/* LSPD Heliplatz */)) { SetPlayerPos(playerid, 1549.0814, -1673.4092, 44.8531); CreateBox(playerid, "", "~w~Du ~g~bist~w~ nun am LSPD Heliplatz."); } else SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich {FF8484}bereits{FFFFFF} im LSPD Heliplatz!"); } if(listitem == 2) { // LSPD Präsidium if(!IsPlayerInRangeOfPoint(playerid, 6.0, 1560.5579, -1689.9689, 25.5188/* LSPD Interior */)) { SetPlayerPos(playerid, 1560.5579, -1689.9689, 25.5188); CreateBox(playerid, "","~w~Du ~g~bist~w~ nun im LSPD Praesidium."); } else SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich {FF8484}bereits{FFFFFF} im Präsidium!"); } } else SendClientMessage(playerid, COLOR_WHITE, "{FF8484}Abgebrochen{FFFFFF}.");}

    hatte ich auch mal vermutet mit ! abzufragen klappt aber nicht.
    Füge mal hier 3 Screens hinzu um zu zeigen was ich genau meine...


  • Ich habe es jetzt mal testweise bei mir ausprobiert.
    Das klappt ohne Probleme, beide Varianten.


    Du kannst es ja mal auf einem leeren Server mit nur diesem Code hier versuchen, damit habe ich es auch getestet:
    #define DIALOG_GARAGE 9942
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp(cmdtext, "/tps", true) == 0)
    {
    ShowPlayerDialog(playerid, DIALOG_GARAGE, DIALOG_STYLE_LIST, "{FFFFFF}LSPD {35ABFF}Aufzug", "{35ABFF}1.{FFFFFF} Garage/Hof\n{35ABFF}2.{FFFFFF} Heliplatz\n{35ABFF}2.{FFFFFF} Präsidium","Weiter","Abbrechen");
    return 1;
    }
    return 0;
    }
    #define COLOR_WHITE 0xFFFFFFFF
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_GARAGE)
    {
    if(response)
    {
    if(listitem == 0)
    {// LSPD Hof
    if(IsPlayerInRangeOfPoint(playerid, 6.0, 1560.5579, -1689.9689, 25.5188/* LSPD Interior */) || IsPlayerInRangeOfPoint(playerid, 6.0, 1549.0814, -1673.4092, 44.8531/* LSPD Heliplatz */))
    {
    SetPlayerPos(playerid, 1572.7601, -1646.0165, 13.5639);
    //CreateBox(playerid, "", "~w~Du ~g~bist~w~ nun am LSPD Hof.");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich {FF8484}bereits{FFFFFF} im LSPD Hof!");
    }
    if(listitem == 1)
    {// LSPD Heliplatz
    if(IsPlayerInRangeOfPoint(playerid, 6.0, 1572.7601, -1646.0165, 13.5639/* LSPD Hof */) || IsPlayerInRangeOfPoint(playerid, 6.0, 1560.5579, -1689.9689, 25.5188/* LSPD Interior */))
    {
    SetPlayerPos(playerid, 1549.0814, -1673.4092, 44.8531);
    //CreateBox(playerid, "", "~w~Du ~g~bist~w~ nun am LSPD Heliplatz.");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich {FF8484}bereits{FFFFFF} im LSPD Heliplatz!");
    }
    if(listitem == 2)
    {// LSPD Präsidium
    if(IsPlayerInRangeOfPoint(playerid, 6.0, 1572.7601, -1646.0165, 13.5639/* LSPD Hof */) || IsPlayerInRangeOfPoint(playerid, 6.0, 1549.0814, -1673.4092, 44.8531/* LSPD Heliplatz */))
    {
    SetPlayerPos(playerid, 1560.5579, -1689.9689, 25.5188);
    //CreateBox(playerid, "","~w~Du ~g~bist~w~ nun im LSPD Praesidium.");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich {FF8484}bereits{FFFFFF} im Präsidium!");
    }
    }
    else SendClientMessage(playerid, COLOR_WHITE, "{FF8484}Abgebrochen{FFFFFF}.");
    return 1;
    }
    return 0;
    }


    Eventuell musst du den Spieler freezen, wenn der leere Server deine Map am Polizeirevier nicht hat, so habe ich es gemacht.

  • Wo muss ich das denn reinpacken, wenn ich mir das jetzt machen will?Mit Timer, ohne Timer, eigenes Public / reicht eine Variable?





    Erstmal ganz oben "new Tut[MAX_PLAYERS]".
    Dann bei der Abfrage, ob der User neu ist "Tut[playerid] = 1;".
    Ich gehe davon aus, dass der Spieler gespawnt wird. Dann frag dort einfach ab "if(Tut[playerid] == 1)" und dann halt dein Code.
    In den Code packst du noch nen "SetTimerEx" zu ner Public. In die Public kommt dann wieder nen SetTimerEx zu ner 2. Public. In die 2. Public dann nen SetTimerEx zur dritten Public usw. Du kannst auch das "Tut[MAX_PLAYERS]" dir direkt sparen, wenn du einfach direkt auf die Public zugreifst. Brauchst halt ne Abfrage, ob der User neu ist.

  • Erstmal ganz oben "new Tut[MAX_PLAYERS]".
    Dann bei der Abfrage, ob der User neu ist "Tut[playerid] = 1;".
    Ich gehe davon aus, dass der Spieler gespawnt wird. Dann frag dort einfach ab "if(Tut[playerid] == 1)" und dann halt dein Code.
    In den Code packst du noch nen "SetTimerEx" zu ner Public. In die Public kommt dann wieder nen SetTimerEx zu ner 2. Public. In die 2. Public dann nen SetTimerEx zur dritten Public usw. Du kannst auch das "Tut[MAX_PLAYERS]" dir direkt sparen, wenn du einfach direkt auf die Public zugreifst. Brauchst halt ne Abfrage, ob der User neu ist.

    Jetzt hab ich es verstanden, ist es aber nicht Codefressend / Resourcendfressend mit den vielen Publics dann?

  • Beim Starten:
    SetTimerEx("Tutorial", 1000, false, "dd", playerid, 0);


    Und das Public:
    forward Tutorial(playerid, step);
    public Tutorial(playerid, step)
    {
    switch(step)
    {
    case 0:
    {
    //Erster Step ... mache etwas hier
    SetTimerEx("Tutorial", 10000, false, "dd", playerid, step + 1);
    }
    case 1:
    {
    //Zweiter Step ... mache etwas hier
    SetTimerEx("Tutorial", 5000, false, "dd", playerid, step + 1);
    }
    case 2:
    {
    //Dritter Step ... mache etwas hier
    SetTimerEx("Tutorial", 12000, false, "dd", playerid, step + 1);
    }
    //...
    }
    return 1;
    }


    Die Zeiten jeweils beim SetTimerEx anpassen, wie lange der jeweilige Step angezeigt werden soll.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen