Advertisement
Elfocrash

Twitch viewes reward system

Feb 10th, 2018
770
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.71 KB | None | 0 0
  1. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java b/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
  2. index 9284459..aeb4628 100644
  3. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
  4. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
  5. @@ -82,6 +82,7 @@
  6.  import net.sf.l2j.gameserver.instancemanager.SevenSigns;
  7.  import net.sf.l2j.gameserver.instancemanager.SevenSignsFestival;
  8.  import net.sf.l2j.gameserver.instancemanager.ZoneManager;
  9. +import net.sf.l2j.gameserver.integrations.TwitchRewardManager;
  10.  import net.sf.l2j.gameserver.model.World;
  11.  import net.sf.l2j.gameserver.model.entity.Hero;
  12.  import net.sf.l2j.gameserver.model.olympiad.Olympiad;
  13. @@ -273,8 +274,8 @@ public GameServer() throws Exception
  14.         LotteryManager.getInstance();
  15.        
  16.         AchievementsManager.INSTANCE.initialise();
  17. +       TwitchRewardManager.INSTANCE.initialise();
  18.         FakePlayerManager.INSTANCE.initialise();       
  19.        
  20.         if (Config.ALLOW_WEDDING)
  21.             CoupleManager.getInstance();
  22. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardManager.java b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardManager.java
  23. index 6988a51..6b69162 100644
  24. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardManager.java
  25. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardManager.java
  26. +package net.sf.l2j.gameserver.integrations;
  27. +
  28. +import com.google.gson.JsonElement;
  29. +import com.google.gson.JsonObject;
  30. +import com.google.gson.JsonParser;
  31. +
  32. +import java.io.BufferedReader;
  33. +import java.io.IOException;
  34. +import java.io.InputStreamReader;
  35. +import java.net.HttpURLConnection;
  36. +import java.net.URL;
  37. +
  38. +import net.sf.l2j.commons.concurrent.ThreadPool;
  39. +
  40. +/**
  41. + * @author Elfocrash
  42. + *
  43. + */
  44. +public enum TwitchRewardManager
  45. +{
  46. +   INSTANCE;
  47. +  
  48. +   private final String apiRootUrl = "https://api.twitch.tv/";
  49. +   private final String krakenApiUrl = apiRootUrl + "kraken/";
  50. +   private final String streamsApiUrl = krakenApiUrl + "streams/";
  51. +   private final String apiClientId = ""; 
  52. +   private final int rewardTaskIntervalms = 120000;
  53. +   private final int reminderTaskIntervalms = 60000;
  54. +   private final int viewersForReward = 200;
  55. +   private final int rewardId = 57;
  56. +   private final int rewardCount = 10000;
  57. +   private final String streamerUsername = "riotgames";   
  58. +  
  59. +   public void initialise()
  60. +   {
  61. +       startReminderTask();
  62. +       startRewardTask();
  63. +   }
  64. +  
  65. +   private void startRewardTask()
  66. +   {
  67. +       ThreadPool.scheduleAtFixedRate(new TwitchRewardTask(streamerUsername), rewardTaskIntervalms, rewardTaskIntervalms);
  68. +   }
  69. +  
  70. +   private void startReminderTask()
  71. +   {
  72. +       ThreadPool.scheduleAtFixedRate(new TwitchRewardReminderTask(streamerUsername), reminderTaskIntervalms, reminderTaskIntervalms);
  73. +   }
  74. +
  75. +   public boolean isStreaming(String apiResponse)
  76. +   {
  77. +       if(apiResponse.length() == 0)
  78. +           return false;
  79. +      
  80. +       JsonObject streamObject = getStreamObjectFromApiResponse(apiResponse);
  81. +      
  82. +        return streamObject != null;
  83. +   }
  84. +  
  85. +   public int getViewerCount(String apiResponse)
  86. +   {
  87. +       if(apiResponse.length() == 0)
  88. +           return 0;
  89. +      
  90. +       JsonObject streamObject = getStreamObjectFromApiResponse(apiResponse);
  91. +        
  92. +        if(streamObject == null)
  93. +           return 0;
  94. +        
  95. +        int viewCount = streamObject.get("viewers").getAsInt();
  96. +        return viewCount;
  97. +   }
  98. +  
  99. +   public String getChannelName(String apiResponse)
  100. +   {
  101. +       JsonObject channelObject = getChannelObject(apiResponse);
  102. +       return channelObject.get("display_name").getAsString();
  103. +   }
  104. +  
  105. +   public String getChannelUrl(String apiResponse)
  106. +   {
  107. +       JsonObject channelObject = getChannelObject(apiResponse);
  108. +       return channelObject.get("url").getAsString();
  109. +   }
  110. +  
  111. +   private JsonObject getChannelObject(String apiResponse)
  112. +   {
  113. +       if(apiResponse.length() == 0)
  114. +           return null;
  115. +      
  116. +       JsonObject streamObject = getStreamObjectFromApiResponse(apiResponse);
  117. +        
  118. +        if(streamObject == null)
  119. +           return null;
  120. +        
  121. +        if(!streamObject.get("channel").isJsonObject())
  122. +           return null;
  123. +        
  124. +        JsonObject channelObject = streamObject.get("channel").getAsJsonObject();
  125. +        
  126. +        return channelObject;
  127. +   }
  128. +  
  129. +   public String getStreamForUser(String username)
  130. +   {
  131. +       try
  132. +       {
  133. +           return getApiResponseFromGET(getStreamUrlForUser(username));
  134. +       }
  135. +       catch (IOException e)
  136. +       {
  137. +           e.printStackTrace();
  138. +       }
  139. +       return "";
  140. +   }
  141. +  
  142. +   public int getViewersForReward()
  143. +   {
  144. +       return viewersForReward;
  145. +   }
  146. +  
  147. +   public int getRewardId()
  148. +   {
  149. +       return rewardId;
  150. +   }
  151. +  
  152. +   public int getRewardCount()
  153. +   {
  154. +       return rewardCount;
  155. +   }
  156. +  
  157. +   private String getApiResponseFromGET(String url) throws IOException
  158. +   {
  159. +       URL obj = new URL(url);
  160. +       HttpURLConnection con = (HttpURLConnection) obj.openConnection();
  161. +       con.setRequestMethod("GET");
  162. +       con.setRequestProperty("Client-ID", apiClientId);
  163. +       int responseCode = con.getResponseCode();
  164. +       if (responseCode == HttpURLConnection.HTTP_OK) {
  165. +           BufferedReader in = new BufferedReader(new InputStreamReader(
  166. +                   con.getInputStream()));
  167. +           String inputLine;
  168. +           StringBuffer response = new StringBuffer();
  169. +
  170. +           while ((inputLine = in.readLine()) != null) {
  171. +               response.append(inputLine);
  172. +           }
  173. +           in.close();
  174. +
  175. +           return response.toString();
  176. +       }      
  177. +       return "";
  178. +   }
  179. +  
  180. +   private String getStreamUrlForUser(String username)
  181. +   {
  182. +       return streamsApiUrl + username;
  183. +   }  
  184. +  
  185. +   private JsonObject getStreamObjectFromApiResponse(String apiResponse)
  186. +   {
  187. +       JsonElement jelement = new JsonParser().parse(apiResponse);
  188. +        JsonObject  jobject = jelement.getAsJsonObject();
  189. +        
  190. +        if(jobject.get("stream").isJsonObject()) {
  191. +           JsonObject streamObject = jobject.get("stream").getAsJsonObject();
  192. +           return streamObject;
  193. +        }
  194. +        return null;
  195. +   }  
  196. +}
  197. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardReminderTask.java b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardReminderTask.java
  198. new file mode 100644
  199. index 0000000..572ee7b
  200. --- /dev/null
  201. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardReminderTask.java
  202. @@ -0,0 +1,37 @@
  203. +package net.sf.l2j.gameserver.integrations;
  204. +
  205. +import net.sf.l2j.gameserver.util.Broadcast;
  206. +
  207. +/**
  208. + * @author Elfocrash
  209. + *
  210. + */
  211. +public class TwitchRewardReminderTask implements Runnable
  212. +{
  213. +   private final String _username;
  214. +   private final String reminderTemplate = "Our streamer %s is currently live with %s viewers. Go at %s to see him.";
  215. +   private final String rewardReminderTemplate = "We are rewarding every online player when more than %s viewers are watching.";
  216. +      
  217. +   public TwitchRewardReminderTask(String username)
  218. +   {
  219. +       _username = username;
  220. +   }
  221. +  
  222. +   @Override
  223. +   public void run()
  224. +   {
  225. +       String apiResponse = TwitchRewardManager.INSTANCE.getStreamForUser(_username);     
  226. +       boolean streaming = TwitchRewardManager.INSTANCE.isStreaming(apiResponse);
  227. +      
  228. +       if(!streaming)
  229. +           return;
  230. +      
  231. +       String streamUrl = TwitchRewardManager.INSTANCE.getChannelUrl(apiResponse);
  232. +       String channelName = TwitchRewardManager.INSTANCE.getChannelName(apiResponse);
  233. +       int viewerCount = TwitchRewardManager.INSTANCE.getViewerCount(apiResponse);
  234. +      
  235. +       Broadcast.announceToOnlinePlayers(String.format(reminderTemplate, channelName, viewerCount, streamUrl), false);
  236. +       Broadcast.announceToOnlinePlayers(String.format(rewardReminderTemplate, TwitchRewardManager.INSTANCE.getViewersForReward()), false);
  237. +   }
  238. +  
  239. +}
  240. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardTask.java b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardTask.java
  241. new file mode 100644
  242. index 0000000..a82c229
  243. --- /dev/null
  244. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardTask.java
  245. @@ -0,0 +1,45 @@
  246. +package net.sf.l2j.gameserver.integrations;
  247. +
  248. +import net.sf.l2j.gameserver.data.ItemTable;
  249. +import net.sf.l2j.gameserver.model.World;
  250. +import net.sf.l2j.gameserver.util.Broadcast;
  251. +
  252. +/**
  253. + * @author Elfocrash
  254. + *
  255. + */
  256. +public class TwitchRewardTask implements Runnable
  257. +{
  258. +   private final String _username;
  259. +   private final String successRewardTemplate = "Thanks for watching our streamer. Online players rewarded with %s %s(s).";
  260. +   private final String failureRewardTemplate = "Unfortunately not enought viewers were watching the stream. Current viewers %s. Needed viewers %s.";
  261. +  
  262. +   public TwitchRewardTask(String username)
  263. +   {
  264. +       _username = username;
  265. +   }
  266. +  
  267. +   @Override
  268. +   public void run()
  269. +   {
  270. +       String apiResponse = TwitchRewardManager.INSTANCE.getStreamForUser(_username);     
  271. +       boolean streaming = TwitchRewardManager.INSTANCE.isStreaming(apiResponse);
  272. +      
  273. +       if(!streaming)
  274. +           return;
  275. +      
  276. +       int currentViewers = TwitchRewardManager.INSTANCE.getViewerCount(apiResponse);
  277. +       int neededViewers = TwitchRewardManager.INSTANCE.getViewersForReward();
  278. +      
  279. +       int rewardId = TwitchRewardManager.INSTANCE.getRewardId();
  280. +       int rewardCount = TwitchRewardManager.INSTANCE.getRewardCount();
  281. +      
  282. +       if(currentViewers >= neededViewers) {
  283. +           World.getInstance().getPlayers().stream().forEach(x->x.addItem("reward",  rewardId, rewardCount, x, true));
  284. +           Broadcast.announceToOnlinePlayers(String.format(successRewardTemplate, rewardCount, ItemTable.getInstance().getTemplate(rewardId).getName()), false);
  285. +       } else {
  286. +           Broadcast.announceToOnlinePlayers(String.format(failureRewardTemplate, currentViewers, neededViewers), false);
  287. +       }
  288. +      
  289. +   }  
  290. +}
  291. diff --git a/aCis_gameserver/lib/gson-2.6.2.jar b/aCis_gameserver/lib/gson-2.6.2.jar
  292. new file mode 100644
  293. index 0000000..9d78626
  294. Binary files /dev/null and b/aCis_gameserver/lib/gson-2.6.2.jar differ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement