/**
* $Id: dlg_well.nss,v 1.2 2005/08/07 04:38:30 pspeed Exp $
*
* This is the dialog handler script for the well. It
* has one "page" that allows the user to select one of
* their inventory items to throw away. I say "page"
* because for most players it will automatically be split
* into multiple pages with 10 items per page.
*
* Copyright (c) 2004 Paul Speed - BSD licensed.
* NWN Tools - http://nwntools.sf.net/
*/
#include "zdlg_include_i"
#include "x3_inc_string"
#include "fastbuff_inc"
const string LIST_NAME = "spell list";
void Init()
{
// We'll create a new inventory list each
// time the player clicks on the well.
// Note: we have to be very careful to clean it
// up if the user ends or aborts the conversation.
//
// Since the inventory selections will be different
// for every player and we don't want two simultaneous
// conversations sharing each others' list, we'll stick
// the list on the player.
object oPlayer = GetPcDlgSpeaker();
object oItem = GetItemPossessedBy(oPlayer, "fastbuff");
if(GetLocalInt(oItem, "first_time") != 1)
{
AddStringElement("Understood.", LIST_NAME, oPlayer);
}
else
{
int index = 0;
int i;
int iSpellID;
string sSpellName;
for(i = 0; i < GetIntArraySize("SpellBuff", GetModule()); i++)
{
iSpellID = GetIntArrayElement("SpellBuff", i, GetModule());
if(iSpellID != 0 && GetHasSpell(iSpellID, oPlayer) >= 1)
{
sSpellName = GetSpellName(iSpellID);
if(GetLocalInt(oItem, IntToString(iSpellID)) != 1)
{
sSpellName = "ON" + " " + GetSpellName(iSpellID);
AddStringElement(sSpellName, LIST_NAME, oPlayer);
SetLocalString(oItem, "i" + IntToString(index), "s" + IntToString(iSpellID));
index++;
}
else if(GetLocalInt(oItem, IntToString(iSpellID)) == 1)
{
sSpellName = "OFF" + " " + GetSpellName(iSpellID);
AddStringElement(sSpellName, LIST_NAME, oPlayer);
SetLocalString(oItem, "i" + IntToString(index), "s" + IntToString(iSpellID));
index++;
}
}
}
}
}
void CleanUp()
{
// Delete the list we create in Init()
object oPlayer = GetPcDlgSpeaker();
DeleteList( LIST_NAME, oPlayer );
}
void HandleSelection()
{
int selection = GetDlgSelection();
int iSpellID;
object oPlayer = GetPcDlgSpeaker();
object oItem = GetItemPossessedBy(oPlayer, "fastbuff");
string sSpell;
// Use the user selection to get the item from the
// list.
string sElement = GetStringElement ( selection, LIST_NAME, oPlayer);
//FloatingTextStringOnCreature(sElement, oPlayer, FALSE);
//FloatingTextStringOnCreature(GetSubString(sElement, 0, 13), oPlayer, FALSE);
//object oItem = GetObjectElement( selection, LIST_NAME, oPlayer );
if( GetLocalInt(oItem, "first_time") != 1 )
{
SetLocalInt(oItem, "first_time", 1);
EndDlg();
DelayCommand(0.1f, StartDlg( oPlayer, oItem, "script_conv", TRUE, FALSE ));
}
else if(GetSubString(sElement, 0, 12) == "ON")
{
sElement = StringReplace(sElement, "ON", "OFF");
sSpell = GetLocalString(oItem, "i" + IntToString(selection));
iSpellID = StringToInt(GetSubString(sSpell, 1, 3));
SetLocalInt(oItem, IntToString(iSpellID), 1);
ReplaceStringElement(selection, sElement, LIST_NAME, oPlayer);
}
else if(GetSubString(sElement, 0, 13) == "OFF")
{
sElement = StringReplace(sElement, "OFF", "ON");
sSpell = GetLocalString(oItem, "i" + IntToString(selection));
iSpellID = StringToInt(GetSubString(sSpell, 1, 3));
SetLocalInt(oItem, IntToString(iSpellID), 0);
ReplaceStringElement(selection, sElement, LIST_NAME, oPlayer);
}
// And end the conversation
}
void main()
{
object oPC = GetPcDlgSpeaker();
object oItem = GetItemPossessedBy(oPC, "fastbuff");
string sMeta;
int iEvent = GetDlgEventType();
switch( iEvent )
{
case DLG_INIT:
Init();
break;
case DLG_PAGE_INIT:
// Only one page.
if(GetLocalInt(oItem, "first_time") != 1)
{
SetDlgPrompt("Hello " + "" + GetName(oPC) + "" + ", I am your fast buffer. \n \n" +
"I can cast all your buff spells automatically and instantly. You can target either yourself or a party member (familiars, summons, etc included). \n \n" +
"I will only cast spells you have learned/memorized/prepared. Don't worry I won't spend their charges/day. \n \n" +
"You can check which spells are going to be automatically cast or not by their prefix ON or OFF." );
}
else
{
SetDlgPrompt("Hello " + ""+ GetName(oPC) + "" + ". \n \n" +
"These are the spells that are going to be cast automatically. \n \n" +
"Just click on them to disable them from being automatically cast." );
}
// We turn on the end prompt so that it will show up at the
// bottom of every page.
if(GetLocalInt(oItem, "first_time") != 1)
{
SetShowEndSelection( FALSE );
}
else
{
SetShowEndSelection( TRUE );
}
// And give it the list it should use for the page.
SetDlgResponseList( LIST_NAME, GetPcDlgSpeaker() );
break;
case DLG_SELECTION:
HandleSelection();
break;
case DLG_ABORT:
case DLG_END:
// We do the same thing on abort or end
CleanUp();
break;
}
}