Stendhal NPC Coding: Difference between revisions

Content deleted Content added
imported>Kymara
Define NPC with Java: indentation and brackets to line up with previous half defined
imported>Madmetzger
 
(59 intermediate revisions by 2 users not shown)
Line 3:
{{Stendhal NPCs}}
 
Usually we add NPCs (non-player characters) to make world more alive and to use them in Quests. It is because of that reason, that is so important that you add NPC on the zone they are.
 
This is how NPCs are added to the world.
Line 10:
 
More complicated dialog for NPCs, such as you'd find in a quest, is covered in [[Stendhal Quest Coding]]. But the basics for any NPC used in a quest should still be written as below.
 
== Before you start ==
 
This page describes how to code an NPC. You don't need to know a lot about Java. You should, however, already have [[Configure a development environment (IDE)|setup an IDE]] and be able to compile and start a local Stendhal server.
 
== Define NPC with Java ==
Line 56 ⟶ 60:
*/
public void configureZone(final StendhalRPZone zone, final Map<String, String> attributes) {
buildNPC(zone, attributes);
}
 
Line 64 ⟶ 68:
 
<source lang="java">
private void buildNPC(final StendhalRPZone zone, final Map<String, String> attributes) {
final SpeakerNPC npc = new SpeakerNPC("Mr Healer") {
protected void createPath() {
Line 74 ⟶ 78:
 
protected void createDialog() {
// Lets the NPC reply with "Hallo" when a player greets him. But we could have set onea custom greeting inside the ()
addGreeting();
// Lets the NPC reply when a player says "job"
Line 85 ⟶ 89:
addHealer(0);
// respond about a special trigger word
addReply("potions","Please ask for my #offer."):;
// use standard goodbye, but you can also set one inside the ()
addGoodbye();
Line 91 ⟶ 95:
});
 
zone.assignRPObjectID(npc);
// This determines how the NPC will look like. welcomernpc.png is a picture in data/sprites/npc/
npc.setEntityClass("welcomernpc");
// set a description for when a player does 'Look'
npc.setDescription("You see Mr Healer, he looks a a bit busy at the moment but perhaps he can help you anyway.");
// Set the initial position to be the first node on the Path you defined above.
npc.setPosition(9, 5);
Line 129 ⟶ 134:
 
We set its outfit either by:
* setting its class to a [[StendhalRefactoringGraphics#NPCs|PNG image]] that exists at ''data/sprites/npc'', e.g. <code>npc.setEntityClass("welcomernpc");</code>
* setting its outfit with setOutfit method e.g. <code>npc.setOutfit(new Outfit(0, 05, 01, 06, 01));</code>. See- see [[StendhalOpenTasks#Player's outfits| How to know player'shttp://stendhalgame.org/hudson/job/stendhal_HEAD/javadoc/games/stendhal/server/entity/Outfit.html outfitsOutfit specifications]javadoc]
 
It is nice to set a description for when the player does ''Look''. If you don't set one, it will just say: ''You see [NPC Name].''
 
Finally set its initial position and its HP. Don't worry for your NPC. It can't be attacked nor killed.