NWScript

Postitusaeg: juuni 2014

Kuidas siis koodi käsitsi kirjutamine ikkagi käib? Neverwinter Nights kasutab omaenda programmeerimiskeelt, mille nimi on NWNScript. Toon ühe näite koodi näol, mis toimib olukorras, kus tegelane joob ära alkoholse joogi, mis põhjustab talle ühe punkti kahjustust ja lisaks tema reflekside vähenemist kahe punkti võrra, kuid visaduse (fortitude) ja tahtejõu (will) kasvamist samuti kahe punkti võrra.

NWNScriptis näeb mu võhiklikult nikerdatud, aga kokkuvõttes funktsionaalne kood välja selline:


void main()

{

object oPC;

object oItem;

object oTarget;

oPC = GetPCSpeaker();

oItem = GetFirstItemInInventory(oPC);

while (GetIsObjectValid(oItem))

{

if (GetTag(oItem)==“Salapranejook”) DestroyObject(oItem);

oItem = GetNextItemInInventory(oPC);

}

oTarget = oPC;

effect eEffect;

eEffect = EffectSavingThrowDecrease(SAVING_THROW_REFLEX, 2, SAVING_THROW_TYPE_ALL);

ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget);

eEffect = EffectSavingThrowIncrease(SAVING_THROW_FORT, 2, SAVING_THROW_TYPE_ALL);

ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget);

eEffect = EffectSavingThrowIncrease(SAVING_THROW_WILL, 2, SAVING_THROW_TYPE_ALL);

ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget);

eEffect = EffectDamage(1, DAMAGE_TYPE_NEGATIVE, DAMAGE_POWER_ENERGY);

ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);

}

Ja lõpetuseks pole muud, kui vaadata uhkusega seda sõnadejada, mis veel paari kuu eest oleks mulle näinud hiina keelena, ja tunda sellesama koodi üle juba mõni kuu hiljem piinlikkust, kui mõistan kui palju lihtsamalt ja vähemate võimalike tõrgeteta oleksin võinud sama eesmärki täitva koodi kokku panna.

Kui kedagi huvitab NWN koodide kirjutamine lähemalt, siis siin on link NWScript piiblile, ilma milleta ma Vangide mooduli ehitamisega jänni oleks jäänud. Ettevaatust - raamatu on päris paksuke.