World of Gothic Archiv Alle Beiträge von |V|ilamber |
|
20.07.2002, 11:27 | #51 | ||||
|V|ilamber Beiträge: 74 |
Auf ein Sofa setzen??? Hier die Lösung!!! -
nimm das, funzt überall: void main() { object oChair; object oPlayer; oChair = OBJECT_SELF; oPlayer = GetLastUsedBy(); AssignCommand (oPlayer, ActionSit(oChair)); } oChair bezieht sich hier nicht nur auf Stühle, sondern auf alles, auf das man sich setzen kann. |
||||
20.07.2002, 11:30 | #52 | ||||
|V|ilamber Beiträge: 74 |
Kann ein Item auf ein anderes Item "reagieren" ? -
ich habe ein Script, damit kannst Du auch auch so ein Schwert wie in Herr der Ringe machen, das glüht wenn ein bestimmter Gegner in der Nähe ist ;) Wenn Du dieses Script für Dich anpaßt, dann sollte es auch funzen: //Script: cal_glow //Author: Albert Shih (Calidarien) //Version: v0.9, 2002-06-27 //Description: When a creature wields a item with a certain tag in its hands, // it will "glow" when near an object of a specific tag. //Usage: Attach to OnHeartbeat //Notes: // v0.9: Pretty cool // string ITEM_GLOW_TAG = "CAL_SWORD"; //Item that will cause glowing string TRIGGER_GLOW_TAG = "CAL_COW"; //Thing to look for float PROXIMITY_DISTANCE = 4.; //Distance to check within int VFX_EFFECT = VFX_DUR_PARALYZED; //Which VFX to use int CAL_DEBUG = FALSE; //Useful debugging messages // //Sends a message to all connected people if CAL_DEBUG == TRUE void Alert(string szMessage) { if(CAL_DEBUG) { object oPC = GetFirstPC(); SendMessageToAllDMs(szMessage); while(GetIsObjectValid(oPC)) { SendMessageToPC(oPC, szMessage); oPC = GetNextPC(); } } } // //Checks whether any objects with tag sTag are within fDist of oCenter int Proximity(object oCenter, string sTag, float fDist) { int nCounter = 0; object oThing; Alert("Proximity(): Checking proximity"); while(GetIsObjectValid(oThing = GetNearestObjectByTag(sTag, oCenter, ++nCounter))) { if((GetArea(oCenter) == GetArea(oThing)) && ((GetDistanceBetween(oCenter, oThing)) < fDist)) { Alert("Proximity(): Found one thing with tag " + sTag + " in distance " + FloatToString(fDist)); return TRUE; } } Alert("Proximity(): Found " + IntToString(nCounter-1) + " things with tag " + sTag + " outside of distance " + FloatToString(fDist)); return FALSE; } // //"Glowing" function, checks for inventory conditions (in this case, in hands) void Glow(object oItem) { object oOwner = GetItemPossessor(oItem); Alert("Glow(): Item is being carried"); if((GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oOwner) == oItem) || (GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oOwner) == oItem)) { if(Proximity(oOwner, TRIGGER_GLOW_TAG, PROXIMITY_DISTANCE)) { Alert("Glow(): Starting/continuing glow"); effect eVis = EffectVisualEffect(VFX_EFFECT); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oOwner, 7.); } } } // //Search for through all instances of sTag and run Glow() on only those which //are currently in a creature's inventory void SearchAndGlow(string sTag) { int nCounter = -1; object oOwner, oItem; while(GetIsObjectValid(oItem = GetObjectByTag(sTag, ++nCounter))) { oOwner = GetItemPossessor(oItem); if(GetIsObjectValid(oOwner)) { Glow(oItem); } } Alert("SearchAndGlow(): Found " + IntToString(nCounter) + " item(s) with tag " + sTag); } // //Main function void main() { SearchAndGlow(ITEM_GLOW_TAG); } |
||||
20.07.2002, 11:33 | #53 | ||||
|V|ilamber Beiträge: 74 |
Aussehen einer Rüstung und RK -
ich muß mal einen Freund fragen, er ist Graphiker :) |
||||
20.07.2002, 12:52 | #54 | ||||
|V|ilamber Beiträge: 74 |
Auf ein Sofa setzen??? Hier die Lösung!!! -
oChair ist ja nur eine Variable (und kann auch "dummdidumm" heißen), ich habe das vorhin nur gesagt, damit Du nicht denkst, es würde nur bei Stühlen funktionieren ;) P.S. schreib doch einfach "Milamber", das ist einfacher. Leider war aber der Nick schon vergeben. |
||||
22.07.2002, 15:58 | #55 | ||||
|V|ilamber Beiträge: 74 |
Die sache mit dem Umhang -
hey, da bin ich mal gespannt! Mach mal nen Screenshot |
||||
22.07.2002, 19:03 | #56 | ||||
|V|ilamber Beiträge: 74 |
NSC auf Stuhl setzen -
beim Stuhl (onUsed): void main() { object oChair; //object to sit on object oPlayer; //sitter oChair = OBJECT_SELF; oPlayer = GetLastUsedBy(); AssignCommand (oPlayer, ActionSit(oChair)); } beim NPC (onHeartbeat oder onSpawned): void main() { int nChair = 1; object oChair; oChair = GetNearestObjectByTag("Chair", OBJECT_SELF, nChair); ActionSit(oChair); } Der Stuhl (oder Bank/Sofa/Hocker) haben in dem Fall den Tag "Chair" (case sensitive!). wenn Du willst, dass die NPCs noch etwas anderes machen, dann wäre onSpawned besser (meine sollen zum Beispiel noch saufen), aber wenn sie einmal aufstehen, dann setzen sie sich ja nicht wieder, es sei denn Du baust das wieder per Script ein. |
||||
22.07.2002, 20:39 | #57 | ||||
|V|ilamber Beiträge: 74 |
der Essen-Schlafen-Pinkeln Thread - 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, 20:50 | #58 | ||||
|V|ilamber Beiträge: 74 |
NSC auf Stuhl setzen -
die Sache mit Saufen habe ich noch nicht eingebaut (ich mache gerade so viele Sachen auf einmal), aber sobald ich ein Script dafür habe, werde ich es hier posten. Warum die NSCs nicht mehr sprechen wenn sie sitzen, weiß ich nicht. Sollte eigentlich funktionieren. Selber habe ich es noch nicht ausprobiert. |
||||
23.07.2002, 20:32 | #59 | ||||
|V|ilamber Beiträge: 74 |
der Essen-Schlafen-Pinkeln Thread -
// 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 | #60 | ||||
|V|ilamber Beiträge: 74 |
der Essen-Schlafen-Pinkeln Thread -
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. |
||||
23.07.2002, 22:47 | #61 | ||||
|V|ilamber Beiträge: 74 |
Brauche Hilfe bei einem/mehreren Script/en -
beim onDeath vom ersten ein Script eintragen, das dafür sorgt, daß Nr. 2 angreift, usw. Willst Du, dass alle angreifen wenn man zu nahe kommt, dann mach noch einen Auslöser, der dafür sorgt. Aber ich verstehe jetzt nicht so ganz was Du willst. Brauchst Du ein Script, das einen Gegner veranlaßt Dich anzugreifen? |
||||
23.07.2002, 22:52 | #62 | ||||
|V|ilamber Beiträge: 74 |
Tilesets -
Winter Teilset finde ich absolut spitze. Hat mich dazu veranlaßt gleich mal ein Modul mit diesem Tileset zu machen. Leider fehlt der Winter im Wald, oder im Stadtgebiet. |
||||
24.07.2002, 08:14 | #63 | ||||
|V|ilamber Beiträge: 74 |
Multiplayer-Bug -
hier eine Lösung: der jenige, der das Spiel erstellt hat, fragt immer ob man gerade nicht durch Türen geht :( Leider geht es nicht anders. Bei uns ist es mehrmals passiert, dass der Spielstand hinüber war, weil ich gerade durch ne Tür bin. Was auch logisch ist, da man ja meistens speichert bevor man das Gebiet wechselt. |
||||
24.07.2002, 08:19 | #64 | ||||
|V|ilamber Beiträge: 74 |
Patch 1.21 -
es reicht nicht eine Firewall zu installieren und dann zu vergessen. Wenn Du willst, dass sie Dir auch was nützt, mußt Du sie richtig einstellen. Meine Firewall blockt nur das, was sie blocken soll. |
||||
24.07.2002, 10:36 | #65 | ||||
|V|ilamber Beiträge: 74 |
CD-Image von NWN_PLAY -
muß ich auch mal versuchen, denn ausgerechnet meine Play CD ist saulaut (unwucht). |
||||
24.07.2002, 10:43 | #66 | ||||
|V|ilamber Beiträge: 74 |
Fehler bei Klangeigenschaften -
ist ein Bug. Du kannst allerdings bei den Ländereinstellungen in Windows, aus dem Punkt ein Komma machen (bei Dezimaltrennzeichen). Ich selber habe es nicht ausprobiert weil es für mich inakzeptabel ist, aber wenn Du es machen willst... |
||||
24.07.2002, 14:16 | #67 | ||||
|V|ilamber Beiträge: 74 |
Die sache mit dem Umhang -
tipp hier nicht so viel, mach lieber weiter! :D |
||||
24.07.2002, 17:10 | #68 | ||||
|V|ilamber Beiträge: 74 |
Fehler bei Klangeigenschaften -
sag ich doch |
||||
25.07.2002, 06:52 | #69 | ||||
|V|ilamber Beiträge: 74 |
deutscher text aber englische sprache! -
ganz einfach: 1. englische Version installieren 2. deutsche dialog.tlk reinkopieren 3. Spiel starten und sich freuen, dass man die Scheißsynchronisation nicht mehr hören muß es ist jedoch empfehlenswert eine dialog.tlk zu nehmen, die auch gepatcht wurde. Sonst fehlen im Multiplayermenü zwei Einträge (die buttons sind aber noch da, nur ohne Beschriftung). Im Spiel selber gibts so viel ich weiß keine Probleme, zumindestens habe ich keine Entdeckt. P.S. ich bin so froh, dass man im deutschen die Kühe nicht synchronisiert hat :) |
||||
25.07.2002, 07:37 | #70 | ||||
|V|ilamber Beiträge: 74 |
OT: Wo sind eigentlich die Moderatoren diese Forums? -
kann mich nur anschließen. Frage: gibt es eine andere gute NWN Seite mit einem Forum? Mir ist hier nämlich zu wenig los (sorry, aber es stimmt). Vor allem im Toolset Forum geht irgendwie gar nix. Wenn kein Gawain da wäre, dann würde ja keiner dort diskutieren. |
||||
25.07.2002, 07:45 | #71 | ||||
|V|ilamber Beiträge: 74 |
lampen ein/ausschalten -
bei Kerzenständern ist ein Script namens "nw_02_onoff" dabei: //:://///////////////////////////////////////////// //:: NW_O2_ONOFF.nss //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Turns the placeable object's animation on/off */ //::////////////////////////////////////////////// //:: Created By: Brent //:: Created On: January 2002 //::////////////////////////////////////////////// void main() { if (GetLocalInt(OBJECT_SELF,"NW_L_AMION") == 0) { PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE); DelayCommand(0.4,SetPlaceableIllumination(OBJECT_SELF, TRUE)); SetLocalInt(OBJECT_SELF,"NW_L_AMION",1); DelayCommand(0.5,RecomputeStaticLighting(GetArea(OBJECT_SELF))); } else { PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE); DelayCommand(0.4,SetPlaceableIllumination(OBJECT_SELF, FALSE)); SetLocalInt(OBJECT_SELF,"NW_L_AMION",0); DelayCommand(0.9,RecomputeStaticLighting(GetArea(OBJECT_SELF))); } } |
||||
25.07.2002, 09:40 | #72 | ||||
|V|ilamber Beiträge: 74 |
lampen ein/ausschalten -
Welche Beleuchtung benutzt Du für Dein Gebiet? (hell, dunkel, kalt, magisch oder Fackellicht) Bist Du Dir sicher, dass die Tags der Fackel stimmen? Wenn es bei der ersten funzt, dann muß es doch eigentlich bei allen gehen. |
||||
30.07.2002, 19:27 | #73 | ||||
|V|ilamber Beiträge: 74 |
der Essen-Schlafen-Pinkeln Thread -
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. |
||||
31.07.2002, 07:56 | #74 | ||||
|V|ilamber Beiträge: 74 |
der Essen-Schlafen-Pinkeln Thread -
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. |
||||
|