ChatBubble für NPC's

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
  • Hey Leute,


    ich habe die Idee gehabt, dass sobald ein Spieler in der Nähe eines NPC's ist, dieser dann
    eine festgelegte Nachricht via. Chatbubble ausgibt.
    Diese Nachricht soll eine Variable (den Namen des vorbeilaufenden Spielers) beinhalten.


    Da die NPC'S alle unterschiedliche Nachrichten ausgeben sollen, habe ich schon ein paar "Vorbereitungen" getroffen,
    habe ich jetzt allerdings ein paar Schwierigkeiten bei der Umsetzung.

    Mein Script bisher:




    Grundlegende Dinge (Definitionen...)




    Sobald die NPC's connecten:


    Code
    new npc = GetFreeNPCID();
    if(!strcmp(PName[playerid],"NPC1",true))
    {
         NPCID[npc] = playerid;
         s_SetPlayerSkin(playerid,11);
    }

    Jeder NPC bekommt eine ID (seine playerid) zugewiesen, so dass es keine Verwechselungen der NPC's und deren Nachrichten gibt!





    Sobald ein Spieler connected:

    Code
    for(new i=0; i<MAX_NPC; i++)
    {
         NPCShowPlayer[playerid][i]= 0;
    }

    Die Variable wird auf 0 gesetzt, da sich der Spieler ja bei keinem NPC befindet!




    Meine Frage:



    Wie genau soll ich das ganze jetzt angehen?
    Soll ich mit Timern abfragen ob sich ein Spieler bei irgendeinem NPC befindet?
    Wenn ja wie kann ich am besten jede Koordinate jedes NPC's einzelnt abspeichern?
    Wie gebe ich diese Coordinaten aus?


    Habt ihr ein paar Ideen oder am besten Vorschläge?

    Meine Werke

  • Warum erstellst du nicht einfach über den Bots ein 3DTextLabel für jeden Spieler? ([wiki]CreatePlayer3DTextLabel[/wiki])


    Dieser wird dann sowieso nur angezeigt, wenn du nah genug dran gehst. (Parameter: Float:DrawDistance)


    Vom Effekt her wäre es doch genau das, was du suchst, oder etwa nicht?

  • Das Array um den nächsten NPC zu speichern brauchst du eigentlich nicht.
    Starte bei OnGameModeInit den Timer:

    C
    SetTimer("CheckNPCBubble", 1000, true);


    Und dann das public dazu:


    Falls alle NPCs in der Nähe eine Nachricht ausgeben sollen, und nicht nur der nächste, dann so:

  • Der Stream Radius ist dafür aber viel zu groß.
    Außerdem, wenn er einmal eingestreamt ist, und dann ein anderer Spieler eingestreamt wird, dann ändert sich die Nachricht zu der, die dem anderen Spieler angezeigt werden soll (mit dessen Name), auch wenn man selbst den NPC vielleicht noch gar nicht sieht (drei Blöcke weiter). Außerdem wird das Callback nur einmal aufgerufen, sprich wenn du in dem Stream Radius 2 NPCs hast klappt es nicht mehr, wenn man von A zu B laufen soll.


    Ein Timer ist hier besser.

  • Ja gut sollte man doch 3dTextlabels verwenden kann man die auch spezifisch für den Client erstellen oder man erstellt die Labels via dem Streamer Plugin direkt beim Verbinden und macht diese jedoch nur spezifisch für den Spieler sichtbar mit dem jeweiligen Text.

  • Je nach dem wie seine NPCs auf mehrere Spieler gleichzeitig in der Nähe reagieren sollen macht das natürlich Sinn, ja. Soll der NPC aber nur eine Nachricht anzeigen, die alle Spieler sehen, dann macht es wenig Sinn zig Labels zu verwenden.


    Allerdings bringt es nichts darüber zu spekulieren, da es dutzende Möglichkeiten gibt, das zu realiseren, je nach dem was das System können soll. Er soll es einfach ausprobieren und gegebenenfalls Änderungswünsche äußern, falls er die Änderungen nicht selbst vornehmen kann.