Paste #22361: TalkerExample

Date: 2015/11/07 11:24:38 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


# Talker
#
# This scripts is for NPCs with a defined path using the /npc path feature on citizens
# The Talker_i is a dummy example of a NPC who talks witht he user.
# A task Wait_on_place is defined to stop the npc to keep walking on its path durgin conversation
#
# Note: The NPC walks a few steps more before halt the path.
#
# inspired by @author narnian
# buchered by m1fly

Talker:
    type: assignment
    actions:
        on assignment:
            - trigger name:chat toggle:true
            - trigger name:click toggle:true
            - trigger name:proximity toggle:true
    interact scripts:
    - 10 Talker_i


Talker_i:
    type: interact
    steps:
        First*:
            proximity trigger:
                Entry Radius: 5
                Exit Radius: 5
                Entry:
                Script:
                #The player enters on radius, so the NPC asks a question
                - CHAT 'Hello, how are you today?'
                #The NPC waits for the answer, we set the flag to stop the movement and call the task to stop/move the NPC
                - flag npc "AllowedToMove:0"
                - ZAP 'SCRIPT:Talker_i' step:Second
                - runtask "script:Wait_on_place"


        Second:
            chat trigger:
                1:
                    Trigger: /fine/ thank you
                    script:
                    #If the player answers, the NPC says something and change the falg to keep moving
                    - CHAT "Nice to know"
                    - flag npc "AllowedToMove:1"
                    - ZAP 'SCRIPT:Talker_i' step:First

                2:
                    Trigger: very /good/ and you?
                    script:
                    - CHAT "Ohh Im great"
                    - flag npc "AllowedToMove:1"
                    - ZAP 'SCRIPT:Talker_i' step:First

                #unexpected answer
                3:
                    Trigger: /REGEX:\w+/
                    script:
                    - CHAT "Sorry, I did not understand"
                    - flag npc "AllowedToMove:1"
                    - ZAP 'SCRIPT:Talker_i' step:First

Wait_on_place:
  Type: Task
  Script:
  - flag npc "wait_xposwait:<npc.location.x>"
  - flag npc "wait_xposwait:++"
  - flag npc "wait_maxwaiting:0"
  - if <flag.n:AllowedToMove> == 0 runtask "script:Wait_on_place_loop"

Wait_on_place_loop:
  Type: Task
  Script:
  - walkto "location:<flag.n:wait_xposwait>,<npc.location.y>,<npc.location.z>,<npc.location.world>" "speed:0.00001"
  - flag npc "wait_maxwaiting:++"
     #There is a maximum time the NPC will wait for an answer, if you increase the number on the condition the NPC will wait more time
  - if <flag.n:wait_maxwaiting> == 15 flag npc "AllowedToMove:1"
  - if <flag.n:AllowedToMove> == 0 runtask "script:Wait_on_place_loop"