I'm looking for help modifying the script for the woodchopping block.
This is what I want it to do: after having chopped 6 pieces of firewood, the woodchopping block will deplete (= unusable for 1 month), a message will pop up "You can't chop anymore wood for now."
I want this to be seperate for each woodchopping block in the world. For instance, if I depleted the woodchopping block in Whiterun, I can still chop 6 pieces in Riverwood, till it's depleted.
This is the Vanilla script:
Spoiler
Scriptname ResourceFurnitureScript extends ObjectReference Conditional{script for furniture which the player can use to get resources}formlist 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(true)endEventEvent 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 Auto
I don't know that much about scripting so I was wondering whether anyone could help me make the right adjustments to the script.
Thanks in advance
Kind regards
Sac