Zitat von
knarrschak
Hi, es passt zwar nicht richtig in dieses Forum, doch hab ich gesehen das es einige Modder in diesem Forum gibt! Und da ich nichts zu tun hab bis DL, hab ich angefangen nen kleinen Mod für NWN zu basteln (Der SDK ist schön einfach zu bedienen
).
Ich hab nun aber einige Fragen:
1.Wie kann ich es machen das ein gesprochenes gespräch kein zweites mal kommt bzw. ein neues kommt?
2.Wie kann ich ein Heilemann machen?
3.Wie kann ich bestehende Questlogbuch einträge aktualisieren?(also z.B. nach erfolgreichem Quest.)
Helft bitte einem armen Unwissenden
Danke im vorraus Knarrschak
SDK= Toolset?
Als erstes hier die Info an Dich Scripte als Anfänger nicht einfach zu kopieren, sondern
zu tippen und versuchen zu verstehen. Das hilft am Anfang wirklich weiter.
Hier 3 wichtige Links zum Thema NWN Scripting:
http://nwn.bioware.com/forums/viewto...28728&forum=47
http://www.nwnlexicon.com/
http://www.rpg-pool.de/include.php?p...er=&themeid=11
1.) Indem Du Variable verwendest. Entweder auf den PC(PCSpeaker) oder
auf den NSC(OBJECT_SELF).
(Wenn Variable "X" gleich "Y" dann sage das).
Variable auf NSC(OBJECT_SELF) sichten:
Code:
int StartingConditional()
{
// Lokale Variablen sichten
if (!(GetLocalInt(OBJECT_SELF, "wert") == 2))
return FALSE;
return TRUE;
}
Variable auf NSC(OBJECT_SELF) setzen:
Code:
void main()
{
SetLocalInt(OBJECT_SELF, "wert", 2);
}
2.)
Denke Du meinst einen Priester, welcher im Tempel per Gespräch heilt:
Code:
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);
}
3.)
Code:
void main()
{
AddJournalQuestEntry("Text", 2, GetPCSpeaker(), FALSE);
}