Vote reward system.
Author: Anarchy Source: http://www.maxcheaters.com/topic/197374-hopzonetopzonenetwork-vote-reward-re-share/
This commit is contained in:
@@ -141,6 +141,7 @@ import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.entity.Hero;
|
||||
import com.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import com.l2jmobius.gameserver.model.olympiad.Olympiad;
|
||||
import com.l2jmobius.gameserver.model.votereward.VoteSystem;
|
||||
import com.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||
import com.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
||||
import com.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||
@@ -376,6 +377,7 @@ public class GameServer
|
||||
}
|
||||
|
||||
MonsterRace.getInstance();
|
||||
VoteSystem.initialize();
|
||||
TaskManager.getInstance();
|
||||
|
||||
AntiFeedManager.getInstance().registerEvent(AntiFeedManager.GAME_ID);
|
||||
|
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program 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 com.l2jmobius.gameserver.model.votereward;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Map;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
|
||||
/**
|
||||
* @author Anarchy
|
||||
*/
|
||||
public class Hopzone extends VoteSystem
|
||||
{
|
||||
public Hopzone(int votesDiff, boolean allowReport, int boxes, Map<Integer, Integer> rewards, int checkMins)
|
||||
{
|
||||
super(votesDiff, allowReport, boxes, rewards, checkMins);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
reward();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getVotes()
|
||||
{
|
||||
InputStreamReader isr = null;
|
||||
BufferedReader br = null;
|
||||
|
||||
try
|
||||
{
|
||||
URLConnection con = new URL(Config.HOPZONE_SERVER_LINK).openConnection();
|
||||
con.addRequestProperty("User-Agent", "Mozilla/5.0");
|
||||
isr = new InputStreamReader(con.getInputStream());
|
||||
br = new BufferedReader(isr);
|
||||
|
||||
String line;
|
||||
while ((line = br.readLine()) != null)
|
||||
{
|
||||
if (line.contains("<li><span class=\"rank anonymous tooltip\" title"))
|
||||
{
|
||||
int votes = Integer.valueOf(line.split(">")[2].replace("</span", ""));
|
||||
return votes;
|
||||
}
|
||||
}
|
||||
|
||||
br.close();
|
||||
isr.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
System.out.println("Error while getting server vote count from " + getSiteName() + ".");
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSiteName()
|
||||
{
|
||||
return "Hopzone";
|
||||
}
|
||||
}
|
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program 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 com.l2jmobius.gameserver.model.votereward;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Map;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
|
||||
/**
|
||||
* @author Anarchy
|
||||
*/
|
||||
public class Network extends VoteSystem
|
||||
{
|
||||
public Network(int votesDiff, boolean allowReport, int boxes, Map<Integer, Integer> rewards, int checkMins)
|
||||
{
|
||||
super(votesDiff, allowReport, boxes, rewards, checkMins);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
reward();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getVotes()
|
||||
{
|
||||
InputStreamReader isr = null;
|
||||
BufferedReader br = null;
|
||||
|
||||
try
|
||||
{
|
||||
URLConnection con = new URL(Config.NETWORK_SERVER_LINK).openConnection();
|
||||
con.addRequestProperty("User-Agent", "Mozilla/5.0");
|
||||
isr = new InputStreamReader(con.getInputStream());
|
||||
br = new BufferedReader(isr);
|
||||
|
||||
String line;
|
||||
while ((line = br.readLine()) != null)
|
||||
{
|
||||
if (line.contains("<div class=\"tls-in-sts\"><b style"))
|
||||
{
|
||||
int votes = Integer.valueOf(line.split(">")[2].replace("</b", ""));
|
||||
return votes;
|
||||
}
|
||||
}
|
||||
|
||||
br.close();
|
||||
isr.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
System.out.println("Error while getting server vote count from " + getSiteName() + ".");
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSiteName()
|
||||
{
|
||||
return "Network";
|
||||
}
|
||||
}
|
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program 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 com.l2jmobius.gameserver.model.votereward;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Map;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
|
||||
/**
|
||||
* @author Anarchy
|
||||
*/
|
||||
public class Topzone extends VoteSystem
|
||||
{
|
||||
public Topzone(int votesDiff, boolean allowReport, int boxes, Map<Integer, Integer> rewards, int checkMins)
|
||||
{
|
||||
super(votesDiff, allowReport, boxes, rewards, checkMins);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
reward();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getVotes()
|
||||
{
|
||||
InputStreamReader isr = null;
|
||||
BufferedReader br = null;
|
||||
|
||||
try
|
||||
{
|
||||
URLConnection con = new URL(Config.TOPZONE_SERVER_LINK).openConnection();
|
||||
con.addRequestProperty("User-Agent", "L2TopZone");
|
||||
isr = new InputStreamReader(con.getInputStream());
|
||||
br = new BufferedReader(isr);
|
||||
|
||||
String line;
|
||||
while ((line = br.readLine()) != null)
|
||||
{
|
||||
int votes = Integer.valueOf(line);
|
||||
return votes;
|
||||
}
|
||||
|
||||
br.close();
|
||||
isr.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
System.out.println("Error while getting server vote count from " + getSiteName() + ".");
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSiteName()
|
||||
{
|
||||
return "Topzone";
|
||||
}
|
||||
}
|
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program 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 com.l2jmobius.gameserver.model.votereward;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import com.l2jmobius.gameserver.util.Broadcast;
|
||||
|
||||
/**
|
||||
* @author Anarchy
|
||||
*/
|
||||
public abstract class VoteSystem implements Runnable
|
||||
{
|
||||
private static List<VoteSystem> voteSystems = new ArrayList<>();
|
||||
|
||||
protected int votesDiff;
|
||||
protected boolean allowReport;
|
||||
protected int boxes;
|
||||
protected Map<Integer, Integer> rewards;
|
||||
protected int checkMins;
|
||||
protected int lastVotes = 0;
|
||||
private final Map<String, Integer> playerIps = new HashMap<>();
|
||||
|
||||
public static void initialize()
|
||||
{
|
||||
System.out.println("Vote reward system initialized.");
|
||||
if (Config.ALLOW_NETWORK_VOTE_REWARD)
|
||||
{
|
||||
voteSystems.add(new Network(Config.NETWORK_VOTES_DIFFERENCE, Config.ALLOW_NETWORK_GAME_SERVER_REPORT, Config.NETWORK_DUALBOXES_ALLOWED, Config.NETWORK_REWARD, Config.NETWORK_REWARD_CHECK_TIME));
|
||||
}
|
||||
if (Config.ALLOW_TOPZONE_VOTE_REWARD)
|
||||
{
|
||||
voteSystems.add(new Topzone(Config.TOPZONE_VOTES_DIFFERENCE, Config.ALLOW_TOPZONE_GAME_SERVER_REPORT, Config.TOPZONE_DUALBOXES_ALLOWED, Config.TOPZONE_REWARD, Config.TOPZONE_REWARD_CHECK_TIME));
|
||||
}
|
||||
if (Config.ALLOW_HOPZONE_VOTE_REWARD)
|
||||
{
|
||||
voteSystems.add(new Hopzone(Config.HOPZONE_VOTES_DIFFERENCE, Config.ALLOW_HOPZONE_GAME_SERVER_REPORT, Config.HOPZONE_DUALBOXES_ALLOWED, Config.HOPZONE_REWARD, Config.HOPZONE_REWARD_CHECK_TIME));
|
||||
}
|
||||
}
|
||||
|
||||
public static VoteSystem getVoteSystem(String name)
|
||||
{
|
||||
for (VoteSystem vs : voteSystems)
|
||||
{
|
||||
if (vs.getSiteName().equals(name))
|
||||
{
|
||||
return vs;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public VoteSystem(int votesDiff, boolean allowReport, int boxes, Map<Integer, Integer> rewards, int checkMins)
|
||||
{
|
||||
this.votesDiff = votesDiff;
|
||||
this.allowReport = allowReport;
|
||||
this.boxes = boxes;
|
||||
this.rewards = rewards;
|
||||
this.checkMins = checkMins;
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(this, checkMins * 1000 * 60, checkMins * 1000 * 60);
|
||||
}
|
||||
|
||||
protected void reward()
|
||||
{
|
||||
int currentVotes = getVotes();
|
||||
|
||||
if (currentVotes == -1)
|
||||
{
|
||||
System.out.println("There was a problem on getting server votes.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (lastVotes == 0)
|
||||
{
|
||||
lastVotes = currentVotes;
|
||||
announce(getSiteName() + ": Current vote count is " + currentVotes + ".");
|
||||
announce(getSiteName() + ": We need " + ((lastVotes + votesDiff) - currentVotes) + " vote(s) for reward.");
|
||||
if (allowReport)
|
||||
{
|
||||
System.out.println("Server votes on " + getSiteName() + ": " + currentVotes);
|
||||
System.out.println("Votes needed for reward: " + ((lastVotes + votesDiff) - currentVotes));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentVotes >= (lastVotes + votesDiff))
|
||||
{
|
||||
Collection<L2PcInstance> pls = L2World.getInstance().getPlayers();
|
||||
if (allowReport)
|
||||
{
|
||||
System.out.println("Server votes on " + getSiteName() + ": " + currentVotes);
|
||||
System.out.println("Votes needed for next reward: " + ((currentVotes + votesDiff) - currentVotes));
|
||||
}
|
||||
announce(getSiteName() + ": Everyone has been rewarded.");
|
||||
announce(getSiteName() + ": Current vote count is " + currentVotes + ".");
|
||||
announce(getSiteName() + ": We need " + votesDiff + " vote(s) for next reward.");
|
||||
for (L2PcInstance p : pls)
|
||||
{
|
||||
if ((p.getClient() == null) || p.getClient().isDetached())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean canReward = false;
|
||||
String pIp = p.getClient().getConnectionAddress().getHostAddress();
|
||||
if (playerIps.containsKey(pIp))
|
||||
{
|
||||
int count = playerIps.get(pIp);
|
||||
if (count < boxes)
|
||||
{
|
||||
playerIps.remove(pIp);
|
||||
playerIps.put(pIp, count + 1);
|
||||
canReward = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
canReward = true;
|
||||
playerIps.put(pIp, 1);
|
||||
}
|
||||
if (canReward)
|
||||
{
|
||||
for (int i : rewards.keySet())
|
||||
{
|
||||
p.addItem("Vote reward.", i, rewards.get(i), p, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
p.sendMessage("Already " + boxes + " character(s) of your ip have been rewarded, so this character won't be rewarded.");
|
||||
}
|
||||
}
|
||||
playerIps.clear();
|
||||
|
||||
lastVotes = currentVotes;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (allowReport)
|
||||
{
|
||||
System.out.println("Server votes on " + getSiteName() + ": " + currentVotes);
|
||||
System.out.println("Votes needed for next reward: " + ((lastVotes + votesDiff) - currentVotes));
|
||||
}
|
||||
announce(getSiteName() + ": Current vote count is " + currentVotes + ".");
|
||||
announce(getSiteName() + ": We need " + ((lastVotes + votesDiff) - currentVotes) + " vote(s) for reward.");
|
||||
}
|
||||
}
|
||||
|
||||
private static void announce(String msg)
|
||||
{
|
||||
CreatureSay cs = new CreatureSay(0, ChatType.CRITICAL_ANNOUNCE, "", msg);
|
||||
Broadcast.toAllOnlinePlayers(cs);
|
||||
}
|
||||
|
||||
public abstract int getVotes();
|
||||
|
||||
public abstract String getSiteName();
|
||||
}
|
Reference in New Issue
Block a user