Beiträge von Woozie

    SetPlayerCheckpoint zeigt er nur einen an. bei SetPlayerMapIcon kannst du z.B. 5 Ziele gleichzeitig anzeigen lassen und der Spieler, der den Job ausführt, kann sich die Route selber planen ;)
    Aber mach du mal. Ich drück dir die Daumen bei deinem Include. :)

    SetPlayerMapIcon(playerid, 0, Float:x, Float:y, Float:z, 0,0xFF0000FF, MAPICON_GLOBAL_CHECKPOINT);


    Per Timer X, Y, Z Koordinate des Spielers abfragen. Befindet der sich bei X, Y, Z (vom Checkpoint), dann hat er den Checkpoint berührt. Sehe da kein Problem. Außer die Größe des CP's halt ^^


    Und, nehm anstelle des SA-MP SetPlayerMapIcon einfach einen Streamer für...


    Dir ist klar dass SetPlayerCheckpoint != SetPlayerMapIcon ist... :rolleyes:


    Aber es gibt so ein MapIcon das man setzten kann, ja...könnte man so machen, halte ich jedoch für weniger sinnvoll :D


    mfg. :thumbup:

    Dann mach das doch in deiner Include, daß SetPlayerMapIcon (Marker plus Checkpoint) so abläuft, daß es für den Scripter, der deine INC nutzt, wie ein normaler Checkpoint ausschaut ^^. Machbar ist das, hab das selbst so ;)

    Dir ist aber klar, daß man z.B. mit SetMapIcon mehrere CP's anzeigen lassen kann? Oder per Streamer (Incognitos z.B.), kann man mehrere definieren, der die dann nach Distanz anzeigt? ^^


    Edit:

    Zitat

    SetJobSpawn(jobid,Float:x,Float:y,Float:z,Float:a,interior,world); //Setzt den Spawn für den Job (er wird auch direkt dahin gesetzt)

    Ich meinte mit SetJobSpawn eigentlich der Spawn nach dem Tot. Also wenn OnPlayerDeath abgefragt wird. Aber egal...


    PS.:
    Finde sowas gut, daß es Leute gibt, die anderen mit solchen INC's helfen :thumbup:


    new RandomItems[3][] =
    {
    {"Waffe 1"},
    {"Waffe 2"},
    {"Waffe 3"}
    };
    dcmd_test(playerid,params[])
    {
    return SendClientMessage(playerid, hellblau, RandomItems[random(sizeof(RandomItems))]);
    }

    Kategoresieren deswegen, damit man schnelleren und leichteren Zugriff auf den Job hat (als Scripter).
    In der Jobbox könnten Infos wie z.B. nächste(r) Zielort(e), Name des Jobs, Wieviele Items (z.B. Pakete) hat man noch usw. usw.


    SetPlayerJobCheckpoint:
    für das streamen der Checkpoints nötig. Kann ja sein, das jemand Checkpoints während des Jobs auch für andere Dinge verwendet, wie z.B. Fastfood Stände...

    probiers so mal, habs aber nicht getestet ^^



    new RandomItems[3][] =
    {
    {"Waffe 1"},
    {"Waffe 2"},
    {"Waffe 3"}
    };


    dcmd_test(playerid,params[])
    {
    new stringtest[128]; return SendClientMessage(playerid, hellblau, RandomItems[rand(sizeof(RandomItems))]);
    }

    Nenne mal Beispiele ;)


    @Rest danke für die Kommentare :)


    mfg. :thumbup:

    Das mach ich doch gern ^^:



    SetJobTyp(jobid, typid); // <-- jobid ist klar, typid siehe weiter unten
    SetPlayerJobCheckpoint(playerid, jobid, x, y, z); // <-- per Streaming Checkpoints inkl. Marker anzeigen lassen, wie im Singleplayermodi (arbeite derzeit daran)
    ToggleJobBox(playerid, jobid); // <-- Eine per Textdraw dargestellte Informationsbox anzeigen lassen oder nicht!
    SetPlayerJobSpawn(playerid, x, y, z, a, interior, world); // <-- wo soll der Spieler spawnen nach seinem Ableben?


    aus CreateJobCar(...) würde ich dann lieber CreateJobVehicle(...) machen!


    TypID:
    JOB_TYPE_CP // <-- 0815 Checkpoints abfahren
    JOB_TYPE_FD // <-- Feuerlöschen
    JOB_TYPE_PD // <-- jagen, verhaften, einbuchten, kontrollieren
    JOB_TYPE_TAXI // <-- Spielerbetreuung (Kunde!), NPC's zu ihrem Ziel fahren
    JOB_TYPE_TOW // <-- Mechanikerdienste wie Reparatur von Fahrzeugen, Lackierungen, Tuning usw.
    JOB_TYPE_CP_DELIVERY // <-- Lieferungen an bestimmte Punkte, gekennzeichnet durch Checkpoints (inkl. Objekt tragen usw. wie ein richtiger Paketdienst z.B.)
    JOB_TYPE_CP_COURIER // <-- Lieferungen an bestimmte Punkte (z.B. Paperboy, der Zeitungen an CP markierten Punkte ausliefert, allerdings wirft er die Zeitung in den CP)
    JOB_TYPE_MISSION // <-- Missionen wie im Singleplayer (Anm.: daran arbeite ich gerade)


    Das sollte erstmal reichen, will nicht mein gesamtes Pulver hier verschiessen ;)

    Gefällt mir gut. Simple, aber noch stark ausbaufähig. Du hast mich jedenfalls auf eine Idee für mein neues Script gebracht. ;)
    Nein, ich werde deine INC nicht nutzen oder Codeteile davon, keine Sorge. Die Grundidee gefällt mir aber recht gut.

    ich würde das folgendermaßen machen.


    Bei deinem CMD /dm einfach noch SetSpawnInfo(playerid, ....) und eine Variable, daß das Script weiss, da du in der DM Arena bist. Z.B. playerAreanDM[playerid] = 1;
    Bei OnPlayerDeath einfach Abfragen, ob der Spieler in der DM Arena ist (siehe Variable als Beispiel) und dort einfach ein return 1; machen.


    Ich code das mal :D

    public OnPlayerCommand(playerid, cmdtext[])
    {
    if (!strcmp(cmdtext, "/dm", true) {playerArena[playerid] = 1; SetPlayerPos(...); SetSpawnInfo(...); return 1;}
    return 0;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    if (playerArena[playerid]) return 1;


    /* dein restlicher Code für diesen Callback */
    return 1;
    }


    Wo ich nur (...) gemacht habe, musst du natürlich den Code vervollständigen ;)


    //-----------------------------------
    // oben in deinem GM definieren
    //-----------------------------------
    #define NPC_BEAMTER 1
    new npcID[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    if(IsPlayerNPC(playerid))
    {
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(!strcmp(botname, "Beamter", true))
    {
    gPlayerLogged[playerid] = 1;
    //-----------------------------------
    // Anmerkung: um die Verwaltung der NPC's zu vereinfachen würde ich deren playerid in eine Variable speichern
    // Beispiel:
    npcID[playerid] = NPC_BEAMTER;
    //-----------------------------------
    SetSpawnInfo(playerid, TEAM, 281, X, Y, Z, WEAPON1, W_AMMU1, WEAPON2, W_AMMU2, WEAPON3, W_AMMU3); // <-- bitte grossgeschriebenes anpassen
    SpawnPlayer(playerid);
    print("NPC Beamter ist gespawnt.");
    }
    return 1;
    }
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    if (IsPlayerNPC(playerid)
    {
    if (npcID[playerid] == NPC_BEAMTER) SetPlayerColor(playerid, TEAM_HIT_COLOR);
    return 1;
    }
    return 1;
    }


    Du kannst dies natürlich auch mit PlayerVars machen:

    //-----------------------------------
    // oben in deinem GM definieren
    //-----------------------------------
    #define NPC_BEAMTER 1


    public OnPlayerConnect(playerid)
    {
    SetPVarInt(playerid, "npcID", 0);
    if(IsPlayerNPC(playerid))
    {
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(!strcmp(botname, "Beamter", true))
    {
    gPlayerLogged[playerid] = 1;
    //-----------------------------------
    // Anmerkung: um die Verwaltung der NPC's zu vereinfachen würde ich deren playerid in eine Variable speichern
    // Beispiel:
    SetPVarInt(playerid, "npcID", NPC_BEAMTER);
    //-----------------------------------
    SetSpawnInfo(playerid, TEAM, 281, X, Y, Z, WEAPON1, W_AMMU1, WEAPON2, W_AMMU2, WEAPON3, W_AMMU3); // <-- bitte grossgeschriebenes anpassen
    SpawnPlayer(playerid);
    print("NPC Beamter ist gespawnt.");
    }
    return 1;
    }
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    if (IsPlayerNPC(playerid)
    {
    if (GetPVarInt(playerid, "npcID") == NPC_BEAMTER) SetPlayerColor(playerid, TEAM_HIT_COLOR);
    return 1;
    }
    return 1;
    }

    Was steht denn in der Log oder im Serverfenster beim Starten deinens Gamemodes? Verbindet sich der NPC überhaupt mit dem Server?


    In welchem Codeabschnitt bei OnGameModeInit() hast du denn ConnectNPC stehen? Wir bräuchten da schon mehr. Poste doch mal deinen Callback bitte.... ansonsten prüft mit print("OK"); einfach, bis zu welchem Codeabschnitt er kommt. So mach ich das auch ;)


    Hier, ich habe alles einmal geloggt, und die Koordinaten von allen ausgeben lassen:

    Code
    Heal Pickup: ID: 1 | HPposx: -1600.310058 | HPposy: 673.547973 | HPposz: -1600.310058
    Armor Pickup: ID: 1 | ARposx: -1598.520019 | ARposy: 673.344970 | ARposz: -1598.520019
    Duty Pickup: ID: 1 | Dposx: 0.000000 | Dposy: 0.000000 | Dposz: -1596.619995
    Heal Pickup: ID: 2 | HPposx: -1334.939941 | HPposy: 495.709014 | HPposz: -1334.939941
    Armor Pickup: ID: 2 | ARposx: -1342.979980 | ARposy: 500.394989 | ARposz: -1342.979980
    Duty Pickup: ID: 2 | Dposx: -1346.819946 | Dposy: 500.402008 | Dposz: -1346.819946
    Heal Pickup: ID: 3 | HPposx: 0.000000 | HPposy: 0.000000 | HPposz: 0.000000
    Armor Pickup: ID: 3 | ARposx: 0.000000 | ARposy: 0.000000 | ARposz: 0.000000
    Duty Pickup: ID: 3 | Dposx: 0.000000 | Dposy: 0.000000 | Dposz: 0.000000


    Also einmal vom Heal, Armor und Duty Pickup. (Heal Pickup=HPpos Koordinaten, Armor Pickup=ARpos Koordinaten, Duty Pickup=Dpos Koordinaten)
    Dafor die jeweilige ID
    Es wundert mich irgendwie... warum geht es nicht ?(

    Wenn deine Ausgabe so stimmt, dann sind deine X und Z Koordinaten die gleichen. Prüf das mal bitte ;)