Scriptname WeaponRackActivateSCRIPT extends ObjectReference Hidden {Activating this causes the players currently equipped weapon to be placed on the rack} import game import debug import utility import quest ;------------------------------------------- int Property RackType = 1 Auto {The type of rack this script is on: Default = 1 1 = Standard Weapon Rack (Includes Regular, Mount, and CoA Weapon Racks) 2 = COA Shield Rack 3 = COA Weapon Rack (Both left and right) 4 = Table-top Dagger Rack } Bool Property Patch14COARacks = FALSE Auto Message Property Patch14WeaponRackNoBowMESSAGE Auto Message Property WeaponRackActivateMESSAGE Auto {Message you get when activate the weapon rack for the very first time} Message Property WeaponRackNoShieldMESSAGE Auto {Message you get when you activate the shield rack without a shield equipped} Message Property WeaponRackNoWeaponMESSAGE Auto {Message you get when you activate the weapon rack without a weapon equipped} Message Property WeaponRackNoDaggerMESSAGE Auto {Message you get when you activate the weapon rack and a dagger isn't allowed to be placed} Message Property WeaponRackNoBowMESSAGE Auto {Message you get when you activate the weapon rack and a bow isn't allowed to be placed} Message Property WeaponRackOnlyDaggerMESSAGE Auto {Message you get when you can only place daggers in the rack and try to place something else} Int Property ButtonPressed Auto Hidden {Button that was pressed when WeaponRackActivateMESSAGE is displayed} Bool Property AlreadyInit Auto Hidden {If true this reference won't run it's intialization a second time} Bool Property MessageAlreadyShown Auto Hidden GlobalVariable Property WRackGlobal Auto {Global that determines if you have seen the help message yet or not} ;Keywords for the type of xMarkers Keyword Property WRackGreatSword Auto Keyword Property WRackWarhammer Auto Keyword Property WRackBattleaxe Auto Keyword Property WRackBow Auto Keyword Property WRackSword Auto Keyword Property WRackMace Auto Keyword Property WRackWarAxe Auto Keyword Property WRackStaff Auto Keyword Property WRackShield Auto Keyword Property WRackTrigger Auto ;Keyword for types of weapons Keyword Property WeaponTypeBattleAxe Auto Keyword Property WeaponTypeBow Auto Keyword Property WeaponTypeDagger Auto Keyword Property WeaponTypeGreatSword Auto Keyword Property WeaponTypeMace Auto Keyword Property WeaponTypeStaff Auto Keyword Property WeaponTypeSword Auto Keyword Property WeaponTypeWarAxe Auto Keyword Property WeaponTypeWarhammer Auto Keyword Property ArmorShield Auto ;Where to place the specific weapon types on the rack, so they look correct ObjectReference Property GreatSwordMarker Auto Hidden ObjectReference Property WarhammerMarker Auto Hidden ObjectReference Property BattleaxeMarker Auto Hidden ObjectReference Property BowMarker Auto Hidden ObjectReference Property SwordMarker Auto Hidden ObjectReference Property MaceMarker Auto Hidden ObjectReference Property WaraxeMarker Auto Hidden ObjectReference Property StaffMarker Auto Hidden ObjectReference Property ShieldMarker Auto Hidden ObjectReference Property TriggerMarker Auto Hidden ;Handles the starting weapon stuff Keyword Property WRackStartingWeapon Auto Hidden ObjectReference Property StartingWeapon Auto Hidden Int Property ItemType Auto Hidden {The type of weapon the player is trying to place (1H Sword, 2H Sword, 1H Axe, etc...)} Weapon Property PlayersEquippedWeapon Auto Hidden {The players currently equipped weapon} Armor Property PlayersEquippedShield Auto Hidden {The players currently equipped shield} ObjectReference Property PlayersDroppedWeapon Auto Hidden {The Weapon/ObjectReference we force the player to drop} Int Property PlayersEquippedWeaponType Auto Hidden {This is the type of weapon the player currently has equipped} ;------------------------------------------- EVENT OnCellAttach() Trace("DARYL - " + self + " running OnCellLoad() and AlreadyInit = " + AlreadyInit) TriggerMarker = GetLinkedRef(WRackTrigger) Trace("DARYL - " + self + " The TriggerMarker is " + TriggerMarker) If (TriggerMarker) && (TriggerMarker.IsEnabled()) && (TriggerMarker.GetTriggerObjectCount() == 0) Self.Enable() endif if (TriggerMarker) && (AlreadyInit == FALSE) && (TriggerMarker.IsEnabled()) ; Set up all my possible Xmarkers for the weapon locations ;Trace("DARYL - " + self + " Running the OnLoad EVENT") ;GreatSwordMarker = GetLinkedRef(WRackGreatSword) ;Trace("DARYL - " + self + " The GreatswordMarker is " + GreatSwordMarker) ;WarhammerMarker = GetLinkedRef(WRackWarhammer) ;Trace("DARYL - " + self + " The Warhammer Marker is " + WarhammerMarker) ;BattleaxeMarker = GetLinkedRef(WRackBattleaxe) ;Trace("DARYL - " + self + " The Battleaxe Marker is " + BattleaxeMarker) ;BowMarker = GetLinkedRef(WRackBow) ;Trace("DARYL - " + self + " The Bow Marker is " + BowMarker) ;SwordMarker = GetLinkedRef(WRackSword) ;Trace("DARYL - " + self + " The Sword Marker is " + SwordMarker) ;MaceMarker = GetLinkedRef(WRackMace) ;Trace("DARYL - " + self + " The Mace Marker is " + MaceMarker) ;WaraxeMarker = GetLinkedRef(WRackWaraxe) ;Trace("DARYL - " + self + " The Waraxe Marker is " + WaraxeMarker) ;StaffMarker = GetLinkedRef(WRackStaff) ;Trace("DARYL - " + self + " The Staff Marker is " + StaffMarker) StartingWeapon = GetLinkedRef() Trace("DARYL - " + self + " The Starting Weapon is " + StartingWeapon) if (StartingWeapon) if StartingWeapon.Is3DLoaded() if StartingWeapon.GetParentCell() == self.GetParentCell() Trace("DARYL - " + self + " Has a starting weapon") HandleStartingWeapon() endif endif else Trace("DARYL - " + self + " Doesn't have a starting weapon") ;Do nothing endif AlreadyInit = TRUE else ;Do nothing endif TriggerMarker = NONE Trace("DARYL - " + self + " finishing OnCellLoad() and AlreadyInit = " + AlreadyInit) endEVENT Auto STATE EmptyRack EVENT onActivate(ObjectReference TriggerRef) ;--------------------------------------------------- ;START------------------Standard Rack ;----------------------------------------- If ((RackType == 1) && (Patch14COARacks == FALSE)) ; This is the Standard Weapon Rack if (TriggerRef == Game.GetPlayer() as Actor) ; Only the player can activate this MessageAlreadyShown = WRackGlobal.GetValue() if (MessageAlreadyShown == FALSE) ; If the help message hasn't been shown before then show it. WeaponRackActivateMESSAGE.Show() WRackGlobal.SetValue(1) else Trace("DARYL - " + self + " Player activated the weapon rack") PlayersEquippedWeaponType = Game.GetPlayer().GetEquippedItemType(1) ; Get the EquippedItemType that is in the players right hand if (PlayersEquippedWeaponType == 0) || (PlayersEquippedWeaponType == 9) || (PlayersEquippedWeaponType == 10) || (PlayersEquippedWeaponType == 11) ; If the player is unarmed, or has a spell/shield/torch equipped, tell him he needs a weapon equipped. WeaponRackNoWeaponMESSAGE.Show() ;elseif (PlayersEquippedWeaponType == 2) ; If the player has a dagger equipped tell him it doesn't fit. ;WeaponRackNoDaggerMESSAGE.Show() else HandleWeaponPlacement() ; Grabs the weapon from the player and places it in the correct place. endif endif endif ;----------------------------------------- ;END------------------Standard Rack ;--------------------------------------------------- ;--------------------------------------------------- ;START------------------Wall Mount Shield Rack ;----------------------------------------- elseIf ((RackType == 2) && (Patch14COARacks == FALSE)) ;This is the CoA Shield Rack if (TriggerRef == Game.GetPlayer() as Actor) ; Only the player can activate this MessageAlreadyShown = WRackGlobal.GetValue() if (MessageAlreadyShown == FALSE) ; If the help message hasn't been shown before then show it. WeaponRackActivateMESSAGE.Show() WRackGlobal.SetValue(1) else Trace("DARYL - " + self + " Player activated the shield rack") Trace("DARYL - " + self + " Player has shield " + Game.GetPlayer().GetEquippedShield() + " base object equipped") ; PlayersEquippedWeaponType = Game.GetPlayer().GetEquippedItemType(0) ; Get the EquippedItemType that is in the players left hand if (Game.GetPlayer().GetEquippedShield()) ; Grabs the weapon from the player and places it in the correct place. HandleWeaponPlacement() else ; If the player doesn't have a shield equipped tell him he needs one. WeaponRackNoShieldMESSAGE.Show() endif endif endif ;----------------------------------------- ;END------------------Wall Mount Shield Rack ;--------------------------------------------------- ;--------------------------------------------------- ;START------------------COA Weapon Rack ;----------------------------------------- elseIf ((RackType == 3) || (Patch14COARacks == TRUE)) ; This is the COA Weapon Rack if (TriggerRef == Game.GetPlayer() as Actor) ; Only the player can activate this MessageAlreadyShown = WRackGlobal.GetValue() if (MessageAlreadyShown == FALSE) ; If the help message hasn't been shown before then show it. WeaponRackActivateMESSAGE.Show() WRackGlobal.SetValue(1) else Trace("DARYL - " + self + " Player activated the COA weapon rack") PlayersEquippedWeaponType = Game.GetPlayer().GetEquippedItemType(1) ; Get the EquippedItemType that is in the players right hand if (PlayersEquippedWeaponType == 0) || (PlayersEquippedWeaponType == 9) || (PlayersEquippedWeaponType == 10) || (PlayersEquippedWeaponType == 11) ; If the player is unarmed, or has a spell/shield/torch equipped, tell him he needs a weapon equipped. WeaponRackNoWeaponMESSAGE.Show() elseif (PlayersEquippedWeaponType == 2) ; If the player has a dagger equipped tell him it doesn't fit. WeaponRackNoDaggerMESSAGE.Show() elseif (PlayersEquippedWeaponType == 7) || (PlayersEquippedWeaponType == 12) ; If the player has a bow equipped tell him it doesn't fit. Patch14WeaponRackNoBowMESSAGE.Show() else HandleWeaponPlacement() ; Grabs the weapon from the player and places it in the correct place. endif endif endif ;----------------------------------------- ;END------------------COA Weapon Rack ;--------------------------------------------------- ;--------------------------------------------------- ;START------------------Table-Top Dagger Rack ;----------------------------------------- elseIf ((RackType == 4) && (Patch14COARacks == FALSE)) ; This is the Standard Weapon Rack if (TriggerRef == Game.GetPlayer() as Actor) ; Only the player can activate this MessageAlreadyShown = WRackGlobal.GetValue() if (MessageAlreadyShown == FALSE) ; If the help message hasn't been shown before then show it. WeaponRackActivateMESSAGE.Show() WRackGlobal.SetValue(1) else Trace("DARYL - " + self + " Player activated the weapon rack") PlayersEquippedWeaponType = Game.GetPlayer().GetEquippedItemType(1) ; Get the EquippedItemType that is in the players right hand if (PlayersEquippedWeaponType != 2) ; If the player is trying to place anything but a dagger tell him he can't. WeaponRackOnlyDaggerMESSAGE.Show() else HandleWeaponPlacement() ; Grabs the weapon from the player and places it in the correct place. endif endif endif ;----------------------------------------- ;END------------------Table-Top Dagger Rack ;--------------------------------------------------- endif endEVENT endSTATE Function HandleWeaponPlacement(bool ForStartingWeapon = FALSE) ; Grabs the weapon from the player and places it in the correct place. if (ForStartingWeapon) Trace("DARYL - " + self + " Handling Starting Weapon") ;Don't do the player stuff else Trace("DARYL - " + self + " Handling Players Weapon") If (RackType == 2) Trace("DARYL - " + self + " Player currently has weapon type " + PlayersEquippedWeaponType + " in his left hand.") ;PlayersEquippedShield = Game.GetPlayer().GetEquippedWeapon(TRUE) ; Find out what shield the player currently has equipped Trace("DARYL - " + self + " Player has shield " + Game.GetPlayer().GetEquippedShield() + " base object equipped") PlayersDroppedWeapon = Game.GetPlayer().DropObject(Game.GetPlayer().GetEquippedShield(), 1) ; Force the weapon to be dropped, and get it's reference Trace("DARYL - " + self + " Dropped " + PlayersEquippedShield + " shield from players inventory as " + PlayersDroppedWeapon) else Trace("DARYL - " + self + " Player currently has weapon type " + PlayersEquippedWeaponType + " in his right hand.") PlayersEquippedWeapon = Game.GetPlayer().GetEquippedWeapon() ; Find out what weapon the player currently has equipped Trace("DARYL - " + self + " Player has " + PlayersEquippedWeapon + " base object equipped") PlayersDroppedWeapon = Game.GetPlayer().DropObject(PlayersEquippedWeapon, 1) ; Force the weapon to be dropped, and get it's reference Trace("DARYL - " + self + " Dropped " + PlayersEquippedWeapon + " from players inventory as " + PlayersDroppedWeapon) endif if (PlayersDroppedweapon) int Count = 0 While(!PlayersDroppedweapon.Is3DLoaded()) && (Count < 10) ; Have to wait to make sure the item is dropped before setting it's motion type, or else I get a "Object has no 3D" error. Utility.Wait(0.1) Count += 1 EndWhile endif endif PlayersDroppedWeapon.SetMotionType(Motion_Keyframed, false) ; Tell the weapon to ignore all forms of physic interaction Trace("DARYL - " + self + " Disabling physics on " + PlayersDroppedWeapon) TriggerMarker = GetLinkedRef(WRackTrigger) ; Handle the placement of the weapon if PlayersDroppedWeapon.HasKeyword(WeaponTypeSword) ; 1H Sword Trace("DARYL - " + self + " Moving " + PlayersEquippedWeaponType + " to the SwordMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "SwordPivot01") elseif PlayersDroppedWeapon.HasKeyword(WeaponTypeWarAxe) ; 1H Axe Trace("DARYL - " + self + " Moving " + PlayersEquippedWeaponType + " to the WaraxeMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "WarAxePivot01") elseif PlayersDroppedWeapon.HasKeyword(WeaponTypeMace) ; Mace Trace("DARYL - " + self + " Moving " + PlayersEquippedWeaponType + " to the MaceMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "MacePivot01") elseif PlayersDroppedWeapon.HasKeyword(WeaponTypeGreatSword) ; 2H Sword Trace("DARYL - " + self + " Moving " + PlayersEquippedWeaponType + " to the GreatSwordMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "GreatSwordPivot01") elseif PlayersDroppedWeapon.HasKeyword(WeaponTypeBattleAxe) ; 2H Axe Trace("DARYL - " + self + " Moving " + PlayersEquippedWeaponType + " to the BattleaxeMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "BattleAxePivot01") elseif PlayersDroppedWeapon.HasKeyword(WeaponTypeWarhammer) ; Warhammer Trace("DARYL - " + self + " Moving " + PlayersEquippedWeaponType + " to the WarhammerMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "WarhammerPivot01") elseif PlayersDroppedWeapon.HasKeyword(WeaponTypeBow) ; Bow Trace("DARYL - " + self + " Moving " + PlayersEquippedWeaponType + " to the BowMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "BowPivot01") elseif PlayersDroppedWeapon.HasKeyword(WeaponTypeStaff) ; Staff Trace("DARYL - " + self + " Moving players dropped weapon" + PlayersDroppedWeapon + " of type " + PlayersEquippedWeaponType + " to the StaffMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "StaffPivot01") elseif PlayersDroppedWeapon.HasKeyword(WeaponTypeDagger) ; Staff Trace("DARYL - " + self + " Moving players dropped weapon" + PlayersDroppedWeapon + " of type " + PlayersEquippedWeaponType + " to the DaggerMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "DaggerPivot01") elseif PlayersDroppedWeapon.HasKeyword(ArmorShield) ; Staff Trace("DARYL - " + self + " Moving players dropped weapon" + PlayersDroppedWeapon + " of type " + PlayersEquippedWeaponType + " to the ShieldMarker") PlayersDroppedWeapon.MoveToNode(TriggerMarker, "ShieldPivot01") endif TriggerMarker = NONE EndFunction Function HandleStartingWeapon() If (RackType == 1) ; If this is a standard rack... if StartingWeapon.HasKeyword(ArmorShield) ;Don't do anything else ; ...and doesn't have a dagger then place the weapon. PlayersDroppedWeapon = StartingWeapon HandleWeaponPlacement(TRUE) endif elseIf (RackType == 2) ; If this is a shield rack... if StartingWeapon.HasKeyword(ArmorShield) PlayersDroppedWeapon = StartingWeapon HandleWeaponPlacement(TRUE) else ;don't do anything endif elseIf (RackType == 3) ; If this is a COA weapon rack... if StartingWeapon.HasKeyword(WeaponTypeDagger) ;Don't do anything elseif StartingWeapon.HasKeyword(ArmorShield) ;Don't do anything elseif StartingWeapon.HasKeyword(WeaponTypeBow) ;Don't do anything else ; ...and doesn't have a dagger then place the weapon. PlayersDroppedWeapon = StartingWeapon HandleWeaponPlacement(TRUE) endif endif EndFunction