Jump to content

extasie80

Members
  • Posts

    38
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

Everything posted by extasie80

  1. hello I've been looking on maxcheater for my I can't find what interests me . I'm looking for a reward pvp to reward players (with an anti feed) I use the latest l2J version
  2. Good evening, I'm looking for a code to reward players every hour I use a version of L2j I'm looking for a free code
  3. I share my code after nothing prevents people from modifying it especially since it is a very easy coding so even a newbie can do it
  4. ### Eclipse Workspace Patch 1.0 #P L2J_DataPack Index: dist/game/data/scripts/custom/QuizEvent/QuizEvent.java =================================================================== --- dist/game/data/scripts/custom/QuizEvent/QuizEvent.java (revision 0) +++ dist/game/data/scripts/custom/QuizEvent/QuizEvent.java (working copy) package custom.QuizEvent; import java.io.File; import java.util.HashMap; import java.util.Map; 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 com.l2jserver.Config; import com.l2jserver.gameserver.ThreadPoolManager; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.util.Broadcast; import com.l2jserver.util.Rnd; /** * * @author Bellatrix * */ 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 Map<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 = 3600; //Time for answer the question (in seconds) private static int _answerTime = 60; //Time between two event (in seconds) private static int _betweenTime = 18000; 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 HashMap<>(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(); Broadcast.toAllOnlinePlayers("-----------------"); Broadcast.toAllOnlinePlayers("Question: "+_question); Broadcast.toAllOnlinePlayers("-----------------"); Broadcast.toAllOnlinePlayers("1: "+_answer1); Broadcast.toAllOnlinePlayers("2: "+_answer2); Broadcast.toAllOnlinePlayers("3: "+_answer3); Broadcast.toAllOnlinePlayers("-----------------"); status = STATUS_ANSWER; tpm.scheduleGeneral(task, _answerTime*1000); } //Announce the correct answer private static void announceCorrect() { Broadcast.toAllOnlinePlayers("-----------------"); Broadcast.toAllOnlinePlayers("The correct answer was: "+_rightanswer); Broadcast.toAllOnlinePlayers("-----------------"); announced++; giveReward(); status = STATUS_ASK; tpm.scheduleGeneral(task, 5000); } private static void announceStart() { _quizRunning = true; _players.clear(); Broadcast.toAllOnlinePlayers("Quiz Event begins! "+_questionNumber+" questions. "+_answerTime+" secs for answer each. "); Broadcast.toAllOnlinePlayers("Type . and the number of the correct answer to the chat. (Like: .1)"); Broadcast.toAllOnlinePlayers("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; Broadcast.toAllOnlinePlayers("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(); } } \ No newline at end of file Index: dist/game/data/scripts/Custom/QuizEvent/QuizEvent.xml =================================================================== --- dist/game/data/scripts/custom/QuizEvent/QuizEvent.xml (revision 8768) +++ dist/game/data/scripts/custom/QuizEvent/QuizEvent.xml (working copy) <?xml version="1.0" encoding="UTF-8"?> <list> <question id = "1" ask = "Quel type Bijoux Drop Baium" answer1 = "Necklace" answer2 = "Ring" answer3 = "Earring" correct = "2" /> <question id = "2" ask = "Comment s'appel l'admin" answer1 = "Bellatrix" answer2 = "Roberta" answer3 = "Jo" correct = "1" /> <question id = "3" ask = "Quel Recompense donne le tvt" answer1 = "Codex" answer2 = "Coin" answer3 = "EventCoin" correct = "3" /> </list> Index: dist/game/data/scripts/handlers/voicedcommandhandlers/Quiz.java =================================================================== --- dist/game/data/scripts/handlers/voicedcommandhandlers/Quiz.java (revision 0) +++ dist/game/data/scripts/handlers/voicedcommandhandlers/Quiz.java (working copy) package handlers.voicedcommandhandlers; import com.l2jserver.gameserver.handler.IVoicedCommandHandler; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import custom.QuizEvent.QuizEvent; /** * @author Bellatrix */ public class Quiz implements IVoicedCommandHandler { private static final String[] _voicedCommands = { "quiz", "1", "2", "3" }; /** * @see Bellatrix */ @Override public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params) { if (command.equalsIgnoreCase("1") && QuizEvent._quizRunning) { QuizEvent.setAnswer(activeChar, 1); } if (command.equalsIgnoreCase("2") && QuizEvent._quizRunning) { QuizEvent.setAnswer(activeChar, 2); } if (command.equalsIgnoreCase("3") && QuizEvent._quizRunning) { QuizEvent.setAnswer(activeChar, 3); } return true; } /** * @see Bellatrix */ @Override public String[] getVoicedCommandList() { new QuizEvent(); return _voicedCommands; } } Index: dist/game/data/scripts/handlers/MasterHandlers.java =================================================================== --- dist/game/data/scripts/handlers/MasterHandlerjava (revision 0) +++ dist/game/data/scripts/handlers/Masterhandlers.java (working copy) import handlers.voicedcommandhandlers.Quiz; private static final Class<?>[] VOICED_COMMAND_HANDLERS = { StatsVCmd.class, // TODO: Add configuration options for this voiced commands: // CastleVCmd.class, // SetVCmd.class, (Config.L2JMOD_ALLOW_WEDDING ? Wedding.class : null), (Config.BANKING_SYSTEM_ENABLED ? Banking.class : null), (Config.L2JMOD_CHAT_ADMIN ? ChatAdmin.class : null), (Config.L2JMOD_MULTILANG_ENABLE && Config.L2JMOD_MULTILANG_VOICED_ALLOW ? Lang.class : null), (Config.L2JMOD_ENABLE_ONLINE_STATUS ? OnlineStatus.class : null), (Config.L2JMOD_DEBUG_VOICE_COMMAND ? Debug.class : null), (Config.L2JMOD_ALLOW_CHANGE_PASSWORD ? ChangePassword.class : null), Quiz.class,
  5. the command gives the information of the target like this
  6. add me discord Zetsu#9430
  7. not for interlude, are you still interested?
  8. I have the l2day my adapted for interlude
  9. It doesn't matter as long as it works.
  10. someone managed to fix it?
  11. still no fix for crashes?
  12. it's been several days since I tried to modify it without succeeding it's for his that I come to ask for a hand
  13. how to remove the condition that says you have to be a channel commander for spawn bodies? /* * Copyright © 2004-2019 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 quests.Q00456_DontKnowDontCare; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import com.l2jserver.gameserver.datatables.ItemTable; import com.l2jserver.gameserver.enums.QuestType; import com.l2jserver.gameserver.enums.audio.Sound; import com.l2jserver.gameserver.model.AggroInfo; import com.l2jserver.gameserver.model.L2CommandChannel; import com.l2jserver.gameserver.model.actor.L2Attackable; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.items.L2Item; import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.model.quest.State; import com.l2jserver.gameserver.network.NpcStringId; import com.l2jserver.gameserver.network.clientpackets.Say2; import com.l2jserver.gameserver.network.serverpackets.NpcSay; import com.l2jserver.gameserver.util.Util; /** * Don't Know, Don't Care (456) * @author lion, ivantotov, jurchiks */ public final class Q00456_DontKnowDontCare extends Quest { // NPCs // @formatter:off private static final int[] SEPARATED_SOUL = { 32864, 32865, 32866, 32867, 32868, 32869, 32870, 32891 }; // @formatter:on private static final int DRAKE_LORD_CORPSE = 32884; private static final int BEHEMOTH_LEADER_CORPSE = 32885; private static final int DRAGON_BEAST_CORPSE = 32886; // Items private static final int DRAKE_LORD_ESSENCE = 17251; private static final int BEHEMOTH_LEADER_ESSENCE = 17252; private static final int DRAGON_BEAST_ESSENCE = 17253; // Misc private static final int MIN_PLAYERS = 2; private static final int MIN_LEVEL = 80; private static final Map<Integer, Integer> MONSTER_NPCS = new HashMap<>(); private static final Map<Integer, Integer> MONSTER_ESSENCES = new HashMap<>(); private static final String TIMER_UNSPAWN_RAID_CORPSE = "TIMER_UNSPAWN_RAID_CORPSE"; static { MONSTER_NPCS.put(25725, DRAKE_LORD_CORPSE); MONSTER_NPCS.put(25726, BEHEMOTH_LEADER_CORPSE); MONSTER_NPCS.put(25727, DRAGON_BEAST_CORPSE); MONSTER_ESSENCES.put(DRAKE_LORD_CORPSE, DRAKE_LORD_ESSENCE); MONSTER_ESSENCES.put(BEHEMOTH_LEADER_CORPSE, BEHEMOTH_LEADER_ESSENCE); MONSTER_ESSENCES.put(DRAGON_BEAST_CORPSE, DRAGON_BEAST_ESSENCE); } // Rewards private static final int[] WEAPONS = { 15558, // Periel Sword 15559, // Skull Edge 15560, // Vigwik Axe 15561, // Devilish Maul 15562, // Feather Eye Blade 15563, // Octo Claw 15564, // Doubletop Spear 15565, // Rising Star 15566, // Black Visage 15567, // Veniplant Sword 15568, // Skull Carnium Bow 15569, // Gemtail Rapier 15570, // Finale Blade 15571, // Dominion Crossbow }; private static final int[] ARMOR = { 15743, // Sealed Vorpal Helmet 15746, // Sealed Vorpal Breastplate 15749, // Sealed Vorpal Gaiters 15752, // Sealed Vorpal Gauntlets 15755, // Sealed Vorpal Boots 15758, // Sealed Vorpal Shield 15744, // Sealed Vorpal Leather Helmet 15747, // Sealed Vorpal Leather Breastplate 15750, // Sealed Vorpal Leather Leggings 15753, // Sealed Vorpal Leather Gloves 15756, // Sealed Vorpal Leather Boots 15745, // Sealed Vorpal Circlet 15748, // Sealed Vorpal Tunic 15751, // Sealed Vorpal Stockings 15754, // Sealed Vorpal Gloves 15757, // Sealed Vorpal Shoes 15759, // Sealed Vorpal Sigil }; private static final int[] ACCESSORIES = { 15763, // Sealed Vorpal Ring 15764, // Sealed Vorpal Earring 15765, // Sealed Vorpal Necklace }; private static final int[] ATTRIBUTE_CRYSTALS = { 9552, // Fire Crystal 9553, // Water Crystal 9554, // Earth Crystal 9555, // Wind Crystal 9556, // Dark Crystal 9557, // Holy Crystal }; private static final int BLESSED_SCROLL_ENCHANT_WEAPON_S = 6577; private static final int BLESSED_SCROLL_ENCHANT_ARMOR_S = 6578; private static final int SCROLL_ENCHANT_WEAPON_S = 959; private static final int GEMSTONE_S = 2134; private final Map<Integer, Set<Integer>> allowedPlayerMap = new ConcurrentHashMap<>(); public Q00456_DontKnowDontCare() { super(456, Q00456_DontKnowDontCare.class.getSimpleName(), "Don't Know, Don't Care"); addStartNpc(SEPARATED_SOUL); addTalkId(SEPARATED_SOUL); addFirstTalkId(DRAKE_LORD_CORPSE, BEHEMOTH_LEADER_CORPSE, DRAGON_BEAST_CORPSE); addTalkId(DRAKE_LORD_CORPSE, BEHEMOTH_LEADER_CORPSE, DRAGON_BEAST_CORPSE); addKillId(MONSTER_NPCS.keySet()); registerQuestItems(DRAKE_LORD_ESSENCE, BEHEMOTH_LEADER_ESSENCE, DRAGON_BEAST_ESSENCE); } @Override public String onFirstTalk(L2Npc npc, L2PcInstance player) { final QuestState qs = getQuestState(player, false); final Set<Integer> allowedPlayers = allowedPlayerMap.get(npc.getObjectId()); if ((qs == null) || !qs.isCond(1) || (allowedPlayers == null) || !allowedPlayers.contains(player.getObjectId())) { return npc.getId() + "-02.html"; } final int essence = MONSTER_ESSENCES.get(npc.getId()); final String htmltext; if (hasQuestItems(player, essence)) { htmltext = npc.getId() + "-03.html"; } else { giveItems(player, essence, 1); htmltext = npc.getId() + "-01.html"; if (hasQuestItems(player, getRegisteredItemIds())) { qs.setCond(2, true); } else { playSound(player, Sound.ITEMSOUND_QUEST_ITEMGET); } } return htmltext; } @Override public String onTalk(L2Npc npc, L2PcInstance player) { final QuestState qs = getQuestState(player, true); String htmltext = getNoQuestMsg(player); if (Util.contains(SEPARATED_SOUL, npc.getId())) { switch (qs.getState()) { case State.COMPLETED: if (!qs.isNowAvailable()) { htmltext = "32864-02.html"; break; } qs.setState(State.CREATED); // intentional fall-through case State.CREATED: htmltext = ((player.getLevel() >= MIN_LEVEL) ? "32864-01.htm" : "32864-03.html"); break; case State.STARTED: switch (qs.getCond()) { case 1: { htmltext = (hasAtLeastOneQuestItem(player, getRegisteredItemIds()) ? "32864-09.html" : "32864-08.html"); break; } case 2: { if (hasQuestItems(player, getRegisteredItemIds())) { rewardPlayer(player, npc); qs.exitQuest(QuestType.DAILY, true); htmltext = "32864-10.html"; } break; } } break; } } return htmltext; } @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { final QuestState qs = player != null ? getQuestState(player, false) : null; String htmltext = null; switch (event) { case "32864-04.htm": case "32864-05.htm": case "32864-06.htm": { if ((qs != null) && qs.isCreated()) { htmltext = event; } break; } case "32864-07.htm": { if ((qs != null) && qs.isCreated()) { qs.startQuest(); htmltext = event; } break; } case TIMER_UNSPAWN_RAID_CORPSE: { allowedPlayerMap.remove(npc.getObjectId()); npc.deleteMe(); break; } } return htmltext; } @Override public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { if (!killer.isInParty() || !killer.getParty().isInCommandChannel()) { // only the killing cc gets the quest return super.onKill(npc, killer, isSummon); } final L2CommandChannel cc = killer.getParty().getCommandChannel(); if (cc.getMemberCount() < MIN_PLAYERS) { return super.onKill(npc, killer, isSummon); } Set<Integer> allowedPlayers = new HashSet<>(); for (AggroInfo aggro : ((L2Attackable) npc).getAggroList().values()) { if ((aggro.getAttacker() == null) || !aggro.getAttacker().isPlayer()) { continue; } L2PcInstance attacker = aggro.getAttacker().getActingPlayer(); if (attacker.isInParty() // && attacker.getParty().isInCommandChannel() // && attacker.getParty().getCommandChannel().equals(cc) // only players from the same cc are allowed && Util.checkIfInRange(1500, npc, attacker, true)) { allowedPlayers.add(attacker.getObjectId()); } } if (!allowedPlayers.isEmpty()) { // This depends on the boss respawn delay being at least 5 minutes. final L2Npc spawned = addSpawn(MONSTER_NPCS.get(npc.getId()), npc, true, 0); allowedPlayerMap.put(spawned.getObjectId(), allowedPlayers); startQuestTimer(TIMER_UNSPAWN_RAID_CORPSE, 300000, npc, null); } return super.onKill(npc, killer, isSummon); } private static void rewardPlayer(L2PcInstance player, L2Npc npc) { int chance = getRandom(10000); final int reward; int count = 1; if (chance < 170) { reward = ARMOR[getRandom(ARMOR.length)]; } else if (chance < 200) { reward = ACCESSORIES[getRandom(ACCESSORIES.length)]; } else if (chance < 270) { reward = WEAPONS[getRandom(WEAPONS.length)]; } else if (chance < 325) { reward = BLESSED_SCROLL_ENCHANT_WEAPON_S; } else if (chance < 425) { reward = BLESSED_SCROLL_ENCHANT_ARMOR_S; } else if (chance < 925) { reward = ATTRIBUTE_CRYSTALS[getRandom(ATTRIBUTE_CRYSTALS.length)]; } else if (chance < 1100) { reward = SCROLL_ENCHANT_WEAPON_S; } else { reward = GEMSTONE_S; count = 3; } giveItems(player, reward, count); L2Item item = ItemTable.getInstance().getTemplate(reward); NpcSay packet = new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.S1_RECEIVED_A_S2_ITEM_AS_A_REWARD_FROM_THE_SEPARATED_SOUL); packet.addStringParameter(player.getName()); packet.addStringParameter(item.getName()); npc.broadcastPacket(packet); } }
  14. here is adapted for h5 ### Eclipse Workspace Patch 1.0 #P L2J_Server Index: /game/config/Character.properties =================================================================== --- /game/config/Character.properties (revision 0) +++/game/config/Character.properties (working copy) +# Visual Enchant for weapons on character selection +# Disable : 0 +VisualEnchant = 16 # Allow character deletion after days set below. To disallow character deletion, set this equal to 0. # Default: 7 DeleteCharAfterDays = 1 ### Eclipse Workspace Patch 1.0 #P L2J_Server Index: src/main/java/com.l2jserver/config.java =================================================================== --- src/main/java/com.l2jserver/config.java (revision 0) +++src/main/java/com.l2jserver/config.java (working cop public static boolean SERVER_GMONLY; /** clients related */ + public static int VISUAL_ENCHANT; public static int DELETE_DAYS; public static int MAXIMUM_ONLINE_USERS; @@ -1210,6 +1211,7 @@ SERVER_LIST_TESTSERVER = server.getProperty("TestServer", false); SERVER_LIST_PVPSERVER = server.getProperty("PvpServer", true); ALT_GAME_FREE_TELEPORT = character.getBoolean("AltFreeTeleporting", false); + VISUAL_ENCHANT = character.getInt("VisualEnchant", 0); DELETE_DAYS = character.getInt("DeleteCharAfterDays", 7); ALT_GAME_EXPONENT_XP = character.getFloat("AltGameExponentXp", 0); ALT_GAME_EXPONENT_SP = character.getFloat("AltGameExponentSp", 0); ### Eclipse Workspace Patch 1.0 #P L2J_Server Index: src/main/java/com.l2jserver/gameserver/network/serverpackets/CharSelectInfo.java =================================================================== --- src/main/java/com.l2jserver/gameserver/network/serverpackets/CharSelectInfo.java (revision 0) +++src/main/java/com.l2jserver/gameserver/network/serverpackets/CharSelectInfo.java (working cop writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); // days left before // delete .. if != 0 // then char is inactive writeD(charInfoPackage.getClassId()); writeD(i == _activeId ? 0x01 : 0x00); // c3 auto-select char + writeC(Config.VISUAL_ENCHANT > 0 ? Config.VISUAL_ENCHANT : Math.min(127, charInfoPackage.getEnchantEffect())); writeD(charInfoPackage.getAugmentationId());
  15. if you look for the .sellbuff I think l2jdevs sells it
  16. Personally I use http://www.l2jdevs.org/forum/index.php?topic=48.0
×
×
  • Create New...