2026/01/26 Update
Added Wispling race. Wispling qualifies for Shifter (PnP). Bioware poisons now work with "new" PRC8 weapons. Updated PRC8 Tester mod store to have Bioware venoms. Updated PRC8 version. Added Alchemy expansion notes. Updated Starting package TLK notes.
This commit is contained in:
@@ -74,17 +74,23 @@ void main()
|
||||
object oItem = GetSpellCastItem();
|
||||
object oPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
|
||||
|
||||
// Make sure the target is an item
|
||||
if (oTarget == OBJECT_INVALID || GetObjectType(oTarget) != OBJECT_TYPE_ITEM)
|
||||
{
|
||||
SendMessageToPCByStrRef(oPC, 83359); //"Invalid target "
|
||||
//SendMessageToPCByStrRef(oPC, 83359); //"Invalid target "
|
||||
SendMessageToPC(oPC, "Failure: You may only apply poisons to food & weapons.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Make sure it's a weapon
|
||||
int nType = GetBaseItemType(oTarget);
|
||||
if (DEBUG) DoDebug("x2_s2_poisonwp is running.");
|
||||
if (DEBUG) DoDebug("Base Item Type: " + IntToString(nType));
|
||||
if (DEBUG) DoDebug("Is Melee Weapon: " + IntToString(IPGetIsMeleeWeapon(oTarget)));
|
||||
if (DEBUG) DoDebug("Sharp Weapons Switch: " + IntToString(GetPRCSwitch(PRC_ALLOW_ONLY_SHARP_WEAPONS)));
|
||||
if (DEBUG) DoDebug("Is Bludgeoning: " + IntToString(IPGetIsBludgeoningWeapon(oTarget)));
|
||||
|
||||
if (!IPGetIsMeleeWeapon(oTarget) &&
|
||||
!IPGetIsProjectile(oTarget) &&
|
||||
nType != BASE_ITEM_SHURIKEN &&
|
||||
@@ -94,7 +100,7 @@ void main()
|
||||
SendMessageToPCByStrRef(oPC, 83359); //"Invalid target "
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Make sure the weapon can be applied poison to
|
||||
if(GetPRCSwitch(PRC_ALLOW_ONLY_SHARP_WEAPONS) &&
|
||||
IPGetIsBludgeoningWeapon(oTarget))
|
||||
|
||||
@@ -26,10 +26,13 @@ void main()
|
||||
|
||||
switch(nSpellID)
|
||||
{
|
||||
case SPELL_IRDA_CHANGE_SHAPE_LEARN:
|
||||
case SPELL_IRDA_CHANGE_SHAPE_LEARN:
|
||||
case SPELL_WISPLING_CHANGE_SHAPE_LEARN:
|
||||
case SPELL_FEYRI_CHANGE_SHAPE_LEARN:
|
||||
case SPELL_RAKSHASA_CHANGE_SHAPE_LEARN: nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
|
||||
case SPELL_ALTER_SELF_LEARN: nShiftType = SHIFTER_TYPE_ALTER_SELF; break;
|
||||
|
||||
case SPELL_DISGUISE_SELF_LEARN:
|
||||
case SPELL_CHANGLING_CHANGE_SHAPE_LEARN:
|
||||
case SPELL_QUICK_CHANGE_SHAPE_LEARN: nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
|
||||
@@ -50,10 +53,17 @@ void main()
|
||||
// In case of shifting failure, refund the shifting use
|
||||
if(nSpellID == SPELL_IRDA_CHANGE_SHAPE_LEARN)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE);
|
||||
|
||||
if(nSpellID == SPELL_WISPLING_CHANGE_SHAPE_LEARN)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_WISPLING_CHANGE_SHAPE);
|
||||
|
||||
}
|
||||
}
|
||||
// Couldn't shift, refund the feat use
|
||||
else
|
||||
if(nSpellID == SPELL_IRDA_CHANGE_SHAPE_LEARN)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE);
|
||||
|
||||
if(nSpellID == SPELL_WISPLING_CHANGE_SHAPE_LEARN)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_WISPLING_CHANGE_SHAPE);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,9 @@ void main()
|
||||
|
||||
if(GetSpellId() == SPELL_IRDA_CHANGE_SHAPE_OPTIONS)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE);
|
||||
|
||||
if(GetSpellId() == SPELL_WISPLING_CHANGE_SHAPE_OPTIONS)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_WISPLING_CHANGE_SHAPE);
|
||||
|
||||
StartDynamicConversation("prc_chngshp_conv", oPC, DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, TRUE, FALSE, oPC);
|
||||
}
|
||||
@@ -30,22 +30,33 @@ void main()
|
||||
// Determine which quickslot was used
|
||||
switch(nSpellID)
|
||||
{
|
||||
case SPELL_IRDA_CHANGE_SHAPE_QS1: nSlot = 1; sSource = "Irda_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
case SPELL_WISPLING_CHANGE_SHAPE_QS1: nSlot = 1; sSource = "Wispling_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
case SPELL_WISPLING_CHANGE_SHAPE_QS2: nSlot = 2; sSource = "Wispling_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
|
||||
case SPELL_FEYRI_CHANGE_SHAPE_QS1: nSlot = 1; sSource = "Feyri_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
case SPELL_FEYRI_CHANGE_SHAPE_QS2: nSlot = 2; sSource = "Feyri_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
|
||||
case SPELL_RAKSHASA_CHANGE_SHAPE_QS1: nSlot = 1; sSource = "Rakshasa_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
case SPELL_RAKSHASA_CHANGE_SHAPE_QS2: nSlot = 2; sSource = "Rakshasa_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
|
||||
case SPELL_DISGUISE_SELF_QS1: nSlot = 1; sSource = "Disguise_Self_Quick_"; nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
|
||||
case SPELL_ALTER_SELF_QS1: nSlot = 1; sSource = "Alter_Self_Quick_"; nShiftType = SHIFTER_TYPE_ALTER_SELF; break;
|
||||
case SPELL_DISGUISE_SELF_QS2: nSlot = 2; sSource = "Disguise_Self_Quick_"; nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
|
||||
case SPELL_DISGUISE_SELF_QS3: nSlot = 3; sSource = "Disguise_Self_Quick_"; nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
|
||||
|
||||
case SPELL_CHANGLING_CHANGE_SHAPE_QS1:
|
||||
case SPELL_QUICK_CHANGE_SHAPE_QS1: nSlot = 1; sSource = "Changeling_Shape_Quick_"; nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
|
||||
case SPELL_IRDA_CHANGE_SHAPE_QS2: nSlot = 2; sSource = "Irda_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
case SPELL_CHANGLING_CHANGE_SHAPE_QS2:
|
||||
case SPELL_QUICK_CHANGE_SHAPE_QS2: nSlot = 2; sSource = "Changeling_Shape_Quick_"; nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
|
||||
case SPELL_FEYRI_CHANGE_SHAPE_QS2: nSlot = 2; sSource = "Feyri_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
case SPELL_RAKSHASA_CHANGE_SHAPE_QS2: nSlot = 2; sSource = "Rakshasa_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
case SPELL_DISGUISE_SELF_QS2: nSlot = 2; sSource = "Disguise_Self_Quick_"; nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
|
||||
case SPELL_ALTER_SELF_QS2: nSlot = 2; sSource = "Alter_Self_Quick_"; nShiftType = SHIFTER_TYPE_ALTER_SELF; break;
|
||||
case SPELL_DISGUISE_SELF_QS3: nSlot = 3; sSource = "Disguise_Self_Quick_"; nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
|
||||
case SPELL_ALTER_SELF_QS3: nSlot = 3; sSource = "Alter_Self_Quick_"; nShiftType = SHIFTER_TYPE_ALTER_SELF; break;
|
||||
|
||||
case SPELL_CHANGLING_CHANGE_SHAPE_QS2:
|
||||
case SPELL_QUICK_CHANGE_SHAPE_QS2: nSlot = 2; sSource = "Changeling_Shape_Quick_"; nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
|
||||
|
||||
case SPELL_IRDA_CHANGE_SHAPE_QS1: nSlot = 1; sSource = "Irda_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
case SPELL_IRDA_CHANGE_SHAPE_QS2: nSlot = 2; sSource = "Irda_Shape_Quick_"; nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
|
||||
|
||||
case SPELL_ALTER_SELF_QS1: nSlot = 1; sSource = "Alter_Self_Quick_"; nShiftType = SHIFTER_TYPE_ALTER_SELF; break;
|
||||
case SPELL_ALTER_SELF_QS2: nSlot = 2; sSource = "Alter_Self_Quick_"; nShiftType = SHIFTER_TYPE_ALTER_SELF; break;
|
||||
case SPELL_ALTER_SELF_QS3: nSlot = 3; sSource = "Alter_Self_Quick_"; nShiftType = SHIFTER_TYPE_ALTER_SELF; break;
|
||||
|
||||
|
||||
|
||||
default:
|
||||
if(DEBUG) DoDebug("prc_chngshp_quik: ERROR: Unknown nSpellID value: " + IntToString(nSpellID));
|
||||
@@ -61,7 +72,11 @@ void main()
|
||||
FloatingTextStrRefOnCreature(16828382, oPC, FALSE); // "This Quick Shift Slot is empty!"
|
||||
if(nSpellID == SPELL_IRDA_CHANGE_SHAPE_QS1 || nSpellID == SPELL_IRDA_CHANGE_SHAPE_QS2)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE);
|
||||
return;
|
||||
|
||||
FloatingTextStrRefOnCreature(16828382, oPC, FALSE); // "This Quick Shift Slot is empty!"
|
||||
if(nSpellID == SPELL_WISPLING_CHANGE_SHAPE_QS1 || nSpellID == SPELL_WISPLING_CHANGE_SHAPE_QS2)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_WISPLING_CHANGE_SHAPE);
|
||||
return;
|
||||
}
|
||||
|
||||
// See if the shifting starts successfully
|
||||
@@ -70,6 +85,9 @@ void main()
|
||||
// In case of shifting failure, refund the shifting use
|
||||
if(nSpellID == SPELL_IRDA_CHANGE_SHAPE_QS1 || nSpellID == SPELL_IRDA_CHANGE_SHAPE_QS2)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE);
|
||||
|
||||
if(nSpellID == SPELL_WISPLING_CHANGE_SHAPE_QS1 || nSpellID == SPELL_WISPLING_CHANGE_SHAPE_QS2)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_WISPLING_CHANGE_SHAPE);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -31,6 +31,9 @@ void main()
|
||||
if(GetSpellId() == SPELL_IRDA_CHANGE_SHAPE_TRUE)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE);
|
||||
|
||||
if(GetSpellId() == SPELL_WISPLING_CHANGE_SHAPE_TRUE)
|
||||
IncrementRemainingFeatUses(oPC, FEAT_WISPLING_CHANGE_SHAPE);
|
||||
|
||||
//End treeshape
|
||||
if(GetHasSpellEffect(SPELL_TREESHAPE, oPC))
|
||||
{
|
||||
@@ -45,6 +48,9 @@ void main()
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
|
||||
}
|
||||
|
||||
//;: Wispling Change Shape
|
||||
PRCRemoveSpellEffects(17980, oPC, oPC);
|
||||
|
||||
// Aranea Alternate Form
|
||||
PRCRemoveSpellEffects(1489, oPC, oPC);
|
||||
PRCRemoveSpellEffects(1490, oPC, oPC);
|
||||
|
||||
@@ -15,21 +15,21 @@
|
||||
//:: Restore crafting state on login with offline time calculation
|
||||
void RestoreCraftingStateOnLogin(object oPC)
|
||||
{
|
||||
if(DEBUG) DoDebug("DEBUG: RestoreCraftingStateOnLogin called for " + GetName(oPC));
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | RestoreCraftingStateOnLogin called for " + GetName(oPC));
|
||||
|
||||
// Check switch conditions
|
||||
if(!(!GetPRCSwitch(PRC_DISABLE_CRAFT) &&
|
||||
GetPRCSwitch(PRC_CRAFTING_TIME_SCALE) > 1))
|
||||
{
|
||||
if(DEBUG) DoDebug("DEBUG: Switch conditions not met for crafting restore");
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | Switch conditions not met for crafting restore");
|
||||
return;
|
||||
}
|
||||
|
||||
if(DEBUG) DoDebug("DEBUG: Switch conditions met, checking for saved crafting state");
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | Switch conditions met, checking for saved crafting state");
|
||||
|
||||
if(SQLocalsPlayer_GetInt(oPC, "crafting_active"))
|
||||
{
|
||||
if(DEBUG) DoDebug("DEBUG: Found active crafting state, restoring...");
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | Found active crafting state, restoring...");
|
||||
|
||||
// Get basic crafting state
|
||||
string sUUID = SQLocalsPlayer_GetString(oPC, "crafting_item_uuid");
|
||||
@@ -43,42 +43,42 @@ void RestoreCraftingStateOnLogin(object oPC)
|
||||
int nIPCostTable = SQLocalsPlayer_GetInt(oPC, "crafting_ip_costtable");
|
||||
int nIPParam1 = SQLocalsPlayer_GetInt(oPC, "crafting_ip_param1");
|
||||
|
||||
if(DEBUG) DoDebug("DEBUG: Initial data - UUID: " + sUUID + ", rounds: " + IntToString(nRounds) +
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | Initial data - UUID: " + sUUID + ", rounds: " + IntToString(nRounds) +
|
||||
", cost: " + IntToString(nCost) + ", xp: " + IntToString(nXP));
|
||||
|
||||
// Calculate offline progress
|
||||
int nLogoutTime = SQLocalsPlayer_GetInt(oPC, "crafting_last_timestamp");
|
||||
int nCurrentTime = GetCurrentUnixTimestamp();
|
||||
if(DEBUG) DoDebug("prc_onenter >> : RestoreCraftingStateOnLogin() | GetCurrentUnixTimestamp is:" + IntToString(nCurrentTime) +".");
|
||||
if(DEBUG) DoDebug("prc_onenter >> RestoreCraftingStateOnLogin() | GetCurrentUnixTimestamp is:" + IntToString(nCurrentTime) +".");
|
||||
|
||||
if(nLogoutTime > 0 && nCurrentTime > nLogoutTime)
|
||||
{
|
||||
// Calculate real time elapsed in seconds
|
||||
int nSecondsOffline = nCurrentTime - nLogoutTime;
|
||||
if(DEBUG) DoDebug("prc_onenter >> : RestoreCraftingStateOnLogin() | nSecondsOffline is:" + IntToString(nSecondsOffline) +".");
|
||||
if(DEBUG) DoDebug("prc_onenter >> RestoreCraftingStateOnLogin() | nSecondsOffline is:" + IntToString(nSecondsOffline) +".");
|
||||
|
||||
// Each round is always 6 seconds real time
|
||||
int nRoundsOffline = nSecondsOffline / 6;
|
||||
if(DEBUG) DoDebug("prc_onenter >> : RestoreCraftingStateOnLogin() | nRoundsOffline is:" + IntToString(nRoundsOffline) +".");
|
||||
if(DEBUG) DoDebug("prc_onenter >> RestoreCraftingStateOnLogin() | nRoundsOffline is:" + IntToString(nRoundsOffline) +".");
|
||||
|
||||
// Subtract offline progress from remaining rounds
|
||||
nRounds -= nRoundsOffline;
|
||||
if(nRounds < 1) nRounds = 1; // Minimum 1 round to finish
|
||||
|
||||
if(DEBUG) DoDebug("DEBUG: Offline progress - time diff: " + IntToString(nSecondsOffline) +
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | Offline progress - time diff: " + IntToString(nSecondsOffline) +
|
||||
"s, rounds progress: " + IntToString(nRoundsOffline) +
|
||||
", new rounds: " + IntToString(nRounds));
|
||||
}
|
||||
else
|
||||
{
|
||||
if(DEBUG) DoDebug("DEBUG: No valid logout time found, using saved rounds: " + IntToString(nRounds));
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | No valid logout time found, using saved rounds: " + IntToString(nRounds));
|
||||
}
|
||||
|
||||
// Find the crafting item
|
||||
object oItem = GetItemByUUID(oPC, sUUID);
|
||||
if(GetIsObjectValid(oItem))
|
||||
{
|
||||
if(DEBUG) DoDebug("DEBUG: Found item, restoring crafting session");
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | Found item, restoring crafting session");
|
||||
|
||||
// Reconstruct the itemproperty
|
||||
itemproperty ip;
|
||||
@@ -87,7 +87,7 @@ void RestoreCraftingStateOnLogin(object oPC)
|
||||
ip = ConstructIP(nIPType, nIPSubtype, nIPCostTable, nIPParam1);
|
||||
}
|
||||
|
||||
if(DEBUG) DoDebug("DEBUG: About to call CraftingHB with " + IntToString(nRounds) + " rounds, cost: " + IntToString(nCost) + ", xp: " + IntToString(nXP));
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | About to call CraftingHB with " + IntToString(nRounds) + " rounds, cost: " + IntToString(nCost) + ", xp: " + IntToString(nXP));
|
||||
|
||||
// Notify player
|
||||
FloatingTextStringOnCreature("Resuming crafting session: " + IntToString(nRounds) + " round(s) remaining", oPC);
|
||||
@@ -99,7 +99,7 @@ void RestoreCraftingStateOnLogin(object oPC)
|
||||
}
|
||||
else
|
||||
{
|
||||
if(DEBUG) DoDebug("DEBUG: Failed to find item with UUID: " + sUUID);
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | Failed to find item with UUID: " + sUUID);
|
||||
FloatingTextStringOnCreature("Crafting session could not be restored - item not found", oPC);
|
||||
// Clear the invalid crafting state
|
||||
SQLocalsPlayer_SetInt(oPC, "crafting_active", 0);
|
||||
@@ -107,7 +107,7 @@ void RestoreCraftingStateOnLogin(object oPC)
|
||||
}
|
||||
else
|
||||
{
|
||||
if(DEBUG) DoDebug("DEBUG: No saved crafting state found");
|
||||
if(DEBUG) DoDebug("prc_oneter >> RestoreCraftingStateOnLogin | No saved crafting state found");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
// Save logout time when actually logging out
|
||||
void SaveCraftingLogoutTime(object oPC)
|
||||
{
|
||||
if(DEBUG) DoDebug("SaveCraftingLogoutTime: Called for " + GetName(oPC));
|
||||
if(DEBUG) DoDebug("prc_onleave >> SaveCraftingLogoutTime | Called for " + GetName(oPC));
|
||||
|
||||
// Check database first, then local int
|
||||
int bCrafting = SQLocalsPlayer_GetInt(oPC, "crafting_active");
|
||||
if(!bCrafting)
|
||||
{
|
||||
bCrafting = GetLocalInt(oPC, "PRC_CRAFT_HB");
|
||||
if(DEBUG) DoDebug("SaveCraftingLogoutTime: DB crafting_active = " + IntToString(bCrafting) +
|
||||
if(DEBUG) DoDebug("prc_onleave >> SaveCraftingLogoutTime | DB crafting_active = " + IntToString(bCrafting) +
|
||||
", Local PRC_CRAFT_HB = " + IntToString(GetLocalInt(oPC, "PRC_CRAFT_HB")));
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ void SaveCraftingLogoutTime(object oPC)
|
||||
int nLastLogout = SQLocalsPlayer_GetInt(oPC, "crafting_last_timestamp");
|
||||
nLogoutTimestamp = nLastLogout + 1;
|
||||
SQLocalsPlayer_SetInt(oPC, "crafting_last_timestamp", nLogoutTimestamp);
|
||||
if(DEBUG) DoDebug("SaveCraftingLogoutTime: Using fallback counter: " + IntToString(nLogoutTimestamp));
|
||||
if(DEBUG) DoDebug("prc_onleave >> SaveCraftingLogoutTime | Using fallback counter: " + IntToString(nLogoutTimestamp));
|
||||
}
|
||||
|
||||
// Save the timestamp
|
||||
@@ -51,7 +51,7 @@ void SaveCraftingLogoutTime(object oPC)
|
||||
SQLocalsPlayer_SetInt(oPC, "crafting_rounds", nRounds);
|
||||
}
|
||||
|
||||
if(DEBUG) DoDebug("SaveCraftingLogoutTime: Saved logout timestamp " + IntToString(nLogoutTimestamp) + ", rounds remaining: " + IntToString(nRounds));
|
||||
if(DEBUG) DoDebug("prc_onleave >> SaveCraftingLogoutTime | Saved logout timestamp " + IntToString(nLogoutTimestamp) + ", rounds remaining: " + IntToString(nRounds));
|
||||
|
||||
SQLocalsPlayer_SetString(oPC, "crafting_file", GetLocalString(oPC, "PRC_CRAFT_FILE"));
|
||||
SQLocalsPlayer_SetInt(oPC, "crafting_line", GetLocalInt(oPC, "PRC_CRAFT_LINE"));
|
||||
@@ -62,7 +62,7 @@ void SaveCraftingLogoutTime(object oPC)
|
||||
}
|
||||
else
|
||||
{
|
||||
if(DEBUG) DoDebug("SaveCraftingLogoutTime: Player not crafting, skipping");
|
||||
if(DEBUG) DoDebug("prc_onleave >> SaveCraftingLogoutTime | Player not crafting, skipping");
|
||||
}
|
||||
}
|
||||
void main()
|
||||
|
||||
@@ -299,6 +299,7 @@ void Shifter(object oPC, int iArcSpell, int iDivSpell)
|
||||
|| nRace == RACIAL_TYPE_DOPPELGANGER
|
||||
|| nRace == RACIAL_TYPE_ARANEA
|
||||
|| nRace == RACIAL_TYPE_SHIFTER
|
||||
|| nRace == RACIAL_TYPE_WISPLING
|
||||
// not counted since it is just "disguise self" and not alter self or shape change
|
||||
//||nRace == RACIAL_TYPE_DEEP_GNOME
|
||||
|| nRace == RACIAL_TYPE_NAZTHARUNE_RAKSHASA)
|
||||
|
||||
Reference in New Issue
Block a user