Autor Tema: [Evento] Preguntas  (Leído 1759 veces)

Febrero 01, 2017, 09:07:35 pm

Desconectado Saptem

  • Vips
  • Usuario
  • *
  • Mensajes: 89
  • Karma: 0
  • Sexo: Masculino
Citar
INFORMACIÓN:

Evento para L2jserver H5

Cada 1 hora comienza el evento, se anuncia una pregunta, el que player que conteste correctamente por shout se le dara el reward y finalizara el evento. Es recomendable que el shout sea global [/size][/center]

Citar
CONFIGURACIÓN:

indicar el tiempo de ciclo del evento en minutos
Código: You are not allowed to view links. Register or Login
// indicar el tiempo de ciclo del evento en minutos
private final int ciclo = 60;
indicar el numero de preguntas
Código: You are not allowed to view links. Register or Login
// indica el numero de preguntas
private final int random = 2;

indicar las preguntas y respuestas siguiendo su orden
Código: You are not allowed to view links. Register or Login
private final String[] preguntas =
{
"Cual es la clase mago que tiene la skill empowering echo?",
"Como le dicen a un noob en Latinoamerica?"
};
private final String[] respuestas =
{
"spellhowler",
"pete"
};
indicar la id de los items y la cantidad de reward
Código: You are not allowed to view links. Register or Login
private final int[][] items =
{
{
6392,
1
},
{
6393,
1
}
};

crear una carpeta en scripts/custom llamada Preguntas y guardar el script en Preguntas.java
activar en scripts.cfg

Código: You are not allowed to view links. Register or Login
/*
 * Copyright (C) 2004-2015 L2J DataPack
 *
 * This file is part of L2J DataPack.
 *
 * L2J DataPack is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * L2J DataPack is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package custom.Preguntas;

import java.util.ArrayList;

import ai.npc.AbstractNpcAI;

import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.events.EventType;
import com.l2jserver.gameserver.model.events.ListenerRegisterType;
import com.l2jserver.gameserver.model.events.annotations.RegisterEvent;
import com.l2jserver.gameserver.model.events.annotations.RegisterType;
import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerChat;
import com.l2jserver.gameserver.util.Broadcast;
import com.l2jserver.util.Rnd;

/**
 * @author Eze
 */
public class Preguntas extends AbstractNpcAI
{
private boolean started = false;
// indicar el tiempo de ciclo del evento en minutos
private final int ciclo = 60;
// indica el numero de preguntas
private final int random = 2;
private int num;
private final ArrayList<L2PcInstance> ganadores = new ArrayList<>();
// indicar las preguntas
private final String[] preguntas =
{
"Cual es la clase mago que tiene la skill empowering echo?",
"Como le dicen a un noob en Latinoamerica?"
};
private final String[] respuestas =
{
"spellhowler",
"pete"
};
// indicar la id de los items y la cantidad de reward
private final int[][] items =
{
{
6392,
1
},
{
6393,
1
}
};

private Preguntas()
{
super(Preguntas.class.getSimpleName(), "custom");

startQuestTimer("pregunta", 1 * 60000, null, null);
}

@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.equals("pregunta"))
{
ganadores.clear();
num = Rnd.get(random);
Broadcast.announceToOnlinePlayers("Evento de Preguntas. El que conteste la respuesta correcta en minusculas por Shout se le entregara un reward :", false);
Broadcast.announceToOnlinePlayers(preguntas[num], true);
started = true;
}
else if (event.equals("finalizo"))
{
Broadcast.announceToOnlinePlayers("El ganador es " + ganadores.get(0).getName() + ". Proximo evento en 1 Hora", false);
for (int[] itemId : items)
{
ganadores.get(0).addItem("ganador", itemId[0], itemId[1], null, true);
}
startQuestTimer("pregunta", ciclo * 60000, null, null);
}

return super.onAdvEvent(event, npc, player);
}

@RegisterEvent(EventType.ON_PLAYER_CHAT)
@RegisterType(ListenerRegisterType.GLOBAL)
public void Chat(OnPlayerChat event)
{

if ((!started) || (started && (event.getChatType() != 1)))
{
return;
}
if (!event.getText().equals(respuestas[num]))
{
return;
}
ganadores.add(event.getActiveChar());
started = false;
startQuestTimer("finalizo", 1 * 1000, null, null);
}

public static void main(String[] args)
{
new Preguntas();
}
}

Creditos a @execanciani

Febrero 10, 2017, 07:10:32 pm
Respuesta #1

Desconectado brianxx55

  • Usuario
  • *
  • Mensajes: 12
  • Karma: 0
  • Sexo: Masculino
muy bueno, lo unico que habria que ponerle una opcion que reinicie si no se constesta la pregunta, porque sino queda estancado.
otra cosa que estaria bueno poner un npc que contenga dicha pregunta.
si lo logro hacer lo publico.

gracias por tu aporte

Febrero 04, 2018, 09:35:22 am
Respuesta #2

Desconectado 3gato

  • Usuario
  • *
  • Mensajes: 22
  • Karma: 0
  • Sexo: Masculino
  • Learn and share my knowledge!
You are not allowed to view links. Register or Login
Citar
INFORMACIÓN:

Evento para L2jserver H5

Cada 1 hora comienza el evento, se anuncia una pregunta, el que player que conteste correctamente por shout se le dara el reward y finalizara el evento. Es recomendable que el shout sea global [/size][/center]

Citar
CONFIGURACIÓN:

indicar el tiempo de ciclo del evento en minutos
Código: You are not allowed to view links. Register or Login
// indicar el tiempo de ciclo del evento en minutos
private final int ciclo = 60;
indicar el numero de preguntas
Código: You are not allowed to view links. Register or Login
// indica el numero de preguntas
private final int random = 2;

indicar las preguntas y respuestas siguiendo su orden
Código: You are not allowed to view links. Register or Login
private final String[] preguntas =
{
"Cual es la clase mago que tiene la skill empowering echo?",
"Como le dicen a un noob en Latinoamerica?"
};
private final String[] respuestas =
{
"spellhowler",
"pete"
};
indicar la id de los items y la cantidad de reward
Código: You are not allowed to view links. Register or Login
private final int[][] items =
{
{
6392,
1
},
{
6393,
1
}
};

crear una carpeta en scripts/custom llamada Preguntas y guardar el script en Preguntas.java
activar en scripts.cfg

Código: You are not allowed to view links. Register or Login
/*
 * Copyright (C) 2004-2015 L2J DataPack
 *
 * This file is part of L2J DataPack.
 *
 * L2J DataPack is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * L2J DataPack is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package custom.Preguntas;

import java.util.ArrayList;

import ai.npc.AbstractNpcAI;

import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.events.EventType;
import com.l2jserver.gameserver.model.events.ListenerRegisterType;
import com.l2jserver.gameserver.model.events.annotations.RegisterEvent;
import com.l2jserver.gameserver.model.events.annotations.RegisterType;
import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerChat;
import com.l2jserver.gameserver.util.Broadcast;
import com.l2jserver.util.Rnd;

/**
 * @author Eze
 */
public class Preguntas extends AbstractNpcAI
{
private boolean started = false;
// indicar el tiempo de ciclo del evento en minutos
private final int ciclo = 60;
// indica el numero de preguntas
private final int random = 2;
private int num;
private final ArrayList<L2PcInstance> ganadores = new ArrayList<>();
// indicar las preguntas
private final String[] preguntas =
{
"Cual es la clase mago que tiene la skill empowering echo?",
"Como le dicen a un noob en Latinoamerica?"
};
private final String[] respuestas =
{
"spellhowler",
"pete"
};
// indicar la id de los items y la cantidad de reward
private final int[][] items =
{
{
6392,
1
},
{
6393,
1
}
};

private Preguntas()
{
super(Preguntas.class.getSimpleName(), "custom");

startQuestTimer("pregunta", 1 * 60000, null, null);
}

@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.equals("pregunta"))
{
ganadores.clear();
num = Rnd.get(random);
Broadcast.announceToOnlinePlayers("Evento de Preguntas. El que conteste la respuesta correcta en minusculas por Shout se le entregara un reward :", false);
Broadcast.announceToOnlinePlayers(preguntas[num], true);
started = true;
}
else if (event.equals("finalizo"))
{
Broadcast.announceToOnlinePlayers("El ganador es " + ganadores.get(0).getName() + ". Proximo evento en 1 Hora", false);
for (int[] itemId : items)
{
ganadores.get(0).addItem("ganador", itemId[0], itemId[1], null, true);
}
startQuestTimer("pregunta", ciclo * 60000, null, null);
}

return super.onAdvEvent(event, npc, player);
}

@RegisterEvent(EventType.ON_PLAYER_CHAT)
@RegisterType(ListenerRegisterType.GLOBAL)
public void Chat(OnPlayerChat event)
{

if ((!started) || (started && (event.getChatType() != 1)))
{
return;
}
if (!event.getText().equals(respuestas[num]))
{
return;
}
ganadores.add(event.getActiveChar());
started = false;
startQuestTimer("finalizo", 1 * 1000, null, null);
}

public static void main(String[] args)
{
new Preguntas();
}
}

Creditos a @execanciani


Muy bien. El problema es que si no hay respuesta, el evento no se reinicia. cómo corregir esto?

Febrero 08, 2018, 11:18:24 am
Respuesta #3

Desconectado tomalko

  • Usuario
  • *
  • Mensajes: 4
  • Karma: 1
Código: You are not allowed to view links. Register or Login
=============================================== Viktorina.java
/*
 * Copyright (C) 2004-2018 L2J DataPack
 * @version 0.0.0.4
 * Time 14.02.2018
 * @author TomAlko
 */
 
package events.Viktorina;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;

import com.l2jserver.Config;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.events.EventType;
import com.l2jserver.gameserver.model.events.ListenerRegisterType;
import com.l2jserver.gameserver.model.events.annotations.RegisterEvent;
import com.l2jserver.gameserver.model.events.annotations.RegisterType;
import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerChat;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.util.Broadcast;
import com.l2jserver.util.Rnd;

public final class Viktorina extends Quest
{
private static String question;
private static String answer;
private static ArrayList<String> questions = new ArrayList<String>();
private final ArrayList<L2PcInstance> _player = new ArrayList<>();

private final int[] items57 = {1000, 10000, 100000};
private final int[][] items =
{
// id item|Count|Chance|of Chance|min Lvl|max Lvl
{57, items57[Rnd.get(items57.length)], 100, 100, 0, 0},
{6392, 1, 70, 100, 1, 85},
{6393, 1, 70, 100, 1, 85}
};

private Viktorina()
{
super(-1, Viktorina.class.getSimpleName(), "events");
_log.info("Event viktorina Load");
saveGlobalQuestVar("checkviktorinavar", "0");
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new StartViktorina(), 30000, 300000);
}

public boolean checkViktorinaVar()
{
return loadGlobalQuestVar("checkviktorinavar") == null ||
Integer.parseInt(loadGlobalQuestVar("checkviktorinavar")) == 0 ? true : false;
}

public void loadQuestions()
{
File file = new File(Config.DATAPACK_ROOT, "data/scripts/events/Viktorina/questions.txt");
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String str;
while((str = br.readLine()) != null)
{
questions.add(str);
}
br.close();
final int index = Rnd.get(questions.size());
String qstr = questions.get(index);
StringTokenizer st = new StringTokenizer(qstr, "|");
question = st.nextToken();
answer = st.nextToken();
}
catch (IOException ioe)
{
_log.severe("Failed loading questions.txt, no script going to be loaded");
}
}

@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.equals("viktorina_start"))
{
_log.info("Event viktorina Start");
_player.clear();
loadQuestions();
Broadcast.toAllOnlinePlayers("Question: " + question, true);
saveGlobalQuestVar("checkviktorinavar", "1");
startQuestTimer("viktorina_final", 150*1000, null, null);
}
if (event.equals("viktorina_answer"))
{
_log.info("Event viktorina answer");
startQuestTimer("viktorina_final", 1*1000, null, null);
final String name = _player.get(0).getName();
final int Lvl = _player.get(0).getLevel();
Broadcast.toAllOnlinePlayers("The first won the Name: " + name + ".", false);
for (int[] itemId : items)
{
if ((Rnd.get(itemId[3]) > itemId[3] - itemId[2])
|| ((itemId[4] == 0 && Lvl > itemId[4])
|| (itemId[5] == 0 && Lvl < itemId[5]))
){
_player.get(0).addItem("ganador", itemId[0], itemId[1], null, true);
}
}
}
if (event.equals("viktorina_final"))
{
saveGlobalQuestVar("checkviktorinavar", "0");
cancelQuestTimer("viktorina_start", null, null);
cancelQuestTimer("viktorina_answer", null, null);
_log.info("Event viktorina final");
}
return super.onAdvEvent(event, npc, player);
}

@RegisterEvent(EventType.ON_PLAYER_CHAT)
@RegisterType(ListenerRegisterType.GLOBAL)
public void Chat(OnPlayerChat event)
{
if (checkViktorinaVar() || event.getChatType() != 1)
return;
if(answer == null || !event.getText().equalsIgnoreCase(answer))
return;

saveGlobalQuestVar("checkviktorinavar", "0");
_player.add(event.getActiveChar());
startQuestTimer("viktorina_answer", 1*1000, null, null);
}

public class StartViktorina implements Runnable
{
@Override
public void run()
{
if (checkViktorinaVar())
{
Broadcast.toAllOnlinePlayers("Victirina event Loaded, will start in 30 seconds", true);
startQuestTimer("viktorina_start", 30*1000, null, null);
_log.info("Victirina event Loaded, will start in 30 seconds");
}
}
}

public static void main(String args[])
{
new Viktorina();
}
}

===================================================== questions.txt
question|answer
===================================================== scripts.cfg
events/Viktorina/Viktorina.java

Agosto 22, 2019, 10:41:22 pm
Respuesta #4

Desconectado lordofcaos

  • Usuario
  • *
  • Mensajes: 1
  • Karma: 0
pregunta del evento de preguntas se tiene que crear un txt con las preguntas y otro txt con las respuestas?