World of Gothic Archiv > NWN-Hilfe
Wieder mal ein paar dumme Fragen
Seite 1 von 1  1 
07.09.2002, 20:31 #1
Nizidraman
Beiträge: 1.171
Wieder mal ein paar dumme Fragen
Hallo zusammen

Ich habe da noch einige, dumme Fragen bezüglich des - wen wunderts - Scripten:

1. Wie kann ich den PC in einem Script "benutzen"?

Soll heissen, wie soll ich machen, dass es testet, wenn der Pc in einen Trigger hineinläuft, ob es der PC oder ein NPC ist.

2. Es gibt ja einige Funktionen, die bei den Parametern True und False haben. Wie gebe ich da etwas anderes als den Default-Parameter ein?

3. Wie kann ich dem PC das Inventar leeren?
07.09.2002, 23:20 #2
GuradonHellsing
Beiträge: 232

1.

object oenter = getenteringObject();

if(GetIsPC(oenter))
{
....
}
else
{
....}

2.
öhm einfach beim aufruf der funktion einen anderen parameter setzten die defaults gelten ja immer wenn man nix anderes angibt
08.09.2002, 13:44 #3
Nizidraman
Beiträge: 1.171

Vielen Dank, es funktioniert

(allerdings brauchte ich 20 Minuten um rauszufinden, dass der Compiler gross/kleinschreibung Unterscheidet und dass GetEnteringObjekt so geschreiben wird :D

und wegen dem Problem 2: Vielleicht hätte ich selbst drauf kommen müssen, dass das true, bzw. false nicht in Anführungszeichen gehört:D


Weiss jemand eine Lösung zum Dritten Problem?
08.09.2002, 15:08 #4
Rhaegar
Beiträge: 296

quote:
Zitat von Argos

Weiss jemand eine Lösung zum Dritten Problem?



code\:

void main()
{object oPC=GetFirstPC();

DestroyObject(GetFirstItemInInventory(oPC));//alternativ mit ActionTakeItem(GetFirstItemInInventory(oPC),oPC)
int i;
for(i=0;i<=100;i++) //die Hundert ist vermutlich etwas uebertrieben,aber
//frag' mich nicht wieviele Gegenstaende der gemeine PC so mit sich herumschleppt...
{object oItem=GetNextItemInInventory(oPC);
if (!GetIsObjectValid(oItem))
break; //mein C++Wissen ist begrenzt: mit break verlässt man doch eine Schleife, oder?
else DestroyObject(oItem);
}
}




___________________________

Verliebt in den UserDefined Event ^^
Überzeugter Episode 2 Hasser[/font]
08.09.2002, 15:52 #5
Nizidraman
Beiträge: 1.171

Das Script, funktioniert, vielen Dank.

Der Vollständigkeithalber habe ich noch einiges hinzugefügt, damit die Itemslots auch noch geleert werden:

quote:

void main()
{object oPC=GetFirstPC(); // by Rhaegar

DestroyObject(GetFirstItemInInventory(oPC));//alternativ mit ActionTakeItem(GetFirstItemInInventory(oPC),oPC)
int i;
for(i=0;i<=100;i++) //die Hundert ist vermutlich etwas uebertrieben,aber
//frag' mich nicht wieviele Gegenstaende der gemeine PC so mit sich herumschleppt...
{object oItem=GetNextItemInInventory(oPC);
if (!GetIsObjectValid(oItem))
break; //mein C++Wissen ist begrenzt: mit break verlässt man doch eine Schleife, oder?
else DestroyObject(oItem);
}
object oItem = GetItemInSlot(INVENTORY_SLOT_ARMS);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_ARROWS);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_BELT);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_BOLTS);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_BOOTS);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_BULLETS);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_CHEST);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_HEAD);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_LEFTRING);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_NECK);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND);
DestroyObject(oItem);
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTRING);
DestroyObject(oItem);
}


Achjo: Kann man das irgendwie abkürzen?

[edit: benötige schon wieder Hilfe: mein Teil des Skripts funktioniert irgendwie nicht]
08.09.2002, 17:50 #6
Elessar
Beiträge: 495

Kann man glaube ich nicht abkürzen. Jedenfalls habe ich mir erlaubt das ganze noch etwas herauszuputzen :D :
code\:

/*********************************************
Script zur Leerung des Inventars
by: Rhaegar, Argos und Frin Tozz
*********************************************/
void main()
{
object oPC = GetFirstPC();

object oItem = GetFirstItemInInventory(oPC);

while(oItem != OBJECT_INVALID)
{
DestroyObject(oItem);
oItem=GetNextItemInInventory(oPC);
}
oItem = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_BELT, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_NECK, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);

oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC);
if(oItem != OBJECT_INVALID) DestroyObject(oItem);
}

08.09.2002, 19:16 #7
Rhaegar
Beiträge: 296

Eine Frage? Laeuft das letzte Skript ohne Fehlermeldung von wegen "zu viele Anweisungen" ? Bei While's ohne Zählvariable macht er das naemlich gerne...
08.09.2002, 20:23 #8
Nizidraman
Beiträge: 1.171

Bei mir läuft es tadellos :)

thx to all
09.09.2002, 05:02 #9
Elessar
Beiträge: 495

Er muss das eigentlich ohne Fehler durcharbeiten können, da die Abbruchbedingung ziemlich real ist und irgendwann eintreten muss. Kein Spieler hat ein unendlich grosses Inventar mit ebenso vielen Gegenständen...
Seite 1 von 1  1