Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
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);
|
|
}
|
|
}
|