Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
NPC-Erscheinungsbilder (Appearance) vorschau
#1
NPC-Erscheinungsbilder (Appearance) Vorschau

NPC-Appearance.lsl
PHP-Code:
//  * Um die im Würfel gespeicherten 12 NPC-Erscheinungsbilder (Appearance) vor dem Erstellen auszuwählen, 
//  * müssen Sie die Erscheinungsdaten als Notizkarten (Notecards) im Inventar des Objekts ablegen. 
//  * Das Skript liest diese Namen aus und zeigt sie in einem Dialogmenü an.

//  * Es liest automatisch alle Notizkarten im Würfel, öffnet bei Berührung ein Menü und erstellt den ausgewählten NPC direkt neben dem Würfel:

// Konfiguration
integer DIALOG_CHANNEL = -9999;
integer listener_handle;

// Liste für die Namen der Notizkarten (max. 12 für ein Standard-Menü)
list npc_list;

update_npc_list()
{
    
npc_list = [];
    
integer count llGetInventoryNumber(INVENTORY_NOTECARD);
    
integer i;
    
    for (
0count; ++i)
    {
        
// Fügt den Namen der Notizkarte zur Liste hinzu
        
string name llGetInventoryName(INVENTORY_NOTECARDi);
        
npc_list += [name];
    }
}

default
{
    
state_entry()
    {
        
update_npc_list();
    }

    
changed(integer change)
    {
        
// Aktualisiert die Liste, wenn Notizkarten hinzugefügt/gelöscht werden
        
if (change CHANGED_INVENTORY)
        {
            
update_npc_list();
        }
    }

    
touch_start(integer total_number)
    {
        
key user llDetectedKey(0);
        
        if (
llGetListLength(npc_list) == 0)
        {
            
llRegionSayTo(user0"Keine NPC-Notizkarten im Würfel gefunden!");
            return;
        }

        
// Listener für das Menü öffnen
        
llListenRemove(listener_handle);
        
listener_handle llListen(DIALOG_CHANNEL""user"");
        
        
// Dialogmenü anzeigen (maximal 12 Buttons möglich)
        
llDialog(user"Wählen Sie einen NPC zum Erstellen aus:"npc_listDIALOG_CHANNEL);
        
        
// Timeout nach 60 Sekunden, falls niemand drückt
        
llSetTimerEvent(60.0);
    }

    
listen(integer channelstring namekey idstring message)
    {
        
// Timer und Listener stoppen
        
llSetTimerEvent(0.0);
        
llListenRemove(listener_handle);

        
// Prüfen, ob die gewählte Notizkarte noch existiert
        
if (llGetInventoryType(message) == INVENTORY_NOTECARD)
        {
            
llRegionSayTo(id0"Erstelle NPC: " message "...");
            
            
// Position: 1 Meter neben dem Würfel
            
vector spawn_pos llGetPos() + <1.00.00.0>;
            
            
// OSSL-Aufruf: Erstellt den NPC basierend auf der ausgewählten Notizkarte
            // Der Name des NPCs wird hier aus dem Namen der Notizkarte abgeleitet
            
osNpcCreate(message"NPC"spawn_posmessageOS_NPC_CREATOR_OWNED);
        }
    }

    
timer()
    {
        
// Menü-Timeout
        
llSetTimerEvent(0.0);
        
llListenRemove(listener_handle);
    }

Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



[-] The following 2 users say Thank You to Manfred Aabye for this post:
  • Bogus Curry, Ezry Aldrin
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste