Hmm... Well, I got an idea that's probably going to be something that's not going to happen. Still, I'll tell it...
Why not make the weapon's script run every frame, and have a gundrop action that drops the gun that the player is holding x units in front of the player. This'll allow for a system where only, say two weapons can be held at one time, like this:
Gun Script
;If 'R' is pressed, drop the gun .25 segments in front of the player.
:scankeycodepressed=20:gundrop=25
Pickup Script
;Startup Logic
:state=0:hudreset,hudx=50,hudy=90
:state=0:hudimagefine=gamecoretextpickedupanitem.tga
:state=0:hudname=itemprompt,hudhide=1,hudmake=display
:state=0:hudreset,hudx=50,hudy=90
:state=0:hudimagefine=gamecoretextneedtodrop.tga
:state=0:hudname=needtodrop,hudhide=1,hudmake=display
;Waiting for Player to Get Close
:state=1,plrdistwithin=40,varless weaponcount 2:state=10
:state=1,plrdistwithin=40,vargreater weaponcount 3: state=20
;Pick Up
:state=10:playertake,addvar=weaponcount 1,coloff,plrsound=audiobankmiscping.wav
:state=10:hudshow=itemprompt,hudfadeout=itemprompt,state=11
:state=11:rundecal=5
;Too Many Weapons
:state=20:hudshow=needtodrop,hudfadeout=needtodrop, state=21
:state=21,plrdistgreater=40:state=1
Quote: "GUNDROP=X
Drops the gun X units in front of the player."
The rest of the script stuff would be taken care of for us, like firing and reloading.
But I've still got more.
An action that vertically moves the player's gun. This also uses a new suppressfire action, and your property condition thing that returns what entity it being looked at.
;If gun is pointed at character named "ally", lower it and prevent it from shooting.
:$GP=ally:suppressfire, movegunvert=-10
Quote: "SUPPRESSFIRE=X
Prevents the player from firing his gun."
Quote: "MOVEGUNVERT=X
Moves the gun up X units (How large should units be?)."
Quote: "$GP
GunPointed: Returns the first entity the player's gun is pointed at."