World of Gothic Archiv Alle Beiträge von jf |
|
26.06.2002, 17:58 | #1 | |||
jf Beiträge: 26 |
Deutsche Version schon zuhaben ??? (Alles hier rein!!!) -
juhu morgen ab 11 uhr beim pcfun in münchen für 49€ :) *schondollefreu* jetz muss ich nur noch die zeit bis dahin rumbringen... :D (ich glaub bei der physikschulaufgabe am freitag werd ich nich sonderlich gut abschneiden :D ) |
|||
27.06.2002, 13:29 | #2 | |||
jf Beiträge: 26 |
Cheater kiddys und andere Schwierigkeiten... -
was ich eher problematisch finde als das cheaten (das durch die server größtenteils kein problem ist) ist eher der editor... man kann sich ja da in 10 minuten die mega-****-ausrüstung erstellen, dann braucht man nur noch in sein modul reingehen und voilà - auch ne art von cheaten... wie siehts damit aus, kann man überhaupt noch in andere module/spiele/server rein wenn die chars auf irgendwelchen bestimmten servern liegen? (bitte sagt *nein* ;) ) lol wieso wird 1336+1 zensiert?? :D |
|||
27.06.2002, 18:35 | #3 | |||
jf Beiträge: 26 |
Cheater kiddys und andere Schwierigkeiten... -
"etwas mehr klassen"??? du weißt schon dass es 800 millionen charaktervariationen gibt oder? ich hoffe das langt dir --> nwn character guide |
|||
28.06.2002, 21:18 | #4 | |||
jf Beiträge: 26 |
85% Prozent bei der GameStar... -
im gamestarforum gibts dazu einen sehr lustigen thread, indem der test schon munter beschimpft wird :D --> thread im gs forum ich persönlich halte die wertung für zu wenig, mal schauen wie sich das ganze entwickelt, community, patches, langzeitspaß usw... aber besser als dungeon siege isses auf jeden fall @thaladar bis jetz hab ich eigentlich gedacht dass ich "jf" und nich "fj" heiße... :D ;) |
|||
08.07.2002, 13:49 | #5 | |||
jf Beiträge: 26 |
Wie heilt man 'Constitution decrease'? -
geh zu aribeth und sag ihr dass du heilung brauchst... die wird dir imho helfen können ;) |
|||
11.07.2002, 13:07 | #6 | |||
jf Beiträge: 26 |
Euer lieblings gegner ??? -
Spoiler! (zum lesen Text markieren)
|
|||
15.07.2002, 20:38 | #7 | |||
jf Beiträge: 26 |
Kreaturen_Spawn per Bodenhebel auslösen ? -
erstmal brauchst du die kennzeichnung der begegnung, die kannst du entweder selbst festlegen oder die vorhandene verwenden; sie steht bei den begegnungseigenschaften bei grundlagen ("kennzeichn.") bei erweitert entfernst du dann den haken vor "aktiv". jetzt fügst du in das onUsed script des hebels folgenden code ein: void main() { object oEncounter = GetObjectByTag("namederbegegnung"); SetEncounterActive(TRUE,oEncounter); } statt namederbegegnung musst du natürlich die entsprechende kennzeichnung von oben verwenden. jetzt sollte, wenn du alles richtig gemacht hast, die begegnung bei benutzen des hebels aktiviert werden :) |
|||
16.07.2002, 21:06 | #8 | |||
jf Beiträge: 26 |
jf's schmiede :D - jf's schmiede :D
blödes forum falls ein mod den mal löschen könnte... ;) |
|||
16.07.2002, 21:11 | #9 | |||
jf Beiträge: 26 |
jf's schmiede :D - jf's schmiede :D
da mir langweilig war und die bösen magier sich selber sachen basteln können, wir armen kämpfer aber nur mit hilfe von irgendwelchen zwergen sachen geschmiedet kriegen, habe ich mal ein eigenes schmiedescript geschrieben :) : erstmal die voraussetzungen: - wir brauchen am besten einen amboss (platzierbare gegenstände, handel). gebt ihm als kennzeichnung "amboss". dann wählt ihr unten noch handlung, benutzbar und hat gepäck, bei der beschreibung könnt ihr noch irgendwas von magischen kräften oder so hinschreiben - dann brauchen wir einen schmiedehammer, mit diesem werden wir später (wie der name schon sagt ;) ) die gegenstände schmieden. als itemtyp nehmen wir den leichten hammer, als kennzeichnung am besten "schmiedehammer" und noch "handlung" wählen. bei aussehen, beschreibung könnt ihr irgendwas beliebiges nehmen, ebenso bei den magischen eigenschaften, hier bietet sich zb. was an, dass diesen hammer jeder benutzen kann (natürlich nur wenn ihr wollt dass irgendwelche arroganten magier da rumschmieden ;) ) so... jetzt gehts los mitm scripten :) fügt beim "onphysicalattacked"-script des ambosses (wird ausgeführt sobald jemand den amboss angreift bzw. "schmiedet ) folgendes script ein: #include "array" //die arrayfunktionen von noel string CheckRecipes(object oItem1,object oItem2); void main() { object oAttacker = GetLastAttacker(OBJECT_SELF); //der "schmied" object oWeapon = GetLastWeaponUsed(oAttacker); //die waffe object oAmboss = GetObjectByTag("amboss"); //der amboss string sCode; //der itemcode des resultats - falls die zutaten stimmen if(oWeapon == OBJECT_INVALID) return; //wenn er keine waffe hat, hoer auf if(oWeapon == GetObjectByTag("schmiedehammer")) //wenn die waffe aber der schmiedehammer is mach weiter { object oItem1 = GetFirstItemInInventory(oAmboss); if(oItem1 == OBJECT_INVALID) return; //schau dir das erste item auf dem amboss an, wenn es keins gibt, hoer auf object oItem2 = GetNextItemInInventory(oAmboss); if(oItem2 == OBJECT_INVALID) return; //schau dir das zweite an, hoer auf, falls es das nicht gibt object oItem3 = GetNextItemInInventory(); if(oItem3 != OBJECT_INVALID) return; //falls es aber noch zusaetzlich ein drittes gibt, hoer auf, wir brauchen nur 2 sCode = CheckRecipes(oItem1,oItem2); //schau ob die zutaten ein rezept ergeben if(sCode != "") //also ja (da ein itemcode uebergeben wird) { CreateItemOnObject(sCode,oAmboss); //erzeuge das item DestroyObject(oItem1); //loesche die zutaten DestroyObject(oItem2); //loesche die zutaten ActionCastSpellAtObject(SPELL_MAGE_ARMOR,oAmboss,METAMAGIC_ANY,TRUE,0,PR OJECTILE_PATH_TYPE_DEFAULT,TRUE); //mach einen huebschen effekt, weils geklappt hat (SPELL_MAGE_ARMOR is natuerlich austauschbar) AssignCommand(oAttacker,ClearAllActions()); //hoer mit dem angreifen auf SetIdentified(GetObjectByTag(sCode),1); //identifizier das ergebnis } else { ActionCastSpellAtObject(SPELL_MAGIC_MISSILE,oAttacker,METAMAGIC_ANY,TRUE ,0,PROJECTILE_PATH_TYPE_DEFAULT,TRUE); //bestrafe den schmied fuer das falsche rezept (SPELL_MAGIC_MISSILE ist ebenso austauschbar bzw. loeschbar) AssignCommand(oAttacker,ClearAllActions()); //hoer mit dem angreifen auf } } } string CheckRecipes(object oItem1,object oItem2) { int nAnzahlRezepte = 3; //hier die anzahl der rezepte einstellen int i = 0; //unwichtig //alle zutaten SetLocalArrayString(OBJECT_SELF,"aZutaten",1,"NW_IT_GEM009"); //feueropal SetLocalArrayString(OBJECT_SELF,"aZutaten",2,"NW_WSWMLS010"); //langschwert+2 SetLocalArrayString(OBJECT_SELF,"aZutaten",3,"NW_WSWMLS005"); //angurvadal SetLocalArrayString(OBJECT_SELF,"aZutaten",4,"NW_IT_MRING010"); //blutroter ring SetLocalArrayString(OBJECT_SELF,"aZutaten",5,"NW_WDBMSW002"); //doppelklingenschwert+1 SetLocalArrayString(OBJECT_SELF,"aZutaten",6,"NW_WDBMSW005"); //rotmaskenklinge SetLocalArrayString(OBJECT_SELF,"aZutaten",7,"NW_IT_MSMLMISC17"); //drachenblut SetLocalArrayString(OBJECT_SELF,"aZutaten",8,"NW_ASHMTO009"); //turmschild+3 SetLocalArrayString(OBJECT_SELF,"aZutaten",9,"NW_ASHMTO004"); //schild des drachentoeters //init recipes //rezept 1: feueropal + langschwert+2 = angurvadal SetLocalArrayInt(OBJECT_SELF,"aZutat1",1,1); SetLocalArrayInt(OBJECT_SELF,"aZutat2",1,2); SetLocalArrayInt(OBJECT_SELF,"aErgebnis",1,3); //rezept 2: blutroter ring + doppelklingenschwert+1 = rotmaskenklinge SetLocalArrayInt(OBJECT_SELF,"aZutat1",2,4); SetLocalArrayInt(OBJECT_SELF,"aZutat2",2,5); SetLocalArrayInt(OBJECT_SELF,"aErgebnis",2,6); //rezept 3: drachenblut + turmschild+3 = schild des drachentoeters SetLocalArrayInt(OBJECT_SELF,"aZutat1",3,7); SetLocalArrayInt(OBJECT_SELF,"aZutat2",3,8); SetLocalArrayInt(OBJECT_SELF,"aErgebnis",3,9); //rezepte vergleichen for(i = 1;i <= nAnzahlRezepte;i++) { //korrekte zutaten und ergebnis fuer das aktuelle rezept holen string sZutat1 = GetLocalArrayString(OBJECT_SELF,"aZutaten",GetLocalArrayInt(OBJECT_SELF,"aZutat1",i)); string sZutat2 = GetLocalArrayString(OBJECT_SELF,"aZutaten",GetLocalArrayInt(OBJECT_SELF,"aZutat2",i)); string sErgebnis = GetLocalArrayString(OBJECT_SELF,"aZutaten",GetLocalArrayInt(OBJECT_SELF,"aErgebnis",i)); //wenn die gegenstaende auf dem amboss die richtigen sind, gib den itemcode des ergebnisses zurueck if(((GetTag(oItem1) == sZutat1) &&GetTag(oItem2) == sZutat2)|| (GetTag(oItem2) == sZutat1 && GetTag(oItem1) == sZutat2)) return sErgebnis; } return ""; //falls kein rezept gestimmt hat, uebergib einen leeren string } der code der datei "array" (neue scriptdatei machen, code einfügen und unter "array" speichern: /* Noel's Array stuff */ //:://///////////////////////////////////////////// //:: GetLocalArrayInt //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Returns an integer, from nVarNum in the array */ //::////////////////////////////////////////////// //:: Created By: Noel //:: Created On: //::////////////////////////////////////////////// string GetLocalArrayString(object oidObject, string sVarName, int nVarNum) { string sFullVarName = sVarName + IntToString(nVarNum) ; return GetLocalString(oidObject, sFullVarName); } //:://///////////////////////////////////////////// //:: SetLocalArrayInt //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Sets the integer at nVarNum position */ //::////////////////////////////////////////////// //:: Created By: Noel //:: Created On: //::////////////////////////////////////////////// void SetLocalArrayString(object oidObject, string sVarName, int nVarNum, string nValue) { string sFullVarName = sVarName + IntToString(nVarNum) ; SetLocalString(oidObject, sFullVarName, nValue); } //:://///////////////////////////////////////////// //:: GetLocalArrayInt //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Returns an integer, from nVarNum in the array */ //::////////////////////////////////////////////// //:: Created By: Noel //:: Created On: //::////////////////////////////////////////////// int GetLocalArrayInt(object oidObject, string sVarName, int nVarNum) { string sFullVarName = sVarName + IntToString(nVarNum) ; return GetLocalInt(oidObject, sFullVarName); } //:://///////////////////////////////////////////// //:: SetLocalArrayInt //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Sets the integer at nVarNum position */ //::////////////////////////////////////////////// //:: Created By: Noel //:: Created On: //::////////////////////////////////////////////// void SetLocalArrayInt(object oidObject, string sVarName, int nVarNum, int nValue) { string sFullVarName = sVarName + IntToString(nVarNum) ; SetLocalInt(oidObject, sFullVarName, nValue); } int StartingConditional() { return 0; } (ich hoffe gamesweb macht es nich zu unübersichtlich ;) ) bis jetzt sind erst drei rezepte aktiviert, nämlich: feueropal + langschwert+2 = angurvadal blutroter ring + doppelklingenschwert+1 = rotmaskenklinge drachenblut + turmschild+3 = schild des drachentoeters das wird euch natürlich nicht genügen, deswegen könnt ihr natürlich noch neue rezepte reinbasteln ;) - falls ihr neue zutaten für euer rezept braucht, müsst ihr diese noch einbasteln. dafür fügt ihr so eine zeile unter die vorhandenen zutaten: SetLocalArrayString(OBJECT_SELF,"aZutaten",x,"kennzeichnung"); //name für x setzt ihr die zahl der letzten zeile +1 ein, für kennzeichnung die entsprechende kennzeichnung des gegenstandes und name (ist optional) könnt ihr zur späteren übersicht noch den namen des gegenstandes hinschreiben. - viel interessanter sind natürlich neue rezepte ;) dazu braucht ihr code wie den folgenden: //rezept x: zutat1 + zutat2 = ergebnis SetLocalArrayInt(OBJECT_SELF,"aZutat1",x,y); SetLocalArrayInt(OBJECT_SELF,"aZutat2",x,y); SetLocalArrayInt(OBJECT_SELF,"aErgebnis",x,y); die zeile mit dem // davor (ein kommentar) ist optional, sie ist aber ganz praktisch als orientierung ;) für das x setzt ihr jedesmal die anzahl der rezepte +1 ein. für das y müsst ihr dementsprechend die oben verwendeten zahlen für die entsprechenden zutaten verwenden, wenn ihr jetz zum beispiel als zutat 1 sumpfbeeren (die oben zb. die zahl 11 haben) wollt, müsst ihr unten wieder diese zahl, also 11 benutzen. wenn ihr so das rezept eingetragen habt, müsst ihr noch die aktuelle anzahl der rezepte hochsetzen. setzt dazu int nAnzahlRezepte = x; eins hoch. das wars auch schon :) kritik, lob und anregungen erwünscht, flame bitte per pm frohes schmieden und viele grüße jf |
|||
17.07.2002, 13:04 | #10 | |||
jf Beiträge: 26 |
jf's schmiede :D -
@lighthawk übernimm nur :) @gawain *g* aber danke fürs lob ;) |
|||
17.07.2002, 19:11 | #11 | |||
jf Beiträge: 26 |
stadtwachenscript - stadtwachenscript
da mir mal wieder so langweilig war ;) hab ich ein stadtwachenscript geschrieben... wer kennt das nicht aus baldurs gate 2, da will man sich ausruhen und schon kommt die stadtwache und beschwert sich :D bei mir kommen die stadtwachen aber nicht aus dem nichts sondern meckern nur, wenn man in hör- bzw. sichtweite ist. folgenden code müsst ihr im "onplayerrest"-ereignis bei den moduleigenschaften (bearbeiten | eigenschaften des moduls | ereignisse) eingeben: void main() { int nLetztesMal = GetLastRestEventType(); if(nLetztesMal != REST_EVENTTYPE_REST_STARTED) return; //damit der text nicht oefter erscheint (das onplayerrest-ereignis wird beim starten, abbrechen und beenden des rastens aufgerufen (ich glaube auch bei einem fehler)) int nAnzahlWachen = 5; //hier anzahl der wachen eingeben int i = 1; object oPC = GetFirstPC(); //der spieler object oWache; //die wachen for(i = 1;i <= nAnzahlWachen;i++) { oWache = GetObjectByTag("stadtwache" + IntToString(i)); //die einzelnen wachen testen if(oWache == OBJECT_INVALID) continue; //falls es eine wache nicht gibt, mach einfach weiter if(GetObjectSeen(oPC,oWache) == TRUE || GetObjectHeard(oPC,oWache)) //wenn der spieler gehoert oder gesehen wird { AssignCommand(oPC,ClearAllActions()); //stopp das ausruhen AssignCommand(oWache,ActionMoveToObject(oPC,TRUE)); //lauf zum spieler AssignCommand(oWache,SpeakString("Ihr duerft hier nicht rasten!")); //sage dem spieler dass er nicht rasten darf return; //hoer auf } } } ihr könnt soviele stadtwachen verwenden wie ihr wollt, ihr müsst nur die anzahl bei nAnzahlWachen eingeben und die kennzeichnung der wachen muss "stadtwachex" lauten, mit dem x numeriert ihr die wachen durch (wenn sie die selbe kennzeichnung haben, wird immer nur die neueste angesprochen). das "stadtwache" könnt ihr auch ändern, wenn ihr die wachen zb. wache_x nennen wollt, einfach das "stadtwache" austauschen. was die wachen machen, könnt ihr natürlich auch noch ändern, ihr müsst nur den code bei AssignCommand(oWache,ActionMoveToObject(oPC,TRUE)); //lauf zum spieler verändern (das kann man natürlich auch weglassen ;) ). solange das clearallactions und speakstring bleibt (aufhören mit rasten bzw. nachricht), habt ihr freie auswahl (angreifen, gold abnehmen, wegjagen... ;) ) wenn ich mich nicht täusche (habs nicht getestet) wird das script im mp nicht richtig funktionieren, da auf den spieler per GetFirstPC(); zugegriffen wird; funktioniert zwar problemlos bei einem spieler, bei mehreren wird er aber meistens nicht den rastenden spieler auswählen. falls jemand ne möglichkeit weiß, aus der spielerliste den rastenden rauszufiltern bitte posten :) (ich habs probiert mit: if(GetIsResting(oPC) == FALSE) oPC = GetNextPC(); //rastet spieler1? if(GetIsResting(oPC) == FALSE) oPC = GetNextPC(); //rastet spieler2? if(GetIsResting(oPC) == FALSE) oPC = GetNextPC(); //rastet spieler3? if(GetIsResting(oPC) == FALSE) oPC = GetNextPC(); //rastet spieler4? if(GetIsResting(oPC) == FALSE) oPC = GetNextPC(); //rastet spieler5? if(GetIsResting(oPC) == FALSE) oPC = GetNextPC(); //rastet spieler6? if(GetIsResting(oPC) == FALSE) oPC = GetNextPC(); //rastet spieler7? if(GetIsResting(oPC) == FALSE) return; //wenn keiner rastet, hoer auf da erkennt er aber nichtmal mehr dass spieler1 rastet... naja, ist ja eh eher für den sp gedacht ;) @lighthawk kannst natürlich auch ins buch übernehmen :) ;) lob, kritik und anregungen natürlich erwünscht :) mfg jf achja: falls ihr irgendwelche scriptwünsche habt, sagt mal, mir ist nämlich immer so langweilig :D |
|||
17.07.2002, 20:32 | #12 | |||
jf Beiträge: 26 |
viele viele bunte fragen -
zu 2. ist ganz einfach, einfach erfolgte aktionen rechts unten wählen und den zauberhut (das is der assistent :) ) anklicken... bei belohnung geben findest das zeugs dann :) grr.... zu langsam |
|||
17.07.2002, 20:38 | #13 | |||
jf Beiträge: 26 |
Scriptingfrage -
außerdem verwendest du den vordefinierten parameter falsch. wenn bei den funktionsdefinitionen irgendwo zb. int nbla=10 steht, heißt das nur, dass falls kein wert für diesen parameter übergeben wird, das vordefinierte (in diesem fall 10) verwendet wird. so wie du das geschrieben hast, geht das auch, dazu musst du aber vorher die variable fDelay deklarieren: float fDelay; mit dem momentanen code setzt du den wert dieser variablen auf 10 und übergibst den inhalt (also 10). es langt aber wenn du einfach schreibst: void main() { DestroyObject(GetObjectByTag("Klaus"),10.0f); } mfg jf |
|||
18.07.2002, 14:58 | #14 | |||
jf Beiträge: 26 |
Was ist denn hier falsch (Script) -
redest du gerade mit der wache? wenn nein, funktioniert das script nicht, da wenn kein pc gerade mit dem betroffenen gegenstand spricht kein gültiger spieler (OBJECT_INVALID) von GetPCSpeaker() geliefert wird. |
|||
18.07.2002, 17:22 | #15 | |||
jf Beiträge: 26 |
Kann mir jemand sagen wie das geht? -
void main() { object oPC = GetEnteringObject(); AssignCommand(oPC,SpeakString("Nachricht hierher")); } in den onenter code des triggers |
|||
18.07.2002, 17:29 | #16 | |||
jf Beiträge: 26 |
Verfluchte Items -
klar gibts verfluchte gegenstände, im spiel selber hab ich aber nur ne handvoll gefunden... war iirc irgendne waffe mit -2 weisheit oder so; wo ich die gefunden hab weiß ich nich mehr, laufen dir schon noch über den weg ;) kannst aber natürlich auch selber verfluchte gegenstände erstellen, musst einfach mal die ganze liste mit den eigenschaften durchschauen, wenn du dann die eigenschaft auswählst und auf bearbeiten klickst, kannst du auch den wert noch verändern... mfg jf |
|||
18.07.2002, 17:33 | #17 | |||
jf Beiträge: 26 |
Script Frage ;) -
das mit der groß/kleinschreibung könnt ihr übrigens beheben, indem ihr folgendes macht: string sRufenKlein = GetStringLowerCase(sRufen); if(sRufenKlein == "kellner") { (...) } so ist es egal, ob das wort groß, klein oder gemischt geschrieben wird :) mfg jf |
|||
18.07.2002, 18:44 | #18 | |||
jf Beiträge: 26 |
stadtwachenscript -
sooodala... :) @gawain void main() { object oPC = GetLastUsedBy(); object oZauberwald = GetObjectByTag("zauberwald"); SpeakString("Die Pilze haben einen sehr seltsamen Geschmack..."); AssignCommand(oPC,JumpToObject(oZauberwald)); } die "pilze" müssen ein placeable sein (am besten kategorie parks und natur), da ich keinen weg gefunden habe, ein item zu benutzen. bei den eigenschaften dann "benutzbar" wählen und obigen code ins onused ereignis einfügen @leman russ das ist kein problem, du kannst ein komplettes riesiges modul machen, kannst 100 areas machen ohne wachen und dann bei einer einen haufen, du wirst (hoffe ich :D ) nur in der nähe von diesen vom rasten abgehalten werden. solange die anzahl und die nummerierung stimmt, kannst du die wachen verteilen wie du willst :) @targeteron muss ich mal probieren ;) sowas in der art hatte ich aber iirc auch schon, hat aber nicht geklappt... aber mal schauen ;) @die anderen ich versuch so schnell wie möglich eure wünsche zu erfüllen :) mfg jf |
|||
18.07.2002, 20:25 | #19 | |||
jf Beiträge: 26 |
stadtwachenscript -
ne, geht auch so wunderbar |
|||
19.07.2002, 14:36 | #20 | |||
jf Beiträge: 26 |
@jf -
mach mich sofort an die arbeit :) update 1: meinst ganz normales brotbacken? schreib mal die zutaten rein :D um ende mit ner fackel anmachen oder? @paleswift ne, noch nich, aber dafür gibts ja modeller ;) |
|||
19.07.2002, 14:59 | #21 | |||
jf Beiträge: 26 |
stadtwachenscript -
@sengir das ActionRandomWalk(); gehört in die onspawnscripte der einzelnen wachen; wenn er jetzt gespawnt wird, läuft er solange zufällig rum bis irgendwas besonderes passiert (du ihn zb. anquatscht); deshalb musst du in das onConversation-Script der wachen nochmal ActionRandomWalk(); schreiben. gold nehmen und weiter zufällig laufen nach dem "ihr duerft hier nicht rasten"-satz gehören ins hauptscript. der code muss dann so modifiziert werden: if(GetObjectSeen(oPC,oWache) == TRUE || GetObjectHeard(oPC,oWache)) //wenn der spieler gehoert oder gesehen wird { AssignCommand(oPC,ClearAllActions()); //stopp das ausruhen AssignCommand(oWache,SpeakString("Ihr duerft hier nicht rasten!")); //sage dem spieler dass er nicht rasten darf AssignCommand(oWache,TakeGoldFromCreature(50,oPC)); //nimm 50 gold vom spieler AssignCommand(oWache,ActionRandomWalk()); //lauf weiter rum return; //hoer auf } wenn du irgendwelche aktionen nicht direkt betroffenen personen zuordnen willst (zb. dass wenn du eine kiste öffnet dein char etwas sagt; wenn du das in das onOpen-script der kiste packst, würde bei SpeakString("bla"); die kiste und nicht dein char das sagen) dann musst du AssignCommand(oChar,Aktion); benutzen (für aktion halt das was er machen soll, zb. gold wegnehmen, sprechen... ich vermute mal dass da dein fehler war ;) @argos da hat gawain mal wieder recht einfach ins onOpen-script des behälters SpeakString("blablabla"); usw... @gawain nein, mein nick hat wirklich nix mit scooter zu tun, das sehe ich als beleidigung :D ist nur je der erste buchstabe von meinem vor- und nachnamen... einfallsreich, gell und mein avatar is die hypnosekröte aus futurama ;) |
|||
19.07.2002, 19:14 | #22 | |||
jf Beiträge: 26 |
Nach dem Hinsetzen Tagebucheintrag! -
hi, erstmal erstellst du den tagebuch eintrag; dazu gehst du in den tagebucheditor (im werkzeuge-menü). dort erstellst du dann eine quest (ich würd am besten schon vorher eine erstellen, die dir mitteilt, dass du dein gedächtnis verloren hast). bei name wählst du die überschrift, für kennzeichnung nimm zb. q_gedaechtnis. dann fügst du einen neuen queststatus hinzu (rechtsklick auf die quest und dann hinzufügen); id würd ich so lassen, text kannst du irgendwas hinschreiben und wenn du willst kannst du auch "fertigst" wählen (quest erscheint bei diesem status bei erledigte aufträge). dann erstellst du einen stuhl und wählst bei den eigenschaften "benutzbar" (damit du ihn anklicken kannst) und "handlung" (damit er nicht kaputtgeht). jetzt fügst du folgenden code beim onUsed-script ein: void main() { object oPC = GetLastUsedBy(); object oChair = GetObjectByTag("chair"); AssignCommand(oPC,ActionSit(oChair)); DelayCommand(2.0,AddJournalQuestEntry("q_gedaechtnis",1,oPC)); } chair musst du noch durch die kennzeichnung des stuhls ersetzen, q_gedaechtnis durch die kennzeichnung der quest und 1 durch die id des statuses. das delaycommand(2.0,...); bewirkt nur, dass der char erstmal 2 sekunden auf dem stuhl sitzt, bevor die quest eingetragen wird; wirkt besser so ;) mfg jf |
|||
19.07.2002, 19:30 | #23 | |||
jf Beiträge: 26 |
@jf -
für mehl gibts die mehlsäcke, wasser könnte man ausm brunnen schöpfen, milch... haben wir kühe? :D nein? dann nehm ich erstmal ne leiche als ersatz :D bei allen klick -> inventar mit den items, oder? |
|||
19.07.2002, 19:48 | #24 | |||
jf Beiträge: 26 |
@jf -
also, wasser is klar, mehl is klar, die milch... kühe hab ich jetz auch gefunden :D (was hab ich mir nur gedacht dafür bei den placeables zu schauen.... ), aber wie kann man am authentischsten aus denen milch rauskriegen? anklicken und dann beim gespräch "muhmuh" ausgeben und bei erfolgte aktionen vielleicht hinknie-animation und in nen vorhandenen eimer nen milchitem tun? :D und dann alle items in den ofen und mit der fackel backen... cooool :D |
|||
19.07.2002, 21:20 | #25 | |||
jf Beiträge: 26 |
@jf -
du bist so hässlich wie ein affe im negligé :D oh man, ich muss unbedingt wieder monkey island 3 zoggen :D wie wärs mit nem gespräch mitm npc... wenn man genug charisma hat, rückt der die milch freiwillig raus, sonst muss man den killen und selber melken :D |
|||
|