DMH-Online

Dungeon Masters Helper · Est. 2005

Misc Scripts

NWN Script: reward_rp.htm

Author Sticky: Post Working Scripts Here
fendis_khan Posted: Thursday, 04 July 08:18PM
Script Name: Reward RolePlaying

What it does: Assigns rewards (XP and alignment points) for playing in character.

Notes: The function RewardRolePlay is large enough to deserve its own file. Just #include that file in any script that needs it. Generally, the scripts that use this file are attached to PC responses in a conversation tree. An example, I include a script that rewards a character for giving an 'evil' response. Note that not all rewards are beneficial.

p.s. If you are not used to using #include files, they will not usually compile as written (they don't need to). Just save them. They are compiled when the script that 'includes' them is compiled.

NWScript:
//::///////////////////////////////////////////////
//:: Conversation Reward Functions
//:: aa_conv_rewards
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    Assigns various rewards based on conversation
    responses.  Rewards may include 
    alignment shifts, XP, gold, items
*/
//:://////////////////////////////////////////////
//:: Created By: Keith Voss (fendis_khan)
//:: Created On: 2 Jul 2002
//:://////////////////////////////////////////////

//PRIVATE FUNCTION DECLARATIONS
// Assigns alignment shift and XP based on PC response
// - returns level of misalignment between alignment and response
// - returns negative value if Reward fails to be awarded
// nResponse: Alignment of response
// nAlignmentAxis: Alignment axis (ALIGNMENT_GOOD or ALIGNMENT_LAWFUL)
// nXPReward: XP reward for answering in character
// nAlignReward: Alignment shift toward that of response
int RewardRolePlay( object oPC, int nResponse, int nAlignmentAxis=ALIGNMENT_GOOD, int nXPReward=20, int nAlignReward=1 );
//::///////////////////////////////////////////////
//:: RewardRolePlay Functions
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    Assigns alignment shift and XP based on PC
    response.  XP given for correct roleplay;
    alignment shift given to all
*/
//:://////////////////////////////////////////////
//:: Created By: Keith Voss (fendis_khan)
//:: Created On: 2 Jul 2002
//:://////////////////////////////////////////////
int RewardRolePlay( object oPC, int nResponse, int nAlignmentAxis=ALIGNMENT_GOOD, int nXPReward=20, int nAlignReward=1 )
{
    int nAlignmentValue;
    int nAlignment;
    int nAlignUp;
    int nAlignDown;
    int nMisAligned = -1; // 0 indicates match, 1 or 2 indicate difference in alignment, -1 invalid call
    if ( (!GetIsPC( oPC )) || (nXPReward < 0) || (nAlignReward < 0) )
    {
        return -1; // signal reward failure
    }
    if ( (nAlignmentAxis == ALIGNMENT_GOOD) || (nAlignmentAxis == ALIGNMENT_EVIL) )
    {
        nAlignmentValue = GetGoodEvilValue( oPC );
        nAlignment = GetAlignmentGoodEvil( oPC );
        nAlignUp = ALIGNMENT_GOOD;
        nAlignDown = ALIGNMENT_EVIL;
    }
    else if ( (nAlignmentAxis == ALIGNMENT_LAWFUL) || (nAlignmentAxis == ALIGNMENT_CHAOTIC) )
    {
        nAlignmentValue = GetLawChaosValue( oPC );
        nAlignment = GetAlignmentLawChaos( oPC );
        nAlignUp = ALIGNMENT_LAWFUL;
        nAlignDown = ALIGNMENT_CHAOTIC;
    }
    else return -1; // signal reward failure
    // reward PC for answering in character
    if ( nAlignment == nResponse )
    {
        nMisAligned = 0;
        GiveXPToCreature( oPC, nXPReward ); // no misalignment
    }
    else
        // no match, neutral cannot differ by more than one alignment
        if ( (nAlignment == ALIGNMENT_NEUTRAL) || (nResponse == ALIGNMENT_NEUTRAL) )
        {
            nMisAligned = 1; // slight misalignment
        }
        else
        {
            nMisAligned = 2; // complete misalignment
        }
    // shift alignment toward that of response
    if ( nResponse != ALIGNMENT_NEUTRAL )
    {
        // if alignment and response opposed, double penalty
        AdjustAlignment( oPC, nResponse, nAlignReward*(1+nMisAligned/2) );
    }
    else
    {
        if ( nAlignmentValue > 50 )      // high side of neutral
        {
            AdjustAlignment( oPC, nAlignDown, nAlignReward );
        }
        else if ( nAlignmentValue < 50 ) // low side of neutral
        {
           AdjustAlignment( oPC, nAlignUp, nAlignReward );
        }
    }
    return nMisAligned;
}
//::///////////////////////////////////////////////
//:: Reward for Evil dialogue
//:: lr_reward_evil
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    Cause PC alignment to shift toward Evil;
    and give Evil PC some XP for answering in character
*/
//:://////////////////////////////////////////////
//:: Created By: Keith Voss (fendis_khan)
//:: Created On: 30 Jun 2002
//:://////////////////////////////////////////////
#include "aa_conv_rewards"
void main()
{
    int nResponse       = ALIGNMENT_EVIL; // alignment of response
    int nAlignmentAxis  = ALIGNMENT_GOOD; // alignment axis (GOOD/EVIL or LAW/CHAOS)
    int nXPReward       = 20; // XP reward for answering in character
    int nAlignReward    = 1; // Alignment shift in direction of response
    int nMisAligned     = 0; // Assume alignment matches response
    object oPC = GetPCSpeaker(); // assign reward to conversation speaker
    if ( GetLocalInt( oPC, "lr_reward" ) == FALSE )
    {
        nMisAligned = RewardRolePlay( oPC, nResponse, nAlignmentAxis, nXPReward, nAlignReward );
        if ( nMisAligned >= 0 )
        {
            // Remember the correlation between PC alignment and response
            SetLocalInt( oPC, "lr_reward", TRUE + nMisAligned );
        }
        else
        {
            SendMessageToPC( oPC, "Response Reward System Failed" );
        }
    }
}
⌂ All Scripts ← PreviousNext → 👁 Category List

All Misc Scripts

📄 arena 📄 cast_bless_on_PC 📄 change_music 📄 chess_game 📄 climbing 📄 climbing_002 📄 common_includes_002 📄 cone_aoe 📄 cron 📄 cross_country_travel 📄 daoc_style_graves 📄 determine_time 📄 effects 📄 escort 📄 ez_respawn 📄 faction 📄 floating_text 📄 function_includes 📄 gambling 📄 include_sounds 📄 include_time_date 📄 jail 📄 jail_system 📄 journal_entry 📄 logbook 📄 manage_action_queue 📄 mmorpg_vault 📄 mod_intro 📄 mod_intro_002 📄 mod_intro_003 📄 mod_intro_005 📄 pers_world_database 📄 pers_world_database_002 📄 piller_of_fire 📄 plot_item 📄 portal_system 📄 portal_system_002 📄 puking 📄 quest_escort 📄 rep_per 📄 reward_rp 📄 rotation 📄 save_pc_location_002 📄 save_pc_location_003 📄 skill_checks 📄 skill_checks_002 📄 slot_machine 📄 story 📄 swimming 📄 take20_bypass 📄 vis_waypoint 📄 working_temple 📄 working_temple_002 📄 xp_gold_loss 📄 xp_gold_loss_002 📄 xp_loss_action