World of Gothic Archiv > NWN-Hilfe
der Essen-Schlafen-Pinkeln Thread
Seite 1 von 1  1 
22.07.2002, 20:39 #1
|V|ilamber
Beiträge: 74
der Essen-Schlafen-Pinkeln Thread
ich bin gerade dabei die oben genannten Sachen in mein Modul einzubauen und dachte mir, dass wir vielleicht mal uns ein paar Gedanken darüber machen.
Meine Ideen:
- zum Schlafen braucht man Schlafrollen
- in manchen Gebieten ist auch ein Zelt erforderlich (wegen Kälte oder Regen, außerdem in versch. Größen für mehrere Leute).
- in bestimmten Abständen muß der Charakter etwas Essen/Trinken, Schlafen ist sonst nicht möglich, außerdem verliert er bald Fähigkeiten (wenn ich Hunger habe, dann kann ich auch keine Doppelaxt schwingen)
- in Wäldern kann man jagen, Wasser auffüllen und evtl. mit speziellen Fähigkeiten (Waldläufer?) auch ein Dach/Behausung für eine Nacht bauen.
- wenns kalt ist, sollte man ein Feuerchen machen für die Nacht
- Pinkeln, eher als Gag ;) Der Char sagt in bestimmten Abständen, dass er mal kurz für kleine Abenteuerer muss

so, mehr fällt mir gerade nicht ein. Ich möchte diese Sachen einbauen, damit meine Spieler ein Abenteuer besser planen. Man geht ja schließlich nicht einfach so in die Wildnis und haut alles um. Wenn jemand schon passende Scripte hat kann er sie posten.
Mir fehlen im moment Bilder für Zelte/Schlafrollen, außerdem weiß ich noch nicht wie ich so ein Bild einbaue.
So, jetzt bastel ich schön weiter :)
22.07.2002, 23:09 #2
valarion
Beiträge: 17

ich habe gerade ein basis lagerfeuer script gebastelt das aber noch lange nicht perfekt ist...

vom prinzip her ist es so das man das item "feuerholz" dafür benötigt... wenn man das feuerholz nun vom inventar auf den boden legt entsteht an der stelle wo man es abgelegt hat halt ein lagerfeuer und das feuerholz verschwindet...

ich wollte jetzt für da lagerfeuer ne art lebensdauer definieren aber das geht denke ich nicht wirklich, zumindest habe ich noch keinen ansatz mit dem das funktionieren würde...

damit aber nich 1000 lagerfeuer in meinem modul in der gegend rumschwirren kann man ersten mit onuse des feuers das feuer "löschen" oder wenn man sich mehr als 10 meter entfernt wird es automatisch gelöscht...

das ist mir im mom alles noch ein wenig zu unrealistisch aber ich arbeite auch noch dran...

ne weitere idee die ich für das feuer habe und noch versuche umzusetzen ist folgende:

wenn man in der wildnis ein tier erlegt bekommt man von diesen tier rohes fleisch, das soll man dann über dem lagerfeuer grillen können und danach soll es dann essbar sein...

das einzige problem das ich dabei noch habe ist allerdings das problem: wie mach ich das item "fleisch" essbar? ich hab ja keine möglichkeit den items scripte zuzuweisen...
23.07.2002, 00:54 #3
LightHawk
Beiträge: 100

Wie wäre es, wenn man Feuerholz nachlegen müsste.
Brenndauer ca. 1 Stunde.
Nach Rasten automatisch aus...
23.07.2002, 12:53 #4
flashbeast
Beiträge: 187

quote:
das einzige problem das ich dabei noch habe ist allerdings das problem: wie mach ich das item "fleisch" essbar? ich hab ja keine möglichkeit den items scripte zuzuweisen...

kleiner tip: in der kampagne gibt es doch getränke wie bier oder wein...die sind auch benutzbar! allerdings bin ich gerade zu faul, um's rauszusuchen
23.07.2002, 14:19 #5
valarion
Beiträge: 17

jo nur diese tränke sind fest vorgegebene items... sprich sehen aus wie flaschen und lassen ihre grafik nich ändern...

es gibt zwar die möglichkeit einem item die eigenschaft zauber wirken zuzuweisen... so kann man das item dann benutzen, aber wenn man es benutzen will wird ersten bei benutzen angezeigt was man benutzt, nämlich einen heilzauber o.ä. und zweitens wird ein fest vorgegebener effekt abgespielt... beim heilen zb dieser glitzer effekt um den PC... ist also alles net so das wahre...
23.07.2002, 18:26 #6
Kuroi
Beiträge: 124

wegen dem lagerfeuer, lässt sich nicht irgendwie über nen timer einstellen und sobald gewisse zeit erreicht ist, destroy object? also dass es einfach verschwindet?
Zitat von Lofwyre

Ich bin kein Mörder, meine Umwelt zwingt mich nur jedesmal in diese Rolle...



Elfen haben doofe Ohren
23.07.2002, 20:32 #7
|V|ilamber
Beiträge: 74

// Delay aActionToDelay by fSeconds.
// * No return value, but if an error occurs, the log file will contain
// "DelayCommand failed.".
void DelayCommand(float fSeconds, action aActionToDelay)

so kannst Du das Feuer löschen.
23.07.2002, 21:29 #8
|V|ilamber
Beiträge: 74

hier ein Script zum Rasten:

Moduleigenschaften und in onPlayerRest (oder so ähnlich) einfügen. Rasten ist dann nur möglich wenn man eine Schlafrolle dabei hat (ein Gegenstand mit dem Tag "Schlafrolle", ein Bett angeklickt wird und mind. 8 Std. seid dem letzten Schlaf vergangen sind.
-------------------------------------
//::///////////////////////////////////////////////
//:: Resting Script
//:: boz_o1_resting
//:: Copyright (c) 2002 Brotherhood of Zock
//:://////////////////////////////////////////////
/*
This script allows the players to rest after a specified amount of hours
has passed and only (optional) if they are in possession of a "Bedroll" or use a local
"placeable" item that allows them to rest (and sets the LocalInt "iRestAllowed" to 1).
*/
//:://////////////////////////////////////////////
//:: Created By: Lord Gsox
//:: Created On: July 10, 2002
//:://////////////////////////////////////////////

// Counting the actual date from Year0 Month0 Day0 Hour0 in hours
int GetHourTimeZero()
{
int iHourTimeZero;
iHourTimeZero = (GetCalendarYear()-1)*12*28*24 + (GetCalendarMonth()-1)*28*24 + (GetCalendarDay()-1)*24 + GetTimeHour();
return iHourTimeZero;
}


// The main function placed in the onRest event
void main()
{
object oPlayer = GetLastPCRested();
int iRestDelay = 8; //The ammount of hours a player must wait between Rests
int iBedrollRequired = 1; // 0=No requirements for resting
// 1=A "Bedroll" is needed in order to rest.
// Optional may a "Rest-allowing-placable" be used,
// that sets the value of the local "iRestAllowed"
// variable on the player to "1".



if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
{
// Check if the Rest Dely is over.
if (GetHourTimeZero() < GetLocalInt (oPlayer, "iNextRestHourTimeZero"))
{
AssignCommand (oPlayer, ClearAllActions()); // Prevent Resting
SendMessageToPC (oPlayer, "Du musst " + IntToString (GetLocalInt (oPlayer, "iNextRestHourTimeZero")-GetHourTimeZero()) + " Stunde(n) warten bis Du wieder rasten kannst.");
}
else // Resting possible.
{
// Resting allowed if No Bedroll required or Player has a Bedroll or a Rest-allowing-placeable set the local "iRestAllowed" variable to 1
if (iBedrollRequired == 0 || iBedrollRequired == 1 && (GetIsObjectValid (GetItemPossessedBy (oPlayer,"Schlafrolle")) || GetLocalInt (oPlayer,"iRestAllowed") == 1))
{
SetLocalInt (oPlayer, "iRestAllowed", 0);
SetLocalInt (oPlayer, "iNextRestHourTimeZero", GetHourTimeZero()+iRestDelay);
}
else // Resting not allowed
{
AssignCommand (oPlayer, ClearAllActions()); // Prevent Resting
SendMessageToPC (oPlayer, "Du hast keine Bettrolle! Oder willst Du Dich in den Dreck legen?");
}
}

}
}
------------------------------------

und hier noch ein Script, das man bei den Betten (oder allgemein Gegenständen, auf den man schlafen will) in onUsed eintragen muß:

-------------------------------
//The script placed in the onUsed event of the "Rest-allowing-placeable":

//NWScript:

//Function placed on the onUsed Event of a placeable item that allows resting (a bed, or a bedroll...)
void main()
{
object oLastUser = GetLastUsedBy();
if (GetIsPC (oLastUser) && GetIsObjectValid (oLastUser))
{
SetLocalInt (oLastUser, "iRestAllowed", 1);
AssignCommand (oLastUser, ActionRest());
}
}
-----------------------

so, dann habe ich noch ein Script namens "Hunger". Moduleigenschaften und bei OnHeartbeat eintragen:

--------------------------
void main()
{
object oPC = GetFirstPC();
object oFood;
// Sets up the penalty for not eating. This is more of a debug thing atm,
// I'm probably going to switch it to doing con damage or something gradually
// with an eventual death

effect eDamage = EffectDamage(1,DAMAGE_TYPE_MAGICAL,DAMAGE_POWER_PLUS_FIVE);

//-------------------------------------------
while(GetIsObjectValid(oPC))
{
// Increments the local var that is saved with the PC object. Its important
// to note that you need to add this line in your OnClientEnter event
// SetLocalInt( SetLocalInt(GetEnteringObject(), "IsHungry",0);

SetLocalInt(oPC, "IsHungry",GetLocalInt(oPC, "IsHungry")+1);
//-----------------------------
// 480 = 24 Game hours using the standard 2min/hour
// 480 is the number of rounds (6 seconds) that need to pass for a whole day to pass

if(GetLocalInt(oPC, "IsHungry")>=480)
{
//Start looking for the item tagged as 'Food'
oFood = GetFirstItemInInventory(oPC);
while(GetIsObjectValid(oFood) && (GetLocalInt(oPC, "IsHungry")>=480))
{
if(GetTag(oFood)=="Food")
{
//Eats the food and tells the player he ate

DestroyObject(oFood);
SendMessageToPC(oPC,"Du hast eine Mahlzeit gegessen.");
SetLocalInt(oPC, "IsHungry",0);
}
oFood = GetNextItemInInventory(oPC);
}
if(GetLocalInt(oPC, "IsHungry")==480)
{
// Player has no food, gives him a warning
SendMessageToPC(oPC,"Du bist hungrig und musst etwas essen!");
}
if(GetLocalInt(oPC, "IsHungry")>480)
{
// Player starts taking damage untill he eats food
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);
}
}
oPC = GetNextPC();
}
}
-----------------------------

die Scripte sind nicht von mir. Ich habe nur die Rückmeldung ins Deutsche übersetzt.
29.07.2002, 15:48 #9
Orack
Beiträge: 63

kann mir mal jemand bitte das hungerscript erklären

ich hab es in mein modul eingebunten und es ist nichts passiert

und wenn's doch funktionieren sollte was soll der pc denn essen es gibt doch nur tränke die man zusich nehmen kann
29.07.2002, 16:18 #10
Arkcroth
Beiträge: 68
ich will euch nicht den Spass verderben aber...
soll das ne real-life-simulation werden, so mit survival-feeling, wo der char eher dran vereckt, dass er nciht gefuttert hat, als an einem monster zu sterben, oder soll das ncoh was von dem ursprünglcihen spiel haben?
...außerdem: wer braucht das schon?

Sorry Leutz, aber ich denke keiner will immer vom Spieler angemault werden das er alle 6 Minuten was zu essen haben will... Wollt ihr nen Tamagochi?

seeya
Ark
29.07.2002, 17:05 #11
flashbeast
Beiträge: 187

quote:
soll das ne real-life-simulation werden

sicher nicht...es soll nur nicht dieses instant-campen ermöglicht werden, wo man innerhalb von 15 sekunden seine komplette gesundheit wiederbekommt. außerdem ist das im p&p doch auch nicht viel anders: wer nicht vorsorgt, hat die arschkarte gezogen (in nicht zivilisierten gegenden)
es kann
1. sich ja auf's campen beschränken (jagen+essen automatisch) und
2. ja ein extra-modul geben, wo das ziel daraus besteht, in der wildnis zu überleben
3. jeder selbst aussuchen ob er die [edit]entsprechenden module spielt[/edit]
30.07.2002, 19:27 #12
|V|ilamber
Beiträge: 74

tja, mir gehts vor allem darum, dass sich die Leute mehr auf ein Abenteuer vorbereiten. Das haben wir in P&P auch so gemacht und sind nicht einfach losgezogen. Außerdem kann die Sache mit Essen und trinken sehr gut in Quests eingebaut werden (Man hat nur eine Woche um die Aufgabe zu lösen, weil man sonst in der Wildnis verhungert, o.ä.).
Ich will auf keinen Fall den Spielfluß damit behindern.
30.07.2002, 20:13 #13
Iron Mouse
Beiträge: 2.157

Reicht doch wenn der Char automatisch was futtert wenn er/sie Hunger kriegt, wie schon bei DSA. Man muß dann nur daran denken rechtzeitig die Vorräte auffüllen.
31.07.2002, 07:56 #14
|V|ilamber
Beiträge: 74

und genau das macht er in dem hunger script von oben.

@Orack
hm, ich habs noch nicht ausprobiert, da ich jetzt ein paar Tage weg war. Ich werds jetzt mal testen.

[edit]
ich habe da einen Fehler entdeckt.
Du mußt bei Moduleigenschaften unter OnClientEnter ein Script eintragen:

void main()
{
SetLocalInt(GetEnteringObject(), "IsHungry",0);
}

Wenn Du schon etwas anderes drin hast, dann reicht natürlich nur die eine Zeile...
Außerdem brauchst Du Gegenstände mit dem Tag "Food". Sie werden dann automatisch gegessen.
31.07.2002, 14:35 #15
Orack
Beiträge: 63

danke |V|ilamber hat funktioniert :)
Seite 1 von 1  1