Paste #2080: Wanderer v3

Date: 2014/02/17 19:44:11 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


# for Denizen 0.9
"Wanderer":
    type: assignment

    default constants:
        Searchwidth: 4
        Searchlength: 10
        Searchlengthmin: 5
        Retries: 4
        Pathmaterial: 'WOOL'

    actions:
        on spawn:
            - trigger name:click toggle:false
            - trigger name:chat toggle:false
            - trigger name:proximity toggle:false
            - ^flag npc "wander_spawned:true"
            - ^flag npc "wander_attention:false"
            - ^flag npc "wander_defaultx:<npc.location.x>"
            - ^flag npc "wander_defaultz:<npc.location.z>"
            - ^flag npc "wander_defaulty:<npc.location.y>"
            - ^flag npc "wander_currentdir:north"
            - ^flag npc "wander_triescounter:0"
            - ^runtask "script:wander_choosedirection" queue
        on despawn:
            - ^flag npc "wander_spawned:false"

        on complete navigation:
            - ^if "<flag.n:wander_currentdir>" == "north" runtask "script:wander_scannorth" queue
              else if "<flag.n:wander_currentdir>" == "east" runtask "script:wander_scaneast" queue
              else if "<flag.n:wander_currentdir>" == "west" runtask "script:wander_scanwest" queue
              else if "<flag.n:wander_currentdir>" == "south" runtask "script:wander_scansouth" queue

        on begin navigation:

"wander_choosedirection":
    type: task

    script:
    - ^flag npc "wander_triescounter:0"
    - ^flag npc "wander_defaultx:<npc.location.x>"
    - ^flag npc "wander_defaultz:<npc.location.z>"
    - ^flag npc "wander_defaulty:<npc.location.y>"
    - ^if "<flag.n:wander_spawned>" == "false" runtask "script:wander_despawn"
      else runtask "script:wander_randomdir" queue

"wander_randomdir":
    type: task

    script:
    - ^flag npc "wander_triescounter:0"
    - ^if <flag.n:wander_currentdir> == 'north' runtask "script:wander_wasnorthsouth" queue
      else if <flag.n:wander_currentdir> == 'east' runtask "script:wander_waseastwest" queue
      else if <flag.n:wander_currentdir> == 'west' runtask "script:wander_waseastwest" queue
      else if <flag.n:wander_currentdir> == 'south' runtask "script:wander_wasnorthsouth" queue

"wander_wasnorthsouth":
    type: task

    script:
    - ^random 2
    - ^runtask "script:wander_scaneast" queue
    - ^runtask "script:wander_scanwest" queue

"wander_waseastwest":
    type: task

    script:
    - ^random 2
    - ^runtask "script:wander_scannorth" queue
    - ^runtask "script:wander_scansouth" queue


#North is -z
"wander_scannorth":
    type: task

    script:
    - ^flag npc "wander_currentdir:north"
    - ^flag npc "wander_defaultx:<npc.location.x>"
    - ^flag npc "wander_defaultz:<npc.location.z>"
    - ^flag npc "wander_defaulty:<npc.location.y>"
    - ^flag npc "wander_randomxA:<util.random.int[0].to[<cons:Searchwidth>]>"
    - ^flag npc "wander_randomzA:<util.random.int[<cons:Searchlengthmin>].to[<cons:Searchlength>]>"
    - ^flag npc "wander_randomposxA:<flag.n:wander_defaultx>"
    - ^random 2
    - ^flag npc "wander_randomposxA:-:<flag.n:wander_randomxA>"
    - ^flag npc "wander_randomposxA:+:<flag.n:wander_randomxA>"
    - ^flag npc "wander_randomposxA:<npc.flag[wander_randomposxA].asint>"
    - ^flag npc "wander_randomposzA:<flag.n:wander_defaultz>"
    - ^flag npc "wander_randomposzA:-:<flag.n:wander_randomzA>"
    - ^flag npc "wander_randomposzA:<npc.flag[wander_randomposzA].asint>"
    - ^flag npc "wander_blockchecky:<flag.n:wander_defaulty>"
    - ^flag npc "wander_blockchecky:-:1"
    - ^flag npc "wander_blockchecky:<npc.flag[wander_blockchecky].asint>"
    - ^if "<location[<flag.n:wander_randomposxA>,<flag.n:wander_blockchecky>,<flag.n:wander_randomposzA>,<npc.location.world.name>].block.material>" == '<cons:Pathmaterial>' runtask "script:wander_walknorth" queue
      else if "<flag.n:wander_triescounter>" >= <cons:Retries> runtask "script:wander_choosedirection" queue
      else runtask "script:wander_tryagainnorth" queue

"wander_walknorth":
    type: task

    script:
    - ^walkto "location:<flag.n:wander_randomposxA>,<flag.n:wander_defaulty>,<flag.n:wander_randomposzA>,<npc.location.world.name>"

"wander_tryagainnorth":
    type: task

    script:
    - ^flag npc "wander_triescounter:+:1"
    - ^flag npc "wander_triescounter:<npc.flag[wander_triescounter].asint>"
    - ^runtask "script:wander_scannorth" queue

#East
"wander_scaneast":
    type: task

    script:
    - ^flag npc "wander_currentdir:east"
    - ^flag npc "wander_defaultx:<npc.location.x>"
    - ^flag npc "wander_defaultz:<npc.location.z>"
    - ^flag npc "wander_defaulty:<npc.location.y>"
    - ^flag npc "wander_randomzA:<util.random.int[0].to[<cons:Searchwidth>]>"
    - ^flag npc "wander_randomxA:<util.random.int[<cons:Searchlengthmin>].to[<cons:Searchlength>]>"
    - ^flag npc "wander_randomposxA:<flag.n:wander_defaultx>"
    - ^flag npc "wander_randomposxA:+:<flag.n:wander_randomxA>"
    - ^flag npc "wander_randomposxA:<npc.flag[wander_randomposxA].asint>"
    - ^flag npc "wander_randomposzA:<flag.n:wander_defaultz>"
    - ^random 2
    - ^flag npc "wander_randomposzA:+:<flag.n:wander_randomzA>"
    - ^flag npc "wander_randomposzA:-:<flag.n:wander_randomzA>"
    - ^flag npc "wander_randomposzA:<npc.flag[wander_randomposzA].asint>"
    - ^flag npc "wander_blockchecky:<flag.n:wander_defaulty>"
    - ^flag npc "wander_blockchecky:-:1"
    - ^flag npc "wander_blockchecky:<npc.flag[wander_blockchecky].asint>"
    - ^if "<location[<flag.n:wander_randomposxA>,<flag.n:wander_blockchecky>,<flag.n:wander_randomposzA>,<npc.location.world.name>].block.material>" == '<cons:Pathmaterial>' runtask "script:wander_walkeast" queue
      else if "<flag.n:wander_triescounter>" >= <cons:Retries> runtask "script:wander_choosedirection" queue
      else runtask "script:wander_tryagaineast" queue

"wander_walkeast":
    type: task

    script:
    - ^walkto "location:<flag.n:wander_randomposxA>,<flag.n:wander_defaulty>,<flag.n:wander_randomposzA>,<npc.location.world.name>"

"wander_tryagaineast":
    type: task

    script:
    - ^flag npc "wander_triescounter:+:1"
    - ^flag npc "wander_triescounter:<npc.flag[wander_triescounter].asint>"
    - ^runtask "script:wander_scaneast" queue

#West
"wander_scanwest":
    type: task

    script:
    - ^flag npc "wander_currentdir:west"
    - ^flag npc "wander_defaultx:<npc.location.x>"
    - ^flag npc "wander_defaultz:<npc.location.z>"
    - ^flag npc "wander_defaulty:<npc.location.y>"
    - ^flag npc "wander_randomzA:<util.random.int[0].to[<cons:Searchwidth>]>"
    - ^flag npc "wander_randomxA:<util.random.int[<cons:Searchlengthmin>].to[<cons:Searchlength>]>"
    - ^flag npc "wander_randomposxA:<flag.n:wander_defaultx>"
    - ^flag npc "wander_randomposxA:-:<flag.n:wander_randomxA>"
    - ^flag npc "wander_randomposxA:<npc.flag[wander_randomposxA].asint>"
    - ^flag npc "wander_randomposzA:<flag.n:wander_defaultz>"
    - ^random 2
    - ^flag npc "wander_randomposzA:-:<flag.n:wander_randomzA>"
    - ^flag npc "wander_randomposzA:+:<flag.n:wander_randomzA>"
    - ^flag npc "wander_randomposzA:<npc.flag[wander_randomposzA].asint>"
    - ^flag npc "wander_blockchecky:<flag.n:wander_defaulty>"
    - ^flag npc "wander_blockchecky:-:1"
    - ^flag npc "wander_blockchecky:<npc.flag[wander_blockchecky].asint>"
    - ^if "<location[<flag.n:wander_randomposxA>,<flag.n:wander_blockchecky>,<flag.n:wander_randomposzA>,<npc.location.world.name>].block.material>" == '<cons:Pathmaterial>' runtask "script:wander_walkwest" queue
      else if "<flag.n:wander_triescounter>" >= <cons:Retries> runtask "script:wander_choosedirection" queue
      else runtask "script:wander_tryagainwest" queue

"wander_walkwest":
    type: task

    script:
    - ^walkto "location:<flag.n:wander_randomposxA>,<flag.n:wander_defaulty>,<flag.n:wander_randomposzA>,<npc.location.world.name>"

"wander_tryagainwest":
    type: task

    script:
    - ^flag npc "wander_triescounter:+:1"
    - ^flag npc "wander_triescounter:<npc.flag[wander_triescounter].asint>"
    - ^runtask "script:wander_scanwest" queue

#South
"wander_scansouth":
    type: task

    script:
    - ^flag npc "wander_currentdir:south"
    - ^flag npc "wander_defaultx:<npc.location.x>"
    - ^flag npc "wander_defaultz:<npc.location.z>"
    - ^flag npc "wander_defaulty:<npc.location.y>"
    - ^flag npc "wander_randomxA:<util.random.int[0].to[<cons:Searchwidth>]>"
    - ^flag npc "wander_randomzA:<util.random.int[<cons:Searchlengthmin>].to[<cons:Searchlength>]>"
    - ^flag npc "wander_randomposxA:<flag.n:wander_defaultx>"
    - ^random 2
    - ^flag npc "wander_randomposxA:-:<flag.n:wander_randomxA>"
    - ^flag npc "wander_randomposxA:+:<flag.n:wander_randomxA>"
    - ^flag npc "wander_randomposxA:<npc.flag[flag.n:wander_randomposxA].asint>"
    - ^flag npc "wander_randomposzA:<flag.n:wander_defaultz>"
    - ^flag npc "wander_randomposzA:+:<flag.n:wander_randomzA>"
    - ^flag npc "wander_randomposzA:<npc.flag[wander_randomposzA].asint>"
    - ^flag npc "wander_blockchecky:<flag.n:wander_defaulty>"
    - ^flag npc "wander_blockchecky:-:1"
    - ^flag npc "wander_blockchecky:<npc.flag[wander_blockchecky].asint>"
    - ^if "<location[<flag.n:wander_randomposxA>,<flag.n:wander_blockchecky>,<flag.n:wander_randomposzA>,<npc.location.world.name>].block.material>" == '<cons:Pathmaterial>' runtask "script:wander_walksouth" queue
      else if "<flag.n:wander_triescounter>" >= <cons:Retries> runtask "script:wander_choosedirection" queue
      else runtask "script:wander_tryagainsouth" queue

"wander_walksouth":
    type: task

    script:
    - ^walkto "location:<flag.n:wander_randomposxA>,<flag.n:wander_defaulty>,<flag.n:wander_randomposzA>,<npc.location.world.name>"

"wander_tryagainsouth":
    type: task

    script:
    - ^flag npc "wander_triescounter:+:1"
    - ^flag npc "wander_triescounter:<npc.flag[wander_triescounter].asint>"
    - ^runtask "script:wander_scansouth" queue
#East is +x

"wander_despawn":
    type: task

    script:
    - chat 'bye'