//////////////////////////////////////////////////////////////////////////////// // Dead and Wild Magic System - Tutorial Test // wdm_magic_test // By Don Anderson // dandersonru@msn.com // // Place this script in the OnUsed Event of a Switch // // The source script is by Catscan // //////////////////////////////////////////////////////////////////////////////// #include "wdm_inc" void DoStrip() { object oObject = GetFirstObjectInArea(); while (oObject != OBJECT_INVALID) { int iType = GetObjectType(oObject); switch (iType) { case OBJECT_TYPE_CREATURE: { if (GetIsDM(oObject) || GetIsDMPossessed(oObject)) continue; else WDM_StripMagic(oObject); break; } case OBJECT_TYPE_ITEM: WDM_RemoveAllProperties(oObject); break; } oObject = GetNextObjectInArea(); } } void DoRestore() { object oObject = GetFirstObjectInArea(); while (oObject != OBJECT_INVALID) { int iType = GetObjectType(oObject); switch (iType) { case OBJECT_TYPE_CREATURE: { if (GetIsDM(oObject) || GetIsDMPossessed(oObject)) continue; else WDM_RestoreMagic(oObject); break; } case OBJECT_TYPE_ITEM: WDM_RestoreAllProperties(oObject); break; } oObject = GetNextObjectInArea(); } } void main() { object oSwitch = OBJECT_SELF; object oPC = GetLastUsedBy(); object oArea = GetArea(oPC); string sLight = "LIGHT"; int nCurStatus = GetLocalInt(oArea,"STATUS"); object oLight = GetNearestObjectByTag(sLight,oPC); DestroyObject(oLight); SetLocalInt(oArea,"X2_L_WILD_MAGIC",TRUE); effect eShake = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE); ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShake,oSwitch,RoundsToSeconds(6)); nCurStatus++; if(nCurStatus > 2)nCurStatus = 0; string sResRef; string sMsg; switch (nCurStatus) { case 0: sResRef = "plc_solwhite"; sMsg = "* Magic works as normal *"; WDM_SetAreaDeadMagicStatus(oArea, FALSE); WDM_SetAreaWildMagicStatus(oArea, FALSE); DoRestore(); break; case 1: sResRef = "plc_solred"; sMsg = "* Area is now Wild *"; WDM_SetAreaDeadMagicStatus(oArea, FALSE); WDM_SetAreaWildMagicStatus(oArea, TRUE, 100); break; case 2: sResRef = "plc_solgreen"; sMsg = "* Area is now Dead *"; WDM_SetAreaWildMagicStatus(oArea, FALSE); WDM_SetAreaDeadMagicStatus(oArea, TRUE, TRUE, TRUE); DoStrip(); break; } CreateObject(OBJECT_TYPE_PLACEABLE,sResRef,GetLocation(oSwitch),FALSE,sLight); SpeakString(sMsg); SetLocalInt(oArea,"STATUS",nCurStatus); }