The script is:
Scriptname E0ActivatorSCR extends ObjectReference ; Try and remove the activator, since we shouldn't need it anymore.MiscObject property itemToAdd autoEvent OnLoad() BlockActivation() EndEventEvent OnActivate(ObjectReference activator) if Game.GetPlayer().IsSneaking() == True ; This works perfectly Game.GetPlayer().AddItem(itemToAdd, 1) Disable() Return Else Activate(Game.GetPlayer(), true) EndIfEndEvent
When added in addition to the wood cutting blocks script the block could be placed/removed whilst sneaking as it was supposed to and would play the animations properly on activation whilst standing, but wouldn't check for the presence of a woodcutter's axe or add resources.
Figuring the problem was that the new script was blocking the old one from running, I figured I should probably just make a new script and combine them. At which point I ran aground of my woefully non-existent scripting skills.
What I've got at the moment:
Scriptname e0activatorscrWoodChop extends ObjectReference MiscObject property itemToAdd autoformlist Property requiredItemList Auto {required for player to use - optional}Message Property FailureMessage Auto {Message to say why you can't use this without RequiredWeapon}MiscObject Property Resource Auto {what you get from using this furniture}int Property ResourceCount = 1 Auto{how many resources you get per use}int property MaxResourcePerActivation = 6 auto{How many times can this object be used before the player has to re-activate?}int counter; count up how many resources have been gathered on this go.faction property CurrentFollowerFaction auto{Used to handle player followers using the furniture object}objectReference property NPCfollower auto hidden{hidden property to track followers who used this}Event OnLoad() BlockActivation() EndEventEvent OnActivate(ObjectReference activator) if Game.GetPlayer().IsSneaking() == True ; This works perfectly Game.GetPlayer().AddItem(itemToAdd, 1) Disable() Return Else Activate(Game.GetPlayer(), true) EndIfEndEventEvent OnUnload() ; safety measure UnregisterForEvents(game.getplayer()) if NPCfollower UnregisterForEvents(NPCfollower) endifendEventauto STATE normalEvent OnActivate(ObjectReference akActionRef) gotoState("busy"); debug.trace(self + "OnActivate") if akActionRef == Game.GetPlayer() || (akActionRef as actor).isInFaction(CurrentFollowerFaction); debug.trace("akActionRef is either player or a follower") if (akActionRef as actor) != game.getPlayer(); debug.trace("It's a follower - store in NPCfollower property") ; if not the player, must be the follower NPCfollower = akActionRef endif bool allowActivation = true ; check if player has required item if requiredItemList if akActionRef.GetItemCount(requiredItemList) == 0 if akActionRef == game.getPlayer() ; only require the axe item for the player allowActivation = false; debug.trace("allowActivation = "+allowActivation) FailureMessage.Show() endif endif endif if allowActivation RegisterForEvents(akActionRef); debug.trace(self + "player/follower activation START") Activate(akActionRef, true); debug.trace(self + "player/follower activation END") endif else; ;debug.trace(self + "non-follower NPC activation START") ; just activate it Activate(akActionRef, true); ;debug.trace(self + "non-follower NPC activation END") endif gotoState("normal")endEventendStateSTATE busy ; do nothingendStateEvent OnAnimationEvent(ObjectReference akSource, string asEventName); debug.trace(self + ": animation event received=" + asEventName) if asEventName == "AddToInventory" akSource.AddItem(Resource, ResourceCount) ; increment counter by however many items we just received; debug.trace("Pre-add counter = "+counter) counter = (counter + resourceCount); debug.trace("Post-add counter = "+counter) if counter >= MaxResourcePerActivation ; if we've bagged our limit, kick the player out. Reset timer for next activation; debug.trace("Woodpile - player has gotten "+counter+" logs this go. Kicking out.") counter = 0 (akSource as actor).PlayIdle(IdleWoodchopExit) unregisterForEvents(akSource) endif elseif asEventName == "IdleFurnitureExit"; debug.trace("Resource Object Unregistering: "+self) ; reset the counter if I exit manually counter = 0 UnregisterForEvents(akSource) endifendEventbool isRegisteredForEvents = falsefunction RegisterForEvents(objectReference whoToRegister) ; centralize this isRegisteredForEvents = true RegisterForAnimationEvent(whoToRegister, "AddToInventory") RegisterForAnimationEvent(whoToRegister, "SoundPlay . NPCHumanWoodChop") RegisterForAnimationEvent(whoToRegister, "IdleFurnitureExit")endFunctionfunction UnregisterForEvents(objectReference whoToUnregister) ; centralize this ; It is perfectly safe to unregister for events you never registered for, however ; this function is called as part of OnUnload, and if this object isn't persistent ; then it may be deleted by the time OnUnload runs, and these function calls will ; fail. Since RegisterForAnimationEvent persists us, we know it will be safe to ; call Unregister if we've previously Registered, even if called as a part of ; OnUnload if isRegisteredForEvents isRegisteredForEvents = false UnRegisterForAnimationEvent(whoToUnregister, "AddToInventory") UnRegisterForAnimationEvent(whoToUnregister, "IdleFurnitureExit") endifendFunctionIdle Property IdleWoodchopExit AutoThe origonal part of the script runs just fine, but Elec0's pick up/put down script isn't working. Can some kind and merciful soul tell me what I'm doing wrong?


