Initial module commit
Initial module commit.
This commit is contained in:
11
_module/nss/10abeholderp1.nss
Normal file
11
_module/nss/10abeholderp1.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
11
_module/nss/10abeholderp2.nss
Normal file
11
_module/nss/10abeholderp2.nss
Normal 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
12
_module/nss/10aboat.nss
Normal 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
12
_module/nss/10aboat1.nss
Normal 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
43
_module/nss/10ariver1.nss
Normal 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
43
_module/nss/10ariver2.nss
Normal 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
43
_module/nss/10ariver3.nss
Normal 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
43
_module/nss/10ariver4.nss
Normal 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
43
_module/nss/10ariver5.nss
Normal 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
43
_module/nss/10ariver6.nss
Normal 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));
|
||||
|
||||
}
|
||||
12
_module/nss/10asmlaked1.nss
Normal file
12
_module/nss/10asmlaked1.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
12
_module/nss/10asmlaked2.nss
Normal file
12
_module/nss/10asmlaked2.nss
Normal 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
12
_module/nss/10ato11.nss
Normal 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
43
_module/nss/10ato9a.nss
Normal 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
12
_module/nss/10to13a.nss
Normal 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
12
_module/nss/11dive1.nss
Normal 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
12
_module/nss/11dive2.nss
Normal 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
43
_module/nss/11diving.nss
Normal 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
43
_module/nss/11fly1.nss
Normal 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
43
_module/nss/11fly2.nss
Normal 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
43
_module/nss/11river1.nss
Normal 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
43
_module/nss/11river2.nss
Normal 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
43
_module/nss/11river3.nss
Normal 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
43
_module/nss/11river4.nss
Normal 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
12
_module/nss/11to10a.nss
Normal 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
12
_module/nss/12aboat2.nss
Normal 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
12
_module/nss/12acyc2.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
43
_module/nss/12ahermit1.nss
Normal file
43
_module/nss/12ahermit1.nss
Normal 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));
|
||||
|
||||
}
|
||||
43
_module/nss/12ahermit2.nss
Normal file
43
_module/nss/12ahermit2.nss
Normal 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
12
_module/nss/12dive1.nss
Normal 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
12
_module/nss/12dive2.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
12
_module/nss/12totarpit.nss
Normal file
12
_module/nss/12totarpit.nss
Normal 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
12
_module/nss/14to5.nss
Normal 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
12
_module/nss/15to13.nss
Normal 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
43
_module/nss/1riverto9.nss
Normal 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));
|
||||
|
||||
}
|
||||
22
_module/nss/3aholedoor.nss
Normal file
22
_module/nss/3aholedoor.nss
Normal 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
43
_module/nss/3ato6a.nss
Normal 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));
|
||||
|
||||
}
|
||||
32
_module/nss/3fireperround.nss
Normal file
32
_module/nss/3fireperround.nss
Normal 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));
|
||||
|
||||
}
|
||||
12
_module/nss/3holesdoor.nss
Normal file
12
_module/nss/3holesdoor.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
12
_module/nss/3holesdoor2.nss
Normal file
12
_module/nss/3holesdoor2.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
37
_module/nss/3statsspawndoor.nss
Normal file
37
_module/nss/3statsspawndoor.nss
Normal 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
12
_module/nss/3statued.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
18
_module/nss/3statuesid1.nss
Normal file
18
_module/nss/3statuesid1.nss
Normal 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;
|
||||
}
|
||||
18
_module/nss/3statuesid2.nss
Normal file
18
_module/nss/3statuesid2.nss
Normal 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;
|
||||
}
|
||||
18
_module/nss/3statuesid3.nss
Normal file
18
_module/nss/3statuesid3.nss
Normal 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;
|
||||
}
|
||||
18
_module/nss/3statuesidx.nss
Normal file
18
_module/nss/3statuesidx.nss
Normal 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
43
_module/nss/4ae.nss
Normal 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
43
_module/nss/4ariver1.nss
Normal 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
12
_module/nss/4ato7a.nss
Normal 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
43
_module/nss/4aw.nss
Normal 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
12
_module/nss/5to14.nss
Normal 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
12
_module/nss/5to14jump.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
22
_module/nss/69_client_enter.nss
Normal file
22
_module/nss/69_client_enter.nss
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
18
_module/nss/69_client_exit.nss
Normal file
18
_module/nss/69_client_exit.nss
Normal 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);
|
||||
}
|
||||
}
|
||||
34
_module/nss/69_hen_combat.nss
Normal file
34
_module/nss/69_hen_combat.nss
Normal 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
122
_module/nss/69_hen_conv.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
352
_module/nss/69_hen_death.nss
Normal file
352
_module/nss/69_hen_death.nss
Normal 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);
|
||||
}
|
||||
80
_module/nss/69_hen_percep.nss
Normal file
80
_module/nss/69_hen_percep.nss
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
151
_module/nss/69_hen_spawnin.nss
Normal file
151
_module/nss/69_hen_spawnin.nss
Normal 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);
|
||||
}
|
||||
}
|
||||
21
_module/nss/69_hench_cancast.nss
Normal file
21
_module/nss/69_hench_cancast.nss
Normal 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;
|
||||
}
|
||||
16
_module/nss/69_hench_canlvl.nss
Normal file
16
_module/nss/69_hench_canlvl.nss
Normal 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());
|
||||
}
|
||||
13
_module/nss/69_hench_canwork.nss
Normal file
13
_module/nss/69_hench_canwork.nss
Normal 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;
|
||||
}
|
||||
11
_module/nss/69_hench_crtrno1.nss
Normal file
11
_module/nss/69_hench_crtrno1.nss
Normal 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;
|
||||
}
|
||||
11
_module/nss/69_hench_crtrno2.nss
Normal file
11
_module/nss/69_hench_crtrno2.nss
Normal 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;
|
||||
}
|
||||
9
_module/nss/69_hench_crtrsmn.nss
Normal file
9
_module/nss/69_hench_crtrsmn.nss
Normal 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();
|
||||
}
|
||||
9
_module/nss/69_hench_crtruns.nss
Normal file
9
_module/nss/69_hench_crtruns.nss
Normal 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();
|
||||
}
|
||||
11
_module/nss/69_hench_crtrye1.nss
Normal file
11
_module/nss/69_hench_crtrye1.nss
Normal 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;
|
||||
}
|
||||
11
_module/nss/69_hench_crtrye2.nss
Normal file
11
_module/nss/69_hench_crtrye2.nss
Normal 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;
|
||||
}
|
||||
33
_module/nss/69_hench_destobj.nss
Normal file
33
_module/nss/69_hench_destobj.nss
Normal 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.");
|
||||
}
|
||||
|
||||
|
||||
14
_module/nss/69_hench_didie.nss
Normal file
14
_module/nss/69_hench_didie.nss
Normal 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;
|
||||
}
|
||||
|
||||
18
_module/nss/69_hench_eqmelee.nss
Normal file
18
_module/nss/69_hench_eqmelee.nss
Normal 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.");
|
||||
}
|
||||
18
_module/nss/69_hench_eqrange.nss
Normal file
18
_module/nss/69_hench_eqrange.nss
Normal 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.");
|
||||
}
|
||||
17
_module/nss/69_hench_eqswap.nss
Normal file
17
_module/nss/69_hench_eqswap.nss
Normal 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);
|
||||
}
|
||||
26
_module/nss/69_hench_fire.nss
Normal file
26
_module/nss/69_hench_fire.nss
Normal 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();
|
||||
}
|
||||
}
|
||||
21
_module/nss/69_hench_fired.nss
Normal file
21
_module/nss/69_hench_fired.nss
Normal 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;
|
||||
}
|
||||
21
_module/nss/69_hench_gomelee.nss
Normal file
21
_module/nss/69_hench_gomelee.nss
Normal 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.");
|
||||
}
|
||||
21
_module/nss/69_hench_gorange.nss
Normal file
21
_module/nss/69_hench_gorange.nss
Normal 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.");
|
||||
}
|
||||
43
_module/nss/69_hench_hasdual.nss
Normal file
43
_module/nss/69_hench_hasdual.nss
Normal 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;
|
||||
}
|
||||
51
_module/nss/69_hench_heall.nss
Normal file
51
_module/nss/69_hench_heall.nss
Normal 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);
|
||||
}
|
||||
16
_module/nss/69_hench_henchxp.nss
Normal file
16
_module/nss/69_hench_henchxp.nss
Normal 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;
|
||||
}
|
||||
29
_module/nss/69_hench_hire.nss
Normal file
29
_module/nss/69_hench_hire.nss
Normal 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));
|
||||
|
||||
}
|
||||
}
|
||||
49
_module/nss/69_hench_identfy.nss
Normal file
49
_module/nss/69_hench_identfy.nss
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
18
_module/nss/69_hench_inven.nss
Normal file
18
_module/nss/69_hench_inven.nss
Normal 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());
|
||||
}
|
||||
11
_module/nss/69_hench_level.nss
Normal file
11
_module/nss/69_hench_level.nss
Normal 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
1796
_module/nss/69_hench_lib.nss
Normal file
File diff suppressed because it is too large
Load Diff
15
_module/nss/69_hench_notevil.nss
Normal file
15
_module/nss/69_hench_notevil.nss
Normal 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);
|
||||
}
|
||||
77
_module/nss/69_hench_pickup.nss
Normal file
77
_module/nss/69_hench_pickup.nss
Normal 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.");
|
||||
}
|
||||
|
||||
|
||||
21
_module/nss/69_hench_quit.nss
Normal file
21
_module/nss/69_hench_quit.nss
Normal 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);
|
||||
}
|
||||
16
_module/nss/69_hench_rangeno.nss
Normal file
16
_module/nss/69_hench_rangeno.nss
Normal 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;
|
||||
}
|
||||
16
_module/nss/69_hench_rangeye.nss
Normal file
16
_module/nss/69_hench_rangeye.nss
Normal 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;
|
||||
}
|
||||
23
_module/nss/69_hench_scout1.nss
Normal file
23
_module/nss/69_hench_scout1.nss
Normal 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);
|
||||
}
|
||||
26
_module/nss/69_hench_scout2.nss
Normal file
26
_module/nss/69_hench_scout2.nss
Normal 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);
|
||||
}
|
||||
}
|
||||
33
_module/nss/69_hench_switch.nss
Normal file
33
_module/nss/69_hench_switch.nss
Normal 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;
|
||||
}
|
||||
}
|
||||
16
_module/nss/69_hench_switchn.nss
Normal file
16
_module/nss/69_hench_switchn.nss
Normal 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;
|
||||
}
|
||||
11
_module/nss/69_hench_whatxp.nss
Normal file
11
_module/nss/69_hench_whatxp.nss
Normal 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.");
|
||||
}
|
||||
19
_module/nss/69_henchrt_enter.nss
Normal file
19
_module/nss/69_henchrt_enter.nss
Normal 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);
|
||||
}
|
||||
}
|
||||
7
_module/nss/69_henchscoutno.nss
Normal file
7
_module/nss/69_henchscoutno.nss
Normal file
@@ -0,0 +1,7 @@
|
||||
int StartingConditional()
|
||||
{
|
||||
int iResult;
|
||||
|
||||
iResult = 1-GetLocalInt(OBJECT_SELF,"Scouting");
|
||||
return iResult;
|
||||
}
|
||||
7
_module/nss/69_henchscoutyes.nss
Normal file
7
_module/nss/69_henchscoutyes.nss
Normal file
@@ -0,0 +1,7 @@
|
||||
int StartingConditional()
|
||||
{
|
||||
int iResult;
|
||||
|
||||
iResult = GetLocalInt(OBJECT_SELF,"Scouting");
|
||||
return iResult;
|
||||
}
|
||||
46
_module/nss/69_henchstr_exit.nss
Normal file
46
_module/nss/69_henchstr_exit.nss
Normal 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));
|
||||
}
|
||||
88
_module/nss/69_henchtrans.nss
Normal file
88
_module/nss/69_henchtrans.nss
Normal 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
Reference in New Issue
Block a user