Secret Experience

Secret Experience (https://secretexperience.net/index.php)
-   [Lineage] Java Mods (https://secretexperience.net/forumdisplay.php?f=636)
-   -   [L2JServer] Quiz Event (https://secretexperience.net/showthread.php?t=30609)

allanalcantara 03-04-2011 11:22 PM

Quiz Event
 
1 Anexo(s)
bom estou aqui mais uma vez, disponibilizando mais outro MOD, sendo que esse é um evento.
depois que o ví achei meio que estranho ... mas bem enteressante. kkkkkk
evento quiz. - ele funcionano epilogue mas com adaptações ele possa funcionar para interlude.

então ai vai ...

Código:

if (command.equalsIgnoreCase("3") && QuizEvent._quizRunning)
      {
        QuizEvent.setAnswer(activeChar, 3);
      }
      return true;
  }
 
  /**
    *
    * @see com.l2jserver.gameserver.handler.IVoicedCommandHandler#getVoicedCommandList()
    */
  public String[] getVoicedCommandList()
  {
      new QuizEvent();
      return _voicedCommands;
  }
}

next code:

Código:

package custom.QuizEvent;

import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.Announcements;
import javolution.util.FastMap;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.util.Rnd;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;


import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import java.io.File;
import com.l2jserver.Config;




/**
 *
 * @author Rizel
 *
 */
public class QuizEvent
{
  public static boolean                      _quizRunning;
  private static String                      _question;
  private static String                      _answer1;
  private static String                      _answer2;
  private static String                      _answer3;
  private static int                        _rightanswer;
  private static FastMap<L2PcInstance,Integer>    _players;
  private static int                        status;
  private static int                        announced;
  private static ThreadPoolManager            tpm;
  private static AutoEventTask              task;
  private static String[][]                  _questions;
  private static int i = 0;
  private static final int STATUS_NOT_IN_PROGRESS = 0;
  private static final int STATUS_ASK = 1;
  private static final int STATUS_ANSWER = 2;
  private static final int STATUS_END = 3;
 
  //----------------------------------------------------------------------------
  //------------------------------ CONFIG --------------------------------------
  //----------------------------------------------------------------------------
 
  //Number of questions per event
  private static int _questionNumber = 3;
 
  //The Item ID of the reward
  private static int _rewardID = 57;
 
  //The ammount of the reward
  private static int _rewardCount = 1000;
 
  //Wait for the first event after the server start (in seconds)
  private static int _initWait = 60;
 
  //Time for answer the question (in seconds)
  private static int _answerTime = 10;
 
  //Time between two event (in seconds)
  private static int _betweenTime = 60;
 
 
 
  public QuizEvent()
  {
      tpm = ThreadPoolManager.getInstance();
      status = STATUS_NOT_IN_PROGRESS;
      task = new AutoEventTask();
      announced = 0;
      _quizRunning = false;
      _question = "";
      _answer1 = "";
      _answer2 = "";
      _answer3 = "";
      _rightanswer = 0;
      _players = new FastMap<L2PcInstance,Integer>(100);
      _questions = new String[20][];
      includeQuestions();
      tpm.scheduleGeneral(task, _initWait*1000);
     
  }
       
 
 
  private void includeQuestions()
  {
     
     
      File questionFile = new File(Config.DATAPACK_ROOT, "data/scripts/custom/QuizEvent/QuizEvent.xml");
      Document doc = null;
      try
      {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setIgnoringComments(true);
        dbf.setValidating(false);
        DocumentBuilder db = dbf.newDocumentBuilder();
        doc = db.parse(questionFile);
       
        for (Node root = doc.getFirstChild(); root != null; root = root.getNextSibling())
        {
            if ("list".equalsIgnoreCase(root.getNodeName()))
            {
             
              for (Node child = root.getFirstChild(); child != null; child = child.getNextSibling())
              {
           
                  if ("question".equalsIgnoreCase(child.getNodeName()))
                  {
                    int id, correct;
                    String ask, answer1, answer2, answer3;
                    NamedNodeMap attrs = child.getAttributes();
                   
                    id = Integer.parseInt(attrs.getNamedItem("id").getNodeValue());
                    correct = Integer.parseInt(attrs.getNamedItem("correct").getNodeValue());
                    ask = attrs.getNamedItem("ask").getNodeValue();
                    answer1 = attrs.getNamedItem("answer1").getNodeValue();
                    answer2 = attrs.getNamedItem("answer2").getNodeValue();
                    answer3 = attrs.getNamedItem("answer3").getNodeValue();
                   
                    _questions[id] = new String[]{ ask, answer1, answer2, answer3, ""+correct };
                    i++;
                 
                   
                  }
              }
            }
        }
      }
      catch (Exception e)
      {
       
      }
  }
 
 
 
 
 
 
  private class AutoEventTask implements Runnable
  {
      @Override
      public void run()
      {
        switch (status)
        {
        case STATUS_NOT_IN_PROGRESS:
            announceStart();
            break;
        case STATUS_ASK: 
              if (announced < _questionNumber)
              {
              announceQuestion();
              }
              else
              {
              status = STATUS_END;
              tpm.scheduleGeneral(task, 3000);
              }
            break;
        case STATUS_ANSWER:
            announceCorrect();
            break;
        case STATUS_END:
            endEvent();
            break;
        default:
            break;
           
        }
      }
  }
 
 
 
  //Get a random question from the quiz_event table 
  private static void selectQuestion()
  {
      int id = Rnd.get(i)+1;
      _question = _questions[id][0];     
      _answer1 = _questions[id][1];
      _answer2 = _questions[id][2];
      _answer3 = _questions[id][3];
      _rightanswer = Integer.parseInt(""+_questions[id][4]);
  }
 
 
 
  //Announce the question
  private static void announceQuestion()
  {

      selectQuestion();
      Announcements.getInstance().announceToAll("-----------------");
      Announcements.getInstance().announceToAll("Question: "+_question);
      Announcements.getInstance().announceToAll("-----------------");
      Announcements.getInstance().announceToAll("1: "+_answer1);
      Announcements.getInstance().announceToAll("2: "+_answer2);
      Announcements.getInstance().announceToAll("3: "+_answer3);
      Announcements.getInstance().announceToAll("-----------------");
     
      status = STATUS_ANSWER;
      tpm.scheduleGeneral(task, _answerTime*1000);
  }
 
 
 
  //Announce the correct answer
  private static void announceCorrect()
  {
      Announcements.getInstance().announceToAll("-----------------");
      Announcements.getInstance().announceToAll("The correct answer was: "+_rightanswer);
      Announcements.getInstance().announceToAll("-----------------");
      announced++;
      giveReward();
      status = STATUS_ASK;
      tpm.scheduleGeneral(task, 5000);
  }
 
 
  private static void announceStart()
  {
      _quizRunning = true;
      _players.clear();
      Announcements.getInstance().announceToAll("Quiz Event begins! "+_questionNumber+" questions. "+_answerTime+" secs for answer each. ");
      Announcements.getInstance().announceToAll("Type . and the number of the correct answer to the chat. (Like: .1)");
      Announcements.getInstance().announceToAll("Get Ready!");
           
      status = STATUS_ASK;
      tpm.scheduleGeneral(task, 5000);
  }
 
  //Add a player and its answer
  public static void setAnswer(L2PcInstance player, int answer)
  {
      if( _players.containsKey(player) )
        player.sendMessage("You already choosen an aswer!: "+_players.get(player));
      else
      _players.put(player, answer);
  }
 
 
  private static void endEvent()
  {
      _quizRunning = false;
      Announcements.getInstance().announceToAll("The Quiz Event is over!");
      announced = 0;
      status = STATUS_NOT_IN_PROGRESS;
      tpm.scheduleGeneral(task, _betweenTime*1000);
  }
 
 
 
  private static void giveReward()
  {     
      for( L2PcInstance p: _players.keySet())
      {
        if(_players.get(p) == _rightanswer)
            {
            p.sendMessage("Your answer was correct!");
            p.addItem("Quiz", _rewardID, _rewardCount, p, true);
            }
            else
            {
            p.sendMessage("Your answer was not correct!");
            }

       
      }
      _players.clear();
  }
}

bom ... eu não tenho muitas informações sobre ele, mas creio que seja bem legal!
:horse:

mend3 20-04-2011 12:54 PM

Cara, na boa, pra Ctrl C + Ctrl V tá bem pobre hein? Cade diff? Cadê classes a serem alteradas? Informações do mod?

allanalcantara 26-04-2011 01:58 PM

como disse peguei de um forum, e achei meio estranho o mod ... mas acabei postando aqui. como disse funfa em epilogo que vi lá nos post e tão funcionando . então não venha com essa de ctrl+c ctrl+v como eu disse sem muitas informações,
mas creio que seja :

EVENTO QUIZ. O ADMIN OU GM SEI, INICIA O EVENTO( OU AUTOMATICAMENTE ),
O PLAYER RESPONDE E SE FOR CERTO GANHA UM ITEM.
NÃO TESTEI NÃO SEI COMO FUNCIONA, MAS LENDO OS CODE DA PRA SABER COMO FUNFA. SEN ÃO TIVER COMPLETO NÃO SE PREOCUPE IREI OLHAR SE ESTÁ FALTANDO ALGO.

--'. qualquer coisa pode reclamar. u.u' :jiggy:


Horários baseados na GMT -3. Agora são 11:50 PM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.