Everything works well -- EXCEPT --
If I activate this COG when there is nothing "Pushable/Pullable" in view, it will automatically activate on a "Pushable/Pullable" object or NPC - i.e., you can activate it in a completely clear area, go through a door into another area that has an NPC or, say, a shield powerup & said NPC or powerup will be automatically effected.
What might I be overlooking...?
Thanx!
_K_
[This message has been edited by SaberMaster (edited November 19, 2003).]
If I activate this COG when there is nothing "Pushable/Pullable" in view, it will automatically activate on a "Pushable/Pullable" object or NPC - i.e., you can activate it in a completely clear area, go through a door into another area that has an NPC or, say, a shield powerup & said NPC or powerup will be automatically effected.
Code:
# Jedi Knight Cog Script # # FORCE_PULL.COG # # FORCEPOWER Script - Force Pull # Basic Power # Bin 24 # # [YB] # # (C) 1997 LucasArts Entertainment Co. All Rights Reserved symbols template powerup local int player local int victim local int potential local int throwThing local flex cost=30.0 local int rank local flex mana local flex dot local flex maxDot local int type local int retval=0 local vector dir local int IsAFlag=0 local message startup message activated message deactivated message pulse message timer message newplayer message killed message deselected message selected keyframe push=kyrepel0.key local keyframe pull=kyfpull0.key local sound pushsound=ForcePush01.WAV local sound pullsound=ForcePull01.WAV local end # ======================================================================================== code startup: player = GetLocalPlayerThing(); Return; # ........................................................................................ activated: // Cannot use power if blinded if(GetActorFlags(player) & 0x800) Return; if(IsInvActivated(player, 24)) Return; mana = GetInv(player, 14); rank = GetInv(player, 24); if(mana >= cost) { victim = -1; SetInvActivated(player, 24, 1); SetPulse(0.033); } Return; # ........................................................................................ pulse: // Check all things for our victim. victim = -1; maxDot = 0; player = GetLocalPlayerThing(); thrust = GetThingThrust( player ); actorFlags = GetActorFlags(player); // Search for all players, actors and items. potential = FirstThingInView(player, 20 + 15 * rank, 5.5, 0x424); while(potential != -1) { if(HasLOS(player, potential) && (potential != player) && (VectorDist(GetThingPos(player), GetThingPos(potential)) <= (0.5 + rank / 2)) && !(GetThingFlags(potential) & 0x200) && !(GetActorFlags(potential) & 0x100) && !((jkGetFlags(potential) & 0x20) && !IsInvActivated(player, 23)) ) { // Hack to avoid targetting a CTF flag... IsAFlag = 0; if(GetThingType(potential == 5)) { if(GetItemFlags(potential) & 8) { IsAFlag = 1; } } if(!IsAFlag) { dot = ThingViewDot(player, potential); if(dot > maxDot) { victim = potential; maxDot = dot; } } } potential = NextThingInView(); } // If we have a victim... if(victim != -1) { jkSetTargetColors(18, 19, 20); jkSetTarget(victim); } else { jkEndTarget(); } //Forward = Push if((victim == -1) || (GetThingHealth(player) <= 0)) { call stop_power; Return; } if (VectorY(thrust) > 0) { Print("Force Push"); call push; SetPulse(0); PlayKey(player, push, 1, 0x38); PlaySoundThing(pushsound, player, 1.0, -1, -1, 0x80); } //Backpedal = Pull if((victim == -1) || (GetThingHealth(player) <= 0)) { call stop_power; Return; } if (VectorY(thrust) < -1) { Print("Force Pu11"); call pull; SetPulse(0); PlayKey(player, pull, 1, 0x38); PlaySoundThing(pullsound, player, 1.0, -1, -1, 0x80); } Return; # ........................................................................................ deactivated: SetInvActivated(player, 24, 0); victim = -1; call stop_power; jkEndTarget(); SetPhysicsFlags(player, 0x4a4f); Return; # ........................................................................................ push: if((victim == -1) || (GetThingHealth(player) <= 0)) { call stop_power; Return; } jkEndTarget(); mana = GetInv(player, 14); if(mana >= cost) { if(HasLOS(player, victim)) // check that we still have a LOS on it... { if(!IsInvActivated(player, 23)) AddDynamicTint(player, 0.0, 2.0, 0.0); PlayKey(player, pull, 1, 0x38); PlaySoundThing(PushSound, player, 1.0, -1, -1, 0x80); SendTrigger(-1, 250, player, victim, 0, 0); dir = VectorScale(VectorNorm(VectorSub(GetThingPos(player), GetThingPos(victim))), -400); ApplyForce(victim, dir); if(GetInv(player, 64) != 1) ChangeInv(player, 14, -cost); SetBinWait(player, 24, 1); } } ; SetInvActivated(player, 24, 0); SetBinWait(player, 24, 1); Return; # ........................................................................................ pull: if((victim == -1) || (GetThingHealth(player) <= 0)) { call stop_power; Return; } jkEndTarget(); mana = GetInv(player, 14); if(mana >= cost) { if(HasLOS(player, victim)) // check that we still have a LOS on it... { if(!IsInvActivated(player, 23)) AddDynamicTint(player, 0.0, 0.0, 20.0); PlayKey(player, Pull, 1, 0x38); PlaySoundThing(PullSound, player, 1.0, -1, -1, 0x80); if((GetInv(player, 64) != 1) && (GetInv(player, 65) != 1)) ChangeInv(player, 14, -cost); SetBinWait(player, 24, 1.0); SendTrigger(-1, 240, player, victim, 0, 0); throwThing = -1; type = GetThingType(victim); if(type == 2) // ACTOR { dir2 = VectorScale(VectorNorm(VectorSub(GetThingPos(player), GetThingPos(victim))), 200); ApplyForce (victim, dir2); if(GetActorWeapon(victim, 1) != -1) { // Make victim drop powerup. throwThing = SkillTarget(victim, player, 24, 0); if(throwThing != -1) { SetActorWeapon(victim, 1, -1); AmputateJoint(victim, 3); } } else { SetInvActivated(player, 24, 0); Return; } } else if(type == 10) // OTHER PLAYER { dir2 = VectorScale(VectorNorm(VectorSub(GetThingPos(player), GetThingPos(victim))), 200); ApplyForce(victim, dir2); if(!(GetThingFlags(victim) & 0x200)) retval = SkillTarget(victim, player, 24, rank); SetInvActivated(player, 24, 0); Return; } else if(type == 5) // ITEM { retval = SkillTarget(victim, player, 24, rank); if(retval != 0) { if(!GetLifeLeft(victim)) SetLifeleft(victim, 30.0); throwThing = victim; } else { SetInvActivated(player, 24, 0); Return; } } // Throw item at player. if(throwThing != -1) { SetTimerEx(1.5, 1, throwThing, 0); // Duplicate sends for lost packets SetTimerEx(3.5, 2, throwThing, 0); SetTimerEx(3.6, 2, throwThing, 0); if(IsMulti()) { // Kill the thing SetTimerEx(4.0, 3, throwThing, 0); // Duplicate send for lost packets SetTimerEx(4.1, 4, throwThing, 0); } // Turn off gravity for the thing ClearPhysicsFlags(throwThing, 0x1); dir = VectorScale(VectorNorm(VectorSub(GetThingPos(player), GetThingPos(throwThing))), 50); ApplyForce(throwThing, dir); } } } SetInvActivated(player, 24, 0); Return; #................................................................................................# timer: if(GetSenderId() == 1) { // We MUST set gravity whatever the original setting, // else objects might just float around... SetPhysicsFlags(GetParam(0), 1); Return; } else if(GetSenderId() == 2) { // Set back to no gravity after the object had a chance to // settle down for next time they respawn... ClearPhysicsFlags(GetParam(0), 1); Return; } else if(GetSenderId() == 3) { // SITH_TF_DISABLED SetThingFlags(GetParam(0), 0x80000); SetLifeLeft(GetParam(0), 26); Return; } else if(GetSenderId() == 4) { SetThingFlags(GetParam(0), 0x80000); SetLifeLeft(GetParam(0), 25.9); Return; } Return; # ........................................................................................ selected: jkPrintUNIString(player, 24); Return; # ........................................................................................ deselected: call stop_power; Return; # ........................................................................................ killed: if(GetSenderRef() != player) Return; newplayer: call stop_power; Return; # ........................................................................................ stop_power: SetInvActivated(player, 24, 0); victim = -1; jkEndTarget(); Return; end
What might I be overlooking...?
Thanx!
_K_
[This message has been edited by SaberMaster (edited November 19, 2003).]