World of Gothic Archiv > NWN-Hilfe
jf's schmiede :D
Seite 1 von 1  1 
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 :) :) :)
Seite 1 von 1  1