Denizen

Meta Documentation | Issue Tracker | New Script Repository | Old Script Repository | Tutorial Videos | Forums
Development builds of this project can be acquired at the provided continuous integration server. These builds have not been approved by the BukkitDev staff. Use them at your own risk.
Denizen uses a pasting service provided by its developers to enable recording of debug sessions. This allows an easy and universal way to troubleshoot a script. It is only used on '/denizen submit', however this service is not endorsed by the BukkitDev staff. Use it at your own risk.
HEY!
This project is moved!
Please download from:
https://www.spigotmc.org/resources/denizen.21039/
View resources at:
This Bukkit page won't be updated much!
About
Hey there! Thanks for using Denizen for Bukkit and Citizens2. Looking for a quick starting guide? Here's the place!
So, what is Denizen? It's is best classified as a scripting platform. Denizen for Bukkit and Citizens2 utilizes the scripting, and various other components provided by DenizenAPI. The scripting component of Denizen features easy to use script containers, replaceable tags, commands, and a queue system. Built aside is a slew of components that deal with many kinds of event handlers, many additional NPC features, a fully-featured variable system (we call them 'flags'), and a rich object-oriented set of features. I encourage users to start small when first getting into Denizen, but rest assured there are tons of features to explore.
Denizen NPCs? Yep, that's right. Denizen is probably best known as a way to create scripted Citizen NPCs. In fact, this whole project started out as an extension to Citizens2. You can use it to make interactive NPCs with the use of Assignment Scripts and Interact Scripts. This is pretty easy to do, and there's a bunch of cool NPC specific (among many other) commands and tags that you can utilize as well.
Here's a small example I call 'cookies'. I normally like to comment my scripts, but this one below is presented without any as to show the flow.
Cookies: type: assignment interact scripts: - 100 Cookie Handler Cookie Handler: type: interact steps: 'Spreading the Word*': click trigger: script: - random 3 - chat 'I like cookies!' - chat 'MMmm.. cookies are favorite!' - chat 'Cocoa and wheat me freak!' chat trigger: 'Cookies': trigger: 'I love /cookie/s!' script: - chat 'Me too!' - narrate '<npc.name> gives you some cookies.' - give i@cookie qty:6 - zap 'step:Cookies given' 'Cookies given': click trigger: script: - chat 'How were the cookies?' - zap 'step:Spreading the Word'
It's a simple 2-step, multi-trigger script that creates a cookie loving NPC. For some reason I think it's funny to name the NPC 'Notch'. Making a NPC use this script couldn't be easier, either. Simply use a bukkit command while having the NPC selected. It looks like this:
/npc assignment --set cookies
Now clicking on your NPC will use Denizen Triggers to activate the script above. An instant Denizen NPC! Cookies is funny, but hardly useful, and it's my personal philosophy that NPCs should be useful. How 'bout a simple healer? This NPC will heal you, but only when you're seriously injured.
Basic Healer: type: assignment interact scripts: - 100 heal me, bro! Heal me, bro!: type: interact steps: "Need a heal?*": click trigger: script: - if '<player.health>' < '<m:<player.health.max> / 2>' { - look <player.location> - chat 'Woah dude, you are <player.health.formatted>! You could use a heal!' - chat 'Just give me another click to get some power!' - zap "Healin'" duration:30s } else { - look <player.location> - chat 'Nice an healthy. Keep it up!' } "Healin'": click trigger: script: - ^zap 'need a heal?' - ^engage - chat "Here goes nothin'!" - playeffect instant_spell <npc.location> qty:25 - playeffect heart <player.location> qty:25 offset:1 - heal <player> - disengage
How do you make a Healer NPC with this script? You guess it! Just select that NPC, and type:
/npc assignment --set 'basic healer'
It's not just for NPCs. I guess I already told you that, but Denizen has some other script types that open up possibilities that extend far beyond it's core functionality of utilizing NPCs. One of my favorite 'simple scripts' that I like to show people is one that my friend Blankiito showed me. The one below is slightly modified, but basically it enables a 'rogue-like feature' that makes a player invisible when sneaking. It's a simple concept, but perfectly illustrates the flow of a Denizen Script.
Rogue: type: world debug: false events: on player starts sneaking: - playeffect <p.location> magic_crit qty:10 - invisible <player> state:true on player stops sneaking: - invisible <player> state:false
Even small scripts can be incredibly useful for your server. Sometimes scripts can replace entire bukkit plugins, and since the 'code' is in Denizen Script, the end result is often times more flexible to you, the server operator. Have a plugin that run some commands every once in awhile? Replace it with a simple Denizen script.
Auto Save Event Handler: type: world debug: false events: on 5:00 in world: - announce 'Autosaving...' - execute as_server 'denizen save' - execute as_server 'citizens save' - execute as_server 'save-all'
Use Denizen to solve problems, or to make features easier to use. Example: If you're familiar with Citizens, you may have realized that WorldGuard's /butcher command is not friendly to mob-type NPCs. It removes them, too, which can be a pain! Why not write your own /butcher command?
Safer Butcher Handler: type: world debug: false events: on sbutcher command: - narrate 'Removing all mob entities within 15 blocks... your NPCs are safe!' - foreach <player.location.find.entities.within[15]> { - if <%value%.is_mob> remove %value% }
Denizen Quests are the best quests. If you're like me, this whole thing started by using the Quester for Citizens1. It featured a fairly simple questing structure to implement things like 'kill quests' and 'collection quests'. When Citizens went to version 2, that functionality was no longer 'core', but no worries Denizen can help! By utilizing Denizen's Player Listeners, simple questing can be done easily, and it's more robust because you can use all the other features implemented by Denizen, too!
So, how do you best get started? This is a question we get all the time. Because of the enormous amount of ways to use and customize Denizen, we suggest that you simply START SMALL! Checking out the videos, scripts, and articles on denizen-docs you're sure to find a comfortable place to start. While scripting, utilize the tools provided, such as the SublimeText2 grammar pack, and the reference and search for meta lookup on this site.
Like any programming language, there is a learning curve with code structure and syntax that will only be overcome by trial and error. While using some user-made scripts can be as easy as dragging-and-dropping, many scripts will likely require at least a basic understanding of the denizen-script structure to fully utilize their features. But don't worry! Denizen is purposefully made to be easy to read and easy to customize! Tags, commands and events are all very verbose, easy to follow. With a little bit of research we know you'll soon be drunken with power, just like us!
Videos
Other useful links
- Denizen Handbook (Outdated kind of, but has some useful information still.)
- User-made beginner's guide
- Citizens2 Wiki
-
View User Profile
-
Send Message
Posted Mar 26, 2014If you need command that counts mobs in your world : download is here
-
View User Profile
-
Send Message
Posted Mar 23, 2014@Kleinerminer
Not quite so easily... Vault doesn't provide us with any way to monitor for this.
You do have a few more complex options though:
1: You could have a task that loops infinitely and delays a few seconds between each loop, that checks for changes in every online player's balance and updates them if needed.
2: You could listen for world events that could potentially change the balance (EG, click on a trade sign, 'pay' command, etc.) and have it check for a balance change there and update if needed.
Also, use <&sp> to add a non-breaking-space, which should go through regardless of any restrictions scoreboard might have.
-
View User Profile
-
Send Message
Posted Mar 23, 2014Hello, it's me again :D I wanted to ask if there is a possibility to run an event on money change (I wanted to show the players money in a scoreboard created in a world script) and if the line text or the value can be more than one word (qoutes don't work)
-
View User Profile
-
Send Message
Posted Mar 22, 2014@gollumking
This one: http://scripts.citizensnpcs.co/view/ta8m4c ?
Find the line(s) that say:
- ^execute as_npc "sentry equip <global.flag[Bodyguard %1% Sword]>_SWORD"
and remove the "_SWORD" part
Then find the lines starting with
- flag global "Bodyguard One Sword:Wood"
and add the "_SWORD" back there (so it's wood_sword, stone_sword, etc.)
and change one of the options to 'bow' instead of 'whatever_sword'
-
View User Profile
-
Send Message
Posted Mar 22, 2014how can I edit the sentry/denizen mercenary script to allow archer mercs?
-
View User Profile
-
Send Message
Posted Mar 22, 2014@dwatsX
1 - ProtocolLib is not and will not be required.
2 - Yeah there's quite a bit of changes... unfortunately Denizen is still in beta and we don't have much in the way of useful documentation. 99% of MC1.6 scripts should work fine, as that wasn't too long ago. If you have any trouble with your scripts not working, I recommend you connect to our IRC - http://webchat.esper.net/?nick=random_denizen_...&channels=denizen-dev&prompt=1 - and post some scripts... we'll help you get them updated ASAP. (Or paste outdated scripts to http://mcmonkey.org/haste and link them back here, but that'll take longer and will restrict helpful discussion)
@Kleinerminer
That's an odd limitation of how we handle math. Luckily it's pretty easy to fix:
- flag player myflag:<player.flag[myflag].add[1].as_int>
-
View User Profile
-
Send Message
Posted Mar 22, 2014Hello there, I wanted to ask if it's possible to increase a integer flag in a way which's letting it stay a integer (when i enter "/ex flag player flag:->:1", The flag is set to 1, but after using /ex flag player flag:+ , it's 2.0
-
View User Profile
-
Send Message
Posted Mar 22, 2014Just a couple quick questions, as I am still troubleshooting issues with this plugin that is rendering it unusable for me (I'm getting OutOfMemory errors):
1) Does this plugin no longer require ProtocolLib in order for it to work?
2) It's my understanding that some elements with regard to how Denizen scripts are now written have been changed since the versions for 1.6.2. I'm wondering if by updating to a newer version of Denizen I've rendered my 1.6.2 scripts incompatible with the way Denizen now works? Is there some information that I can reference somewhere that outlines what changes have been made in terms of how Denizen scripts are written?
-
View User Profile
-
Send Message
Posted Mar 20, 2014@mcmonkey4eva
thanks! will test it when i'm back home.
-
View User Profile
-
Send Message
Posted Mar 20, 2014@squeezer2k
... ew, I can see the handbook's influence all over that.
Anyway, make the constant like "li@brown|spotted|donkey|potato" etc., and on the command to give it use the tag "<npc.constant[Rasse].as_list.random>"
@mPlayerEXE
I don't quite understand your question. Can you post the *exact* commands / output, and record the debug output as well?
"In-game, type '/denizen debug -r', then run through the broken parts of the script, then type '/denizen submit'. Open the link it gives you, and paste that link back in [your reply]."-
View User Profile
-
Send Message
Posted Mar 20, 2014I got some strange behaviour with take command :
But when I use take SOMEITEM it takes NO item(s).
I used /ex narrate "<player.item_in_hand>" to view this items :
- command changed only [qty=xxx]
- denizen commands working with this strange stack uses this [qty=xxx] but player can drop visible quantity of item !
I think the problem is because there are lacking some updates of player status.
I use last dev builds of Citizen/Denizen
-
View User Profile
-
Send Message
Posted Mar 20, 2014hey guys,
i need a little help...
i've created a stablemaster who will give you a random horse for a given price. the horse types should be picked randomly from a list. you can view my draft here: http://pastebin.com/Fq0pL9Wn (see line 11) could you please tell me how to do this?
regards
-
View User Profile
-
Send Message
Posted Mar 18, 2014@Marium0505
How about... learn Denizen, and write it yourself!
That's a simple proximity trigger, it'll be covered in most of our help pages.
Which are listed in full here if you want to choose your favorite - https://github.com/aufdemrand/Denizen/blob/master/README.md
Tutorial Videos and the Beginner's Guide are fairly up to date and recommended!
-
View User Profile
-
Send Message
Posted Mar 18, 2014Can you set up a script for me? I want NPC's to do certain commands whenever players gets within a radius of it. Are you able to set that up for me?
-
View User Profile
-
Send Message
Posted Mar 13, 2014@DarthRiddle
World scripts are called "World" scripts because they're attached to all of the minecraft world, not to a specific NPC. They're always activated as long as they're saved and have no NPC link except any link made by the firing world event.
-
View User Profile
-
Send Message
Posted Mar 13, 2014how do you set the npc to use the type:world scripts? I cant get it npc world
set World_Item_cookie_crownnothing
-
View User Profile
-
Send Message
Posted Mar 9, 2014@mcmonkey4eva
ok i figured it all out :D sorry for being a pain
-
View User Profile
-
Send Message
Posted Mar 8, 2014@adamwbb
That is indeed a Denizen error message. If you want to get rid of it quickly, just turn off Denizen Debug mode. The error isn't from anything Denizen is doing in itself - a separate plugin is confusing Denizen (that error means that some plugin called a Denizen function with an entirely empty value for the related entity - or fired a Bukkit event as such and Denizen tried to handle it.)
If you want any help identifying what's causing it... first, update your server and all plugins to their latest dev versions to ensure it's an active error, then type "/denizen debug -r" to record debug output, let the error fire a few times, and type "/denizen submit" - post the link back so we can look through the details and find anything suspicious. Also, try to isolate when exactly it happens - is it, for example, only when a certain chunk is loaded, or when you shoot a bow, or...?
-
View User Profile
-
Send Message
Posted Mar 8, 2014i keep getting spam
nothing else just that spamming my console every second.
ive isolated to denizens
-
View User Profile
-
Send Message
Posted Mar 7, 2014@mcmonkey4eva
i want something where if u click the mob, u get the class and if u dont have the mob unlocked, it opens a screen where u can buy it btw