Difference between revisions of "Compatible Companion Mod Creation/Joining The Party"
From Dragon Age Toolset Wiki
m (Created) |
m (Updating template) |
||
Line 170: | Line 170: | ||
</dascript> | </dascript> | ||
− | {{TutorialNavBar|The Fade| | + | {{TutorialNavBar|The Fade|Gifts And Approval}} |
Revision as of 14:44, 10 July 2011
The Joining The Party step describes how to handle add your custom companion to the party.
In this step Valeria is allowed to have a class chosen the first time you meet her. So create in VALERIA_NPC_HIRE the flags ISMAGE, ISROGUE, ISWARRIOR and ISROGUEWARRIOR, if you want to do that, otherwise delete all the references to those flags. One of these is set to TRUE through dialog with Valeria. At the end of the dialog this script is called.
The joining script
Create the following script. I call it valeria_valjoin.nss This script contains EVERYTHING you need to properly hire a follower without leveling him/her automatically.
Valeria in my mod is allowed to choose her class to Warrior, Rogue, Mage or Rogue-Warrior.
#include "sys_chargen_h" #include "sys_rewards_h" #include "plt_valeria_npc_hire" //this function resets an NPC void basic_blank_char(object oChar); void main() { object oPC=GetHero(), me=OBJECT_SELF; WR_SetPlotFlag(PLT_VALERIA_NPC_HIRE, PARTY_VALERIA_JOINED, TRUE); basic_blank_char(me); //select race, otherwise skills tree wont show Chargen_SelectRace(me,RACE_HUMAN); int nClass; //remove the rogue defaults, valeria's char is rogue when created CharGen_ClearAbilityList(me,1);//remove talents //CharGen_ClearAbilityList(me,2);//remove spells //CharGen_ClearAbilityList(me,3);//remove skills RemoveAbility(me, ABILITY_TALENT_DIRTY_FIGHTING); RemoveAbility(me, ABILITY_SKILL_POISON_1); //depending on which flags you set in the dialog that lead to this script, choose the appropriate class if(WR_GetPlotFlag(PLT_VALERIA_NPC_HIRE,ISMAGE)==TRUE) { nClass=CLASS_WIZARD; _AddAbility(me, ABILITY_SPELL_ARCANE_BOLT); } if(WR_GetPlotFlag(PLT_VALERIA_NPC_HIRE,ISROGUE)==TRUE) { nClass=CLASS_ROGUE; _AddAbility(me, ABILITY_TALENT_DIRTY_FIGHTING); _AddAbility(me, ABILITY_SKILL_POISON_1); } if(WR_GetPlotFlag(PLT_VALERIA_NPC_HIRE,ISWARRIOR)==TRUE) { nClass=CLASS_WARRIOR; _AddAbility(me, ABILITY_TALENT_POWERFUL); } if(WR_GetPlotFlag(PLT_VALERIA_NPC_HIRE,ISROGUEWARRIOR)==TRUE) {nClass=CLASS_ROGUE;} //apply attributes, abilities and stats for the core class //SetCreatureProperty(me,PROPERTY_SIMPLE_CURRENT_CLASS, n1-3.0,PROPERTY_VALUE_BASE); Chargen_SelectCoreClass(me,nClass); //add mage spells //_AddAbility(me, ABILITY_TALENT_HIDDEN_ASSASSIN);//this works if it's available on the core class if(WR_GetPlotFlag(PLT_VALERIA_NPC_HIRE,ISROGUEWARRIOR)==TRUE) { _AddAbility(me, ABILITY_TALENT_HIDDEN_WARRIOR); _AddAbility(me, ABILITY_TALENT_DIRTY_FIGHTING); _AddAbility(me, ABILITY_SKILL_POISON_1); } //tactics Chargen_SetNumTactics(me); Chargen_EnableTacticsPresets(me); //SetFollowPartyLeader(me, TRUE); //level needed for scaling int nPackage = GetPackage(me); int nTargetLevel; int nPlayerLevel = GetLevel(oPC); if(nPlayerLevel >= 13 || nPlayerLevel == 1 ) nTargetLevel = nPlayerLevel; else nTargetLevel = nPlayerLevel + 1; int nMinLevel = GetM2DAInt(TABLE_PACKAGES, "MinLevel", nPackage); if(nMinLevel > 0 && nMinLevel > nTargetLevel) nTargetLevel = nMinLevel; //xp until hero level int nXp = RW_GetXPNeededForLevel(Max(nTargetLevel, 1)); RewardXP(me, nXp, TRUE, FALSE); //add specialization float count=1.; if(GetLevel(GetHero())>=7) { SetCreatureProperty(me, 38, count); // 38 is the spec point ID count=count+1.; } if(GetLevel(GetHero())>=14) SetCreatureProperty(me, 38, count); // 38 is the spec point ID //make available in party picker SetFollowerState(me, FOLLOWER_STATE_ACTIVE); SetFollowerState(me, FOLLOWER_STATE_AVAILABLE); //dont fire player_core scaling SetLocalInt(me, FOLLOWER_SCALED, 1); SetLocalInt(me, AI_FLAG_STATIONARY, 0); SetLocalInt(me, AMBIENT_SYSTEM_STATE, 0); SetLocalInt(me, CREATURE_REWARD_FLAGS, 0); //change script to player and send hire event SetEventScript(me, RESOURCE_SCRIPT_PLAYER_CORE); InitHeartbeat(me, CONFIG_CONSTANT_HEARTBEAT_RATE); SendPartyMemberHiredEvent(me, FALSE); SetFollowerApprovalEnabled(me,TRUE); //open up party picker SetPartyPickerGUIStatus(2); ShowPartyPickerGUI(); //to allow Valeria to join in the active party } void basic_blank_char(object oChar) { // Initialize all creature properties to default value SetCreatureProperty(oChar,PROPERTY_SIMPLE_LEVEL,1.0f,PROPERTY_VALUE_BASE); SetCreatureProperty(oChar,PROPERTY_SIMPLE_EXPERIENCE,0.0f,PROPERTY_VALUE_BASE); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_STRENGTH, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_DEXTERITY, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_CONSTITUTION, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_WILLPOWER, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_INTELLIGENCE, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_MAGIC, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_ATTACK_SPEED_MODIFIER, 1.0f); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_DAMAGE_SCALE, 1.0f); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_RESISTANCE_MENTAL, 0.0f); SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_RESISTANCE_PHYSICAL, 0.0f); SetCreatureProperty(oChar,51, 1.0f); SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_REGENERATION_HEALTH_COMBAT, REGENERATION_HEALTH_COMBAT_DEFAULT); SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_REGENERATION_STAMINA_COMBAT, REGENERATION_STAMINA_COMBAT_DEFAULT); SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_REGENERATION_HEALTH,REGENERATION_HEALTH_EXPLORE_DEFAULT, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_REGENERATION_STAMINA, REGENERATION_STAMINA_EXPLORE_DEFAULT, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_MISSILE_SHIELD,0.0); SetCreatureProperty(oChar, 38,0.0); SetCreatureProperty(oChar, PROPERTY_DEPLETABLE_HEALTH , 1.0f, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar, PROPERTY_DEPLETABLE_MANA_STAMINA , 0.0f, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_DEFENSE , 0.0f, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_ATTACK, 0.0f, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_DAMAGE_BONUS, 0.0f, PROPERTY_VALUE_BASE); SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_FLANKING_ANGLE, 60.0f, PROPERTY_VALUE_BASE); }