Package games.stendhal.server.entity.npc

Examples of games.stendhal.server.entity.npc.SpeakerNPC


    fillQuestInfo(
        "Seven Cherubs",
        "Seven cherubs stay on this world, and finding them all is rewarded with a prize.",
        false);
    StendhalRPZone zone;
    SpeakerNPC npc;

    zone = world.getZone("0_semos_village_w");
    npc = new CherubNPC("Cherubiel", 32, 60);
    zone.add(npc);
View Full Code Here


    super.addToWorld();
    fillQuestInfo(
        "Meet Monogenes",
        "A wise old man in Semos has a map can to guide newcomers through the town.",
        false);
    final SpeakerNPC npc = npcs.get("Monogenes");
   
    npc.addGreeting(null, new SayTextWithPlayerNameAction("Hi again, [name]. How can I #help you this time?"));
   
    // A little trick to make NPC remember if it has met
        // player before and react accordingly
        // NPC_name quest doesn't exist anywhere else neither is
        // used for any other purpose
    npc.add(ConversationStates.IDLE,
        ConversationPhrases.GREETING_MESSAGES,
        new AndCondition(
            new GreetingMatchesNameCondition(npc.getName()),
            new QuestNotCompletedCondition("Monogenes")),
        ConversationStates.INFORMATION_1,
        "Hello there, stranger! Don't be too intimidated if people are quiet and reserved... " +
        "the fear of Blordrough and his forces has spread all over the country, and we're all " +
        "a bit concerned. I can offer a few tips on socializing though, would you like to hear them?",
        new SetQuestAction("Monogenes", "done"));
       
    npc.add(
      ConversationStates.ATTENDING,
      ConversationPhrases.HELP_MESSAGES,
      null,
      ConversationStates.INFORMATION_1,
      "I can offer you a few tips on socializing with the residents of Semos, if you like?",
      null);

    npc.add(
      ConversationStates.INFORMATION_1,
      ConversationPhrases.YES_MESSAGES,
      null,
      ConversationStates.ATTENDING,
      "You should introduce yourself by saying \"hi\". After this, try to keep the conversation " +
      "to the topics they bring up; suitable subjects will be highlighted #'like this'. A few " +
      "generally safe topics of conversation are the person's #job, asking for #help, asking if " +
      "they have an #offer to make, and asking for a #quest to go on. Now, if you want a quick " +
      "run-down of the #buildings in Semos, just say.",
      null);

    npc.add(
      ConversationStates.INFORMATION_1,
      ConversationPhrases.NO_MESSAGES,
      null,
      ConversationStates.IDLE,
      "And how are you supposed to know what's happening? By reading the Semos Tribune? Hah! Bye, then.",
      null);
   
    final List<String> yesnotriggers = new ArrayList<String>();
    yesnotriggers.addAll(ConversationPhrases.YES_MESSAGES);
    yesnotriggers.addAll(ConversationPhrases.NO_MESSAGES);
   
    npc.add(
        ConversationStates.INFORMATION_1,
        "",
        new NotCondition(new TriggerInListCondition(yesnotriggers)),
        ConversationStates.INFORMATION_1,
        "I asked you a 'yes or no' question: I can offer a few tips on socializing, would you like to hear them?",
        null);

    // he puts 'like this' into blue and so many people try that first
    npc.addReply(
        "like this",
        "That's right, like that! Now, I can show you a #map or direct you to the #bank, the #library, the #tavern, the #temple, the #blacksmith, the #bakery, or the old #village.");
   
    npc.addReply(
      "buildings",
      "I can show you a #map or direct you to the #bank, the #library, the #tavern, the #temple, the #blacksmith, the #bakery, or the old #village.");

    npc.add(
      ConversationStates.ATTENDING,
      "map", null, ConversationStates.ATTENDING, "Caption\n"
      + "1 Townhall, Tad lives here,   2 Library,   3 Bank,   4 Bakery,\n"
      + "5 Storage,   6 Blacksmith, Carmen,   7 Inn, Margaret \n"
          + "8 Temple, ilisa,   9 Dangerous Dungeon \n"
          + "A Semos Village,   B Northern Plains and Mine, \n"
          + "C Very long path to Ados, \n"
          + "D Southern Plains and Nalwor Forest",
          new ExamineChatAction("map-semos-city.png", "Semos City", "Map of Semos City"));

    npc.addReply(
      "bank",
      "See this big building in front of me, with the giant fake treasure chest? That's it right there. Kinda obvious once you think about it.");

    npc.addReply(
      "library",
      "Follow the path from here to the west; you'll see a building with two doors, and the emblem of a book and quill pen on display.");

    npc.addReply(
      "tavern",
      "Just head southeast along the path, and you can't miss it. It has a large sign that reads INN.");

    npc.addReply(
      "temple",
      "The temple is southeast from here, beside the #tavern. It has a cross on the roof, very distinctive.");

    npc.addReply(
      "bakery",
      "Our local bakery is just east of this square; they have a sign up with a picture of a loaf of bread on it.");

    npc.addReply(
      "blacksmith",
      "Head southwest to reach the smithy. There's a picture of an anvil hanging above the door, you should be able to spot it.");

    npc.addReply(
      "village",
      "Just keep heading southwest, past the #blacksmith, and you will shortly come to the old Semos village. Nishiya still sells sheep there.");


    /** Give the reward to the polite newcomer user */
    // npc.add(ConversationStates.ATTENDING,
    // SpeakerNPC.GOODBYE_MESSAGES,
    // null,
    // ConversationStates.IDLE,
    // null,
    // new SpeakerNPC.ChatAction() {
    // @Override
    // public void fire(Player player, Sentence sentence, SpeakerNPC engine) {
    // if (player.getLevel() < 2) {
    // engine.say("Goodbye! I hope I was of some use to you.");
    // player.addXP(10);
    // player.notifyWorldAboutChanges();
    // } else {
    // engine.say("I hope to see you again sometime.");
    // }
    // }
    // });
    npc.addGoodbye();
  }
View Full Code Here

  public String getSlotName() {
    return QUEST_SLOT;
  }

  private void step_1() {
    final SpeakerNPC npc = npcs.get("Maerion");

    npc.add(ConversationStates.ATTENDING,
        ConversationPhrases.QUEST_MESSAGES,
        new QuestActiveCondition(QUEST_SLOT),
        ConversationStates.ATTENDING,
        "I already asked you to kill every dark elf in the tunnel below the secret room. And bring me the amulet from the thing.",
        null);

   
    npc.add(ConversationStates.ATTENDING,
        ConversationPhrases.QUEST_MESSAGES,
        new QuestCompletedCondition(QUEST_SLOT),
        ConversationStates.ATTENDING,
        "Thanks for your help. I am relieved to have the amulet back.",
        null);
   
    npc.add(ConversationStates.ATTENDING,
        ConversationPhrases.QUEST_MESSAGES,
        new QuestNotStartedCondition(QUEST_SLOT),
        ConversationStates.QUEST_OFFERED,
        "I have a problem with some dark elves. I used to be in league with them... now they are too strong. There is access to their lair from a #secret #room in this hall.",
        null);

    final List<ChatAction> actions = new LinkedList<ChatAction>();
    //actions.add(new StartRecordingKillsAction("dark elf archer", "dark elf captain", "thing"));
    actions.add(new IncreaseKarmaAction(5.0));
    actions.add(new SetQuestAction(QUEST_SLOT, "started"));
    actions.add(new ExamineChatAction("dark-elves-wanted.png", "Wanted!", ""));

    npc.add(
      ConversationStates.QUEST_OFFERED,
      ConversationPhrases.YES_MESSAGES,
      null,
      ConversationStates.ATTENDING,
      "Good. Please kill every dark elf down there and get the amulet from the mutant thing.",
      new MultipleActions(actions));

    npc.add(ConversationStates.QUEST_OFFERED,
      ConversationPhrases.NO_MESSAGES,
      null,
      ConversationStates.ATTENDING,
      "Then I fear for the safety of the Nalwor elves...",
      new SetQuestAndModifyKarmaAction(QUEST_SLOT, "rejected", -5.0));

    npc.add(
      ConversationStates.QUEST_OFFERED,
      Arrays.asList("secret", "room", "secret room"),
      null,
      ConversationStates.QUEST_OFFERED,
      "It's that room downstairs with a grey roof and the evil face on the door. Inside you'll find what the dark elves were making, a mutant thing. Will you help?",
View Full Code Here

    // Go kill the dark elves and get the amulet from the thing
  }

  private void step_3() {

    final SpeakerNPC npc = npcs.get("Maerion");

    // support for old-style quest
   
    // the player returns to Maerion after having started the quest.
    // Maerion checks if the player has killed one of enough dark elf types
    npc.add(ConversationStates.IDLE, ConversationPhrases.GREETING_MESSAGES,
        new AndCondition(new GreetingMatchesNameCondition(npc.getName()),
            new QuestInStateCondition(QUEST_SLOT, "start"),
            new NotCondition(new KilledCondition("dark elf archer", "dark elf captain", "thing"))),
        ConversationStates.QUEST_STARTED,
        "Don't you remember promising to sort out my dark elf problem? Kill every dark elf in the #secret room below - especially the snivelling dark elf captain and any evil dark elf archers you find! And bring me the amulet from the mutant thing.",
        null);
   
    npc.add(ConversationStates.IDLE,
        ConversationPhrases.GREETING_MESSAGES,
        new AndCondition(new GreetingMatchesNameCondition(npc.getName()),
            new QuestInStateCondition(QUEST_SLOT, "start"),
            new KilledCondition("dark elf archer", "dark elf captain", "thing"),
            new NotCondition(new PlayerHasItemWithHimCondition("amulet")))
        , ConversationStates.QUEST_STARTED
        , "What happened to the amulet? Remember I need it back!"
        , null);
 
    npc.add(ConversationStates.IDLE,
        ConversationPhrases.GREETING_MESSAGES,
        new AndCondition(new GreetingMatchesNameCondition(npc.getName()),
            new QuestInStateCondition(QUEST_SLOT, "start"),
            new KilledCondition("dark elf archer", "dark elf captain", "thing"),
            new PlayerHasItemWithHimCondition("amulet"))
        , ConversationStates.ATTENDING
        , "Many, many thanks. I am relieved to have that back. Here, take this ring. It can revive the powers of the dead.",
        new MultipleActions(new DropItemAction("amulet"),
            new EquipItemAction("emerald ring", 1, true),
            new IncreaseXPAction(10000),
            new IncreaseKarmaAction(5.0),
            new SetQuestAction(QUEST_SLOT, "done")));
   
   
    // support for new-style quest
   
    // building string for completed quest state
    StringBuilder sb = new StringBuilder("started");
    for(int i=0;i<creatures.size();i++) {
      sb.append(";");
      sb.append(creatures.get(i));
    }
    final String completedQuestState = sb.toString();
   
    // the player returns to Maerion after having started the quest.
    // Maerion checks if the player has killed one of enough dark elf types
    npc.add(ConversationStates.IDLE, ConversationPhrases.GREETING_MESSAGES,
        new AndCondition(
            new QuestInStateCondition(QUEST_SLOT,0,"started"),
            new NotCondition(
                new QuestInStateCondition(QUEST_SLOT, completedQuestState))),
        ConversationStates.QUEST_STARTED,
        "Don't you remember promising to sort out my dark elf problem?"+
        " Kill every dark elf in the #secret room below - especially"+
        " the ones who command, do magic or are archers." +
        "  Don't forget the evil matronmother too."+
        " And bring me the amulet from the mutant thing.",
        new ExamineChatAction("dark-elves-wanted.png", "Wanted!", ""));
   
    npc.add(ConversationStates.IDLE,
        ConversationPhrases.GREETING_MESSAGES,
        new AndCondition(new GreetingMatchesNameCondition(npc.getName()),
            new QuestInStateCondition(QUEST_SLOT, completedQuestState),
            new NotCondition(
                new PlayerHasItemWithHimCondition("amulet")))
        , ConversationStates.QUEST_STARTED
        , "What happened to the amulet? Remember I need it back!"
        , null);
 
    npc.add(ConversationStates.IDLE,
        ConversationPhrases.GREETING_MESSAGES,
        new AndCondition(new GreetingMatchesNameCondition(npc.getName()),
            new QuestInStateCondition(QUEST_SLOT, completedQuestState),                  
            new PlayerHasItemWithHimCondition("amulet"))
        , ConversationStates.ATTENDING
        , "Many, many thanks. I am relieved to have that back. Here, take this ring. It can revive the powers of the dead.",
        new MultipleActions(new DropItemAction("amulet"),
            new EquipItemAction("emerald ring", 1, true),
            new IncreaseXPAction(10000),
            new IncreaseKarmaAction(5.0),
            new SetQuestAction(QUEST_SLOT, "done")));
   
    npc.add(
      ConversationStates.QUEST_STARTED,
      Arrays.asList("secret", "room", "secret room"),
      null,
      ConversationStates.ATTENDING,
      "The room is below us. It has a grey roof and a evil face for a door. I need you to kill all the dark elves and bring me the amulet from the mutant thing.",
View Full Code Here

    // this is implemented in KanmararnSoldiers
  }

  private void step_2() {

    final SpeakerNPC npc = npcs.get("McPegleg");

    npc.add(ConversationStates.ATTENDING,
      Arrays.asList("iou", "henry", "charles", "note"),
      new QuestNotCompletedCondition(QUEST_SLOT),
      ConversationStates.ATTENDING, null,
      new ChatAction() {

        public void fire(final Player player, final Sentence sentence, final EventRaiser raiser) {
          // from all notes that the player is carrying, try to
          // find the IOU note
          final List<Item> notes = player.getAllEquipped("note");
          Item iouNote = null;
          for (final Item note : notes) {
            if ("charles".equalsIgnoreCase(note.getInfoString())) {
              iouNote = note;
              break;
            }
          }
          if (iouNote != null) {
            raiser.say("Where did you get that from? Anyways, here is the money *sighs*");
            player.drop(iouNote);
            final StackableItem money = (StackableItem) SingletonRepository.getEntityManager().getItem(
                "money");
            money.setQuantity(250);
            player.equipToInventoryOnly(money);
            player.setQuest(QUEST_SLOT, "done");
            raiser.setCurrentState(ConversationStates.ATTENDING);
          } else {
            raiser.say("I can't see that you got a valid IOU with my signature!");
          }
        }
      });

    npc.add(ConversationStates.ATTENDING,
      Arrays.asList("iou", "henry", "charles", "note"),
      new QuestCompletedCondition(QUEST_SLOT),
      ConversationStates.ATTENDING,
      "You already got cash for that damned IOU!", null);
  }
View Full Code Here

  }



  private void prepareRequestingStep() {
    final SpeakerNPC npc = npcs.get("Sally");

    // player returns with the promised wood
    npc.add(ConversationStates.IDLE,
      ConversationPhrases.GREETING_MESSAGES,
      new AndCondition(new GreetingMatchesNameCondition(npc.getName()),
          new QuestInStateCondition(QUEST_SLOT, "start"), new PlayerHasItemWithHimCondition("wood", REQUIRED_WOOD)),
      ConversationStates.QUEST_ITEM_BROUGHT,
      "Hi again! You've got wood, I see; do you have those 10 pieces of wood I asked about earlier?",
      null);

    //player returns without promised wood
    npc.add(ConversationStates.IDLE,
      ConversationPhrases.GREETING_MESSAGES,
      new AndCondition(new GreetingMatchesNameCondition(npc.getName()),
          new QuestInStateCondition(QUEST_SLOT, "start"), new NotCondition(new PlayerHasItemWithHimCondition("wood", REQUIRED_WOOD))),
      ConversationStates.ATTENDING,
      "You're back already? Don't forget that you promised to collect ten pieces of wood for me!",
      null);

    // first chat of player with sally
    npc.add(ConversationStates.IDLE,
      ConversationPhrases.GREETING_MESSAGES,
      new AndCondition(new GreetingMatchesNameCondition(npc.getName()),
          new QuestNotStartedCondition(QUEST_SLOT)),
      ConversationStates.ATTENDING, "Hi! I need a little #favor ... ",
      null);

    // player who is rejected or 'done' but waiting to start again, returns
    npc.add(ConversationStates.IDLE,
      ConversationPhrases.GREETING_MESSAGES,
      new AndCondition(new GreetingMatchesNameCondition(npc.getName()),
          new QuestNotInStateCondition(QUEST_SLOT, "start"),
          new QuestStartedCondition(QUEST_SLOT)),
      ConversationStates.ATTENDING,
      "Hi again!",
      null);
   
    // if they ask for quest while on it, remind them
    npc.add(ConversationStates.ATTENDING,
      ConversationPhrases.QUEST_MESSAGES,
      new QuestInStateCondition(QUEST_SLOT, "start"),
      ConversationStates.ATTENDING,
      "You already promised me to bring me some wood! Ten pieces, remember?",
      null);

    // first time player asks/ player had rejected
    npc.add(ConversationStates.ATTENDING,
        ConversationPhrases.QUEST_MESSAGES,
        new QuestNotStartedCondition(QUEST_SLOT),
        ConversationStates.QUEST_OFFERED,
        "I need more wood to keep my campfire running, But I can't leave it unattended to go get some! Could you please get some from the forest for me? I need ten pieces.",
        null);
   
    // player returns - enough time has passed
    npc.add(ConversationStates.ATTENDING,
        ConversationPhrases.QUEST_MESSAGES,
        new AndCondition(new QuestNotInStateCondition(QUEST_SLOT, "start"), new QuestStartedCondition(QUEST_SLOT), new TimePassedCondition(QUEST_SLOT,REQUIRED_MINUTES)),
        ConversationStates.QUEST_OFFERED,
        "My campfire needs wood again! Could you please get some from the forest for me? I need ten pieces.",
        null);

    // player returns - enough time has passed
    npc.add(ConversationStates.ATTENDING,
        ConversationPhrases.QUEST_MESSAGES,
        new AndCondition(new QuestNotInStateCondition(QUEST_SLOT, "start"), new QuestStartedCondition(QUEST_SLOT), new NotCondition(new TimePassedCondition(QUEST_SLOT,REQUIRED_MINUTES))),
        ConversationStates.ATTENDING,
        null,
        new SayTimeRemainingAction(QUEST_SLOT,REQUIRED_MINUTES,"Thanks, but I think the wood you brought me already will last me another"));
   
    // player is willing to help
    npc.add(ConversationStates.QUEST_OFFERED,
      ConversationPhrases.YES_MESSAGES,
      null,
      ConversationStates.ATTENDING,
      "Okay. You can find wood in the forest north of here. Come back when you get ten pieces of wood!",
      new SetQuestAndModifyKarmaAction(QUEST_SLOT, "start", 5.0));

    // player is not willing to help
    npc.add(ConversationStates.QUEST_OFFERED,
      ConversationPhrases.NO_MESSAGES,
      null,
      ConversationStates.ATTENDING,
      "Oh dear, how am I going to cook all this meat? Perhaps I'll just have to feed it to the animals...",
      new SetQuestAndModifyKarmaAction(QUEST_SLOT, "rejected", -5.0));
View Full Code Here

      "Oh dear, how am I going to cook all this meat? Perhaps I'll just have to feed it to the animals...",
      new SetQuestAndModifyKarmaAction(QUEST_SLOT, "rejected", -5.0));
  }

  private void prepareBringingStep() {
    final SpeakerNPC npc = npcs.get("Sally");
    // player has wood and tells sally, yes, it is for her
   
    final List<ChatAction> reward = new LinkedList<ChatAction>();
    reward.add(new DropItemAction("wood", REQUIRED_WOOD));
    reward.add(new IncreaseXPAction(50));
    reward.add(new SetQuestToTimeStampAction(QUEST_SLOT));
    reward.add(new IncreaseKarmaAction(10));
    reward.add(new ChatAction() {
      public void fire(final Player player, final Sentence sentence, final EventRaiser npc) {
        String rewardClass;
        if (Rand.throwCoin() == 1) {
          rewardClass = "meat";
        } else {
          rewardClass = "ham";
        }
        npc.say("Thank you! Here, take some " + rewardClass + "!");
        final StackableItem reward = (StackableItem) SingletonRepository.getEntityManager().getItem(rewardClass);
        reward.setQuantity(REQUIRED_WOOD);
        player.equipOrPutOnGround(reward);
        player.notifyWorldAboutChanges();
      }
    });
   
    npc.add(ConversationStates.QUEST_ITEM_BROUGHT,
      ConversationPhrases.YES_MESSAGES,
      new PlayerHasItemWithHimCondition("wood", REQUIRED_WOOD),
      ConversationStates.ATTENDING, null,
      new MultipleActions(reward));

    //player said the wood was for her but has dropped it from his bag or hands
    npc.add(ConversationStates.QUEST_ITEM_BROUGHT,
      ConversationPhrases.YES_MESSAGES,
      new NotCondition(new PlayerHasItemWithHimCondition("wood", REQUIRED_WOOD)),
      ConversationStates.ATTENDING,
      "Hey! Where did you put the wood?",
      null);

    // player had wood but said it is not for sally
    npc.add(
      ConversationStates.QUEST_ITEM_BROUGHT,
      ConversationPhrases.NO_MESSAGES,
      null,
      ConversationStates.ATTENDING,
      "Oh... well, I hope you find some quickly; this fire's going to burn out soon!",
View Full Code Here

  public String getSlotName() {
    return QUEST_SLOT;
  }
 
  private SpeakerNPC createSanta() {
    santa = new SpeakerNPC("Santa") {
      @Override
      protected void createPath() {
        // npc does not move
        setPath(null);
      }
View Full Code Here

   * removes an NPC from the world and NPC list
   *
   * @param name name of NPC
   */
  private void removeNPC(String name) {
    SpeakerNPC npc = NPCList.get().get(name);
    if (npc == null) {
      return;
    }
    npc.getZone().remove(npc);
  }
View Full Code Here

  /**
   * add quest state to npc's fsm.
   */
  private void step_1() {
   
    SpeakerNPC npc = npcs.get(QUEST_NPC);

    // quest can be given
    npc.add(ConversationStates.ATTENDING,
        ConversationPhrases.QUEST_MESSAGES,
        new OrCondition(
          new QuestNotStartedCondition(QUEST_SLOT),
          new AndCondition(
            new QuestCompletedCondition(QUEST_SLOT),
            new TimePassedCondition(QUEST_SLOT, 1, delay))),
        ConversationStates.ATTENDING,
        null,
        new GiveQuestAction());

    // time is not over
    npc.add(ConversationStates.ATTENDING,
        ConversationPhrases.QUEST_MESSAGES,
        new AndCondition(
            new QuestCompletedCondition(QUEST_SLOT),
            new NotCondition(
                new TimePassedCondition(QUEST_SLOT, 1, delay))),
        ConversationStates.ATTENDING,
        null,
        new SayTimeRemainingAction(QUEST_SLOT, 1, delay, "You have to check again in"));

    // explanations
    npc.add(ConversationStates.ATTENDING,
        "enemy",
        new QuestInStateCondition(QUEST_SLOT, 0, "start"),
        ConversationStates.ATTENDING,
        null,
        new ChatAction() {
            public void fire(Player player, Sentence sentence, EventRaiser npc) {
              npc.say(enemyForces.get(player.getQuest(QUEST_SLOT, 1)).second());
            }
        });

    // explanations
    npc.add(ConversationStates.ATTENDING,
        "enemy",
        new QuestNotInStateCondition(QUEST_SLOT, 0, "start"),
        ConversationStates.ATTENDING,
        "Yes, my enemies are everywhere, they want to kill me! I guess you are one of them. Stay away from me!",
        null);

    // checking for kills
    final List<String> creatures = new LinkedList<String>(enemyForces.keySet());
    for(int i=0; i<enemyForces.size(); i++) {
      final String enemy = creatures.get(i);

        // player killed enough enemies.
          npc.add(ConversationStates.ATTENDING,
              ConversationPhrases.QUEST_MESSAGES,
              new AndCondition(
                  new QuestInStateCondition(QUEST_SLOT, 1, enemy),
                  new KilledInSumForQuestCondition(QUEST_SLOT, 2, enemyForces.get(enemy).first())),
              ConversationStates.ATTENDING,
              null,
              new MultipleActions(
                  new RewardPlayerAction(),
                  new IncreaseXPAction(100000),
                  new IncrementQuestAction(QUEST_SLOT,3,1),
                  // empty the 2nd index as we use it later
                  new SetQuestAction(QUEST_SLOT,2,""),
                  new SetQuestToTimeStampAction(QUEST_SLOT,1),
                  new SetQuestAction(QUEST_SLOT,0,"done")));

          // player killed not enough enemies.
          npc.add(ConversationStates.ATTENDING,
              ConversationPhrases.QUEST_MESSAGES,
              new AndCondition(
                  new QuestInStateCondition(QUEST_SLOT, 1, enemy),
                  new NotCondition(
                      new KilledInSumForQuestCondition(QUEST_SLOT, 2, enemyForces.get(enemy).first()))),
View Full Code Here

TOP

Related Classes of games.stendhal.server.entity.npc.SpeakerNPC

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.