Initial Upload
Initial Upload
This commit is contained in:
126
_module/nss/onuse_beamlever.nss
Normal file
126
_module/nss/onuse_beamlever.nss
Normal file
@@ -0,0 +1,126 @@
|
||||
void main()
|
||||
{
|
||||
if (GetLocalInt(OBJECT_SELF, "Activated")) {
|
||||
PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);
|
||||
SetLocalInt(OBJECT_SELF, "Activated", 0);
|
||||
} else {
|
||||
PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
|
||||
SetLocalInt(OBJECT_SELF, "Activated", 1);
|
||||
}
|
||||
PlaySound("as_sw_lever1");
|
||||
string sTag = GetTag(OBJECT_SELF);
|
||||
string sBeam;
|
||||
int nTurnOn = GetFortitudeSavingThrow(OBJECT_SELF);
|
||||
if (nTurnOn > 0) {
|
||||
nTurnOn = TRUE;
|
||||
}
|
||||
int nTurnOff = GetReflexSavingThrow(OBJECT_SELF);
|
||||
if (nTurnOff > 0) {
|
||||
nTurnOff = TRUE;
|
||||
}
|
||||
if (GetStringLength(sTag) == 16) {
|
||||
// We turn one matching beam on or off
|
||||
sBeam = GetStringRight(sTag, 6);
|
||||
object oBeamSource = GetNearestObjectByTag("BeamSource_" + sBeam);
|
||||
if ((nTurnOff && !nTurnOn) || (nTurnOff && nTurnOn && GetLocalInt(oBeamSource, "BeamSetToOn"))) {
|
||||
SetLocalInt(oBeamSource, "BeamSetToOn", FALSE);
|
||||
effect eCheck = GetFirstEffect(oBeamSource);
|
||||
while(GetIsEffectValid(eCheck)) {
|
||||
if(GetEffectType(eCheck) == EFFECT_TYPE_BEAM) {
|
||||
RemoveEffect(oBeamSource, eCheck);
|
||||
SetLocalInt(GetArea(OBJECT_SELF), sBeam + "IsOn", FALSE);
|
||||
}
|
||||
eCheck = GetNextEffect(oBeamSource);
|
||||
}
|
||||
} else {
|
||||
if (!GetLocalInt(oBeamSource, "BeamSetToOn")) {
|
||||
SetLocalInt(oBeamSource, "BeamSetToOn", TRUE);
|
||||
SetLocalInt(oBeamSource, "DoOnce", TRUE);
|
||||
ExecuteScript("ud_beamtarget", oBeamSource);
|
||||
}
|
||||
}
|
||||
} else if (GetStringLength(sTag) == 14) {
|
||||
// We turn all beams of matching type on or off
|
||||
int nCountNum = 0;
|
||||
string sType = GetStringRight(sTag, 4);
|
||||
string sCount = "00";
|
||||
object oBeamSource= GetNearestObjectByTag("BeamSource_" + sCount + sType);
|
||||
while (GetIsObjectValid(oBeamSource)) {
|
||||
if ((nTurnOff && !nTurnOn) || (nTurnOff && nTurnOn && GetLocalInt(oBeamSource, "BeamSetToOn"))) {
|
||||
SetLocalInt(oBeamSource, "BeamSetToOn", FALSE);
|
||||
effect eCheck = GetFirstEffect(oBeamSource);
|
||||
while(GetIsEffectValid(eCheck)) {
|
||||
if(GetEffectType(eCheck) == EFFECT_TYPE_BEAM) {
|
||||
RemoveEffect(oBeamSource, eCheck);
|
||||
SetLocalInt(GetArea(OBJECT_SELF), sCount + sType + "IsOn", FALSE);
|
||||
}
|
||||
eCheck = GetNextEffect(oBeamSource);
|
||||
}
|
||||
} else {
|
||||
if (!GetLocalInt(oBeamSource, "BeamSetToOn")) {
|
||||
SetLocalInt(oBeamSource, "BeamSetToOn", TRUE);
|
||||
SetLocalInt(oBeamSource, "DoOnce", TRUE);
|
||||
ExecuteScript("ud_beamtarget", oBeamSource);
|
||||
}
|
||||
}
|
||||
nCountNum++;
|
||||
sCount = IntToString(nCountNum);
|
||||
if (nCountNum < 10) {
|
||||
sCount = "0" + sCount;
|
||||
}
|
||||
oBeamSource = GetNearestObjectByTag("BeamSource_" + sCount + sType);
|
||||
}
|
||||
} else if (GetStringLength(sTag) == 13) {
|
||||
// We turn all beams in area on or off
|
||||
int nCountNum;
|
||||
int nForCount;
|
||||
string sCount;
|
||||
object oBeamSource;
|
||||
string sType;
|
||||
for (nForCount = 0; nForCount <= 6; nForCount++) {
|
||||
nCountNum = 0;
|
||||
sCount = "00";
|
||||
if (nForCount == 0) {
|
||||
sType = "Cold";
|
||||
} else if (nForCount == 1) {
|
||||
sType = "Elec";
|
||||
} else if (nForCount == 2) {
|
||||
sType = "Evil";
|
||||
} else if (nForCount == 3) {
|
||||
sType = "Fire";
|
||||
} else if (nForCount == 4) {
|
||||
sType = "Holy";
|
||||
} else if (nForCount == 5) {
|
||||
sType = "Lash";
|
||||
} else if (nForCount == 6) {
|
||||
sType = "Mind";
|
||||
}
|
||||
oBeamSource = GetNearestObjectByTag("BeamSource_" + sCount + sType);
|
||||
while (GetIsObjectValid(oBeamSource)) {
|
||||
if ((nTurnOff && !nTurnOn) || (nTurnOff && nTurnOn && GetLocalInt(oBeamSource, "BeamSetToOn"))) {
|
||||
SetLocalInt(oBeamSource, "BeamSetToOn", FALSE);
|
||||
effect eCheck = GetFirstEffect(oBeamSource);
|
||||
while(GetIsEffectValid(eCheck)) {
|
||||
if(GetEffectType(eCheck) == EFFECT_TYPE_BEAM) {
|
||||
RemoveEffect(oBeamSource, eCheck);
|
||||
SetLocalInt(GetArea(OBJECT_SELF), sCount + sType + "IsOn", FALSE);
|
||||
}
|
||||
eCheck = GetNextEffect(oBeamSource);
|
||||
}
|
||||
} else {
|
||||
if (!GetLocalInt(oBeamSource, "BeamSetToOn")) {
|
||||
SetLocalInt(oBeamSource, "BeamSetToOn", TRUE);
|
||||
SetLocalInt(oBeamSource, "DoOnce", TRUE);
|
||||
ExecuteScript("ud_beamtarget", oBeamSource);
|
||||
}
|
||||
}
|
||||
nCountNum++;
|
||||
string sCount = IntToString(nCountNum);
|
||||
if (nCountNum < 10) {
|
||||
sCount = "0" + sCount;
|
||||
}
|
||||
oBeamSource = GetNearestObjectByTag("BeamSource_" + sCount + sType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user