World of Gothic Archiv
Alle Beiträge von Gawain15
Seite 22 von 44 « Erste 18  19  20  21  22  23  24  25  26 Letzte »
09.07.2002, 17:48 #526
Gawain15
Beiträge: 1.084
Waffe verbessern -
Ich hab im ersten Kapitel schon einen gefunden.
09.07.2002, 19:17 #527
Gawain15
Beiträge: 1.084
NSC soll sprechen ohne Click -
Das heisst das du die selbse Variable 2 mal benutzt... aber eigentlich kann man Variablen so oft benutzen wie man lustig ist... kannst du mal das Script posten genauso wie es jetzt aussieht?
09.07.2002, 19:19 #528
Gawain15
Beiträge: 1.084
Fraktionen -
"I": einfach alle Monster in eine Faction packen und die Checkbox unten rechts mit dem Namen "Globaler Effekt" aktivieren, wenn der Anführer nun feindlich gegenüber dir ist sind alle Mitglieder der Fraktion (die anderen drei) dir gegenüber feindlich gesinnt.
09.07.2002, 19:23 #529
Gawain15
Beiträge: 1.084
Erfahrung und Schwierigkeitsstufen -
ich weiss es nicht aber ich möchte trotzdem meine Meinung dazu kundtun:

Xp hier, XP da. Bei NWN geht es mir nicht um levelups oder XP sondern um die Story. Deshalb werde ich auch noch weiter spielen wenn ich level 20 mit einem Char bin... hab jetzt gerade einen Waldläufer auf Level 12 der die bisher veröffentlichen Mods gespielt hat.

Wie gesagt nur meine Gedanken zur Sache, nicht als Angriff zu verstehen.
09.07.2002, 20:19 #530
Gawain15
Beiträge: 1.084
NSC soll sprechen ohne Click -
Du hast das Object oPC 2 mal zugewiesen, die KI weiss nicht welche er nehmen soll, lass mal eine Weg.
09.07.2002, 20:26 #531
Gawain15
Beiträge: 1.084
Karten online gestellt! -
thx... aber was ist mit dem Copyright? :D
09.07.2002, 21:18 #532
Gawain15
Beiträge: 1.084
Farmer? -
Nein... lass das Scripten bloss sein "I" ; D

void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC, OBJECT_SELF, 1);
object oKaefig1 = GetObjectByTag("Kaefig1");
object oKaefig2 = GetObjectByTag("Kaefig2");
object oKaefig3 = GetObjectByTag("Kaefig3");
if(GetIsDead(oKaefig1) || GetIsOpen(oKaefig1) &&
GetIsDead(oKaefig2) || GetIsOpen(oKaefig2) &&
GetIsDead(oKaefig3) || GetIsOpen(oKaefig3))
{
AddJournalQuestEntry("Monster", 2, oPC);
SetLocalInt(oPC, "Monster", 3);
}
}
09.07.2002, 21:29 #533
Gawain15
Beiträge: 1.084
Scriptsammlung - Scriptsammlung
Moinsen, ich hab mal den 1000. Post als Anlass genommen alle bisher hier geposteten Skripte in einem Thread zusammen zu fassen (naja einige haben ja auch mal angefragt ob es eine Skript-Datenbank gibt... naja hier mal eine Unterart davon :) ). Wenn ihr Fragen zu einzelnen Skripten habt bitte nicht direkt hier rein posten sondern das Script nehmen und Frage in einem neuen Thread posten damit dieser Thread nicht "Überquillt".
Thx Gawain alias Ezekiel :) wenn jemand nicht damit einverstanden ist das ich sein Script hier einfach so gepostet hab bitte mir bescheid geben ich nehms dann wieder aus der Liste raus.

---

Ein NPC soll sich hinsetzen:

void main()
{
int nChair = 1;
object oChair;
oChair = GetNearestObjectByTag("Tag des Stuhls", OBJECT_SELF, nChair); //Tag des Stuhls durch die Kennzeichnung eures Stuhls ersetzen.
ActionSit(oChair);
}

---

Ein NPC sagt einen Zufallssatz beim anklicken:

void main()
{
string sRandom;
int iRandom = Random(5);
if (iRandom == 1){
sRandom = "Beispielsatz 1";} //Beispielatz durch euren Satz ersetzen.
else if (iRandom == 2){
sRandom = "Beispielsatz 2";}
else if (iRandom == 3){
sRandom = "Beispielsatz 3";}
else if (iRandom == 4){
sRandom = "Beispielsatz 4";}
else if (iRandom == 5){
sRandom = "Beispielsatz 5";}
ActionSpeakString (sRandom, TALKVOLUME_TALK);
}

---

Ein NPC sagt etwas wenn man erfolgslos versucht eine Tür zu öffnen (bei OnFailToOpen einfügen):

void main()
{
object oNPC = GetObjectByTag("tuerwache"); // tuerwache : Kennzeichnung Des NPCs der es sagen soll.
AssignCommand(oNPC, SpeakString("Dein Satz hier rein."));
}

---

Eine Kreatur flüchtet vor dem Spieler (je nach gebrauch entsprechend bei der Kreatur einfügen):

void main()
{
object oTarget = GetLastPerceived();
if (GetLastPerceptionSeen() == TRUE)
{
if (GetIsPC(oTarget))
{
ClearAllActions();
ActionMoveAwayFromObject(oTarget,TRUE);
}
}
}

---

Dieses Skript ist für Schilder und Wegweiser geeignet bei OnUse einfügen.

void main()
{
AssignCommand(OBJECT_SELF, SpeakString("Dein Satz hier rein."));
}

---

Dieses Skript zeigt eine Nachricht sobald der Spieler das entsprechende Gebiet betritt, unter den Gebietseigenschaften bei OnEnter einfügen.

void main()
{
object oTriggerer;
oTriggerer = GetEnteringObject();
SendMessageToPC(oTriggerer, "TEXT HIER REIN");
}

---

Damit eine Kreatur schläft, folgendes bei OnSpawn einfügen:

void main()
{ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSleep(), OBJECT_SELF);
}

---

Der Spieler sagt etwas sobald er ein bestimmtes Gebiet bertitt (bei OnEnter des Triggers einfügen):

void main()
{
object oPC = GetEnteringObject();
if(
(GetIsPC(oPC)) &&
(GetLocalInt(OBJECT_SELF, "iGesprochen") != 1))
{
AssignCommand(oPC, ClearAllActions());
SetLocalInt(OBJECT_SELF, "iGesprochen", 1);
AssignCommand(oPC, SpeakString("Verdammt, sie haben uns in einen Hinterhalt gelockt!", TALKVOLUME_SHOUT));
}
}

---

Kreatur spawned tot und die Leiche bleibt liegen (also quasi eine Leiche) bei der Kreatur unter OnSpawn einfügen:

void main()
{
ActionDoCommand(SetIsDestroyable(FALSE));
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),
OBJECT_SELF));
}

---

Eine Tür schließt sich und verschließt sich wieder nachdem sie geöffnet wurde (Bei OnHeartbeat einfügen):

void main()
{
if(GetIsOpen(OBJECT_SELF))
{
ActionWait(3.0); // Die Zeit die die Tür offen stehen soll.
ActionCloseDoor (OBJECT_SELF);
}
if(GetLockLockable(OBJECT_SELF) && !GetLocked(OBJECT_SELF) && !GetIsOpen(OBJECT_SELF))
{
SetLocked(OBJECT_SELF, TRUE);
}
}

---

Einen Begegnungstrigger erst nach einer bestimmten Aktion aktivieren:

void main()
{
object oBegegnung = GetObjectByTag("DeinSpawn");
SetEncounterActive(TRUE, oBegegnung);
}

---

Ein counter der zählt wieviele man getötet hat (bei OnDeath der Kreatur einfügen):

void main()
{
SetLocalInt(GetLastKiller(), "Name int variable", GetLocalInt(GetLastKiller(), " Name int variable") + 1);
}

---

Sobald ein NPC den Spieler sieht wird er angesprochen (bei OnPerception der Kreatur einfügen)

void main()
{
object oNPC = GetObjectByTag("dein nsc");
object oPC = GetLastPerceived();
if(
(GetIsPC(oPC)) &&
(IsInConversation(oNPC) == FALSE) &&
(GetObjectSeen(oPC,oNPC)) &&
(GetLocalInt(OBJECT_SELF, "iGesprochen") != 1))
{
AssignCommand(oPC, ClearAllActions());
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionMoveToObject(oPC));
AssignCommand(oNPC, ActionStartConversation(oPC));
SetLocalInt(OBJECT_SELF, "iGesprochen", 1);
}
}

---

Eine Kreatur in der Gegend rumlaufen lassen (bei OnSpawn bei der Kreatur einfügen):

void main()
{
ActionRandomWalk();
}

---

Damit der Spieler die gesammte Karte eines Gebietes hat folgendes bei den Gebietseigenschaften unter OnEnter einfügen:

Der Spieler braucht die Karte damit er das gesammte Gebiet sieht:
void main()
{
object oSpieler = GetEnteringObject();
string sKartenTag = "MeineKarte";
object oKarte = GetItemPossessedBy(oSpieler, sKartenTag);
object oArea = GetArea(OBJECT_SELF);
if (GetIsObjectValid(oKarte))
{
ExploreAreaForPlayer(oArea,oSpieler);
}
}

Der Spieler sieht das gesamte Gebiet, auch ohne Karte:
void main()
{
object oSpieler = GetEnteringObject();
object oArea = GetArea(OBJECT_SELF);
ExploreAreaForPlayer(oArea,oSpieler);
}

---

Folgendes bei erfolgte Aktionen am Ende eines Gesprächs einfügen damit der NPC zu dem Wegpunkt geht und danach verschwindet:

void main()
{
object oDeinWegpunkt = GetObjectByTag("Yesyesyo");
ActionMoveToObject(oDeinWegpunkt, TRUE);
ActionDoCommand(DestroyObject(OBJECT_SELF));
}

---

Damit ein NPC vor und nach einem Gespräch in der Gegend rumläuft folgendes bei OnHeartbeat des NPCs einfügen:

if (IsInConversation(OBJECT_SELF))
ActionWait (6.0);

else
ActionRandomWalk();

---

Damit ein NPC eine Tür öffnet, folgendes bei Erfolgte Aktionen bei der Konversation einfügen:

void main()
{
object oTuer = GetObjectByTag("Deine Tür");
ActionUnlockObject(oTuer);
ActionOpenDoor(oTuer);
}

---

Damit ein Hebel o.ä. eine Tür öffnet folgendes bei OnUsed des Hebels einfügen:

void main()
{
object oDoor = GetNearestObjectByTag("Tuer");
AssignCommand(oDoor,ActionOpenDoor(oDoor));
SpeakString("Die Tuer hat sich geoeffnet!");
}

---

Eine Kreatur betet (Wie Norick im Tyr Tempel) (Bei OnHeartbeat der Kreatur vor der letzten Klammer einfügen, "Beten" ist die Kennzeichnung des anzubetenden Gegenstandes. Kann man auch weglassen):

object oBeten = GetNearestObjectByTag("Beten");
if (IsInConversation(OBJECT_SELF) || GetIsInCombat(OBJECT_SELF))
ActionWait (6.0);

else
ClearAllActions();
ActionDoCommand(SetFacingPoint(GetPosition(oBeten)));
ActionDoCommand(PlayAnimation(ANIMATION_LOOPING_MEDITATE,1.0,7.0));

---

Der Spieler wird geheilt, wie in der Kampagne beim Tempel, unter "Erfolgte Aktionen" im Konversationseditor einfügen, an der Stelle wenn der Spieler geheilt werden soll (z.B. "Ich benötige Heilung")

void FakeRestore(object oTarget);

void main()
{
object oPC = GetPCSpeaker();
object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC);
object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION,oPC);
object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oPC);
object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED,oPC);
object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED,oPC);
ActionPauseConversation();
ActionCastFakeSpellAtObject(SPELL_GREATER_RESTORATION, OBJECT_SELF);
ActionDoCommand(FakeRestore(oPC));
if(GetIsObjectValid(oHenchman))
{
ActionDoCommand(FakeRestore(oHenchman));
// checks to see if they have any cure crital wound potions; if not, creates it on them.
if (!GetIsObjectValid(GetItemPossessedBy(oHenchman,"NW_IT_MPOTION003")))
{
CreateItemOnObject("NW_IT_MPOTION003",oHenchman,3);
}
}
if(GetIsObjectValid(oAnimal))
{
ActionDoCommand(FakeRestore(oAnimal));
}
if(GetIsObjectValid(oFamiliar))
{
ActionDoCommand(FakeRestore(oFamiliar));
}
if(GetIsObjectValid(oDominated))
{
ActionDoCommand(FakeRestore(oDominated));
}
if(GetIsObjectValid(oSummoned))
{
ActionDoCommand(FakeRestore(oSummoned));
}
ActionResumeConversation();
}

void FakeRestore(object oTarget)
{
effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION_GREATER);

effect eBad = GetFirstEffect(oTarget);
//Search for negative effects
while(GetIsEffectValid(eBad))
{
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
GetEffectType(eBad) == EFFECT_TYPE_CURSE ||
GetEffectType(eBad) == EFFECT_TYPE_DISEASE ||
GetEffectType(eBad) == EFFECT_TYPE_POISON ||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
{
//Remove effect if it is negative.
RemoveEffect(oTarget, eBad);
}
eBad = GetNextEffect(oTarget);
}
if(GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
{
//Apply the VFX impact and effects
int nHeal = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget);
effect eHeal = EffectHeal(nHeal);
if (nHeal > 0)
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
}
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oTarget);
}

---

Der Spieler kann sich seine eigenen Sachen schmieden.

- 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)

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;
}

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.

---

Sobald der Spieler versucht zu rasten wird er von Wachen gestoppt falls sich der Spieler in ihrem Wahrnehmungsbereich befindet.

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... )

---

Ein NPC spricht den Spieler an sobald dieser ein bestimmtes Wort sagt.

Also du machst zu erst die Kreatur die den Spieler ansprechen soll bei OnSpawn fügst du folgendes Script ein:

void main()
{
SetListenPattern(OBJECT_SELF, "**", 777); //Die Zahl kann alles sein und ** stellt sicher das er auch alles hört
SetListening(OBJECT_SELF, TRUE); //nochmal sichergehen das er auch zu hört
}

so und bei OnConversation fügst du das hier ein:

void main()
{
int iHoeren = GetListenPatternNumber();
string sRufen;
if(iHoeren == 777)
{
sRufen = GetMatchedSubstring(0);
if(sRufen == "Kellner") //Das Wort oder den Satz kann man nach belieben veränder aber auf groß- und Kleinschreibung achten!
{
object oPC=GetFirstPC();
object oNPC=GetObjectByTag("Kellner"); //Die Kennzeichnung der Kreatur
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionMoveToObject(oPC));
AssignCommand(oNPC, ActionStartConversation(oPC));
}
}
}

---

hm sind ein bischen wenig... jedenfalls weniger als erwartet. Wenn ihr Skripte habt die funktionieren postet die bitte auch hier rein, dann haben wir bald eine nette Sammlung zusammen :D
09.07.2002, 21:32 #534
Gawain15
Beiträge: 1.084
Kleine FAQ - Kleine FAQ
Moinsen! Also hier liste ich mal ein paar Basis-Fragen mit dem Editor auf die hier im Forum behandelt wurden. Ihr bitte auch in diesem Thread darum die Liste zu erweitern.

Ich empfehle allen angehenden Weltenerschaffern das offizielle Bioware Tutorial, zu bekommen hier (klick mich)

Problem: Der Charakter soll keine Konversation starten sondern nur eine Zeile in weisser Schrift über seinem Kopf haben.

Lösung: Einfach eine neue Konversation machen und nur eine Zeile eintragen.

---

Problem: Ich kann Sachen nicht stapeln.

Lösung: Zieh einfach den zu stapelnden Gegenstand in den anderen hinnein, Aurora erkennt es automatisch und stapelt die Sachen für dich (wenn es nicht angezeigt wird einfach mal "F5" zum aktualiesieren drücken).

---

Problem: Ich möchte das eine Kreatur einen bestimmten Gegenstand verliert wenn sie stirbt.

Lösung: Einfach das Item im Gepäck der Kreatur auswählen (linke Maustaste) und dann die Checkbox "Ablegbar" auswählen, dann wird der Gegenstand auch gedroppt.

---

Problem: Ich möchte eine Kreatur unverwundbar machen.

Lösung: Unter den Eigentschaften ist eine Checkbox namens "Handlung" diese aktivieren und dann ist die Kreatur unverwundbar und unsterblich (is ja klar wenn man sie nicht verletzen kann :) ).

---

Problem: Ich kann keine/n Truhe/Schrank/Tisch/Kreatur mit Gegenständen drinnen machen.

Lösung: Rechtsklick auf den Gegenstand --> Eigenschaften, dann hast du auf der linken seite ganz unten einen knopf 'Gepäck...'. Wenn du diesen anklickst, dann kannst du einstellen, was drin sein soll.

---

Problem: Ich möchte die Modulbeschreibung einfügen.

Lösung: Bearbeiten--> Eigenschaften des Moduls--> Beschreibung

---

Problem: Ich möchte Schlüssel haben!

Lösung: Leider gibt es keine fertigen Schlüssel, die musst du selbst erstellen. Assistenten --> Gegenstandsassistent --> Schlüssel unter den Eigenschaften kannst du Aussehen und Name bestimmen.

---

Problem: Ich kann keinen Gebietsübergang erstellen.

Lösung: Das was als Verbindung zwischen den Areas dienen soll --> Rechtsklick --> Eigenschaften --> Tab Gebietsübergang --> Gebietsübergang erstellen --> Den zu verbindenden Ein- bzw. Ausgang auswählen --> ok.

---

Problem: Wie schaffe ich es das ein NPC Gegenstände identifiziert?

Lösung: Erstelle einfach einen Händler, jeder Händler kann das automatisch.

---

So nun kommen ein paar Fragen die längere Antworten benötigen:

Problem: Ich kann kein Quest erstellen.

Lösung:
Wähl den "Tagebuch Editor" aus den Werkzeugen aus. Links klickst du auf "Hiinzufügen", änder den Namen von Kategorie000 in "Mein tolles Quest" (das ist das was im Tagebuch als Überschrift erscheint), als Tag nimmst du etwas an dem du es wiedererkennst, z.B. quest_Harald. Priorität bedeutet wenn du das Tagebuch nach Priorität sortierst wo dein Quest erscheint. EP wieviel EP die Spieler bei erfüllung des Quests erhalten sollen (kannst du alternativ auch mit dem Scriptwizard machen... da kannst du ihnen auch Gegenstände etc. geben). Dann wählst du oben dein Quest aus und klickst mit der rechten Maustaste und wählst "hinzufügen", das ganze wiederholst du so oft wie das Tagebuch aktualisiert werden soll/muß bzw. ein neuer Text im Tagebuch erscheinen soll. (z.B. "Die Gruppe soll den Troll aufspüren", "Der Troll ist tot, die Spieler müssen den Trollkopf zu Harald bringen" & "Harald hat den Spielern als Belohnung für den Trollkopf sein Magisches Schwert geschenkt". Das wären die 3 Statusse wenn die Spieler 1. Das Quest bekommen haben und einen Troll aufspüren soll. 2. Die Spieler den Troll getötet haben. 3. Der Trollkopf zum Questgeber gebracht wurde.) Wähle die hinzugefügten Tagebucheinträge aus und trage bei "Text" den Text ein der im Tagebuch erscheinen soll. Bei dem letzten Status makierst du die Checkbox "kategorie fertigst" das sagt der Quest ist abgeschlossen wenn der Status erreicht ist. Dem Kopf gibst du z.B. den Tag "Horags_Kopf". So nun ist das Quest fertig und muss nur noch eingebaut werden: mach ein neues Gespräch oder editier eines. Im Gespräch machst du z.B. (jetzt mal stark gekürzt... nur sonst wird der Post so lang )

Harald: Hi!
PC: Hi
Harald: Ich habe da ein Problem könnt ihr mir vielleicht helfen?
PC: Ja, worum geht es denn
PC: Nein, ich bin gerade beschäftigt [ENDE]
Harald: Ein Troll hat meine Frau getötet, bringt mir seinen Kopf und ich werde euch reichbelohnen.
PC: In Ordnung, ich komme wieder sobald ich den Kopf habe.[ENDE]
PC: Das ist mir zu gefährlich... [ENDE]

Harald: Habt ihr den Kopf schon?
PC: Nein, noch nicht. [ENDE]
PC: Ja, hier ist er.
Harald: Habt tausend dank, hier, nehmt mein Schwert. [ENDE]

so bei "PC: In Ordnung, ich komme..." gibst du eine Variable z.B. "nHarald" 1 (Tab "Erfolgte Aktionen" --> Wizard --> Lokale Variable zuweisen --> oben rechts der Name (hier "nHarald") daunter gibst du "1" ein (die Variable nHarald wird nun auf 1 gesetzt.) --> Weiter) und bei "Harald: Habt ihr den Kopf schon?" gehst du in den Tab "Text erscheint wenn..." und startest wieder den Wizard --> Lokale Variable --> Oben rechts gibst du wieder den Variablen Namen ein ("nHarald") und daunter wieder den Wert ("1"). Nun erscheint der Text erst wenn die Variabe nHarald den Wert 1 besitzt. Bei "PC: Ja, hier ist er." checkst du ob sie den Kopf im Inventat haben. ("Text erscheint wenn", "Gegenstand im Gepäck", Bezeichnung "Horags_Kopf") dann nimmst du den Gegenstand aus dem Gepäck der Spieler (mit behalten checkbox aktiviert, dann droppt harald den Kopf wenn Harald getötet wird) und gibst ihnen ein Schwert. So nun zum Quest Status:

So nun wählst du in der Konversation "PC: In Ordnung, ich komme..." gehst auf "andere Aktionen" wählst unter "Tagebuch" "mein tolles QuesT" aus und nimmst den Wert "1" ("Die Gruppe soll den Troll aufspüren"). Bei "PC: Ja, hier ist er. Bei "Harald: Habt tausend dank, hier, nehmt mein Schwert." gibst du den Tagebuch Wert 3 ein. ("Harald hat den Spielern als Belohnung für den Trollkopf sein Magisches Schwert geschenkt".) und bei Erfolgte Aktionen gibst du den Spielern 2000 EP.

Nun müssen wir noch den Troll erstellen... nehm irgendeinen bearbeite die Kopie und nenn sie in Horag um. Erstell einen Kopf mit dem Objekte Edi und nenn den Tag "Horags_Kopf" und den Namen "Der Kopf des Trolls Horag" den ziehst du in das inventar des Trolles und makierst die Checkbox "ablegbar" damit er den Kopf droppt wenn der Troll stirbt. So ein TagbuchStatus fehlt noch: Wenn die Spieler den Kopf im Invenar haben ist der status 2:

Wähle "Modul Eigenschaften" dann "Bearb." bei "OnAcquireItem"

void main()
{
object oPC;
object oItem;
oItem = GetModuleItemAcquired();
if (GetIsObjectValid(oItem) == TRUE)
{if (GetTag(oItem) == "Horags_Kopf")
{oPC = GetItemPossessor(oItem);
AddJournalQuestEntry("Mein_tolles_Quest", 2, oPC);
}
}
}

---

Problem: Ich kann keine Wegpunkte erstellen die Funktionieren.

Lösung:

Erstelle eine Kreatur und verwende entweder seinen derzeitigen "Tag" oder trage einen neuen ein.

Stelle sicher, dass sich das WalkWayPoints() Kommando im OnSpawn Script der Kreatur befindet.

Setze eine Reihe von Wegpunkten entlang der Route, die die Kreatur entlang gehen soll.

Wähle alle grade neu erstellten Wegpunkte aus, drück den rechten Mousebutton und wähle "Create Set" aus.

Das Wegpunkteset will nun einen Namen von dir haben, der aus "WP_" + dem NSC Tag bestehen muss. D.h. wenn dein NSC Tag "Wache" heißt, musst du das Wegpunkteset "WP_Wache" nennen. Achte auf die Groß-/Kleinschreibung der Tags

Wenn der Tag eines Wegpunktes "POST_" + NSC Tag ist, wird die Kreatur nach einem Kampf zu diesem Punkt zurückkehren.
Anmerkung: Der Tag eines Wegpunktes kann auch "WP_" + NSC Tag + "_0X" statt "WP_" + NSC Tag benannt werden.

---

Problem: Ich möchte eine Tür/Truhe erstellen die man mit einem Schlüssel öffnen kann.

Lösung:
Erstelle einen Schlüssel gib ihm irgendeinen tag wie z.b. schluessel.Platziere eine Truhe,verschliesse sie ,mache einen Hacken bei Truhe kann nur mit Schlüssel geöffnet werden.Der Truhe gibst du auch den tag schluessel.

---

Problem: Ich kann keine selbsterstellte/s Musik/Geräusch einbinden.

Lösung:
- Einfügen der wav-datei im Hakpak-Editor
Unter c:meinneverwinternightsordnernwnutils
die nwhak.exe starten
Unter den Münepunkt "Resource", den punkt "Add" anklicken,
nun könnt ihr eigene wav-datei auswählen und einfügen.

- Speichern des Hakpak unter c:...nwnhak

- Geht ins Toolset. Unter dem Menüpunkt Bearbeiten, bearbeite die
Eigenschaft des Moduls
Unter der Karte Erweitert wählt ihr eure Hak-datei an.
Jetzt nur noch das Module speicher und neustarten, die reihen
an Fehler meldungen sind sozusagen normal, keine Angst hier
passert nicht!

- Toolset neustarten! Die Warnungen mit Ok bestätigen!

- Unter den Klangassistenten könnt ihr euren Klang auswählen!

---

Problem: Ich möchte das mich eine Kreatur bei einem Gespräch angreift.

Lösung: Du öffnest die Konversation, makierst die Antwort bei der er angreifen soll und klickst den Zauberhut bei "Erfolgte Aktionen" an, dann wählst du "Aktion ausführen" und scnhliessend "Angriff". Schon fertig!

---

Problem: Ich möchte das eine Kreatur etwas anderes sagt nachdem ich sie ein 2. mal anspreche.

Lösung: In der Konversation machst du erstmal folgendes:
Zweig 1:
NPC: Hi
PC: Ok, hat geklappt.
Zweig2:
NPC: Hi
PC: Hallo, bin gespannt ob es klappt.

so makier bei Zweig 2 "PC: Hallo.." Dann erfolgte aktionen und Scriptwizard --> lokale Variable zuweisen --> Oben rechts der Name z.B. "Test" daunter den Wert z.B. "100" und dann den Button daneben "Hinzufügen" --> Weiter --> Speichern.

Nun makierst du in Zweig 1 "NPC: Hi" und bei "Text erscheint wenn..." klickst du wieder auf den Hut --> Lokale Variable - Weiter --> Oben rechts der Name (bei unserem Beispeil "Test") da unter den Wert wenn es angezeigt werden soll eintragen (in unserem Beispiel "100") - Hinzufügen --> Weiter --> Speichern.
09.07.2002, 21:34 #535
Gawain15
Beiträge: 1.084
Farmer? -
Bei OnHeartbeat bei den Moduleigenschaften. Oder wenn sich die Köfige und der Auftraggeber im selben Gebiet befinden bei OnHeartbeat in den Gebietseigenschaften, das erhöht die Preformance wenn er nicht ständig so viel rechnen muss (ein wenig kann er verkraften aber wenn dein Modul zu gross wird muss er nachher 100 Sachen pro Sekunde checken...)

Das erste "Monster" ändert den Quest status auf 2
das 2. "Monster" Ist die Variable für das Gespräch, hab das dummerweise auch Monster genannt. Ich hab eine konversation die nur ausgewählt werden kann wenn man alle Käfige zerstört oder geöffnet hat.
09.07.2002, 21:43 #536
Gawain15
Beiträge: 1.084
Farmer? -
So fern keine Probleme vorhanden sind die behandelt werden müssen sage ich mal "Nein danke" ich geh jetzt erstmal schlafen, aber scheu dich nicht zu fragen wenn du Probleme hast. Kuck dir auch mal die Kleine Faq und die Scriptsammlung (die beiden threads von mir) an, vielleicht ist ja etwas dabei was du brauchen kannst
09.07.2002, 21:54 #537
Gawain15
Beiträge: 1.084
wie soll man die 2 drachen auf einmal töten ? *SPOILER* -
Mein Paladin ist nahezu unerschreckbar :D Der eine Drache (weiss nicht mehr welcher) ist um einiges leichter zu besiegen als der andere, den würd ich mir zu erst vornehmen - 50% weniger Gegner = 50% weniger getroffen werden & 50% weniger angst bekommen.

Aber was man als erschreckbarer Char macht... hm ka. Vielleicht klappt es mit der Takitk "Treffer-Rückrufstein-Treffer-Rückrufstein"
09.07.2002, 21:59 #538
Gawain15
Beiträge: 1.084
3DSMax erstelltes Moddel einfügen... WIE ? -
Ja du ersetzt dein neues Model mit einem alten was schon vorhanden ist.
09.07.2002, 22:26 #539
Gawain15
Beiträge: 1.084
Karten online gestellt! -
Lzoril: Naja eigentlich wollte ich eine kleine Downloadgebürh in höhe von 50€ in anspruchnehmen für meinen Mod (um die Serverkosten zu decken)... ich denke aber das ich die Gebühr noch erhöhen muss so leid es mir tut da 1 GB ja allein schon 5€ kostet!

Achja der post ist übrigens, falls du es noch nicht gemerkt haben solltest, nicht ernst gemeint :) .
09.07.2002, 22:37 #540
Gawain15
Beiträge: 1.084
Farmer? -
Ok erst mal: super arbeit, gefällt mir wirklich gut bisher, vor allem das die Stadt und der Wald auf wirklich "lebendig" sind, die umherstreifenden Tiere z.B. tragen viel zur Atmosphäre bei.

Ein paar Sachen (ich hab mir das im Edi noch nicht angeschaut weil ich gleich schlafen gehe):

- Ist es so gewollt das ich die Stadt verlassen kann und in dem Gebiet mit dem "Tierbefreiungsquest" lande, wenn ich zurück will aber durch das Goblin Gebiet, die Höhle gehen muss und dann am anderen Ende der Stadt rauskomme?

- Setze ein paar Kartennotizen, das würde die Orientierung in den doch recht großen Gebieten um einiges erleichtern (z.B. eine Notiz für den Standort von Vevo, dem Waldläufer, den Tierkäfigen, dem Camp der Golbins etc.)

- Der Quest mit dem Truhenschlüssel funktioniert nicht richtig (das ist doch der den man im Goblinzelt findet oder?), es wird nicht erkannt das ich den Schlüssel besitze, also wenn ich ihn im Gepäck habe kann ich tortzdem nicht mit Vevo dadrüber sprechen. (Es kann sein das es meine Schuld ist :) Ich hatte den Tag des Schlüssels geändert da es Probleme gab wenn er 2 mal existierte und zum testen hatte ich den Schlüssel ja am Hafen hingelegt... ich kuck mir das morgen mal an.)

Und falls du nicht weißt wie man eine Kartennotiz erstellt (das sind auf der Karte die goldenen Punkte, die einen Text zeigen wenn man mit der Maus drüberfährt.): Ganz rechts in der Buttonleiste "Wegpunkte platzieren" auswählen --> Kartennotiz --> Platzieren wo es auf der Minimap erscheinen soll (die musst du in deinem Gebiet platzieren wie "normale" Wegpunkte) --> Rechtsklick auf die Kartennotiz --> Eigenschaften --> Erweitert --> Unter "Kartennotiz-Text" den Text eingeben der auf der Minimap des Spielers erscheinen soll (z.B. "Goblincamp").
09.07.2002, 22:39 #541
Gawain15
Beiträge: 1.084
Kleine FAQ -
Problem: Wie erstelle ich einen von den Punkten die in der Minimap des Spielers auftauchen (Kartennotiz)?

Lösung: Ganz rechts in der Buttonleiste "Wegpunkte platzieren" auswählen --> Kartennotiz --> Platzieren wo es auf der Minimap erscheinen soll (die musst du in deinem Gebiet platzieren wie "normale" Wegpunkte) --> Rechtsklick auf die Kartennotiz --> Eigenschaften --> Erweitert --> Unter "Kartennotiz-Text" den Text eingeben der auf der Minimap des Spielers erscheinen soll (z.B. "Goblincamp").

---

Problem: Ich möchte dieses "Überreden" aus der Kampagne auch bei meinem NPC einsetzen.

Lösung: - Als erstes öffnen wir den Konversations Editor des gewünschten NPCs.
- Wir erstellen einen Text zweig:
NPC: Hallo!
PC: Hallo, was macht ihr hier?
NPC: Das... wäre zu kompliziert für euch!
PC: Nun gut... [Dialog Beenden]
PC: Seit ihr Sicher?
NPC: Ihr habt recht... ich bin dafür zuständig die Stadt zu beschützen.
NPC: Ja, absolut.

- So nun kommt der "schwierige Teil" aber keine Angst, geht alles vollkommen ohne Scripten!

- Geht in die Zeile "Seit ihr Sicher?" (Dort werden wir den das Überreden in der roten Schrift einsetzen)

- Unten links in der Box "Text" klickt ihr mit der linken Maustaste die erste Stelle an --> Rechtsklick --> "Token einfügen". Nun wählt ihr "Start Check" --> ok.

- Nun schreibt ihr im Textfeld hinter "<StartCheck>" "[Überreden]".

- Nach "[Überreden]" Rechtsklick --> Token einfügen --> "/Start".

- Nun sollte die Zeile folgender Maßen aussehen: "<StartCheck>[Überreden]</Start> Seit ihr sicher?" Nun wird "[Überreden]" im Spiel in roter Schrift dargestellt.

- Das selbe macht ihr bei den beiden nachfolgenden Zeilen und fügt be ider ersten anstatt "[Überreden]" "[Erfolg]" und bei der anderen "[Misserfolg]" ein. Nun sollten die beiden Zeilen so aussehen:

<StartCheck>[Erfolg]</Start> Ihr habt recht... ich bin dafür zuständig die Stadt zu beschützen.
<StartCheck>[Misserfolg]</Start> Ja, absolut.

- Gut nun kommen wir zum eigentlich "Überredungstest": Makiert die Zeile "Ihr habt recht..." Unter dem Tab "Text erscheint wenn..." benutzt ihr nun den Scriptwizard (Kleiner Zauberhut). Wir möchten Würfeln ob das Überreden erfolgreich war, also wählen wir "Feritgkeitswurf" --> Weiter. Unter den Wählbaren Fertigkeiten nehmen wir "Überreden" da wir versuchen möchten den NPC zu überreden. Die Schwierigkeit setzen wir auf Normal. Es soll kein leichter und kein schwerer Wurf benötigt werden. Nun klicken wir auf "hinzufügen" --> "Weiter" Speichern.

- Wenn der Wurf erfolgreich war sagt der NPC nun die Zeile "Ihr habt recht..." Misslingt der Wurf spricht der NPC den Satz "Ja, Absolut."

---

Problem: Mein NPC ist nackt obwohl ich ihm eine Rüstung/Waffe gegeben habe!

Lösung: Er braucht natürlich die entsprechenden Skills, z.B. für eine leichte rüstung benötigt er auch den SKill "Umgang mit leichten Rüstungen" Skills kannst du unter den NPC Eigenschaften im Tab "talente" einstellen.

---

Problem: Ich kann keinen Händler erstellen.

Lösung:
- Wähle den "Münzstapel Button" aus der Platzierungsleiste auf der rechten Seite.

- Such dir einen Händler raus und platziere ihn irgendwo auf deiner Karte (am besten direkt neben dem Händler damit du es auf zu ordnen kannst, sonst könntest du später den Überblick verlieren.)

- Merke oder Kopiere die Kennzeichnung der Händler Marke.

- Öffne den Konversations Editor deines Händlers.

- Dort wo der Händler Screen erscheinen soll (also z.B. bei "Lasst mich eure Waren sehen") benutzt du den Scriptwizard bei Erfolgte Aktionen.

- Wähle "Aktion Ausführen" --> Händler öffnen. Bei Skript Kennzeichnung kommt der Kopierte oder gemerkte Text hinnein.

---

Problem: Ich weiss nicht wie ich einen Schlüssel einer Tür zu weisen kann.

Lösung: Unter den Eigenschaften der Tür im Tab "Schloss" die Schlüssel Kennzeichnung des Schlüssel mit dem die Tür geöffnet werden soll unter "Schlüssel-Kennz." eingeben.

---

Problem: Ich möchte das mir ein NPC einen Gegenstand gibt.

Lösung: Im Konversationseditor die Zeile makieren bei der ein Gegenstand vom NPC übergeben werden soll. Unter dem Tab "Erfolgte Aktionen" den Scriptwizard starten --> Belohnung geben --> Oben rechts auf die drei Punkte klicken (...) und Gegenstand auswählen --> "Hinzufügen" drücken --> unten rechts auf "weiter" --> Speichern.

---

Problem: Ich möchte das Kreaturen mehr/weniger XP geben.

Lösung: Du nimmst dir die gewünschte Kreatur und gehst in die Eigenschaften (bei den vorgefertigen Monstern und NPCs wäre das "Kopie bearbeiten" und du musst sie dann unter einem anderen Namen abspeichern damit du die Kampagnen Kreaturen nicht überschrieben werden) dann in den Tab "Erweitert" dort unten links bei "Herausforderungsgrad" kannst du unter "Anpassen" bis zu 125 eintragen, dadurch wird der Gegner "schwerer" bzw. "leichter" und bringt dem entsprechend mehr oder weniger XP (Es gehen auch minus Werte) allerdings kenne ich die Formel nicht wie das ganze berechnet wird also hilft nur etwas rumprobieren.

---

Problem: Ich möchte das Truhen/Schränke etc. kein generierten loot enthalten.

Lösung: Bei dem Object unter OnOpen sollte das Script ungefähr folgender maßen aussehen (es gibt mehrere Varianten, je nach Behälter, mehr oder weniger guter "loot")

void main()
{
if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0)
{
return;
}
object oLastOpener = GetLastOpener();
GenerateHighTreasure(oLastOpener, OBJECT_SELF);
SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1);
ShoutDisturbed();
}

Eigentlich kannst du das ganze Script löschen, wenn du nur die GenerateTreasure zeile löscht geht es auch.

---

Problem: Ich möchte das sich ein Spieler auf einen Stuhl setzen kann.

Lösung: Du mußt den Stuhl auf den sich Spieler setzen kann benutzbar machen und dann beim OnUsed das Script einfügen

void main()
{
object oPC = GetLastUsedBy ();
object oStuhl = OBJECT_SELF;
if (GetIsPC (oPC))
{
if (GetIsObjectValid(oStuhl) && !GetIsObjectValid
(GetSittingCreature (oStuhl)))
{
AssignCommand (oPC, ActionSit (oStuhl));
}
}
}

---

Problem: Ich möchte eine Falle haben die man nicht aufspüren kann.

Lösung: Setz den Wurf so hoch an das die Falle nicht einmal von einem "Meisterentdecker" aufgespürt werden kann. Unter den Eigenschaften der Falle im Tab "Falle" den Wert im Feld "SG für Suchen" auf 250 setzen.

---

Problem: Ich möchte das eine Kreatur den Kampf aufgibt bevor sie stirbt und mich anschließend anspricht.

Lösung:

Bei OnDamaged der Kreatur einfügen:

void main()
{
if (GetCurrentHitPoints(OBJECT_SELF)<=40)
{
object oPC = GetLastAttacker(OBJECT_SELF);
AdjustReputation(oPC, OBJECT_SELF, 100);
AssignCommand(oPC, ClearAllActions());
AssignCommand(OBJECT_SELF, ClearAllActions());
AssignCommand(OBJECT_SELF, ActionStartConversation(oPC));
}
}

---

Problem: Ich möchte das Monster immer wieder neu spawnen.

Lösung:

Erstelle eine Begegnung und die zu spawnenden Kreaturen hinnein. Geh in die Eigenschaften der Begegnung (Rechtsklick --> Bearbeiten) nun gehst du (und es ist wichtig das du es in dieser Reihenfolge machst, sonst können Probleme auftreten.) zu erst in den Tab "Erweitert", dort aktivierst du die Checkbox "Erneute Platzierung" Dann gibst du eine Zeitspanne ein wann man den Trigger wieder auslösen kann nachdem die letzte Kreatur der Begegnung getötet wurde, danach die Anzahl wie oft der Trigger sich selbst neu platzieren soll (lass ihn auf 0 und aktiviere die checkbox "unbegrenzte Neuplatzierung" falls sie unendlich spawnen sollen). Nun gehst du wieder in das Tab "Grundlagen" und wählst aus dem Drop-down "Platzierungs-Option" "Ständig" aus.

So nun spawnen die Monster immer wieder neu wenn sie getötet wurden und der Spieler wieder über den Trigger läuft.

---
09.07.2002, 22:45 #542
Gawain15
Beiträge: 1.084
Der neue Module Thread !!! -
Ich denke es dauert noch etwas bis wirklich _gute_ Modul erscheinen, aber ich weiß: Da geht einiges! Vor allem wenn ich sehe was so im Toolset Forum abgeht.
09.07.2002, 22:47 #543
Gawain15
Beiträge: 1.084
suche Rollenspielgruppe -
Was ist denn aus der Spielergruppe geworden die sich hier im Forum gebildet hat?
09.07.2002, 22:52 #544
Gawain15
Beiträge: 1.084
Langschwert vs. Bastardschwert -
Laut handbuch sind Zwerge auch Mittelgroß, die können auch Waffen in einer hand tragen für die Halblinge z.B. beide brauchen.
09.07.2002, 23:08 #545
Gawain15
Beiträge: 1.084
Wie mache ich ene Türe? -
Nicht unbedingt, du kannst alternativ auch unter "Auslöser Platzieren" den Gebietsübergang nehmen.

Aber zu den Türen: Du nimmst den 2 Button von links (die Türgrafik) aus der Objektleiste (auf der rechten Seite die), dann suchst du dir eine passende Tür aus. Dein Courser sollte nun eine rotierende Tür sein fahr mit ihm über einen Eingang wo eine Tür reinpasst und klicke wieder mit der linken Maustaste. Nun sollte die Tür platziert worden sein. Wenn du nun einen Gebietsübergang erstellen möchtest klicke mit der rechten Maustaste auf die Tür und wähle "Eigenschaften" öffne den Tab "Gebietsübergang". Nun klickst du auf "Gebietsübergang erstellen" und wählst aus wo der Spieler ankommen soll wenn er durch die Tür geht.

PS: achte ein wenig auf "Schnelltip fehler", lies dir deinen Post am besten noch einmal durch bevor du ihn abschickst.
09.07.2002, 23:16 #546
Gawain15
Beiträge: 1.084
spielleiter frage -
lol "entlasten"... naja wie dem auch sei:

Auf die Idee mit den lichtern bin ich auch gekommen, aber da hätten wir auch schon wieder folgendes Problem: angenommen du hast ein mittel großes Modul gebaut und hast sagen wir mal 12 Gebiete... wer soll sich bitte all die farben merken? :)

Also man könnte aber eigentlich wirklich Portale machen, jedes Portal für ein Gebiet und NPCs braucht man auch nicht da man auch Objekte sprechen lassen kann. (Du kannst z.B. auch Wandschränke sprechen lassen.) Am besten man macht sie so wie in der Kampagne, d.h. wenn man drauf klickt kommt ein Text "Ich führe zum Wald, willst du durch mich hindurch schreiten?" hm... ich mach morgen mal die Skripte.... gute Idee von dir.
09.07.2002, 23:22 #547
Gawain15
Beiträge: 1.084
Kleine FAQ -
Schön zu sehen das ich so viel positives Feedback bekommen habe, dachte ihr buht mich eher aus als zu loben :)
Gute Idee aus den beiden Threads Stickys zu machen nur das Problem ist das hier so gut wie nie ein Moderator reinschaut hab ich das Gefühl... naja gibt hier ja auch nicht allzu viel aufzuräumen da wir uns alle benehmen können :)
10.07.2002, 10:05 #548
Gawain15
Beiträge: 1.084
Server mieten? -
Naja, weißt du denn wieviel Traffic ein User per Sekunde verbraucht?
10.07.2002, 10:13 #549
Gawain15
Beiträge: 1.084
Wieviele Akte wirklich? -
Also eigentlich gibt es 7 Chapter: *Kleiner Spoiler*






- Prelude
- Chapter 1
- Chapter 1E (Helmiten Festung)
- Chapter 2
- Chapter 2E (Luskan und der Heerturm)
- Chapter 3
- Chapter 4
10.07.2002, 10:18 #550
Gawain15
Beiträge: 1.084
Welche Attribute sind für einen Paladin wichtig? -
Also Weisheit brauchst du nur 14 damit du alle Zauber casten kannst, für jede weitere erhöhung bekommst du mehr Zauber pro Stufe.

Charisma ist wirklich sehr wichtig (hey, ich kann sogar Kriegermumien Angst einjagen)

Stärke sowieso damit du auch mal zuschlagen kannst.

Kon Für Hitpoints

Ges falls du einen Ausweichler machst... ansonsten zu vernachlässigen.

Int Hm ja eigentlich auch, hab aber nur Basis 10 Int (12 dank eines Ringes)

Resume: eigentlich ist alles wichtig :)
Seite 22 von 44 « Erste 18  19  20  21  22  23  24  25  26 Letzte »