Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
346 lines
15 KiB
Plaintext
346 lines
15 KiB
Plaintext
//:://////////////////////////////////////////////
|
|
//:: Conjunctive Gate Conversation
|
|
//:: true_gate_conv
|
|
//:://////////////////////////////////////////////
|
|
/** @file
|
|
This allows you to choose which summon to get using Conjuctive Gate (and normal Gate)
|
|
|
|
@author Stratovarius
|
|
@date Created - 29.10.2005
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
|
|
//#include "prc_alterations"
|
|
#include "true_inc_trufunc"
|
|
#include "inc_dynconv"
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Constant defintions */
|
|
//////////////////////////////////////////////////
|
|
|
|
const int STAGE_SUMMON_CHOICE = 0;
|
|
const int STAGE_CONFIRMATION = 1;
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Aid functions */
|
|
//////////////////////////////////////////////////
|
|
|
|
int NameToInt(string sSummon)
|
|
{
|
|
// Celestials
|
|
if (sSummon == "Astral Deva" ) return 1;
|
|
else if (sSummon == "Bralani Eladrin" ) return 2;
|
|
else if (sSummon == "Celestial Avenger" ) return 3;
|
|
else if (sSummon == "Hound Archon" ) return 4;
|
|
else if (sSummon == "Lantern Archon" ) return 5;
|
|
else if (sSummon == "Word Archon" ) return 6;
|
|
// Demons/Devils
|
|
else if (sSummon == "Balor" ) return 7;
|
|
else if (sSummon == "Bezekira" ) return 8;
|
|
else if (sSummon == "Cornugon" ) return 9;
|
|
else if (sSummon == "Erinyes" ) return 10;
|
|
else if (sSummon == "Gelugon" ) return 11;
|
|
else if (sSummon == "Glabrezu" ) return 12;
|
|
else if (sSummon == "Hamatula" ) return 13;
|
|
else if (sSummon == "Imp" ) return 14;
|
|
//else if (sSummon == "Marilith" ) return 15;
|
|
else if (sSummon == "Osyluth" ) return 16;
|
|
else if (sSummon == "Succubus" ) return 17;
|
|
else if (sSummon == "Vrock" ) return 18;
|
|
// Elementals
|
|
else if (sSummon == "Elder Air Elemental" ) return 19;
|
|
else if (sSummon == "Elder Earth Elemental" ) return 20;
|
|
else if (sSummon == "Elder Fire Elemental" ) return 21;
|
|
else if (sSummon == "Elder Water Elemental" ) return 22;
|
|
else if (sSummon == "Steam Mephit" ) return 23;
|
|
// Slaadi
|
|
else if (sSummon == "Green Slaad" ) return 24;
|
|
else if (sSummon == "Red Slaadi" ) return 25;
|
|
else if (sSummon == "Death Slaadi" ) return 26;
|
|
|
|
// on Error
|
|
return -1;
|
|
}
|
|
|
|
string IntToName(int nChoice)
|
|
{
|
|
// Celestials
|
|
if (nChoice == 1 ) return "Astral Deva";
|
|
else if (nChoice == 2 ) return "Bralani Eladrin";
|
|
else if (nChoice == 3 ) return "Celestial Avenger";
|
|
else if (nChoice == 4 ) return "Hound Archon";
|
|
else if (nChoice == 5 ) return "Lantern Archon";
|
|
else if (nChoice == 6 ) return "Word Archon";
|
|
// Demons/Devils
|
|
else if (nChoice == 7 ) return "Balor";
|
|
else if (nChoice == 8 ) return "Bezekira";
|
|
else if (nChoice == 9 ) return "Cornugon";
|
|
else if (nChoice == 10) return "Erinyes";
|
|
else if (nChoice == 11) return "Gelugon";
|
|
else if (nChoice == 12) return "Glabrezu";
|
|
else if (nChoice == 13) return "Hamatula";
|
|
else if (nChoice == 14) return "Imp";
|
|
//else if (nChoice == 15) return "Marilith";
|
|
else if (nChoice == 16) return "Osyluth";
|
|
else if (nChoice == 17) return "Succubus";
|
|
else if (nChoice == 18) return "Vrock";
|
|
// Elementals
|
|
else if (nChoice == 19) return "Elder Air Elemental";
|
|
else if (nChoice == 20) return "Elder Earth Elemental";
|
|
else if (nChoice == 21) return "Elder Fire Elemental";
|
|
else if (nChoice == 22) return "Elder Water Elemental";
|
|
else if (nChoice == 23) return "Steam Mephit";
|
|
// Slaadi
|
|
else if (nChoice == 24) return "Green Slaad";
|
|
else if (nChoice == 25) return "Red Slaadi";
|
|
else if (nChoice == 26) return "Death Slaadi";
|
|
|
|
// on Error
|
|
return "";
|
|
}
|
|
|
|
int SummonResrefToInt(string sSummon)
|
|
{
|
|
// Celestials
|
|
if (sSummon == "true_deva") return 1;
|
|
else if (sSummon == "true_bralan") return 2;
|
|
else if (sSummon == "NW_S_CTRUMPET") return 3;
|
|
else if (sSummon == "NW_S_CHOUND") return 4;
|
|
else if (sSummon == "NW_S_CLANTERN") return 5;
|
|
else if (sSummon == "true_wordarch") return 6;
|
|
// Demons/Devils
|
|
else if (sSummon == "NW_S_BALOR") return 7;
|
|
else if (sSummon == "prc_doa_hellcat") return 8;
|
|
else if (sSummon == "prc_sum_cornugon") return 9;
|
|
else if (sSummon == "erinyes") return 10;
|
|
else if (sSummon == "prc_sum_gelugon") return 11;
|
|
else if (sSummon == "prc_sum_glabrezu") return 12;
|
|
else if (sSummon == "prc_sum_hamatula") return 13;
|
|
else if (sSummon == "NW_S_IMP") return 14;
|
|
//else if (sSummon == "tog_marilith") return 15;
|
|
else if (sSummon == "prc_sum_osyluth") return 16;
|
|
else if (sSummon == "NW_S_SUCCUBUS") return 17;
|
|
else if (sSummon == "NW_S_VROCK") return 18;
|
|
// Elementals
|
|
else if (sSummon == "nw_s_airelder") return 19;
|
|
else if (sSummon == "nw_s_earthelder") return 20;
|
|
else if (sSummon == "nw_s_fireelder") return 21;
|
|
else if (sSummon == "nw_s_waterelder") return 22;
|
|
else if (sSummon == "nw_s_mepsteam") return 23;
|
|
// Slaadi
|
|
else if (sSummon == "NW_S_SLAADGRN") return 24;
|
|
else if (sSummon == "NW_S_SLAADRED") return 25;
|
|
else if (sSummon == "NW_S_SLAADDETH") return 26;
|
|
|
|
// on Error
|
|
return -1;
|
|
}
|
|
|
|
string IntToSummonResref(int nChoice)
|
|
{
|
|
// Celestials
|
|
if (nChoice == 1 ) return "true_deva";
|
|
else if (nChoice == 2 ) return "true_bralan";
|
|
else if (nChoice == 3 ) return "NW_S_CTRUMPET";
|
|
else if (nChoice == 4 ) return "NW_S_CHOUND";
|
|
else if (nChoice == 5 ) return "NW_S_CLANTERN";
|
|
else if (nChoice == 6 ) return "true_wordarch";
|
|
// Demons/Devils
|
|
else if (nChoice == 7 ) return "NW_S_BALOR";
|
|
else if (nChoice == 8 ) return "prc_doa_hellcat";
|
|
else if (nChoice == 9 ) return "prc_sum_cornugon";
|
|
else if (nChoice == 10) return "erinyes";
|
|
else if (nChoice == 11) return "prc_sum_gelugon";
|
|
else if (nChoice == 12) return "prc_sum_glabrezu";
|
|
else if (nChoice == 13) return "prc_sum_hamatula";
|
|
else if (nChoice == 14) return "NW_S_IMP";
|
|
// else if (nChoice == 15) return "tog_marilith";
|
|
else if (nChoice == 16) return "prc_sum_osyluth";
|
|
else if (nChoice == 17) return "NW_S_SUCCUBUS";
|
|
else if (nChoice == 18) return "NW_S_VROCK";
|
|
// Elementals
|
|
else if (nChoice == 19) return "nw_s_airelder";
|
|
else if (nChoice == 20) return "nw_s_earthelder";
|
|
else if (nChoice == 21) return "nw_s_fireelder";
|
|
else if (nChoice == 22) return "nw_s_waterelder";
|
|
else if (nChoice == 23) return "nw_s_mepsteam";
|
|
// Slaadi
|
|
else if (nChoice == 24) return "NW_S_SLAADGRN";
|
|
else if (nChoice == 25) return "NW_S_SLAADRED";
|
|
else if (nChoice == 26) return "NW_S_SLAADDETH";
|
|
|
|
// on Error
|
|
return "";
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Main function */
|
|
//////////////////////////////////////////////////
|
|
|
|
void main()
|
|
{
|
|
object oPC = GetPCSpeaker();
|
|
/* Get the value of the local variable set by the conversation script calling
|
|
* this script. Values:
|
|
* DYNCONV_ABORTED Conversation aborted
|
|
* DYNCONV_EXITED Conversation exited via the exit node
|
|
* DYNCONV_SETUP_STAGE System's reply turn
|
|
* 0 Error - something else called the script
|
|
* Other The user made a choice
|
|
*/
|
|
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
|
|
// The stage is used to determine the active conversation node.
|
|
// 0 is the entry node.
|
|
int nStage = GetStage(oPC);
|
|
|
|
// Check which of the conversation scripts called the scripts
|
|
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort
|
|
return;
|
|
|
|
if(nValue == DYNCONV_SETUP_STAGE)
|
|
{
|
|
// Check if this stage is marked as already set up
|
|
// This stops list duplication when scrolling
|
|
if(!GetIsStageSetUp(nStage, oPC))
|
|
{
|
|
// variable named nStage determines the current conversation node
|
|
// Function SetHeader to set the text displayed to the PC
|
|
// Function AddChoice to add a response option for the PC. The responses are show in order added
|
|
if(nStage == STAGE_SUMMON_CHOICE)
|
|
{
|
|
// Set the header
|
|
SetHeader("Select the creature you would like to summon.");
|
|
|
|
// Add responses for the PC
|
|
// Celestials
|
|
AddChoice("Astral Deva", SummonResrefToInt("true_deva"), oPC);
|
|
AddChoice("Bralani Eladrin", SummonResrefToInt("true_bralan"), oPC);
|
|
AddChoice("Celestial Avenger", SummonResrefToInt("NW_S_CTRUMPET"), oPC);
|
|
AddChoice("Hound Archon", SummonResrefToInt("NW_S_CHOUND"), oPC);
|
|
AddChoice("Lantern Archon", SummonResrefToInt("NW_S_CLANTERN"), oPC);
|
|
AddChoice("Word Archon", SummonResrefToInt("true_wordarch"), oPC);
|
|
// Demons/Devils
|
|
AddChoice("Balor", SummonResrefToInt("NW_S_BALOR"), oPC);
|
|
AddChoice("Bezekira", SummonResrefToInt("prc_doa_hellcat"), oPC);
|
|
AddChoice("Cornugon", SummonResrefToInt("prc_sum_cornugon"), oPC);
|
|
AddChoice("Erinyes", SummonResrefToInt("erinyes"), oPC);
|
|
AddChoice("Gelugon", SummonResrefToInt("prc_sum_gelugon"), oPC);
|
|
AddChoice("Glabrezu", SummonResrefToInt("prc_sum_glabrezu"), oPC);
|
|
AddChoice("Hamatula", SummonResrefToInt("prc_sum_hamatula"), oPC);
|
|
AddChoice("Imp", SummonResrefToInt("NW_S_IMP"), oPC);
|
|
// AddChoice("Marilith", SummonResrefToInt("tog_marilith"), oPC);
|
|
AddChoice("Osyluth", SummonResrefToInt("prc_sum_osyluth"), oPC);
|
|
AddChoice("Succubus", SummonResrefToInt("NW_S_SUCCUBUS"), oPC);
|
|
AddChoice("Vrock", SummonResrefToInt("NW_S_VROCK"), oPC);
|
|
// Elementals
|
|
AddChoice("Elder Air Elemental", SummonResrefToInt("nw_s_airelder"), oPC);
|
|
AddChoice("Elder Earth Elemental", SummonResrefToInt("nw_s_earthelder"), oPC);
|
|
AddChoice("Elder Fire Elemental", SummonResrefToInt("nw_s_fireelder"), oPC);
|
|
AddChoice("Elder Water Elemental", SummonResrefToInt("nw_s_waterelder"), oPC);
|
|
AddChoice("Steam Mephit", SummonResrefToInt("nw_s_mepsteam"), oPC);
|
|
// Slaadi
|
|
AddChoice("Green Slaad", SummonResrefToInt("NW_S_SLAADGRN"), oPC);
|
|
AddChoice("Red Slaadi", SummonResrefToInt("NW_S_SLAADRED"), oPC);
|
|
AddChoice("Death Slaadi", SummonResrefToInt("NW_S_SLAADDETH"), oPC);
|
|
|
|
MarkStageSetUp(STAGE_SUMMON_CHOICE, oPC); // This prevents the setup being run for this stage again until MarkStageNotSetUp is called for it
|
|
SetDefaultTokens(); // Set the next, previous, exit and wait tokens to default values
|
|
}
|
|
else if(nStage == STAGE_CONFIRMATION)//confirmation
|
|
{
|
|
int nChoice = GetLocalInt(oPC, "TrueGateChoice");
|
|
AddChoice(GetStringByStrRef(4752), TRUE); // "Yes"
|
|
AddChoice(GetStringByStrRef(4753), FALSE); // "No"
|
|
|
|
string sName = IntToName(nChoice);
|
|
string sText = "You have selected " + sName + " as the creature to summon.\n";
|
|
|
|
sText += "Is this correct?";
|
|
|
|
SetHeader(sText);
|
|
MarkStageSetUp(STAGE_CONFIRMATION, oPC);
|
|
}
|
|
}
|
|
|
|
// Do token setup
|
|
SetupTokens();
|
|
}
|
|
// End of conversation cleanup
|
|
else if(nValue == DYNCONV_EXITED)
|
|
{
|
|
// End of conversation cleanup
|
|
DeleteLocalInt(oPC, "TrueGateChoice");
|
|
DeleteLocalFloat(oPC, "TrueGateDuration");
|
|
DeleteLocalInt(oPC, "TrueGateCastLevel");
|
|
}
|
|
// Abort conversation cleanup.
|
|
// NOTE: This section is only run when the conversation is aborted
|
|
// while aborting is allowed. When it isn't, the dynconvo infrastructure
|
|
// handles restoring the conversation in a transparent manner
|
|
else if(nValue == DYNCONV_ABORTED)
|
|
{
|
|
// End of conversation cleanup
|
|
DeleteLocalInt(oPC, "TrueGateChoice");
|
|
DeleteLocalFloat(oPC, "TrueGateDuration");
|
|
DeleteLocalInt(oPC, "TrueGateCastLevel");
|
|
}
|
|
// Handle PC responses
|
|
else
|
|
{
|
|
// variable named nChoice is the value of the player's choice as stored when building the choice list
|
|
// variable named nStage determines the current conversation node
|
|
int nChoice = GetChoice(oPC);
|
|
if(nStage == STAGE_SUMMON_CHOICE)
|
|
{
|
|
nStage = STAGE_CONFIRMATION;
|
|
SetLocalInt(oPC, "TrueGateChoice", nChoice);
|
|
}
|
|
else if(nStage == STAGE_CONFIRMATION)//confirmation
|
|
{
|
|
if(nChoice == TRUE)
|
|
{
|
|
int nVis;
|
|
// Get the choice
|
|
int nSummon = GetLocalInt(oPC, "TrueGateChoice");
|
|
if (DEBUG)
|
|
{
|
|
DoDebug("true_gate_conv: Summon is " + IntToSummonResref(nSummon));
|
|
DoDebug("true_gate_conv: Duration is " + FloatToString(GetLocalFloat(oPC, "TrueGateDuration")));
|
|
}
|
|
|
|
if(nSummon < 7)
|
|
nVis = VFX_FNF_SUMMON_CELESTIAL;
|
|
else if(nSummon > 6 && nSummon < 19)
|
|
nVis = VFX_FNF_SUMMON_GATE;
|
|
else
|
|
{
|
|
nVis = VFX_FNF_SUMMON_MONSTER_3;
|
|
}
|
|
|
|
// Convert to Resref and setup effect
|
|
effect eSummon = EffectSummonCreature(IntToSummonResref(nSummon), nVis);
|
|
// Do Multisummon
|
|
MultisummonPreSummon();
|
|
// Bring in the creature
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSummon, oPC, GetLocalFloat(oPC, "TrueGateDuration"));
|
|
|
|
// And we're all done
|
|
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
|
|
}
|
|
else // Reset
|
|
{
|
|
nStage = STAGE_SUMMON_CHOICE;
|
|
MarkStageNotSetUp(STAGE_SUMMON_CHOICE, oPC);
|
|
MarkStageNotSetUp(STAGE_CONFIRMATION, oPC);
|
|
}
|
|
|
|
DeleteLocalInt(oPC, "TrueGateChoice");
|
|
}
|
|
|
|
// Store the stage value. If it has been changed, this clears out the choices
|
|
SetStage(nStage, oPC);
|
|
}
|
|
}
|