Added PnP Dire Rat.
Added PnP Dire Rat.
This commit is contained in:
273
nwn_dark_sun/ar_inc_wow.nss
Normal file
273
nwn_dark_sun/ar_inc_wow.nss
Normal file
@@ -0,0 +1,273 @@
|
||||
// If you want NPCs to lose the temporary item properties also change this to TRUE
|
||||
const int DISPEL_NPCS_ALSO = FALSE;
|
||||
|
||||
// Used to help check the clerics domains
|
||||
const int AIR = 1;
|
||||
const int EARTH = 2;
|
||||
const int FIRE = 4;
|
||||
const int WATER = 8;
|
||||
|
||||
// Returns TRUE if the cleric should only pull down one (or more) specific elementals
|
||||
int CheckClericSummon(int nSpellID);
|
||||
|
||||
// The effect for the cleric summoning the elementals
|
||||
effect ClericSummon(int nSpellID);
|
||||
|
||||
// The resref of the elemental to summon
|
||||
string ClericCreature(int nDomains, int nSpellID);
|
||||
|
||||
// This will scan the items of the PC entering the module for properties not
|
||||
// allowed and for duplicate items. This is called in the OnClientEnter script.
|
||||
// Change nEnter to TRUE for entering scripts, otherwise this will be called in
|
||||
// spell scripts with FALSE and it will not check for duplicate items then.
|
||||
void ScanItems(object oPC, int nEnter = FALSE);
|
||||
|
||||
// This checks to see if the item is a crafting duplicate or not.
|
||||
int CheckForDupe(object oItem);
|
||||
|
||||
// This checks the item for properties to strip.
|
||||
void CheckProperties(object oItem);
|
||||
|
||||
|
||||
|
||||
|
||||
// This will scan the items of the PC entering the module for properties not
|
||||
// allowed and for duplicate items. This is called in the OnClientEnter script.
|
||||
// Change nEnter to TRUE for entering scripts, otherwise this will be called in
|
||||
// spell scripts with FALSE and it will not check for duplicate items then.
|
||||
void ScanItems(object oPC, int nEnter = FALSE)
|
||||
{
|
||||
if(GetIsDM(oPC) || (!GetIsPC(oPC) && DISPEL_NPCS_ALSO == FALSE)) return;
|
||||
|
||||
object oItem;
|
||||
int nNth;
|
||||
|
||||
if(nEnter)
|
||||
{
|
||||
|
||||
for(nNth = 0; nNth <= 13; nNth++)
|
||||
{
|
||||
oItem = GetItemInSlot(nNth, oPC);
|
||||
if(CheckForDupe(oItem))
|
||||
{
|
||||
// This message will be sent to the player
|
||||
SendMessageToPC(oPC, "You have been found with a duplicate item. It will be removed.");
|
||||
DestroyObject(oItem, 0.1);
|
||||
// This message will be sent to all DMS
|
||||
SendMessageToAllDMs(GetName(oPC)+" has been found with a duplicate item, it has been destroyed.");
|
||||
// This will log the message
|
||||
WriteTimestampedLogEntry(GetName(oPC)+" has been found with a duplicate item, "+GetName(oItem)+", and it was destroyed.");
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckProperties(oItem);
|
||||
}
|
||||
}
|
||||
oItem = GetFirstItemInInventory(oPC);
|
||||
while(GetIsObjectValid(oItem))
|
||||
{
|
||||
if(CheckForDupe(oItem))
|
||||
{
|
||||
// This message will be sent to the player
|
||||
SendMessageToPC(oPC, "You have been found with a duplicate item. It will be removed.");
|
||||
DestroyObject(oItem, 0.1);
|
||||
// This message will be sent to all DMS
|
||||
SendMessageToAllDMs(GetName(oPC)+" has been found with a duplicate item, it has been destroyed.");
|
||||
// This will log the message
|
||||
WriteTimestampedLogEntry(GetName(oPC)+" has been found with a duplicate item, "+GetName(oItem)+", and it was destroyed.");
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckProperties(oItem);
|
||||
}
|
||||
oItem = GetNextItemInInventory(oPC);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(nNth = 0; nNth <= 13; nNth++)
|
||||
{
|
||||
oItem = GetItemInSlot(nNth, oPC);
|
||||
if(GetIsObjectValid(oItem)) CheckProperties(oItem);
|
||||
}
|
||||
oItem = GetFirstItemInInventory(oPC);
|
||||
while(GetIsObjectValid(oItem))
|
||||
{
|
||||
CheckProperties(oItem);
|
||||
oItem = GetNextItemInInventory(oPC);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This checks to see if the item is a crafting duplicate or not.
|
||||
int CheckForDupe(object oItem)
|
||||
{
|
||||
return GetLocalInt(oItem, "ZEP_CR_TEMPITEM");
|
||||
}
|
||||
|
||||
// This checks the item for properties to strip.
|
||||
void CheckProperties(object oItem)
|
||||
{
|
||||
itemproperty ipIP = GetFirstItemProperty(oItem);
|
||||
int nDuration;
|
||||
|
||||
while(GetIsItemPropertyValid(ipIP))
|
||||
{
|
||||
nDuration = GetItemPropertyDurationType(ipIP);
|
||||
|
||||
if(nDuration == DURATION_TYPE_TEMPORARY)
|
||||
{
|
||||
RemoveItemProperty(oItem, ipIP);
|
||||
}
|
||||
ipIP = GetNextItemProperty(oItem);
|
||||
}
|
||||
}
|
||||
|
||||
string ClericCreature(int nDomains, int nSpellID)
|
||||
{
|
||||
string sReturn;
|
||||
int nCount;
|
||||
if(nDomains & AIR)
|
||||
{
|
||||
nCount++;
|
||||
}
|
||||
if(nDomains & EARTH)
|
||||
{
|
||||
nCount++;
|
||||
}
|
||||
if(nDomains & FIRE)
|
||||
{
|
||||
nCount++;
|
||||
}
|
||||
if(nDomains & WATER)
|
||||
{
|
||||
nCount++;
|
||||
}
|
||||
|
||||
int nRoll = Random(nCount) + 1;
|
||||
|
||||
switch(nRoll)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
if(nDomains & AIR)
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_AIRHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_AIRGREAT";
|
||||
else sReturn = "NW_S_AIRELDER";
|
||||
}
|
||||
else if(nDomains & EARTH)
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_EARTHHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_EARTHGREAT";
|
||||
else sReturn = "NW_S_EARTHELDER";
|
||||
}
|
||||
else if(nDomains & FIRE)
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_FIREHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_FIREGREAT";
|
||||
else sReturn = "NW_S_FIREELDER";
|
||||
}
|
||||
else
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_WATERHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_WATERGREAT";
|
||||
else sReturn = "NW_S_WATERELDER";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
if(nDomains & EARTH)
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_EARTHHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_EARTHGREAT";
|
||||
else sReturn = "NW_S_EARTHELDER";
|
||||
}
|
||||
else if(nDomains & FIRE)
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_FIREHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_FIREGREAT";
|
||||
else sReturn = "NW_S_FIREELDER";
|
||||
}
|
||||
else
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_WATERHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_WATERGREAT";
|
||||
else sReturn = "NW_S_WATERELDER";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
if(nDomains & FIRE)
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_FIREHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_FIREGREAT";
|
||||
else sReturn = "NW_S_FIREELDER";
|
||||
}
|
||||
else
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_WATERHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_WATERGREAT";
|
||||
else sReturn = "NW_S_WATERELDER";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
if(nSpellID == SPELL_SUMMON_CREATURE_VII) sReturn = "NW_S_WATERHUGE";
|
||||
else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) sReturn = "NW_S_WATERGREAT";
|
||||
else sReturn = "NW_S_WATERELDER";
|
||||
}
|
||||
break;
|
||||
}
|
||||
return sReturn;
|
||||
}
|
||||
|
||||
int CheckClericSummon(int nSpellID)
|
||||
{
|
||||
int nReturn = FALSE;
|
||||
if(GetLevelByClass(CLASS_TYPE_CLERIC) > 0 && (nSpellID == SPELL_SUMMON_CREATURE_VII || nSpellID == SPELL_SUMMON_CREATURE_VIII || nSpellID == SPELL_SUMMON_CREATURE_IX) && (GetHasFeat(FEAT_AIR_DOMAIN_POWER) || GetHasFeat(FEAT_EARTH_DOMAIN_POWER) || GetHasFeat(FEAT_FIRE_DOMAIN_POWER) || GetHasFeat(FEAT_WATER_DOMAIN_POWER))) nReturn = TRUE;
|
||||
return nReturn;
|
||||
}
|
||||
|
||||
effect ClericSummon(int nSpellID)
|
||||
{
|
||||
int nPowers;
|
||||
int nCount;
|
||||
string sSummon;
|
||||
|
||||
if(GetHasFeat(FEAT_AIR_DOMAIN_POWER))
|
||||
{
|
||||
nPowers |= AIR;
|
||||
}
|
||||
if(GetHasFeat(FEAT_EARTH_DOMAIN_POWER))
|
||||
{
|
||||
nPowers |= EARTH;
|
||||
}
|
||||
if(GetHasFeat(FEAT_FIRE_DOMAIN_POWER))
|
||||
{
|
||||
nPowers |= FIRE;
|
||||
}
|
||||
if(GetHasFeat(FEAT_WATER_DOMAIN_POWER))
|
||||
{
|
||||
nPowers |= WATER;
|
||||
}
|
||||
|
||||
sSummon = ClericCreature(nPowers, nSpellID);
|
||||
effect eSummonedMonster = EffectSummonCreature(sSummon, VFX_FNF_SUMMON_MONSTER_3);
|
||||
return eSummonedMonster;
|
||||
}
|
||||
|
||||
//void main () {}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user