Description: If you have an NPC with a path defined via /npc path, is very annoying when it doesn't stop walking to talk with the player.
This script fixes that. It is compatible with the npc /path feature but its not compatible with npc /text, you have to define the texts on the script, which is good because on this way you have more control on what the NPC says.
Note: Yes, it have a small delay since the player interrupts the NPC and the NPC halts its path.
# 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.## @author narnian# @version 1.0# @last-updated
"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: 3
Exit Radius: 3
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"