Initial module commit

Initial module commit.
This commit is contained in:
Jaysyn904
2021-08-29 23:34:48 -04:00
parent a7b44c3e1c
commit 0f13e6c538
4092 changed files with 8658543 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("10abe1"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

View File

@@ -0,0 +1,11 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("10abe2"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/10aboat.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("10aisle1"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/10aboat1.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("10aisle"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

43
_module/nss/10ariver1.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("10ariver2");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/10ariver2.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("10ariver1");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/10ariver3.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("10ariver4");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/10ariver4.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("10ariver3");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/10ariver5.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("10ariver6");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/10ariver6.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("10ariver5");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("10asml1"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("10asml2"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/10ato11.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("10ato11"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

43
_module/nss/10ato9a.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("10ato9a");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

12
_module/nss/10to13a.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("10to13a"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/11dive1.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("11dive2"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/11dive2.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("11dive1"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

43
_module/nss/11diving.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "BottleofAir")== OBJECT_INVALID)
{
sDeny="You cannot hold your breath long enough to swim down!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("11dive2");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/11fly1.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "WingsofFlying")== OBJECT_INVALID)
{
sDeny="you must have the wings of flying to use this!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("11fly2");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/11fly2.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "WingsofFlying")== OBJECT_INVALID)
{
sDeny="you must have the wings of flying to use this!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("11fly1");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/11river1.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("11river2");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/11river2.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("11river1");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/11river3.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("11river4");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/11river4.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("11river3");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

12
_module/nss/11to10a.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("11to10a"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/12aboat2.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("12aboat2"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/12acyc2.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("12acyc2"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("hermit1");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("hermit2");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

12
_module/nss/12dive1.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("12dive2"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/12dive2.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("12dive1"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("12totarpit"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/14to5.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("14to5"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/15to13.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("15to13"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

43
_module/nss/1riverto9.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("1to9");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

View File

@@ -0,0 +1,22 @@
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this on action taken in the conversation editor
void main()
{
object oPC = GetPCSpeaker();
object oTarget;
object oSpawn;
location lTarget;
oTarget = GetWaypointByTag("3adoorspawn");
lTarget = GetLocation(oTarget);
oSpawn = CreateObject(OBJECT_TYPE_PLACEABLE, "pl_hiddendr002", lTarget);
}

43
_module/nss/3ato6a.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("3ato6a");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

View File

@@ -0,0 +1,32 @@
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Goes on creature's OnHeartbeat. Fires when not fighting or talking.
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN);
if (IsInConversation(OBJECT_SELF) || GetIsInCombat()) return;
effect eEffect;
eEffect = EffectDamage(3, DAMAGE_TYPE_FIRE, DAMAGE_POWER_ENERGY);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);
object oTarget;
oTarget = oPC;
//Visual effects can't be applied to waypoints, so if it is a WP
//apply to the WP's location instead
int nInt;
nInt = GetObjectType(oTarget);
if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), GetLocation(oTarget));
}

View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("zelk1"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("zelk2"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

View File

@@ -0,0 +1,37 @@
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this on action taken in the conversation editor
void main()
{
object oPC = GetPCSpeaker();
object oTarget;
object oSpawn;
location lTarget;
oTarget = GetWaypointByTag("12door3stat");
lTarget = GetLocation(oTarget);
oSpawn = CreateObject(OBJECT_TYPE_PLACEABLE, "3statdoor", lTarget);
oTarget = oSpawn;
//Visual effects can't be applied to waypoints, so if it is a WP
//apply to the WP's location instead
int nInt;
nInt = GetObjectType(oTarget);
if (nInt != OBJECT_TYPE_WAYPOINT) DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), oTarget));
else DelayCommand(0.5, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget)));
oTarget = OBJECT_SELF;
DestroyObject(oTarget, 0.0);
}

12
_module/nss/3statued.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("123door"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

View File

@@ -0,0 +1,18 @@
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
int StartingConditional()
{
object oPC = GetPCSpeaker();
int nInt;
nInt=GetLocalInt(oPC, "NW_JOURNAL_ENTRY3statues");
if (nInt < 2)
return FALSE;
return TRUE;
}

View File

@@ -0,0 +1,18 @@
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
int StartingConditional()
{
object oPC = GetPCSpeaker();
int nInt;
nInt=GetLocalInt(oPC, "NW_JOURNAL_ENTRY3statues");
if (nInt < 3)
return FALSE;
return TRUE;
}

View File

@@ -0,0 +1,18 @@
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
int StartingConditional()
{
object oPC = GetPCSpeaker();
int nInt;
nInt=GetLocalInt(oPC, "NW_JOURNAL_ENTRY3statues");
if (nInt < 4)
return FALSE;
return TRUE;
}

View File

@@ -0,0 +1,18 @@
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
int StartingConditional()
{
object oPC = GetPCSpeaker();
int nInt;
nInt=GetLocalInt(oPC, "NW_JOURNAL_ENTRY3statues");
if (nInt >= 5)
return FALSE;
return TRUE;
}

43
_module/nss/4ae.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("WP_west");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

43
_module/nss/4ariver1.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("4ato9a1w");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

12
_module/nss/4ato7a.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("7art"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

43
_module/nss/4aw.nss Normal file
View File

@@ -0,0 +1,43 @@
string sDeny;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.1
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other.Detail&id=4683&id=625 */
//Put this OnUsed
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
if (GetItemPossessedBy(oPC, "RingofSwimming")== OBJECT_INVALID)
{
sDeny="you must have the ring of swimming to swim this passage!";
SendMessageToPC(oPC, sDeny);
return;
}
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("WP_east");
lTarget = GetLocation(oTarget);
//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

12
_module/nss/5to14.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("5to14"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

12
_module/nss/5to14jump.nss Normal file
View File

@@ -0,0 +1,12 @@
// Port PC
///////////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy(); // Get the user of the object
object oDest = GetObjectByTag("5to14"); // way point tag.
if(GetIsPC(oPC))
{
AssignCommand(oPC,JumpToObject(oDest));
}
}

View File

@@ -0,0 +1,22 @@
/*69_client_enter
OnClientEnter Module Event
Checks for Leadership, if TRUE sets maximum henchmen
on PC
Created by: 69MEH69
Created on: Sep2004
*/
#include "69_hench_lib"
void main()
{
object oPC = GetEnteringObject();
int nLeadership = GetLocalInt(GetModule(), "nLeadership");
if(nLeadership == 1)
{
//SendMessageToPC(oPC, "Leadership = 1"); //Test
SetMaxHenchmen69(oPC);
}
}

View File

@@ -0,0 +1,18 @@
/*69_client_exit
OnClientExit Module Event
Runs multiple checks for exiting player
Created by: 69MEH69
Created on: Apr2005
*/
#include "69_hench_lib"
void main()
{
object oPC = GetExitingObject();
if(GetIsPC(oPC))
{
QuitHenchman69(oPC);
}
}

View File

@@ -0,0 +1,34 @@
//::///////////////////////////////////////////////
//:: Associate: End of Combat End
//:: 69_HEN_COMBAT
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Calls the end of combat script every round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:: Modified: 69MEH69
//:://////////////////////////////////////////////
#include "69_inc_henai"
void main()
{
object oPC = GetMaster();
if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
{
HenchmenCombatRound(OBJECT_INVALID);
}
if(GetIsDead(oPC))
{
HenchRessurect69(oPC);
}
if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1003));
}
}

122
_module/nss/69_hen_conv.nss Normal file
View File

@@ -0,0 +1,122 @@
//:://////////////////////////////////////////////////
//:: 69_HEN_CONV
/*
OnDialogue event handler for henchmen/associates.
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 01/05/2003
//:: Modified: 69MEH69 Sep2004
//:://////////////////////////////////////////////////
#include "69_inc_henai"
#include "x0_i0_henchman"
//* GeorgZ - Put in a fix for henchmen talking even if they are petrified
int AbleToTalk(object oSelf)
{
if (GetHasEffect(EFFECT_TYPE_CONFUSED, oSelf) || GetHasEffect(EFFECT_TYPE_DOMINATED, oSelf) ||
GetHasEffect(EFFECT_TYPE_PETRIFY, oSelf) || GetHasEffect(EFFECT_TYPE_PARALYZE, oSelf) ||
GetHasEffect(EFFECT_TYPE_STUNNED, oSelf) || GetHasEffect(EFFECT_TYPE_FRIGHTENED, oSelf)
)
{
return FALSE;
}
return TRUE;
}
void main()
{
// * XP2, special handling code for interjections
// * This script only fires if someone inits with me.
// * with that in mind, I am now clearing any interjections
// * that the character might have on themselves.
if (GetLocalInt(GetModule(), "X2_L_XP2") == TRUE)
{
SetLocalInt(OBJECT_SELF, "X2_BANTER_TRY", 0);
SetHasInterjection(GetMaster(OBJECT_SELF), FALSE);
SetLocalInt(OBJECT_SELF, "X0_L_BUSY_SPEAKING_ONE_LINER", 0);
SetOneLiner(FALSE, 0);
}
object oShouter = GetLastSpeaker();
if (GetIsHenchmanDying() == TRUE)
{
return;
}
object oMaster = GetMaster();
int nMatch = GetListenPatternNumber();
object oIntruder;
if (nMatch == -1)
{
// * September 2 2003
// * Added the GetIsCommandable check back in so that
// * Henchman cannot be interrupted when they are walking away
if (GetCommandable(OBJECT_SELF) == TRUE && AbleToTalk(OBJECT_SELF)
&& (GetCurrentAction() != ACTION_OPENLOCK))
{ //SetCommandable(TRUE);
ClearActions(CLEAR_X0_CH_HEN_CONV_26);
string sDialogFileToUse = GetDialogFileToUse(GetLastSpeaker());
BeginConversation(sDialogFileToUse);
}
}
else
{
// listening pattern matched
if (GetIsObjectValid(oMaster))
{
// we have a master, only listen to them
// * Nov 2003 - Added an AbleToTalk, so that henchmen
// * do not respond to orders when 'frozen'
if (GetIsObjectValid(oShouter) && oMaster == oShouter && AbleToTalk(OBJECT_SELF)) {
SetCommandable(TRUE);
bkRespondToHenchmenShout(oShouter, nMatch, oIntruder);
}
}
// we don't have a master, behave in default way
else if (GetIsObjectValid(oShouter)
&& !GetIsPC(oShouter)
&& GetIsFriend(oShouter)) {
object oIntruder = OBJECT_INVALID;
// Determine the intruder if any
if(nMatch == 4) {
oIntruder = GetLocalObject(oShouter, "NW_BLOCKER_INTRUDER");
}
else if (nMatch == 5) {
oIntruder = GetLastHostileActor(oShouter);
if(!GetIsObjectValid(oIntruder)) {
oIntruder = GetAttemptedAttackTarget();
if(!GetIsObjectValid(oIntruder)) {
oIntruder = GetAttemptedSpellTarget();
}
}
}
// Actually respond to the shout
RespondToShout(oShouter, nMatch, oIntruder);
}
}
// Signal user-defined event
if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT)) {
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DIALOGUE));
}
}

View File

@@ -0,0 +1,352 @@
//::///////////////////////////////////////////////
//:: Henchman Death Script
//::
//:: 69_hen_death
//::
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
//:: <description>
//:://////////////////////////////////////////////
//::
//:: Created By: 69MEH69 Jul 2004 Henchman Death Option
//:://////////////////////////////////////////////
#include "69_hench_lib"
void HenchmanBleed(object oHench = OBJECT_SELF);
void HenchHeal(object oHench = OBJECT_SELF);
void HenchmanDeath(object oHench = OBJECT_SELF);
void HenchSalvation(object oHench);
void HenchmanLootBag(object oHench);
void main()
{
int HENCH_BLEED = GetLocalInt(GetModule(), "HENCH_BLEED");
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
object oMaster = GetMaster(OBJECT_SELF);
object oPC = GetLastMaster(OBJECT_SELF);
string sName = GetName(OBJECT_SELF);
object oArea = GetArea(OBJECT_SELF);
string sTag = GetTag(OBJECT_SELF);
string sLastName = GetName(oPC);
//Test
if(TEST_MODE == 1)
{
SendMessageToPC(GetFirstPC(), "My last master is " +sLastName);
}
//Adds up number of dead henchmen under PC's watch
int nHenchDeath = GetLocalInt(oMaster, "Hench_Death");
SetLocalInt(oMaster, "Hench_Death", nHenchDeath + 1);
//Resets henchman familiar/animal companion
SetLocalInt(OBJECT_SELF, "HasCompanion", FALSE);
// I have yet to be hired but have died by unforeseen event
if(!GetIsEnemy(oPC) && !GetIsObjectValid(oMaster))
{
ClearAllActions();
SetHenchmanDying(OBJECT_SELF, FALSE);
SetPlotFlag(OBJECT_SELF, TRUE);
SetAssociateState(NW_ASC_IS_BUSY, TRUE);
SetIsDestroyable(FALSE, TRUE, TRUE);
DelayCommand(30.0, RespawnHenchman69());
}
// I may not be currently hired but am indeed an enemy to my last master
if(GetIsEnemy(oPC) && !GetIsObjectValid(oMaster))
{
ClearAllActions();
//Give XP
ExecuteScript("nw_c2_default7", OBJECT_SELF);
//ChangeToStandardFaction(OBJECT_SELF, STANDARD_FACTION_COMMONER);
ClearPersonalReputation(oPC);
ClearPersonalReputation(OBJECT_SELF, oPC);
//SetFriendly(oPC);
SetIsDestroyable(FALSE, FALSE, TRUE);
DelayCommand(59.0, SetIsDestroyable(TRUE, FALSE, TRUE));
DelayCommand(60.0, DestroyObject(OBJECT_SELF));
}
// * I am a familiar, give 1d6 damage to my master
if(GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster) == OBJECT_SELF)
{
// April 2002: Made it so that familiar death can never kill the player
// only wound them.
int nDam = d6();
if (nDam >= GetCurrentHitPoints(oMaster))
{
nDam = GetCurrentHitPoints(oMaster) - 1;
}
effect eDam = EffectDamage(nDam);
FloatingTextStrRefOnCreature(63489, oMaster, FALSE);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oMaster);
}
if(HENCH_BLEED == 0)
{
if(GetIsObjectValid(oMaster))
{
if(GetAssociateType(OBJECT_SELF) == ASSOCIATE_TYPE_HENCHMAN)
{
ClearAllDialogue(oMaster, OBJECT_SELF);
ClearAllActions();
SetLastMaster(oMaster, OBJECT_SELF);
HenchmanDeath(OBJECT_SELF);
SetDidDie(TRUE, OBJECT_SELF);
SetHenchmanDying(OBJECT_SELF, FALSE);
SetPlotFlag(OBJECT_SELF, TRUE);
SetAssociateState(NW_ASC_IS_BUSY, TRUE);
SetIsDestroyable(FALSE, TRUE, TRUE);
//Spawn henchman to location specified in spawn script
DelayCommand(10.0, RespawnHenchman69());
}
}
}//End HENCH_BLEED = 0
else if(HENCH_BLEED == 1)
{
if(GetIsObjectValid(oMaster))
{
ClearAllDialogue(oMaster, OBJECT_SELF);
ClearAllActions();
SetLastMaster(oMaster, OBJECT_SELF);
//Inform player
HenchmanDeath(OBJECT_SELF);
// Mark us as in the process of dying
SetHenchmanDying(OBJECT_SELF, TRUE);
// Mark henchman PLOT & Busy
//SetPlotFlag(oHench, TRUE);
SetAssociateState(NW_ASC_IS_BUSY, FALSE, OBJECT_SELF);
// Make henchman's corpse stick around,
// be raiseable, and selectable
SetIsDestroyable(FALSE, TRUE, TRUE);
SetLocalObject(oArea, "DOA" +sTag, OBJECT_SELF);
if(GetCurrentHitPoints(OBJECT_SELF) <= -10)
{
SetDidDie(TRUE, OBJECT_SELF);
SetHenchmanDying(OBJECT_SELF, FALSE);
PlayVoiceChat(VOICE_CHAT_DEATH); // scream one last time
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), OBJECT_SELF); // make death dramatic
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), OBJECT_SELF); // now kill them
SendMessageToPC(oMaster, sName+ " has died!");
if(GetLocalInt(OBJECT_SELF, "HenchInv"))
{
HenchmanLootBag(OBJECT_SELF);
}
return;
}
DelayCommand(0.5, VoiceHealMe(TRUE));
if(GetCurrentHitPoints(OBJECT_SELF) > 0)
{
SetLocalInt(oArea, "nCHP" +sTag, -1);
}
else
{
SetLocalInt(oArea, "nCHP" +sTag, GetCurrentHitPoints(OBJECT_SELF));
}
HenchSalvation(OBJECT_SELF);
if(GetIsHenchmanDying(OBJECT_SELF) == TRUE && GetDidDie(OBJECT_SELF) == FALSE)
{
SendMessageToPC(oMaster, sName+ " is dying");
DelayCommand(6.0, HenchmanBleed(OBJECT_SELF));
}
}
} //End HENCH_BLEED = 1
else if(HENCH_BLEED == 2)
{
ClearAllDialogue(oMaster, OBJECT_SELF);
ClearAllActions();
SetLastMaster(oMaster, OBJECT_SELF);
HenchmanDeath(OBJECT_SELF);
SetDidDie(TRUE, OBJECT_SELF);
SetHenchmanDying(OBJECT_SELF, FALSE);
DelayCommand(15.0, DestroyObject(OBJECT_SELF));
} //End HENCH_BLEED = 2
else if(HENCH_BLEED == 3)
{
if(GetAssociateType(OBJECT_SELF) == ASSOCIATE_TYPE_HENCHMAN)
{
ClearAllDialogue(oMaster, OBJECT_SELF);
ClearAllActions();
HenchmanDeath(OBJECT_SELF);
SetDidDie(TRUE, OBJECT_SELF);
SetHenchmanDying(OBJECT_SELF, FALSE);
SetPlotFlag(OBJECT_SELF, TRUE);
SetAssociateState(NW_ASC_IS_BUSY, TRUE);
SetIsDestroyable(FALSE, TRUE, TRUE);
//Spawn henchman to location specified in spawn script
DelayCommand(30.0, RespawnHenchman69());
}
}//End HENCH_BLEED = 3
}
void HenchmanBleed(object oHench = OBJECT_SELF)
{
int HENCH_SALVATION = GetLocalInt(GetModule(), "HENCH_SALVATION");
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
object oPC = GetLastMaster(oHench);
string sTag = GetTag(oHench);
object oArea = GetArea(oHench);
string sName = GetName(oHench);
if(HENCH_SALVATION == 1)
{
HenchSalvation(oHench);
}
/*switch (d6(1))
{
case 1: PlayVoiceChat(VOICE_CHAT_PAIN1); break;
case 2: PlayVoiceChat(VOICE_CHAT_PAIN2); break;
case 3: PlayVoiceChat(VOICE_CHAT_PAIN3); break;
case 4: PlayVoiceChat(VOICE_CHAT_HEALME); break;
case 5: PlayVoiceChat(VOICE_CHAT_NEARDEATH); break;
case 6: PlayVoiceChat(VOICE_CHAT_HELP); break;
}*/
if((GetIsHenchmanDying(oHench) == TRUE) && (GetDidDie(oHench) == FALSE))
{
int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
SetLocalInt(oArea, "nCHP" +sTag, nCHP - 1);
nCHP = GetLocalInt(oArea, "nCHP" +sTag);
string sCHP = IntToString(nCHP);
SendMessageToPC(oPC, sName+ " has " +sCHP+ " hit points!");
//Test
if(TEST_MODE == 1)
{
int nHP = GetCurrentHitPoints(OBJECT_SELF);
string sHP = IntToString(nHP);
SendMessageToPC(oPC, sName+ " has " +sHP+ " hit points");
}
if(GetLocalInt(oArea, "nCHP" +sTag) >= 1)
{
ClearAllActions();
SendMessageToPC(oPC, sName+ " is healed!");
PostRespawnCleanup69(oHench);
PartialRes(oHench);
HireHenchman69(oPC, oHench);
if(GetLocalInt(oArea, "nCHP" +sTag) >= 20)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oHench)), oHench);
}
return;
}
else if(GetLocalInt(oArea, "nCHP" +sTag) <= -10)
{
SetDidDie(TRUE, oHench);
SetHenchmanDying(oHench, FALSE);
SendMessageToPC(oPC, sName+ " is beyond healing!");
PlayVoiceChat(VOICE_CHAT_DEATH); //scream one last time
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oHench); // make death dramatic
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oHench); // now kill them
if(GetLocalInt(oHench, "HenchInv"))
{
HenchmanLootBag(oHench);
}
return;
}
else
{
SendMessageToPC(oPC, sName+ " is dying");
DelayCommand(6.0, HenchmanBleed(oHench));
}
}
}
void HenchHeal(object oHench = OBJECT_SELF)
{
object oPC = GetLastMaster(oHench);
string sName = GetName(oHench);
object oArea = GetArea(oHench);
string sTag = GetTag(oHench);
int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
SetLocalInt(oArea, "nCHP" +sTag, nCHP + 1);
nCHP = GetLocalInt(oArea, "nCHP" +sTag);
string sCHP = IntToString(nCHP);
SendMessageToPC(oPC, sName+ " has " +sCHP+ " hit points!");
if(nCHP >= 1)
{
PostRespawnCleanup69(oHench);
PartialRes(oHench);
if((GetResurrected(oPC) == TRUE) && (GetDidDie(oHench) == TRUE))
{
HireHenchman69(oPC);
}
else if(GetDidDie(oHench) == FALSE)
{
HireHenchman69(oPC);
}
return;
}
else
{
SendMessageToPC(oPC, sName+ " is healing");
DelayCommand(6.0, HenchHeal(oHench));
}
}
void HenchmanDeath(object oHench = OBJECT_SELF)
{
object oPC = GetLastMaster(oHench);
object oBlood = CreateObject(OBJECT_TYPE_PLACEABLE,"plc_bloodstain", GetLocation(oHench));
//Remove blood after a while
DestroyObject(oBlood,60.0f);
// Henchman death notification
string sHenchName = GetName(oHench);
SendMessageToPC(oPC, sHenchName+ " has fallen!");
RemoveHenchman(oPC, oHench);
}
void HenchSalvation(object oHench = OBJECT_SELF)
{
object oPC = GetLastMaster(oHench);
string sTag = GetTag(oHench);
object oArea = GetArea(oHench);
string sName = GetName(oHench);
int nSalvation = d10(1);
if(nSalvation == 1 && GetDidDie(oHench) == FALSE)
{
int nGender = GetGender(oHench);
string sGender;
if(nGender == GENDER_FEMALE)
{
sGender = "her";
}
else if(nGender == GENDER_MALE)
{
sGender = "his";
}
else
{
sGender = "it's";
}
SetHenchmanDying(oHench, FALSE);
PlayVoiceChat(VOICE_CHAT_LAUGH);
SendMessageToPC(oPC, sName+ " has avoided death and is recovering from " +sGender+ " wounds!");
DelayCommand(6.0, HenchHeal(oHench));
}
}
void HenchmanLootBag(object oHench = OBJECT_SELF)
{
object oPC = GetLastMaster(oHench);
location lLoc = GetStepRightLocation(oHench);
string sTag = GetTag(oHench);
object oLootBag = CreateObject(OBJECT_TYPE_ITEM, "henchmanbackpack", lLoc, FALSE, sTag+ "BAG");
MoveHenchmanItems69(oLootBag, oHench);
}

View File

@@ -0,0 +1,80 @@
//::///////////////////////////////////////////////
//:: Associate: On Percieve
//:: 69_hen_percep
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 19, 2001
//:: Modified: 69MEH69 Sep2004
//:://////////////////////////////////////////////
#include "69_INC_HENAI"
#include "69_hench_lib"
void main()
{
//This is the equivalent of a force conversation bubble, should only be used if you want an NPC
//to say something while he is already engaged in combat.
if(GetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION))
{
ActionStartConversation(OBJECT_SELF);
}
// * July 2003
// * If in Stealth mode, don't attack enemies. Wait for player to attack or
// * for you to be attacked. (No point hiding anymore if you've been detected)
if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND) && GetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH)== FALSE)
{
//Do not bother checking the last target seen if already fighting
if(!GetIsObjectValid(GetAttemptedAttackTarget()) &&
!GetIsObjectValid(GetAttackTarget()) &&
!GetIsObjectValid(GetAttemptedSpellTarget()))
{
//Check if the last percieved creature was actually seen
if(GetLastPerceptionSeen())
{
if(GetIsEnemy(GetLastPerceived()))
{
SetFacingPoint(GetPosition(GetLastPerceived()));
if(d4(1) == 1)
{
BattleCry(); //In 69_hench_lib
}
HenchmenCombatRound(OBJECT_INVALID);
}
//Linked up to the special conversation check to initiate a special one-off conversation
//to get the PCs attention
else if(GetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION) && GetIsPC(GetLastPerceived()))
{
ActionStartConversation(OBJECT_SELF);
}
}
}
}
else if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND) && GetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH))
{
if(GetLastPerceptionSeen())
{
object oPC = GetMaster();
object oSeen =GetLastPerceived();
if(GetIsEnemy(oSeen) && GetLocalInt(OBJECT_SELF,"Scouting") && !GetLocalInt(OBJECT_SELF,"ScoutingReport"))
{
//ClearAllActions();
//SendMessageToPC(oPC, "HenchScout69");
HenchScout69(oSeen);
}
else if((oPC == oSeen) && GetLocalInt(OBJECT_SELF,"ScoutingReport"))
{
//SendMessageToPC(oPC, "HenchReport69");
HenchReport69(oPC);
}
}
}
if(GetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1002));
}
}

View File

@@ -0,0 +1,151 @@
//::///////////////////////////////////////////////
//:: Associate: On Spawn In
//:: 69_hen_spawnin
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 19, 2001
//:://////////////////////////////////////////////
#include "69_INC_HENAI"
void main()
{
//RESPAWN WAYPOINT INSTRUCTIONS
//Create a specific respawn location for henchman with a waypoint with TAG "WP_Respawn_'TAG'"
//where 'TAG' is the TAG of the NPC
//Create a default general respawn location with waypoint with TAG "NW_DEATH_TEMPLE"
//Create a Home waypoint with TAG "WP_Home_'TAG'" where 'TAG' is the TAG of the NPC
// This is where the Hench will go when they quit the PC
//Sets default level up package based on settings in henchman's blueprint
//This may be changed through henchman dialog, do not edit
SetLocalInt(OBJECT_SELF, "ClassPackage", GetCreatureStartingPackage(OBJECT_SELF));
//Set variable for level up, do not edit
SetLocalInt(OBJECT_SELF, "NewClass", -1);
//Sets up the HENCH_LAG for this henchman,
//Replace the 0 with any number the henchman lags(+)
//or leads(-) in level. Save this script as something
//else per this henchman. This allows multileveled
//henchman
//Minimum of -1,-2,-3... Maximum of 1,2,3... Same Level = 0
SetLocalInt(OBJECT_SELF, "HenchLag", 0);
//Sets the Maximum Level the Henchman may level
//Default: 40
SetLocalInt(OBJECT_SELF, "HENCH_MAXLEVEL", 40);
//Sets whether or not PC is allowed into henchman inventory
//TRUE: Inventory is accessible
//FALSE: Inventory is not accessible
//Default: TRUE
SetLocalInt(OBJECT_SELF, "HenchInv", TRUE);
//Sets whether or not initial henchman inventory is no drop
//TRUE: Inventory is droppable
//FALSE: Inventory is not droppable
//Default: TRUE
SetLocalInt(OBJECT_SELF, "HenchInvDrop", TRUE);
//Sets the distance from the enemy that the henchman will switch to melee weapons
SetLocalFloat(OBJECT_SELF, "HenchRange", 5.0);
//Sets up the special henchmen listening patterns
SetAssociateListenPatterns();
// Set additional henchman listening patterns
bkSetListeningPatterns();
//Equips melee weapon by default
//Equips ranged weapons by default if TRUE.
SetAssociateState(NW_ASC_USE_RANGED_WEAPON, FALSE);
//Sets the default distance that the henchman will follow
//the PC, only uncomment one of the following three
SetAssociateState(NW_ASC_DISTANCE_2_METERS);
//SetAssociateState(NW_ASC_DISTANCE_4_METERS);
//SetAssociateState(NW_ASC_DISTANCE_6_METERS);
//End default distances
SetAssociateState(NW_ASC_POWER_CASTING);
SetAssociateState(NW_ASC_HEAL_AT_50);
SetAssociateState(NW_ASC_RETRY_OPEN_LOCKS);
SetAssociateState(NW_ASC_DISARM_TRAPS);
SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE);
// April 2002: Summoned monsters, associates and familiars need to stay
// further back due to their size.
if (GetAssociate(ASSOCIATE_TYPE_HENCHMAN, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_DOMINATED, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_FAMILIAR, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_SUMMONED, GetMaster()) == OBJECT_SELF)
{
SetAssociateState(NW_ASC_DISTANCE_4_METERS);
}
// SPECIAL CONVERSATION SETTTINGS
//SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION);
//SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION);
// This causes the creature to say a special greeting in their conversation file
// upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired
// greeting in order to designate it. As the creature is actually saying this to
// himself, don't attach any player responses to the greeting.
//Set starting location
SetAssociateStartLocation();
// For some general behavior while we don't have a master,
// let's do some immobile animations
// SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);
// For some general behavior while we don't have a master,
// let's do some mobile animations
// SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS);
// **** Special Combat Tactics *****//
// * These are special flags that can be set on creatures to
// * make them follow certain specialized combat tactics.
// * NOTE: ONLY ONE OF THESE SHOULD BE SET ON A SINGLE CREATURE.
// * Ranged attacker
// * Will attempt to stay at ranged distance from their
// * target.
// SetCombatCondition(X0_COMBAT_FLAG_RANGED);
// * Defensive attacker
// * Will use defensive combat feats and parry
// SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE);
// * Ambusher
// * Will go stealthy/invisible and attack, then
// * run away and try to go stealthy again before
// * attacking anew.
// SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER);
// * Cowardly
// * Cowardly creatures will attempt to flee
// * attackers.
// SetCombatCondition(X0_COMBAT_FLAG_COWARDLY);
// CUSTOM USER DEFINED EVENTS
/*
The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the
On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined
events user 1000 - 1010
*/
//SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002
//SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005
//SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006
//SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008
//SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003
//SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004
//SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007
if(GetLocalInt(OBJECT_SELF, "HenchInvDrop") == FALSE)
{
HenchmanNoDropItems69(TRUE, OBJECT_SELF);
}
}

View File

@@ -0,0 +1,21 @@
//::///////////////////////////////////////////////
//:: 69_hench_cancast
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Returns true only if Henchman has at least
one level in spell casting class.
*/
//:://////////////////////////////////////////////
//:: Created By:
//:: Created On:
//:://////////////////////////////////////////////
int StartingConditional()
{
if (GetLevelByClass(CLASS_TYPE_CLERIC, OBJECT_SELF) > 0 || GetLevelByClass(CLASS_TYPE_DRUID, OBJECT_SELF) > 0 || GetLevelByClass(CLASS_TYPE_BARD, OBJECT_SELF) > 0 || GetLevelByClass(CLASS_TYPE_SORCERER, OBJECT_SELF) > 0 || GetLevelByClass(CLASS_TYPE_WIZARD, OBJECT_SELF) > 0)
{
return TRUE;
}
return FALSE;
}

View File

@@ -0,0 +1,16 @@
//::///////////////////////////////////////////////////
//:: 69_HENCH_CANLVL
//:: TRUE if the caller can level up (is at least two
//:: levels below the speaker, and not currently
//:: busy).
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: 69MEH69
//:: Created On: JULY 2004
//::///////////////////////////////////////////////////
#include "69_hench_lib"
int StartingConditional()
{
return GetCanLevelUp69(GetPCSpeaker());
}

View File

@@ -0,0 +1,13 @@
// 69_hench_canwork
// Text appears if NPC can work for PC
// Created: 69MEH69 July 2004
#include "69_hench_lib"
int StartingConditional()
{
int iResult;
iResult = GetCanWork69(GetPCSpeaker(), OBJECT_SELF);
return iResult;
}

View File

@@ -0,0 +1,11 @@
//69_hench_creatureno1
//Checks for no summoned creature (familiar)
//Created By: 69MEH69 MAR2005
int StartingConditional()
{
int iResult;
iResult = (GetHasFeat(FEAT_SUMMON_FAMILIAR) && !GetLocalInt(OBJECT_SELF, "HasCompanion"));
return iResult;
}

View File

@@ -0,0 +1,11 @@
//69_hench_creatureno
//Checks for no summoned creature (animal companion)
//Created By: 69MEH69 MAR2005
int StartingConditional()
{
int iResult;
iResult = (GetHasFeat(FEAT_ANIMAL_COMPANION) && !GetLocalInt(OBJECT_SELF, "HasCompanion"));
return iResult;
}

View File

@@ -0,0 +1,9 @@
//69_hench_creaturesummon
//Henchman will summon Familiar/Animal Companion
//Created By: 69MEH69 MAR2005
#include "69_inc_henai"
void main()
{
HenchSummonCreature69();
}

View File

@@ -0,0 +1,9 @@
//69_hench_creatureunsummon
//Henchman will unsummon Familiar/Animal Companion
//Created By: 69MEH69 MAR2005
#include "69_inc_henai"
void main()
{
HenchUnSummonCreature69();
}

View File

@@ -0,0 +1,11 @@
//69_hench_creatureyes1
//Checks for no summoned creature (familiar)
//Created By: 69MEH69 MAR2005
int StartingConditional()
{
int iResult;
iResult = (GetHasFeat(FEAT_SUMMON_FAMILIAR) && GetLocalInt(OBJECT_SELF, "HasCompanion"));
return iResult;
}

View File

@@ -0,0 +1,11 @@
//69_hench_creatureyes2
//Checks for no summoned creature (animal companion)
//Created By: 69MEH69 MAR2005
int StartingConditional()
{
int iResult;
iResult = (GetHasFeat(FEAT_ANIMAL_COMPANION) && GetLocalInt(OBJECT_SELF, "HasCompanion"));
return iResult;
}

View File

@@ -0,0 +1,33 @@
//69_hench_destroyobject
//Created By: 69MEH69 MAR2005
#include "69_inc_henai"
void main()
{
object oMaster = GetMaster();
ClearAllActions();
SetAssociateState(NW_ASC_IS_BUSY);
int bFound = FALSE;
string sName;
location lCenter = GetLocation(OBJECT_SELF);
object oThing = GetFirstObjectInShape(SHAPE_SPHERE,15.0,lCenter,TRUE,OBJECT_TYPE_PLACEABLE);
while(GetIsObjectValid(oThing))
{
if((GetPlotFlag(oThing) == FALSE) && (GetUseableFlag(oThing) == TRUE))
{
bFound = TRUE;
ActionEquipMostDamagingMelee(oThing);
ActionAttack(oThing);
}
oThing = GetNextObjectInShape(SHAPE_SPHERE,15.0,lCenter,TRUE,OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_ITEM);
} // while(GetIsObjectValid(oThing))
ActionDoCommand(SetAssociateState(NW_ASC_IS_BUSY,FALSE));
if(HasRangedWeapon69(OBJECT_SELF) && GetCombatCondition(X0_COMBAT_FLAG_RANGED) == TRUE)
{
bkEquipRanged(oMaster);
}
if(!bFound)
SpeakString("I don't see anything to destroy around here.");
}

View File

@@ -0,0 +1,14 @@
// 69_hench_didie
// Text appears when NPC has died and has worked for NPC
// Created: 69MEH69 July 2004
#include "x0_i0_henchman"
int StartingConditional()
{
int iResult;
iResult = GetPlayerHasHired(GetPCSpeaker()) == TRUE &&
GetDidDie() == TRUE ;
return iResult;
}

View File

@@ -0,0 +1,18 @@
//69_hench_eqmelee
// Henchman equips melee weapon
// Created by: 69MEH69 Sep2004
#include "69_INC_HENAI"
void main()
{
object oPC = GetPCSpeaker();
if(HasMeleeWeapon69(OBJECT_SELF))
{
SetAssociateState(NW_ASC_USE_RANGED_WEAPON, FALSE);
ActionSpeakString("Very well.");
bkEquipMelee(oPC);
}
else
ActionSpeakString("I do not have a melee weapon to equip.");
}

View File

@@ -0,0 +1,18 @@
//69_hench_eqrange
// Henchman equips melee weapon
// Created by: 69MEH69 Sep2004
#include "69_INC_HENAI"
void main()
{
object oPC = GetPCSpeaker();
if(HasRangedWeapon69(OBJECT_SELF))
{
SetAssociateState(NW_ASC_USE_RANGED_WEAPON, TRUE);
ActionSpeakString("Very well.");
bkEquipRanged(oPC);
}
else
ActionSpeakString("I do not have a ranged weapon to equip.");
}

View File

@@ -0,0 +1,17 @@
//69_hench_eqswap
//Swap equipped melee weapons
//Created By: 69MEH69
//Created On: APR2005
void main()
{
object oRight = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND);
object oLeft = GetItemInSlot(INVENTORY_SLOT_LEFTHAND);
ClearAllActions();
ActionSpeakString("Very well.");
ActionUnequipItem(oRight);
ActionUnequipItem(oLeft);
ActionEquipItem(oLeft,INVENTORY_SLOT_RIGHTHAND);
ActionEquipItem(oRight,INVENTORY_SLOT_LEFTHAND);
}

View File

@@ -0,0 +1,26 @@
//:://////////////////////////////////////////////////
//:: 69_HENCH_FIRE
//:: Copyright (c) 2002 Floodgate Entertainment
//:://////////////////////////////////////////////////
/*
Fires the current henchman and leaves the player with
no henchman.
*/
//:://////////////////////////////////////////////////
//:: Created By: Naomi Novik
//:: Created On: 09/13/2002
//:: Modified By: 69MEH69 MAR2005
//:://////////////////////////////////////////////////
#include "x0_i0_henchman"
#include "69_hench_lib"
void main()
{ ClearAllActions();
FireHenchman(GetPCSpeaker());
if(GetLocalInt(OBJECT_SELF, "HasCompanion"))
{
HenchUnSummonCreature69();
}
}

View File

@@ -0,0 +1,21 @@
//:://////////////////////////////////////////////////
//:: 69_HENCH_FIRED
//:: Copyright (c) 2002 Floodgate Entertainment
//:://////////////////////////////////////////////////
/*
Returns TRUE if the player has previously used this
henchman but had fired him/her.
*/
//:://////////////////////////////////////////////////
//:: Created By: 69MEH69
//:: Created On: Sep2004
//:://////////////////////////////////////////////////
#include "69_hench_lib"
int StartingConditional()
{
if (!GetIsHired() && GetPlayerHasHired(GetPCSpeaker()) && !GetDidDie() && GetCanWork69(GetPCSpeaker(), OBJECT_SELF))
return TRUE;
return FALSE;
}

View File

@@ -0,0 +1,21 @@
//69_hench_gomelee
// Henchman equips melee weapon and
// will engage enemies in melee combat
// Created by: 69MEH69 Feb2005
#include "69_INC_HENAI"
void main()
{
object oPC = GetPCSpeaker();
if(HasMeleeWeapon69(OBJECT_SELF))
{
SetAssociateState(NW_ASC_USE_RANGED_WEAPON, FALSE);
SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE);
SetLocalInt(OBJECT_SELF, "COMBAT_FLAG_SWITCH", FALSE);
ActionSpeakString("Very well.");
bkEquipMelee(oPC);
}
else
ActionSpeakString("I do not have a melee weapon to equip.");
}

View File

@@ -0,0 +1,21 @@
//69_hench_gorange
// Henchman equips ranged weapon and
// will engage enemies in ranged combat
// Created by: 69MEH69 Oct2004
#include "69_INC_HENAI"
void main()
{
object oPC = GetPCSpeaker();
if(HasRangedWeapon69(OBJECT_SELF))
{
SetAssociateState(NW_ASC_USE_RANGED_WEAPON, TRUE);
SetCombatCondition(X0_COMBAT_FLAG_RANGED, TRUE);
SetLocalInt(OBJECT_SELF, "COMBAT_FLAG_SWITCH", FALSE);
ActionSpeakString("Very well.");
bkEquipRanged(oPC);
}
else
ActionSpeakString("I do not have a ranged weapon to equip.");
}

View File

@@ -0,0 +1,43 @@
//69_hench_hasdual
//Swap equipped melee weapons
//Created By: 69MEH69
//Created On: APR2005
int MatchSingleHandedWeapon(object oItem)
{
switch(GetBaseItemType(oItem))
{
case BASE_ITEM_BATTLEAXE:
case BASE_ITEM_CLUB:
case BASE_ITEM_DAGGER:
case BASE_ITEM_HANDAXE:
case BASE_ITEM_KAMA:
case BASE_ITEM_KATANA:
case BASE_ITEM_KUKRI:
case BASE_ITEM_LIGHTFLAIL:
case BASE_ITEM_HEAVYFLAIL:
case BASE_ITEM_LIGHTHAMMER:
case BASE_ITEM_LIGHTMACE:
case BASE_ITEM_LONGSWORD:
case BASE_ITEM_MORNINGSTAR:
case BASE_ITEM_RAPIER:
case BASE_ITEM_SICKLE:
case BASE_ITEM_SCIMITAR:
case BASE_ITEM_SHORTSWORD:
case BASE_ITEM_WARHAMMER: return TRUE;
break;
default: break;
}
return FALSE;
}
int StartingConditional()
{
if (MatchSingleHandedWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, OBJECT_SELF)) &&
MatchSingleHandedWeapon(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF)))
return TRUE;
return FALSE;
}

View File

@@ -0,0 +1,51 @@
//69_hench_heall
//Henchman will attempt to heal the most injured in party
//Created by: 69MEH69
#include "nw_i0_generic"
void main()
{
ResetHenchmenState();
SetCommandable(TRUE, OBJECT_SELF);
object oTarget = GetFactionMostDamagedMember(OBJECT_SELF);
talent tUse;
if(GetIsObjectValid(oTarget))
{
int nCurrent = GetCurrentHitPoints(oTarget);
int nBase = GetMaxHitPoints(oTarget);
if(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
{
if(nCurrent < nBase && !GetIsDead(oTarget))
{
tUse = GetCreatureTalentBest(TALENT_CATEGORY_HARMFUL_TOUCH, TALENT_ANY);
if(GetIsTalentValid(tUse))
{
ClearAllActions();
ActionUseTalentOnObject(tUse, oTarget);
}
}
}
else if(GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
{
if(nCurrent < nBase && !GetIsDead(oTarget))
{
tUse = GetCreatureTalentBest(TALENT_CATEGORY_BENEFICIAL_HEALING_TOUCH, TALENT_ANY);
if(GetIsTalentValid(tUse))
{
ClearAllActions();
ActionUseTalentOnObject(tUse, oTarget);
}
else
{
ActionSpeakString("I'm out of healing spells.", TALKVOLUME_TALK);
}
}
}
}
else
ActionSpeakString("Everyone seems to be in good health.", TALKVOLUME_TALK);
}

View File

@@ -0,0 +1,16 @@
//::///////////////////////////////////////////////
//:: FileName 69_hench_henchxp
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: 69MEH69
//:: Created On: 10/5/04 2:53:41 PM
//:://////////////////////////////////////////////
int StartingConditional()
{
// Inspect local variables
if(!(GetLocalInt(GetModule(), "HENCHXP") == 1))
return FALSE;
return TRUE;
}

View File

@@ -0,0 +1,29 @@
//:://////////////////////////////////////////////////
//:: 69_hench_hire
//:: Copyright (c) 2002 Floodgate Entertainment
//:://////////////////////////////////////////////////
/*
Actions taken when a henchman rejoins his/her current
master.
*/
//:://////////////////////////////////////////////////
//:: Created By: 69MEH69
//:: Created On: Sep2004
//:://////////////////////////////////////////////////
#include "69_hench_lib"
void main()
{
object oPC = GetPCSpeaker();
int nAutoLevelup = GetLocalInt(GetModule(), "nAutoLevelup");
HireHenchman69(oPC);
if(nAutoLevelup == 1 && GetCanLevelUp69(oPC, OBJECT_SELF))
{
DelayCommand(1.0, LevelUpHenchman69(OBJECT_SELF, oPC, 1));
}
}

View File

@@ -0,0 +1,49 @@
// 69_hench_identify
// Henchman tries to identify all items in his and the player's inventory.
// Modified: 69MEH69 Sep2004
void IdentifyAll(object oObject, object oMaster);
void main()
{
object oPC = GetMaster(OBJECT_SELF);
IdentifyAll(oPC, oPC);
IdentifyAll(OBJECT_SELF, oPC);
}
void IdentifyAll(object oObject, object oPC)
{
int nMyLore = GetSkillRank(SKILL_LORE, OBJECT_SELF); // henchman lore rank
int nItemValue; // gold value of item
string sMaxValue = Get2DAString("SkillVsItemCost", "DeviceCostMax", nMyLore); // max value that the henchman can id
int nMaxValue = StringToInt(sMaxValue);
// * Handle overflow (November 2003 - BK)
if (sMaxValue == "")
{
nMaxValue = 120000000;
}
object oItem = GetFirstItemInInventory(oObject);
while(oItem != OBJECT_INVALID)
{
if(!GetIdentified(oItem))
{
SetIdentified(oItem, TRUE); // setting TRUE to get the true value of the item
nItemValue = GetGoldPieceValue(oItem);
SetIdentified(oItem, FALSE); // back to FALSE
if(nMaxValue >= nItemValue)
{
SetIdentified(oItem, TRUE);
SendMessageToPC(oPC, GetName(OBJECT_SELF) + " " + GetStringByStrRef(75930) + " " + GetName(oItem));
}
else
{
SendMessageToPC(oPC, "I cannot identify this item.");
}
}
oItem = GetNextItemInInventory(oObject);
}
}

View File

@@ -0,0 +1,18 @@
//::///////////////////////////////////////////////////
//:: 69_HENCH_INVEN
//:: Opens the henchman's inventory for the player.
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 01/24/2003
//:: Modified: 69MEH69 Sep2004
//::///////////////////////////////////////////////////
void main()
{
if (GetLocalInt(OBJECT_SELF, "HenchInv") == FALSE) //69MEH69
{
SpeakStringByStrRef(9066);
}
else
OpenInventory(OBJECT_SELF, GetPCSpeaker());
}

View File

@@ -0,0 +1,11 @@
// * Henchman levels up
#include "69_hench_lib"
void main()
{
object oPC = GetPCSpeaker();
if(GetCanLevelUp69(oPC, OBJECT_SELF))
{
LevelUpHenchman69(OBJECT_SELF, oPC);
}
}

1796
_module/nss/69_hench_lib.nss Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,15 @@
//:://////////////////////////////////////////////////
//:: 69_hench_notevil
/*
TRUE if the NPC is not evil.
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: 69MEH69
//:: Created On: Sep2004
//:://////////////////////////////////////////////////
int StartingConditional()
{
return (GetAlignmentGoodEvil(OBJECT_SELF) != ALIGNMENT_EVIL);
}

View File

@@ -0,0 +1,77 @@
//Contributed by Mike Daneman aka. Mishenka
//Modified: 69MEH69 Added more items to pick up
#include "69_inc_henai"
void main()
{
object oMaster = GetMaster();
ClearAllActions();
SetAssociateState(NW_ASC_IS_BUSY);
int bFound = FALSE;
string sName;
location lCenter = GetLocation(OBJECT_SELF);
object oThing = GetFirstObjectInShape(SHAPE_SPHERE,15.0,lCenter,TRUE,OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_ITEM);
while(GetIsObjectValid(oThing))
{
if(GetObjectType(oThing)==OBJECT_TYPE_ITEM)
{
bFound = TRUE;
/*switch(GetBaseItemType(oThing)) {
case BASE_ITEM_POTIONS:
case BASE_ITEM_HEALERSKIT:
case BASE_ITEM_SPELLSCROLL:
case BASE_ITEM_ARMOR:*/
sName = GetName(oThing);
TurnToFaceObject(oThing);
ActionPickUpItem(oThing);
ActionDoCommand(SendMessageToPC(oMaster,GetName(OBJECT_SELF)+" picked up "+sName+"."));
/*break;
default:
break;
}*/
}
else // oThing is a placeable
{
if(GetHasInventory(oThing)) // Containers (including corpses)
{
// Don't search locked containers
// Only search trapped containers if you can't see the trap
if(!GetLocked(oThing) && (!GetIsTrapped(oThing)
|| (GetIsTrapped(oThing) && !GetTrapDetectedBy(oThing,OBJECT_SELF))))
{
bFound = TRUE;
ActionMoveToObject(oThing);
ActionDoCommand(AssignCommand(oThing,PlayAnimation(ANIMATION_PLACEABLE_OPEN)));
//ActionInteractObject(oThing);
//ActionDoCommand(DoPlaceableObjectAction(oThing,PLACEABLE_ACTION_USE));
TurnToFaceObject(oThing);
ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,3.0);
object oItem = GetFirstItemInInventory(oThing);
while(GetIsObjectValid(oItem))
{
/* switch(GetBaseItemType(oItem)) {
case BASE_ITEM_POTIONS:
case BASE_ITEM_HEALERSKIT:
case BASE_ITEM_SPELLSCROLL:
case BASE_ITEM_ARMOR:*/
ActionDoCommand(SendMessageToPC(oMaster,GetName(OBJECT_SELF)+" picked up "+GetName(oItem)+" from "+GetName(oThing)+"."));
ActionTakeItem(oItem,oThing);
/* break;
default:
break;
}*/
oItem = GetNextItemInInventory(oThing);
}
ActionDoCommand(AssignCommand(oThing,PlayAnimation(ANIMATION_PLACEABLE_CLOSE)));
}
}
} // else
oThing = GetNextObjectInShape(SHAPE_SPHERE,15.0,lCenter,TRUE,OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_ITEM);
} // while(GetIsObjectValid(oThing))
ActionDoCommand(SetAssociateState(NW_ASC_IS_BUSY,FALSE));
if(!bFound)
SpeakString("I don't see where I can find any around here.");
}

View File

@@ -0,0 +1,21 @@
//:://////////////////////////////////////////////////
//:: 69_hench_quit
//:: Copyright (c) 2002 Floodgate Entertainment
//:://////////////////////////////////////////////////
/*
Actions taken when a henchman quits/refuses his/her current/former
master.
*/
//:://////////////////////////////////////////////////
//:: Created By: 69MEH69
//:: Created On: Apr2005
//:://////////////////////////////////////////////////
#include "69_hench_lib"
void main()
{
object oPC = GetPCSpeaker();
QuitHenchman69(oPC);
}

View File

@@ -0,0 +1,16 @@
//::///////////////////////////////////////////////
//:: FileName 69_hench_rangeno
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: 69MEH69
//:: Created On: Oct2004
//:://////////////////////////////////////////////
#include "69_INC_HENAI"
int StartingConditional()
{
if(!GetCombatCondition(X0_COMBAT_FLAG_RANGED))
return TRUE;
return FALSE;
}

View File

@@ -0,0 +1,16 @@
//::///////////////////////////////////////////////
//:: FileName 69_hench_rangeye
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: 69MEH69
//:: Created On: Oct2004
//:://////////////////////////////////////////////
#include "69_INC_HENAI"
int StartingConditional()
{
if(GetCombatCondition(X0_COMBAT_FLAG_RANGED))
return TRUE;
return FALSE;
}

View File

@@ -0,0 +1,23 @@
//69_hench_scout1 (no stealth)
//Henchman will scout enemies and
// attack at first sight
//Created by: 69MEH69 Sep2004
#include "69_inc_henai"
void main()
{
object oClosest = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY,
OBJECT_SELF, 1);
if (GetIsObjectValid(oClosest)) {
ClearAllActions();
SpeakString("Very well.");
SetLocalInt(OBJECT_SELF,"Scouting",TRUE);
SetLocalInt(OBJECT_SELF,"ScoutingReport",FALSE);
DelayCommand(2.0, SetLocalInt(OBJECT_SELF,"Scouting",FALSE));
SetLocalObject(OBJECT_SELF,"ScoutTarget",oClosest);
SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE);
ActionForceFollowObject(oClosest,5.0);
} else
SetLocalInt(OBJECT_SELF,"Scouting",FALSE);
}

View File

@@ -0,0 +1,26 @@
//69_hench_scout2 (stealth)
//Henchman will go into stealth, scout enemies, and
// not attack until PC attacks
//Created by: 69MEH69 Sep2004
#include "69_inc_henai"
void main()
{
object oClosest = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY,
OBJECT_SELF, 1);
if (GetIsObjectValid(oClosest)) {
ClearAllActions();
SpeakString("Very well");
SetLocalInt(OBJECT_SELF,"Scouting",TRUE);
SetLocalInt(OBJECT_SELF,"ScoutingReport",FALSE);
SetLocalObject(OBJECT_SELF,"ScoutTarget",oClosest);
SetAssociateState(NW_ASC_MODE_DEFEND_MASTER);
SetLocalInt(OBJECT_SELF, "X2_HENCH_STEALTH_MODE", 2);
SetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH, TRUE);
DelayCommand(3.0, ActionForceFollowObject(oClosest,10.0));
//DelayCommand(3.0, ActionForceMoveToObject(oClosest, FALSE, 10.0, 45.0f));
} else{
SetLocalInt(OBJECT_SELF,"Scouting",FALSE);
}
}

View File

@@ -0,0 +1,33 @@
//69_hench_switch
// Henchman is not in soley ranged attack mode
// Created by: 69MEH69 Oct2004
#include "69_INC_HENAI"
void main()
{
object oPC = GetPCSpeaker();
SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE);
SetLocalInt(OBJECT_SELF, "COMBAT_FLAG_SWITCH", TRUE);
ActionSpeakString("Very well.");
int nClass = GetClassByPosition(1);
switch(nClass)
{
case CLASS_TYPE_BARBARIAN:
case CLASS_TYPE_FIGHTER:
case CLASS_TYPE_PALADIN:
if(HasMeleeWeapon69(OBJECT_SELF))
{
SetAssociateState(NW_ASC_USE_RANGED_WEAPON, FALSE);
bkEquipMelee(oPC);
}
break;
default:
if(HasRangedWeapon69(OBJECT_SELF))
{
SetAssociateState(NW_ASC_USE_RANGED_WEAPON, TRUE);
bkEquipRanged(oPC);
}
break;
}
}

View File

@@ -0,0 +1,16 @@
//::///////////////////////////////////////////////
//:: FileName 69_hench_switchno
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: 69MEH69
//:: Created On: Oct2004
//:://////////////////////////////////////////////
#include "69_INC_HENAI"
int StartingConditional()
{
if(GetLocalInt(OBJECT_SELF, "COMBAT_FLAG_SWITCH"))
return FALSE;
return TRUE;
}

View File

@@ -0,0 +1,11 @@
//69_hench_whatxp
// NPC lets PC know how much XP s/he has
// Created by: 69MEH69 Oct2004
void main()
{
object oPC = GetPCSpeaker();
int nHenchXP = GetLocalInt(OBJECT_SELF, "HENCH_XP");
string sHenchXP = IntToString(nHenchXP);
SendMessageToPC(oPC, "I have " + sHenchXP + " experience points.");
}

View File

@@ -0,0 +1,19 @@
/*69_henchrt_enter
OnEnter Event for initial area or trigger that player enters module.
Retrieves henchmen from database for module to module transfer
Created by: 69MEH69
Created on: Feb2005
*/
#include "69_hench_lib"
void main()
{
object oPC = GetEnteringObject();
if(GetLocalInt(oPC, "Enter_Module") == 0)
{
SetLocalInt(oPC, "Enter_Module", 1);
RetrieveCampaignHenchman69(oPC);
}
}

View File

@@ -0,0 +1,7 @@
int StartingConditional()
{
int iResult;
iResult = 1-GetLocalInt(OBJECT_SELF,"Scouting");
return iResult;
}

View File

@@ -0,0 +1,7 @@
int StartingConditional()
{
int iResult;
iResult = GetLocalInt(OBJECT_SELF,"Scouting");
return iResult;
}

View File

@@ -0,0 +1,46 @@
/* 69_henchstore_exit
Place in any On* event of placeable, trigger, NPC etc. to store henchmen in database
to intialize transfer from module to module
TAG of placeable or trigger is the name of new module
Created By: 69MEH69
Created On: Feb2005
*/
#include "69_hench_lib"
void main()
{
object oPC = GetLastUsedBy();
string sTag = GetTag(OBJECT_SELF);
if (!GetIsObjectValid(oPC))
oPC = GetLastUnlocked();
if (!GetIsObjectValid(oPC))
oPC = GetClickingObject();
if (!GetIsObjectValid(oPC))
oPC = GetEnteringObject();
if (!GetIsObjectValid(oPC))
oPC = GetExitingObject();
if (!GetIsObjectValid(oPC))
oPC = GetLastOpenedBy();
if (!GetIsObjectValid(oPC))
oPC = GetLastDisturbed();
if (!GetIsObjectValid(oPC))
oPC = GetPCSpeaker();
if (!GetIsObjectValid(oPC))
oPC = GetLastOpenedBy();
if (!GetIsObjectValid(oPC))
oPC = GetLastKiller();
StoreCampaignHenchman69(oPC);
DelayCommand(10.0, StartNewModule(sTag));
}

View File

@@ -0,0 +1,88 @@
//:::::::::::::::::::::::::::::::::::::::::::::::::::
//::69_henchtrans By: 69MEH69 Date: Jan2003
//::Place this script in the AreaOnTransitonClick
//::event for any in area transition, a transition
//::which takes the PC to another location within
//::the same area. This script will insure that any
//::henchman, familiar, animal companion, summoned
//::and/or dominated creature will also make the
//::transition.
//::Put a check in for whether the associate is
//::standing their ground, If the henchman is they will
//::NOT transition
//:::::::::::::::::::::::::::::::::::::::::::::::::::
#include "69_inc_henai"
void main()
{
object oClicker = GetClickingObject();
object oTarget = GetTransitionTarget(OBJECT_SELF);
location lLoc = GetLocation(oTarget);
int nNth = 1;
object oHench = GetHenchman(oClicker, nNth);
object oFamiliar, oAnimal, oSummoned, oDominated;
float fFace = GetFacingFromLocation(lLoc);
AssignCommand(oClicker,JumpToLocation(lLoc));
AssignCommand(oClicker, SetFacing(fFace));
if(GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oClicker) != OBJECT_INVALID)
{
oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oClicker);
if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND, oFamiliar))
{
AssignCommand(oFamiliar, JumpToLocation(lLoc));
}
}
if(GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oClicker) != OBJECT_INVALID)
{
oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oClicker);
if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND, oAnimal))
{
AssignCommand(oAnimal, JumpToLocation(lLoc));
}
}
if(GetAssociate(ASSOCIATE_TYPE_SUMMONED, oClicker) != OBJECT_INVALID)
{
oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oClicker);
if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND, oSummoned))
{
AssignCommand(oSummoned, JumpToLocation(lLoc));
}
}
if(GetAssociate(ASSOCIATE_TYPE_DOMINATED, oClicker) != OBJECT_INVALID)
{
oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oClicker);
if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND, oDominated))
{
AssignCommand(oDominated, JumpToLocation(lLoc));
}
}
while(oHench != OBJECT_INVALID)
{
if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND, oHench))
{
AssignCommand(oHench, JumpToLocation(lLoc));
if(GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oHench) != OBJECT_INVALID)
{
oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oHench);
AssignCommand(oFamiliar, JumpToLocation(lLoc));
}
if(GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oHench) != OBJECT_INVALID)
{
oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oHench);
AssignCommand(oAnimal, JumpToLocation(lLoc));
}
if(GetAssociate(ASSOCIATE_TYPE_SUMMONED, oHench) != OBJECT_INVALID)
{
oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oHench);
AssignCommand(oSummoned, JumpToLocation(lLoc));
}
if(GetAssociate(ASSOCIATE_TYPE_DOMINATED, oHench) != OBJECT_INVALID)
{
oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oHench);
AssignCommand(oDominated, JumpToLocation(lLoc));
}
}
oHench = GetHenchman(oClicker, nNth++);
}
}

Some files were not shown because too many files have changed in this diff Show More