World of Gothic Archiv
> NWN-Hilfe jf's schmiede :D |
|
16.07.2002, 21:11 | #1 | ||
jf Beiträge: 26 |
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 |
||
16.07.2002, 21:26 | #2 | ||
LightHawk Beiträge: 100 |
Kann ich es in das Forgotten Book übernehmen ? Vieleicht finden sich noch einige, die sich neue, uncheat Rezepte ausdenken, für den Horadrim Amboss :D (In Memmory of D2). Ich werde die Rezepte dann in das FB aufnehmen. Mir fällt gerade was neues dafür ein... (Mann, das neue FB wird affengeil, um es mal so auszudrücken :D ) |
||
16.07.2002, 21:47 | #3 | ||
Gawain15 Beiträge: 1.084 |
n1... I mean good job! Argh verdammt jetzt hab ich dank SoF2 so eine Leet Haxor sprache :) |
||
17.07.2002, 13:04 | #4 | ||
jf Beiträge: 26 |
@lighthawk übernimm nur :) @gawain *g* aber danke fürs lob ;) |
||
17.07.2002, 13:06 | #5 | ||
LightHawk Beiträge: 100 |
Danke :) :) :) |
||
|