Sentry/Sentry and Denizen
< Sentry
In Citizens 2 a single NPC can be multiple character types at the same time. This can lead to very powerful player interactions.
Denizen, especially can create great gameplay. Here are 2 examples.
Criminal System
A few Sentry-Denizens can be used to create a town criminal systems.
Let's say you have an adventure server with a town called Hillside, populated by shopkeepers, guards, blacksmiths, etc.
Create a number of Sentry-Denizens to act as your town's police force. Set each Sentry to target a GROUP called Hillside_Enemy.
Now create a Denizen script to handle player aggression. Let's use a 3-strike system. This same script will execute for all NPCs to which it is assigned, and the player's step will be the same for each, so we can use 1 script with multiple steps, one for each strike. Here's an example:
Hillside Aggression Script and Assignments |
---|
---- assignments.yml ---- Denizens: 'Town Guard': Interact Scripts: (other assignments) - 10 ^Hillside_Aggression 'Shopkeeper Bob': Interact Scripts: (other assignments) - 10 ^Hillside_Aggression 'Mayor Steve': Interact Scripts: (other assignments) - 10 ^Hillside_Aggression ---- script.yml ---- 'Hillside_Aggression': Type: Trigger Requirements: Mode: All List: - -GROUP Hillside_Enemy Steps: 1: Damage Trigger: Script: - CHAT "Hey, watch it or I'm calling the guards!" - ZAP 2: Damage Trigger: Script: - CHAT "Stop it, troublemaker, or else!" - ZAP 3: Damage Trigger: Script: - CHAT "HELP! HELP! I'm being attacked!" - EXECUTE ASSERVER 'permissions player addgroup <PLAYER> Hillside_Enemy' - NARRATE 'You are now an enemy of Hillside.' - ZAP 1 |
You can see we've assigned the script "Hillside_Aggression" to all NPCs named Town Guard, Shopkeeper Bob, or Mayor Steve.
If a player attacks any of these NPCs, they will receive a warning message and move on to the next step, if they get to step 3, they get put in the Sentry hostile group Hillside_Enemy.
- Bonus: If the shopkeeper and mayor are set as Sentries too, they will defend themselves! (turn retaliate off, so they don't attack immediately)
The final step resets the script to step 1, but will not run so long as the player is a member of Hillside_Enemy.
This is just a basic example and can be expanded in any number of ways, using the commands in Denizen you could:
- forgive the player after a period of time (remove the player from the hillside_enemy group)
- Create a quest for the player to earn forgiveness.
- Create hostility in other towns if harassment of Hillside continues.
- etc etc etc.
Hire-able Bodyguards
So you're getting your butt kicked on your survival server, wouldn't it be nice to spend some of that hard-earned emerald on a dude who will watch your back for you? Now you can!
Let's see how we can use Denizen to make hire-able bodyguards.
Mercenary Leader Script and Assignment |
---|
---- assignments.yml ---- Denizens: 'Mercenary Leader': Interact Scripts: - 10 Hire a Guard Texts: No Requirements Met: "Come back when you have some money and we'll talk." ---- script.yml ---- Hire a Guard: Type: Trigger Requirements: Mode: All List: - MONEY 500 Steps: 1: Click Trigger: Script: - CHAT "You look like you could use some help out there. $500 will get you one of my boys." - HINT Chat Trigger: '1': Trigger: /Yes/, I am weak and need protecting. Script: - CHAT "Okay then, nice doin' business with ya" - TAKE MONEY QTY:500 - EXECUTE ASNPC "npc create '<PLAYER>s Bodyguard'" - EXECUTE ASNPC "trait sentry" - ^EXECUTE ASNPC "sentry guard <PLAYER>" - ^EXECUTE ASNPC "sentry strength 2" - ^EXECUTE ASNPC "sentry respawn -1" #Note this means when the bodyguard dies, he's gone for good. '2': Trigger: /No/, I can handle myself! Script: - CHAT "Not my fault if you wind up dead, kid." |
Here we have a single NPC named 'Mercenary Leader'. Locate him somewhere convenient. Depending on your server's permission system you may need to pretend Mercenary Leader is player and grant him access to to /npc and /sentry commands. (need to test)
In this simple example we've given him one script with the requirement the Player has 500 economy money. We also gave him a default text telling the player to come back when he has more. You could expand on this with another script, but it's good enough for now.
If the player has the moolah, when he right clicks, the Merc will ask him if he wants a bodyguard. If the player answers yes. the NPC will use server commands to create a Sentry and assign it to the Player. In this example the Sentry's respawn is set to -1 meaning if the bodyguard dies, it's dead for good and the player needs to buy another one.
That's all there is to it. You could expand on this in many ways:
- Higher prices for bodyguards with better stats.
- Limit player to one guard at a time.
- Give ranged or melee guards.
- Make the bodyguard a Denizen as well and respond to player commands.
Sentry-specific Denizen scripts
Sentry adds a new Trigger and a new Command to Denizen that can be used with Sentry-Denizens.
- Npcdeath Trigger
The Npcdeath Trigger works like any other Denizen Trigger. It is called when the NPC dies.
- DIE Command
The DIE command should be the last step in your Npcdeath Trigger. Otherwise the NPC will not die. Sentry-Denizens without a matching Npcdeath Trigger die normally.
Here is a full example using both.
NpcDeath Trigger and DIE command example script. |
---|
---- assignments.yml ---- Denizens: 'Guard': Interact Scripts: - 10 GuardDeath ---- script.yml ---- GuardDeath: Type: Interact Requirements: Mode: All List: [] Steps: 1: Npcdeath Trigger: Script: - CHAT "ARARRRRRGRGGRRH!" - DROP DIAMOND - DIE }} Something to note is that Denizen scripts are player-centric. A Sentry-Denizen will remember all the players who contributed to its death. A separate script will run for EACH player. Because of this it is best not to use the DROP command like in the example as this would drop 1 diamond per player. Use the GIVE command instead and each player will receive the reward directly. Again this is a simple example, but could be expanded:
|