[Scripting help] Woodchopping block depletion

Post » Fri Jul 24, 2015 3:28 pm

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

User avatar
SexyPimpAss
 
Posts: 3416
Joined: Wed Nov 15, 2006 9:24 am

Return to V - Skyrim