Difference between revisions of "User:Satans karma"
Satans karma (Talk | contribs) (A noob-friendly follower tutorial) |
Satans karma (Talk | contribs) |
||
| Line 5: | Line 5: | ||
1) You know how to create a new module. If not, read through the module tutorial first. | 1) You know how to create a new module. If not, read through the module tutorial first. | ||
| + | |||
2) You know how to create a basic dialogue. If not, read through the conversation tutorial first. | 2) You know how to create a basic dialogue. If not, read through the conversation tutorial first. | ||
| + | |||
3) You know how to make a creature. If not, read through the creature tutorial first. | 3) You know how to make a creature. If not, read through the creature tutorial first. | ||
| + | |||
4) You know how to add waypoints to an area. If not, read through the area tutorial first. | 4) You know how to add waypoints to an area. If not, read through the area tutorial first. | ||
| + | |||
5) You know how to create a plot. If not, read through the plot tutorial first. | 5) You know how to create a plot. If not, read through the plot tutorial first. | ||
| + | |||
6) You know how to create a blank script and can copy-and-paste. | 6) You know how to create a blank script and can copy-and-paste. | ||
| + | |||
7) You know how to turn an Excel document (.xls extension) into a 2DA file (.gda extension). | 7) You know how to turn an Excel document (.xls extension) into a 2DA file (.gda extension). | ||
| Line 18: | Line 24: | ||
2) Create a dialogue that has conversation branches that: | 2) Create a dialogue that has conversation branches that: | ||
| − | a. allows you to hire the follower (e.g. "Can I join your party?" --> "Yes" or "No") | + | |
| − | b. allows you to fire the follower (e.g. "I want you to leave") | + | :::a. allows you to hire the follower (e.g. "Can I join your party?" --> "Yes" or "No") |
| − | c. allows you to back out of the conversation (e.g. "Nevermind. I didn't mean to bother you.") | + | |
| − | d. any other optional dialogue lines | + | :::b. allows you to fire the follower (e.g. "I want you to leave") |
| + | |||
| + | :::c. allows you to back out of the conversation (e.g. "Nevermind. I didn't mean to bother you.") | ||
| + | |||
| + | :::d. any other optional dialogue lines | ||
3) Create your follower. Be sure to list the dialogue you created in the "Conversation" option. Make sure you give the creature/follower a UNIQUE tag (usually only an issue if you are duplicating an existing NPC). Save and check in. | 3) Create your follower. Be sure to list the dialogue you created in the "Conversation" option. Make sure you give the creature/follower a UNIQUE tag (usually only an issue if you are duplicating an existing NPC). Save and check in. | ||
| Line 46: | Line 56: | ||
In PRCSCR_xxx, create columns like those below. Replace ### with a very large number, and change the script to whatever you called the spawn follower in camp script (probably something like xxx_spawn_camp). | In PRCSCR_xxx, create columns like those below. Replace ### with a very large number, and change the script to whatever you called the spawn follower in camp script (probably something like xxx_spawn_camp). | ||
| + | |||
[[File:spawn_camp.jpg]] | [[File:spawn_camp.jpg]] | ||
| Line 52: | Line 63: | ||
11) Go back to your dialogue. In the hiring branch, set the action to fire the hiring script. In the firing branch, set the action to fire the firing script. | 11) Go back to your dialogue. In the hiring branch, set the action to fire the hiring script. In the firing branch, set the action to fire the firing script. | ||
| − | 12) OPTIONAL: If you want to increase/decrease approval with your dialogue, you can create a new script below using the simple approval script. You may have to make several copies for varying levels of approval/disapproval. After you have saved and checked in the approval scripts, you can set your conversation to fire these scripts. | + | 12) OPTIONAL: If you want to increase/decrease approval with your dialogue, you can create a new script below using the simple approval script below. You may have to make several copies for varying levels of approval/disapproval. After you have saved and checked in the approval scripts, you can set your conversation to fire these scripts. |
| + | == Scripts: == | ||
| − | + | === module_core script === | |
| − | |||
| − | + | #include "events_h" | |
| − | + | #include "wrappers_h" | |
| − | #include "events_h" | + | #include "utility_h" |
| − | #include "wrappers_h" | + | #include "plt_gen00pt_party_xxx" |
| − | #include "utility_h" | + | void main() |
| − | + | ||
| − | #include "plt_gen00pt_party_xxx" | + | |
| − | + | ||
| − | void main( | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
{ | { | ||
| − | + | event ev = GetCurrentEvent(); | |
| − | + | int nEventType = GetEventType(ev); | |
| − | + | object oEventCreator = GetEventCreator(ev); | |
| − | + | object oHero = GetHero(); | |
| − | + | object oParty = GetParty(oHero); | |
| − | + | int nEventHandled = FALSE; | |
| − | + | switch(nEventType) | |
| − | + | { | |
| − | + | case EVENT_TYPE_MODULE_GETCHARSTAGE: | |
| − | + | { | |
| − | + | SetPartyPickerStage("xxx_char_stage", "partypicker"); | |
| − | + | break; | |
| − | + | } | |
| − | + | case EVENT_TYPE_PARTYMEMBER_ADDED: | |
| − | + | { | |
| + | object oFollower = GetEventObject(ev, 0); | ||
| + | SetLocalInt(oFollower, CREATURE_REWARD_FLAGS, 0); | ||
| + | SetFollowerState(oFollower, FOLLOWER_STATE_ACTIVE); | ||
| + | AddCommand(oFollower, CommandJumpToLocation(GetLocation(GetHero()))); | ||
| + | if (GetTag(oFollower) == "INSERT CREATURE TAG HERE") | ||
| + | { | ||
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, TRUE, FALSE); | WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, TRUE, FALSE); | ||
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, FALSE, FALSE); | WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, FALSE, FALSE); | ||
| − | + | } | |
| − | + | break; | |
| − | + | } | |
| − | + | case EVENT_TYPE_PARTYMEMBER_DROPPED: | |
| − | + | { | |
| − | + | object oFollower = GetEventObject(ev, 0); | |
| − | + | if (GetTag(oFollower) == "INSERT CREATURE TAG HERE") | |
| − | + | { | |
| − | + | ||
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, TRUE, FALSE); | WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, TRUE, FALSE); | ||
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, FALSE, FALSE); | WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, FALSE, FALSE); | ||
| − | + | } | |
| − | + | break; | |
| − | + | } | |
| − | + | } | |
| − | + | ||
} | } | ||
| − | + | === Hiring script === | |
| − | |||
| − | |||
#include "utility_h" | #include "utility_h" | ||
| Line 154: | Line 152: | ||
| − | |||
| − | == Firing Script == | + | === Firing Script === |
| − | |||
#include "utility_h" | #include "utility_h" | ||
| Line 176: | Line 172: | ||
| − | |||
| − | == Spawn Follower in Camp Script (short version) - Try using this before trying the long version == | + | === Spawn Follower in Camp Script (short version) - Try using this before trying the long version === |
| − | |||
#include "utility_h" | #include "utility_h" | ||
| Line 212: | Line 206: | ||
| − | |||
| − | == Spawn Follower in Camp Script (Long Version) - Only use if Leliana is not appearing in camp as she should == | + | === Spawn Follower in Camp Script (Long Version) - Only use if Leliana is not appearing in camp as she should === |
| − | + | ||
| − | + | ||
#include "utility_h" | #include "utility_h" | ||
| Line 222: | Line 213: | ||
#include "party_h" | #include "party_h" | ||
#include "camp_functions_h" | #include "camp_functions_h" | ||
| − | |||
#include "plt_gen00pt_party_xxx" | #include "plt_gen00pt_party_xxx" | ||
| − | |||
void main() | void main() | ||
| Line 268: | Line 257: | ||
// Activating any followers that are in the party | // Activating any followers that are in the party | ||
| − | + | ||
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_ALISTAIR_RECRUITED)) | if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_ALISTAIR_RECRUITED)) | ||
{ | { | ||
| Line 274: | Line 263: | ||
SetFollowerState(oAlistair, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oAlistair, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_DOG_RECRUITED)) | if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_DOG_RECRUITED)) | ||
{ | { | ||
| Line 280: | Line 268: | ||
SetFollowerState(oDog, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oDog, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_WYNNE_RECRUITED)) | if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_WYNNE_RECRUITED)) | ||
{ | { | ||
| Line 286: | Line 273: | ||
SetFollowerState(oWynne, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oWynne, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_SHALE_RECRUITED)) | if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_SHALE_RECRUITED)) | ||
{ | { | ||
| Line 292: | Line 278: | ||
SetFollowerState(oShale, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oShale, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_STEN_RECRUITED)) | if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_STEN_RECRUITED)) | ||
{ | { | ||
| Line 298: | Line 283: | ||
SetFollowerState(oSten, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oSten, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_ZEVRAN_RECRUITED)) | if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_ZEVRAN_RECRUITED)) | ||
{ | { | ||
| Line 304: | Line 288: | ||
SetFollowerState(oZevran, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oZevran, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_OGHREN_RECRUITED)) | if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_OGHREN_RECRUITED)) | ||
{ | { | ||
| Line 310: | Line 293: | ||
SetFollowerState(oOghren, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oOghren, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_LELIANA_RECRUITED)) | if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_LELIANA_RECRUITED)) | ||
{ | { | ||
| Line 316: | Line 298: | ||
SetFollowerState(oLeliana, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oLeliana, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if (GetFollowerState(oLeliana) != FOLLOWER_STATE_ACTIVE) | if (GetFollowerState(oLeliana) != FOLLOWER_STATE_ACTIVE) | ||
{ | { | ||
| Line 323: | Line 304: | ||
Rubber_JumpHome(oLeliana); | Rubber_JumpHome(oLeliana); | ||
} | } | ||
| − | |||
if (GetFollowerState(oFollower) == FOLLOWER_STATE_ACTIVE) | if (GetFollowerState(oFollower) == FOLLOWER_STATE_ACTIVE) | ||
{ | { | ||
| Line 336: | Line 316: | ||
SetFollowerState(oMorrigan, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oMorrigan, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_LOGHAIN_RECRUITED)) | if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_LOGHAIN_RECRUITED)) | ||
{ | { | ||
| Line 342: | Line 321: | ||
SetFollowerState(oLoghain, FOLLOWER_STATE_AVAILABLE); | SetFollowerState(oLoghain, FOLLOWER_STATE_AVAILABLE); | ||
} | } | ||
| − | |||
if(GetFollowerState(oFollower) != FOLLOWER_STATE_ACTIVE) | if(GetFollowerState(oFollower) != FOLLOWER_STATE_ACTIVE) | ||
{ | { | ||
| Line 360: | Line 338: | ||
| − | |||
| − | == Simple Approval Script == | + | === Simple Approval Script === |
| + | |||
| + | #include "approval_h" | ||
| − | |||
void main() | void main() | ||
{ | { | ||
Revision as of 02:55, 27 July 2010
Noob-Friendly Follower Tutorial:
Contents
Assumptions:
1) You know how to create a new module. If not, read through the module tutorial first.
2) You know how to create a basic dialogue. If not, read through the conversation tutorial first.
3) You know how to make a creature. If not, read through the creature tutorial first.
4) You know how to add waypoints to an area. If not, read through the area tutorial first.
5) You know how to create a plot. If not, read through the plot tutorial first.
6) You know how to create a blank script and can copy-and-paste.
7) You know how to turn an Excel document (.xls extension) into a 2DA file (.gda extension).
Directions:
1) Create a new module. Make sure that "Extended Module" option in the "Properties" section is set to "Single Player."
2) Create a dialogue that has conversation branches that:
- a. allows you to hire the follower (e.g. "Can I join your party?" --> "Yes" or "No")
- b. allows you to fire the follower (e.g. "I want you to leave")
- c. allows you to back out of the conversation (e.g. "Nevermind. I didn't mean to bother you.")
- d. any other optional dialogue lines
3) Create your follower. Be sure to list the dialogue you created in the "Conversation" option. Make sure you give the creature/follower a UNIQUE tag (usually only an issue if you are duplicating an existing NPC). Save and check in.
4) Find the area called "char_stage." Duplicate it. When you name it, add a prefix to char_stage (so it'll be called something like "xxx_char_stage"). The Folder, Module, and Owner Module should all be your module. Add a waypoint to the area. The tag of the waypoint should be your creature's unique tag with a "char_" prefix (so it'll be called something like "char_YourUniqueCreatureTag"). Save and check in the area. [The other follower tutorial has some nice images that might help you with this. You should check them out.]
5) Create a new plot. Call it something like gen00pt_party_xxx. Insert (at minimum) four new main flags - CREATURENAME_HIRED, CREATURENAME_IN_PARTY, CREATURENAME_IN_CAMP, and CREATURENAME_FIRED. Replace "CREATURENAME" with your follower's name. Save and check in.
6) Create a new script. Name it something like xxx_module_core. Copy and paste the module_core script below into this script. Save and check in.
7) Create a new script. Name it something like xxx_hire_creaturename. Copy and paste the hiring script below into this script. Save and check in.
8) Create a new script. Name it something like xxx_fire_creaturename. Copy and paste the firing script below into this script. Save and check in.
9) Create a new script. Name it something like xxx_spawn_camp. Copy and paste one of the spawn follower in camp scripts into this script. Try the short version first. In theory, it should work, but when I tested it in game, Leliana would sometimes disappear. If you have that problem, replace the short version with the long version. Save and check in.
10) Open a new excel document. It doesn't matter what it's called. Rename the Sheet1, Sheet2, and Sheet3 tabs at the bottom to partypicker_xxx, party_picker_xxx, and PRCSCR_xxx.
In partypicker_xxx, create columns like those below. Replace ### with a very large number, and add in your creature's tag and name.
In party_picker_xxx, create columns like those below. Replace ### with the same very large number you used above, and add in your creature's tag.
In PRCSCR_xxx, create columns like those below. Replace ### with a very large number, and change the script to whatever you called the spawn follower in camp script (probably something like xxx_spawn_camp).
Convert the excel document into a 2DA.
11) Go back to your dialogue. In the hiring branch, set the action to fire the hiring script. In the firing branch, set the action to fire the firing script.
12) OPTIONAL: If you want to increase/decrease approval with your dialogue, you can create a new script below using the simple approval script below. You may have to make several copies for varying levels of approval/disapproval. After you have saved and checked in the approval scripts, you can set your conversation to fire these scripts.
Scripts:
module_core script
#include "events_h"
#include "wrappers_h"
#include "utility_h"
#include "plt_gen00pt_party_xxx"
void main()
{
event ev = GetCurrentEvent();
int nEventType = GetEventType(ev);
object oEventCreator = GetEventCreator(ev);
object oHero = GetHero();
object oParty = GetParty(oHero);
int nEventHandled = FALSE;
switch(nEventType)
{
case EVENT_TYPE_MODULE_GETCHARSTAGE:
{
SetPartyPickerStage("xxx_char_stage", "partypicker");
break;
}
case EVENT_TYPE_PARTYMEMBER_ADDED:
{
object oFollower = GetEventObject(ev, 0);
SetLocalInt(oFollower, CREATURE_REWARD_FLAGS, 0);
SetFollowerState(oFollower, FOLLOWER_STATE_ACTIVE);
AddCommand(oFollower, CommandJumpToLocation(GetLocation(GetHero())));
if (GetTag(oFollower) == "INSERT CREATURE TAG HERE")
{
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, TRUE, FALSE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, FALSE, FALSE);
}
break;
}
case EVENT_TYPE_PARTYMEMBER_DROPPED:
{
object oFollower = GetEventObject(ev, 0);
if (GetTag(oFollower) == "INSERT CREATURE TAG HERE")
{
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, TRUE, FALSE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, FALSE, FALSE);
}
break;
}
}
}
Hiring script
- include "utility_h"
- include "wrappers_h"
- include "plot_h"
- include "party_h"
- include "events_h"
- include "core_h"
- include "global_objects_h"
- include "sys_autolevelup_h"
- include "sys_chargen_h"
- include "sys_rewards_h"
- include "approval_h"
- include "plt_gen00pt_party_xxx"
void main() {
object oHero = GetHero(); object oFollower = CreateObject(OBJECT_TYPE_CREATURE, R"INSERT CREATURE TAG HERE.utc", GetLocation(oHero));
UT_HireFollower(oFollower, FALSE); WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_HIRED, TRUE, FALSE); SetLocalInt(oFollower, CREATURE_REWARD_FLAGS, 0); SetGroupId(oFollower, GetGroupId(oHero)); SetFollowerApprovalEnabled(oFollower, TRUE); SetFollowerApprovalDescription(oFollower, 371487); SetPartyPickerGUIStatus(2); ShowPartyPickerGUI();
}
Firing Script
- include "utility_h"
- include "wrappers_h"
- include "events_h"
- include "plt_gen00pt_party_xxx"
void main() {
object oFollower = GetObjectByTag("INSERT CREATURE TAG HERE");
UT_FireFollower(oFollower, TRUE, TRUE); DestroyObject(oFollower); WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_FIRED, TRUE);
}
Spawn Follower in Camp Script (short version) - Try using this before trying the long version
- include "utility_h"
- include "plt_gen00pt_party_xxx"
void main() {
object oFollower = GetObjectByTag("INSERT TAG OF CREATURE");
//Follower's position (currently by one of tents; change vector coordinates if you don't like the positioning)
vector vTent = Vector(138.564f, 111.815f, -1.08586f);
location lTent = Location(GetArea(GetHero()), vTent, 180.0f);
command cMove = CommandJumpToLocation(lTent);
if(GetFollowerState(oFollower) != FOLLOWER_STATE_ACTIVE)
{
SetFollowerState(oFollower, FOLLOWER_STATE_ACTIVE);
SetFollowerState(oFollower, FOLLOWER_STATE_AVAILABLE);
AddCommand(oFollower, cMove);
WR_SetObjectActive(oFollower, TRUE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, FALSE, FALSE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, TRUE, FALSE);
}
SetFollowerState(oFollower, FOLLOWER_STATE_AVAILABLE);
AddCommand(oFollower, cMove);
WR_SetObjectActive(oFollower, TRUE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, FALSE, FALSE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, TRUE, FALSE);
}
Spawn Follower in Camp Script (Long Version) - Only use if Leliana is not appearing in camp as she should
- include "utility_h"
- include "wrappers_h"
- include "party_h"
- include "camp_functions_h"
- include "plt_gen00pt_party_xxx"
void main() {
object oFollower = GetObjectByTag("INSERT TAG OF CREATURE HERE");
object oAlistair = GetObjectByTag("gen00fl_alistair");
object oMorrigan = GetObjectByTag("gen00fl_morrigan");
object oDog = GetObjectByTag("gen00fl_dog");
object oWynne = GetObjectByTag("gen00fl_wynne");
object oShale = GetObjectByTag("gen00fl_shale");
object oSten = GetObjectByTag("gen00fl_sten");
object oZevran = GetObjectByTag("gen00fl_zevran");
object oOghren = GetObjectByTag("gen00fl_oghren");
object oLeliana = GetObjectByTag("gen00fl_leliana");
object oLoghain = GetObjectByTag("gen00fl_loghain");
string sWPA = "wp_camp_gen_fl_alistair"; string sWPM = "wp_camp_gen_fl_morrigan"; string sWPD = "wp_camp_gen_fl_dog"; string sWPW = "wp_camp_gen_fl_wynne"; string sWPSh = "wp_camp_gen_fl_shale"; string sWPS = "wp_camp_gen_fl_sten"; string sWPZ = "wp_camp_gen_fl_zevran"; string sWPO = "wp_camp_gen_fl_oghren"; string sWPL = "wp_camp_gen_fl_leliana"; string sWPLo = "wp_camp_gen_fl_loghain";
object oWPA = GetObjectByTag(sWPA); object oWPM = GetObjectByTag(sWPM); object oWPD = GetObjectByTag(sWPD); object oWPW = GetObjectByTag(sWPW); object oWPSh = GetObjectByTag(sWPSh); object oWPS = GetObjectByTag(sWPS); object oWPZ = GetObjectByTag(sWPZ); object oWPO = GetObjectByTag(sWPO); object oWPL = GetObjectByTag(sWPL); object oWPLo = GetObjectByTag(sWPLo);
//Follower's position (currently by one of tents; change vector coordinates if you don't like the positioning) vector vTent = Vector(138.564f, 111.815f, -1.08586f); location lTent = Location(GetArea(GetHero()), vTent, 180.0f); command cMove = CommandJumpToLocation(lTent);
// Activating any followers that are in the party
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_ALISTAIR_RECRUITED))
{
WR_SetObjectActive(oAlistair, TRUE);
SetFollowerState(oAlistair, FOLLOWER_STATE_AVAILABLE);
}
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_DOG_RECRUITED))
{
WR_SetObjectActive(oDog, TRUE);
SetFollowerState(oDog, FOLLOWER_STATE_AVAILABLE);
}
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_WYNNE_RECRUITED))
{
WR_SetObjectActive(oWynne, TRUE);
SetFollowerState(oWynne, FOLLOWER_STATE_AVAILABLE);
}
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_SHALE_RECRUITED))
{
WR_SetObjectActive(oShale, TRUE);
SetFollowerState(oShale, FOLLOWER_STATE_AVAILABLE);
}
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_STEN_RECRUITED))
{
WR_SetObjectActive(oSten, TRUE);
SetFollowerState(oSten, FOLLOWER_STATE_AVAILABLE);
}
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_ZEVRAN_RECRUITED))
{
WR_SetObjectActive(oZevran, TRUE);
SetFollowerState(oZevran, FOLLOWER_STATE_AVAILABLE);
}
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_OGHREN_RECRUITED))
{
WR_SetObjectActive(oOghren, TRUE);
SetFollowerState(oOghren, FOLLOWER_STATE_AVAILABLE);
}
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_LELIANA_RECRUITED))
{
WR_SetObjectActive(oLeliana, TRUE);
SetFollowerState(oLeliana, FOLLOWER_STATE_AVAILABLE);
}
if (GetFollowerState(oLeliana) != FOLLOWER_STATE_ACTIVE)
{
WR_SetObjectActive(oLeliana, TRUE);
Rubber_SetHome(oLeliana, oWPL);
Rubber_JumpHome(oLeliana);
}
if (GetFollowerState(oFollower) == FOLLOWER_STATE_ACTIVE)
{
WR_SetObjectActive(oLeliana, TRUE);
Rubber_SetHome(oLeliana, oWPL);
Rubber_JumpHome(oLeliana);
SetFollowerState(oLeliana, FOLLOWER_STATE_AVAILABLE);
}
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_MORRIGAN_RECRUITED))
{
WR_SetObjectActive(oMorrigan, TRUE);
SetFollowerState(oMorrigan, FOLLOWER_STATE_AVAILABLE);
}
if (WR_GetPlotFlag(PLT_GEN00PT_PARTY, GEN_LOGHAIN_RECRUITED))
{
WR_SetObjectActive(oLoghain, TRUE);
SetFollowerState(oLoghain, FOLLOWER_STATE_AVAILABLE);
}
if(GetFollowerState(oFollower) != FOLLOWER_STATE_ACTIVE)
{
SetFollowerState(oFollower, FOLLOWER_STATE_ACTIVE);
SetFollowerState(oFollower, FOLLOWER_STATE_AVAILABLE);
AddCommand(oFollower, cMove);
WR_SetObjectActive(oFollower, TRUE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, FALSE, FALSE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, TRUE, FALSE);
}
SetFollowerState(oFollower, FOLLOWER_STATE_AVAILABLE);
AddCommand(oFollower, cMove);
WR_SetObjectActive(oFollower, TRUE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_PARTY, FALSE, FALSE);
WR_SetPlotFlag(PLT_GEN00PT_PARTY_XXX, CREATURENAME_IN_CAMP, TRUE, FALSE);
}
Simple Approval Script
- include "approval_h"
void main() {
object oFollower = GetObjectByTag("INSERT CREATURE TAG HERE");
AdjustFollowerApproval(oFollower, 5, TRUE); /*change the 7 to whatever you want to increase approval by. change to negative number to decrease approval*/
}
