[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
  • 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.

  • Es kommen immer diese Warnings:
    C:\Users\Curious\Desktop\Mapping SAMP\SAMP Server\gamemodes\AP.pwn(1423) : warning 213: tag mismatch
    C:\Users\Curious\Desktop\Mapping SAMP\SAMP Server\gamemodes\AP.pwn(1424) : warning 213: tag mismatch
    C:\Users\Curious\Desktop\Mapping SAMP\SAMP Server\gamemodes\AP.pwn(1432) : warning 213: tag mismatch
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    3 Warnings.


    bei diesem Code:
    new VLabelAdmins[50];
    if(GetPVarInt(playerid, "AdminVehLabelOn") == 0)
    {
    new string[200], aname[MAX_PLAYER_NAME];
    veh = GetPlayerVehicleID(playerid);
    GetPlayerName(playerid, aname, sizeof(aname));


    format(string, sizeof(string), "Team-Fahrzeug von %s", aname);
    VLabelAdmins[1] = Create3DTextLabel(string, COLOR_TOMATO, 0.0, 0.0, 0.0, 7.0, 0, 0);
    Attach3DTextLabelToVehicle(VLabelAdmins[1], veh, 0.0, 0.0, 1.2);


    SetPVarInt(playerid, "AdminVehLabelOn", 1);


    SendClientMessage(playerid, COLOR_GREY, "[OOC] Das Label wurde am Fahrzeug erstellt!");
    }
    else if(GetPVarInt(playerid, "AdminVehLabelOn") == 1)
    {
    Delete3DTextLabel(VLabelAdmins[1]);
    SetPVarInt(playerid, "AdminVehLabelOn", 0);


    SendClientMessage(playerid, COLOR_GREY, "[OOC] Das Label wurde vom Fahrzeug entfernt!");
    }


    Wie bekomm ich die Warnings weg?

  • Hi, versuche zufällig auf der Map Waffen in Form von Pickups spawnen zu lassen, habe aber keine Idee wie ich das korrekt anstellen soll.
    Kann mir jemand helfen?


    Das ist der Befehl womit die Waffen gespawnt werden sollen:



    CMD:estart(playerid,params[])
    {



    new emessage[124];

    EventStarted = true;
    format(emessage, sizeof(emessage),"{%06x}%s {FFFFFF}has started an Event. Use /ejoin to join the Event!", GetPlayerColor(playerid) >>> 8,SpielerName(playerid));
    SendClientMessageToAll(-1, emessage);



    //DropWeapon();
    return 1;



    }


    So sieht mein Stock aus (aktuell tauchen nur Errors aus weil ich alles falsch mache)




    stock DropWeapon()
    {
    new weapons[]
    {
    5, 6, 7, 8, 9, 10, 12, 13, 14, 15
    };



    new r = random(sizeof(RandomWeapons));



    CreateDynamicPickup(random(sizeof(weapons)), 19, RandomWeapons[r][0], RandomWeapons[r][1], RandomWeapons[r][2]);



    return 1;
    }



    Mit freundlichen Grüßen
    JustMe.77 8)