Jump to content

StealthyS4m

Members
  • Posts

    127
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

Everything posted by StealthyS4m

  1. Yeah,that's why I shared it. Also I've took so many things from MxC,wanted to give something. :) I hope it will be some use. ^_^
  2. Try to take a look here: http://www.maxcheaters.com/topic/190422-voting-rewardhopzonetopzone/
  3. Hello, I created this vote manager when I needed it for my server.Basically,you have to type /vote go get this html window: Then by clicking on any of the buttons will give you 60seconds to vote for the server. /* * 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 net.sf.l2j.gameserver.handler.usercommandhandlers; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.EnumMap; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; import net.sf.l2j.Config; import net.sf.l2j.L2DatabaseFactory; import net.sf.l2j.gameserver.ThreadPoolManager; import net.sf.l2j.gameserver.handler.IUserCommandHandler; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; /** * @author Eimantas */ public class VotingReward implements IUserCommandHandler { // Queries private static final String DELETE_QUERY = "DELETE FROM mods_voting_reward WHERE time < ?"; private static final String SELECT_QUERY = "SELECT * FROM mods_voting_reward"; private static final String INSERT_QUERY = "INSERT INTO mods_voting_reward (data, scope, time, top) VALUES (?, ?, ?, ?)"; private static final Logger _log = Logger.getLogger(VotingReward.class.getName()); private static final long VOTING_INTERVAL = TimeUnit.HOURS.toMillis(12); private static final Map<UserScope, ScopeContainer> VOTTERS_CACHE = new EnumMap<>(UserScope.class); public static long TimeToVote = TimeUnit.SECONDS.toMillis(60); static boolean isVotingHopzone = false; static boolean isVotingTopzone = false; public static String TopzoneURL = Config.TOPZONE_SERVER_LINK; public static String HopZoneURL = Config.HOPZONE_SERVER_LINK; static final int[] COMMANDS = { 115 }; public VotingReward() { load(); } @Override public boolean useUserCommand(int id, L2PcInstance activeChar) { if (id == COMMANDS[0]) { showVoteHtml(activeChar); } return false; } @Override public int[] getUserCommandList() { return COMMANDS; } public static void showVoteHtml(L2PcInstance player) { NpcHtmlMessage html = new NpcHtmlMessage(0); html.setFile("data/html/managers/vote.htm"); player.sendPacket(html); } public static void voteHopzone(L2PcInstance player) { final L2PcInstance player2 = player; showVoteHtml(player2); long time = getLastVotedTime(player, "hopzone"); if (player2.isVoting()) { player2.sendMessage("You are already voting!"); return; } if (time > 0) { sendReEnterMessage(time, player); return; } if (isVotingHopzone) { player2.sendMessage("Someone is already voting.Please wait!"); return; } final int currVotes = getHopzoneCurrentVotes(); isVotingHopzone = true; player2.sendMessage("You have " + TimeToVote / 1000 + " seconds to vote for us on HopZone!"); player2.setVoting(true); ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { if (getHopzoneCurrentVotes() > currVotes) { player2.sendMessage("Thank You for voting!"); markAsVotted(player2, "hopzone"); giveReward(player2); } else { player2.sendMessage("You did not vote for server!"); } isVotingHopzone = false; player2.setVoting(false); } }, TimeToVote); } public static void voteTopzone(L2PcInstance player) { final L2PcInstance player2 = player; showVoteHtml(player2); long time = getLastVotedTime(player, "topzone"); if (player2.isVoting()) { player2.sendMessage("You are already voting!"); return; } if (time > 0) { sendReEnterMessage(time, player); return; } if (isVotingTopzone) { player2.sendMessage("Someone is already voting.Please wait!"); return; } final int currVotes = getTopzoneCurrentVotes(); isVotingTopzone = true; player2.sendMessage("You have " + TimeToVote / 1000 + " seconds to vote for us on Topzone!"); player2.setVoting(true); ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { if (getTopzoneCurrentVotes() > currVotes) { player2.sendMessage("Thank You for voting!"); markAsVotted(player2, "topzone"); giveReward(player2); } else { player2.sendMessage("You did not vote for server!"); } isVotingTopzone = false; player2.setVoting(false); } }, TimeToVote); } public static int getHopzoneCurrentVotes() { InputStreamReader isr = null; BufferedReader br = null; try { if (!HopZoneURL.endsWith(".html")) HopZoneURL += ".html"; URLConnection con = new URL(HopZoneURL).openConnection(); con.addRequestProperty("User-L2Hopzone", "Mozilla/4.76"); isr = new InputStreamReader(con.getInputStream()); br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { if (line.contains("no steal make love") || line.contains("no votes here") || line.contains("bang, you don't have votes") || line.contains("la vita e bella")) { int votes = Integer.valueOf(line.split(">")[2].replace("</span", "")); return votes; } } br.close(); isr.close(); } catch (Exception e) { System.out.println(e); System.out.println("Error while getting server vote count on HopZone."); _log.log(Level.WARNING, "Error while getting server vote count on HopZone!"); } return -1; } public static int getTopzoneCurrentVotes() { InputStreamReader isr = null; BufferedReader br = null; try { URLConnection con = new URL(TopzoneURL).openConnection(); con.addRequestProperty("User-Agent", "L2TopZone"); isr = new InputStreamReader(con.getInputStream()); br = new BufferedReader(isr); boolean got = false; String line; while ((line = br.readLine()) != null) { if (line.contains("<div class=\"rank\"><div class=\"votes2\">Votes:<br>") && !got) { got = true; int votes = Integer.valueOf(line.split("<div class=\"rank\"><div class=\"votes2\">Votes:<br>")[1].replace("</div></div>", "")); return votes; } } br.close(); isr.close(); } catch (Exception e) { System.out.println(e); System.out.println("Error while getting server vote count on Topzone."); _log.log(Level.WARNING, "Error while getting server vote count on Topzone!"); } return -1; } private static final long getLastVotedTime(L2PcInstance activeChar, String top) { for (Entry<UserScope, ScopeContainer> entry : VOTTERS_CACHE.entrySet()) { final String data = entry.getKey().getData(activeChar); final long reuse = entry.getValue().getReuse(data, top); if (reuse > 0) { return reuse; } } return 0; } private static void sendReEnterMessage(long time, L2PcInstance player) { if (time > System.currentTimeMillis()) { final long remainingTime = (time - System.currentTimeMillis()) / 1000; final int hours = (int) (remainingTime / 3600); final int minutes = (int) ((remainingTime % 3600) / 60); final int seconds = (int) ((remainingTime % 3600) % 60); String msg = "You have received your reward already try again in: " + hours + " hours"; if (minutes > 0) { msg += " " + minutes + " minutes"; } if (seconds > 0) { msg += " " + seconds + " seconds"; } player.sendMessage(msg); } } private static final void load() { // Initialize the cache for (UserScope scope : UserScope.values()) { VOTTERS_CACHE.put(scope, new ScopeContainer()); } // Cleanup old entries and load the data for votters try (Connection con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement ps = con.prepareStatement(DELETE_QUERY); Statement st = con.createStatement()) { ps.setLong(1, System.currentTimeMillis()); ps.execute(); // Load the data try (ResultSet rset = st.executeQuery(SELECT_QUERY)) { while (rset.next()) { final String data = rset.getString("data"); final UserScope scope = UserScope.findByName(rset.getString("scope")); final Long time = rset.getLong("time"); final String top = rset.getString("top"); if (scope != null) { VOTTERS_CACHE.get(scope).registerVotter(data, time, top); } } } } catch (SQLException e) { _log.log(Level.WARNING, VotingReward.class.getSimpleName() + ": " + e.getMessage(), e); } } private enum UserScope { ACCOUNT { @Override public String getData(L2PcInstance player) { return player.getAccountName(); } }, IP { @Override public String getData(L2PcInstance player) { return player.getClient().getConnection().getInetAddress().getHostAddress(); } }, //@formatter:off /*HWID { @Override public String getData(L2PcInstance player) { return player.getHWID(); } }*/ //@formatter:on ; public abstract String getData(L2PcInstance player); public static UserScope findByName(String name) { for (UserScope scope : values()) { if (scope.name().equals(name)) { return scope; } } return null; } } private static class ScopeContainer { private final Map<String, Long> _HopzoneVotters = new ConcurrentHashMap<>(); private final Map<String, Long> _TopzoneVotters = new ConcurrentHashMap<>(); public ScopeContainer() { } public void registerVotter(String data, long reuse, String top) { if (top.equalsIgnoreCase("hopzone")) { _HopzoneVotters.put(data, reuse); } if (top.equalsIgnoreCase("topzone")) { _TopzoneVotters.put(data, reuse); } } public long getReuse(String data, String top) { if (top.equalsIgnoreCase("hopzone")) { if (_HopzoneVotters.containsKey(data)) { long time = _HopzoneVotters.get(data); if (time > System.currentTimeMillis()) { return time; } } } if (top.equalsIgnoreCase("topzone")) { if (_TopzoneVotters.containsKey(data)) { long time = _TopzoneVotters.get(data); if (time > System.currentTimeMillis()) { return time; } } } return 0; } } static void markAsVotted(L2PcInstance player, String top) { final long reuse = System.currentTimeMillis() + VOTING_INTERVAL; try (Connection con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement ps = con.prepareStatement(INSERT_QUERY)) { for (UserScope scope : UserScope.values()) { final String data = scope.getData(player); final ScopeContainer container = VOTTERS_CACHE.get(scope); container.registerVotter(data, reuse, top); ps.setString(1, data); ps.setString(2, scope.name()); ps.setLong(3, reuse); ps.setString(4, top); ps.addBatch(); } ps.executeBatch(); } catch (SQLException e) { _log.log(Level.WARNING, VotingReward.class.getSimpleName() + ": " + e.getMessage(), e); } } static void giveReward(L2PcInstance player) { player.addItem("Reward", 6673, 1, player, true); } } Add those to net.sf.l2j.Config: public static String TOPZONE_SERVER_LINK; public static String HOPZONE_SERVER_LINK; HOPZONE_SERVER_LINK = votemanager.getProperty("HopzoneServerLink", "http://l2.hopzone.net/lineage2/details/98632/L2-cyrex/"); TOPZONE_SERVER_LINK = votemanager.getProperty("TopzoneServerLink", "http://l2topzone.com/lineage2/server-info/11321/L2Cyrex.html/"); and to net.sf.l2j.gameserver.handler.UserCommandHandler this: registerUserCommandHandler(new VotingReward()); SQL: DROP TABLE IF EXISTS `mods_voting_reward`; CREATE TABLE `mods_voting_reward` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `data` varchar(255) NOT NULL, `scope` varchar(255) NOT NULL, `time` bigint(20) unsigned NOT NULL, `top` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8; Changing reward(Last lines of VotingReward): static void giveReward(L2PcInstance player) { player.addItem("Reward", ITEM ID , ITEM COUNT , player, true); } Config(votemanager.properties): HopzoneServerLink = http://l2.hopzone.net/lineage2/details/98632/L2-cyrex/ TopzoneServerLink = http://l2topzone.com/lineage2/server-info/11321/L2Cyrex.html/ This is probably poorly coded,just wanted to share,some pieces are taken from An4rchy vote manager. Also Client side(commandname-e.dat): 116 115 vote EDIT:Vote.html <html> <body> <center> <p>Vote Manager:</p> <br><br><br><br><br><br><br><br><br><br><br><br> <button value="Vote for us on HopZone" action="bypass -h vote-hopzone" width=180 height=20 back="YourTexture" fore="YourTexture"/> <img src=L2UI_CH3.herotower_deco width=256 height=32> <button value="Vote for us on Topzone" action="bypass -h vote-topzone" width=180 height=20 back="YourTexture" fore="YourTexture"/> </center> </body> </html> Ofc,you have to change YourTexture to.... L2PcInstance.java boolean isVoting = false; public boolean isVoting() { return isVoting; } public void setVoting(boolean voting) { isVoting = voting; } Good luck!
  4. Did you click CTRL+SHIFT+O? Just click on "import ConcurrentHashMap"
  5. + Map<Integer, Long> commandUsages = new ConcurrentHashMap<>(); public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) { if (command.equalsIgnoreCase("res")) { if (!activeChar.isAlikeDead()) { activeChar.sendMessage("You cannot be ressurected while alive."); return false; } if(activeChar.getClan() != null && CastleManager.getInstance().getCastleByOwner(activeChar.getClan()) != null && CastleManager.getInstance().getCastleByOwner(activeChar.getClan()).getSiege().getIsInProgress()) { activeChar.sendMessage("You cannot use this feature during Siege."); return false; } if(activeChar.isInOlympiadMode()) { activeChar.sendMessage("You cannot use this feature during olympiad."); return false; } if(activeChar.getInventory().getItemByItemId(Config.RES_ITEM) == null) { activeChar.sendMessage("You Cant Use This Command without Some Items."); return false; } + if(commandUsages.getOrDefault(activeChar.getObjectId(), 0L) > currentTime) + { + activeChar.sendMessage("You cannot use it so often!"); + return false; + } + commandUsages.put(activeChar.getObjectId(), currentTime + TimeUnit.MINUTES.toMillis(5L)); activeChar.sendMessage("You have been ressurected!"); activeChar.getInventory().destroyItemByItemId("RessSystem", Config.RES_ITEM, Config.RES_COUNT, activeChar, activeChar.getTarget()); activeChar.doRevive(); activeChar.getInventory().updateDatabase(); activeChar.broadcastUserInfo(); activeChar.sendMessage("Item has dissapeared! Thank you!"); } return true; } And click CTRL,SHIFT and O at the same time.
  6. public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) { + Map<Integer, Long> commandUsages = new ConcurrentHashMap<>(); if (command.equalsIgnoreCase("res")) { if (!activeChar.isAlikeDead()) { activeChar.sendMessage("You cannot be ressurected while alive."); return false; } if(activeChar.getClan() != null && CastleManager.getInstance().getCastleByOwner(activeChar.getClan()) != null && CastleManager.getInstance().getCastleByOwner(activeChar.getClan()).getSiege().getIsInProgress()) { activeChar.sendMessage("You cannot use this feature during Siege."); return false; } if(activeChar.isInOlympiadMode()) { activeChar.sendMessage("You cannot use this feature during olympiad."); return false; } if(activeChar.getInventory().getItemByItemId(Config.RES_ITEM) == null) { activeChar.sendMessage("You Cant Use This Command without Some Items."); return false; } + if(commandUsages.getOrDefault(activeChar.getObjectId(), 0L) > currentTime) + { + activeChar.sendMessage("You cannot use it so often!"); + return false; + } + commandUsages.put(activeChar.getObjectId(), currentTime + TimeUnit.MINUTES.toMillis(5L)); activeChar.sendMessage("You have been ressurected!"); activeChar.getInventory().destroyItemByItemId("RessSystem", Config.RES_ITEM, Config.RES_COUNT, activeChar, activeChar.getTarget()); activeChar.doRevive(); activeChar.getInventory().updateDatabase(); activeChar.broadcastUserInfo(); activeChar.sendMessage("Item has dissapeared! Thank you!"); } return true; }
  7. No clue. What pack and what revision are you using? Does it happen only on lvl 20 or on lvl 40 too?
  8. Yeah,about that,I just noticed that it throws error on all files. I clicked on Ignore Whitespace so a lot became with Blue arrows.
  9. I did Team>Create Patch for my project,saved patch as patch.txt Download acis 330 using SVN then tried to apply patch,but it threw error:Patch file does not contain valid patch. Yeah Tryskell,I've done enough critical mistakes to know to do backup folder before doing anything ^_^ EDIT: It works with clipboard copy,but it throws some kind of error about unmatched portions then it starts applying something,but in the end,I believe,nothing changes. I just noticed that there is "Clean Up" in Team section,the clean up I was talking about is Source -> Clean Up.
  10. If you mean the files that it selects,then all are selected ^_^ Btw,Does Team->Apply Patch applies other code to your code automatically and I have been doing everything manually? EDIT:I think I got,I believe when I updated it did some Clean Up and tried to remove all warnings in files and now all files are edited at least a line. P.S. Even Date Modified has changed.
  11. Well,good thing I have you - problem solvers. I had to update my eclipse(JavaFX related) and all little signs became black in my project.For some reason,I believe,this is a damn bad shit.
  12. Oh damn,I read changeset and missed it somehow,thanks. Is there any easy way to adapt my changes to new rev?I have like 100files edited. In purpose of learning: If it's not hard could you tell me how did You fix it?
  13. Yeah,but in video instead of E he uses é in his username when he is logging in.Only because of this this bug is available and I have no idea how to forbid this thing.
  14. Hello guys, I am not sure,but I guess that some players in my server are using this method to dupe items: http://www.maxcheaters.com/topic/189012-new-bug-duplicate-freya-hi5/ I've given it a thought and came with few solutions. 1) Change method when you enter the world,the last thing program does is load your inventory. 2) Change the way deleting item method works,load items from databse every time you delete something.Just thought of one downside for this method,wouldn't the said duping method work if instead of deleting item just trade it to someone or using other transfer method.Plus,I believe, it's really hitting on performance. Any help guys? EDIT: aCis rev 320
  15. It isn't so hard to experiment. Just change it and //reload skills ,if it doesn't work just change it back.
  16. Well,I don't want to ban,but I tried one thing. public void sendSkillList() { final L2ItemInstance formal = getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST); final boolean isWearingFormalWear = formal != null && formal.getItem().getBodyPart() == L2Item.SLOT_ALLDRESS; boolean isDisabled = false; SkillList sl = new SkillList(); + /////////////////// + HashMap <Integer,Integer> AvSkills = new HashMap<>(); + addToListSL(AvSkills, SkillTreeTable.getInstance().getAllowedSkills(getClassId())); + addToListS(AvSkills,SkillTable.getHeroSkills()); + addToListS(AvSkills,SkillTable.getNobleSkills()); + addToListRSL(AvSkills,SkillTreeTable.getInstance().getAvailableRebirthSkills(this, getClassId())); + AvSkills.put(L2Skill.SKILL_CREATE_COMMON,10); + AvSkills.put(L2Skill.SKILL_CREATE_DWARVEN,10); + AvSkills.put(L2Skill.SKILL_CRYSTALLIZE,10); + AvSkills.put(L2Skill.SKILL_DIVINE_INSPIRATION,10); + AvSkills.put(L2Skill.SKILL_LUCKY,10); + AvSkills.put(L2Skill.SKILL_NPC_RACE,10); + //////////////////// for (L2Skill s : getAllSkills()) { if (s == null) continue; if (s.getId() > 9000 && s.getId() < 9007) continue; // Fake skills to change base stats if (getClan() != null) isDisabled = s.isClanSkill() && getClan().getReputationScore() < 0; if (isCursedWeaponEquipped()) // Only Demonic skills are available isDisabled = !s.isDemonicSkill(); else if (isMounted()) // else if, because only ONE state is possible { if (getMountType() == 1) // Only Strider skills are available isDisabled = !s.isStriderSkill(); else if (getMountType() == 2) // Only Wyvern skills are available isDisabled = !s.isFlyingSkill(); } if (isWearingFormalWear) isDisabled = true; + if(AvSkills.containsKey(s.getId())) sl.addSkill(s.getId(),s.getLevel()<AvSkills.get(s.getId())?s.getLevel():AvSkills.get(s.getId()) , s.isPassive(), isDisabled);//Changed a bit } sendPacket(sl); } + public static void addToListSL(HashMap<Integer,Integer> a,Collection<L2SkillLearn> b){ + Iterator <L2SkillLearn> itr = b.iterator(); + while(itr.hasNext()){ + L2SkillLearn tempSkill = itr.next(); + a.put(tempSkill.getId(), tempSkill.getLevel()); + } + } + public static void addToListRSL(HashMap<Integer,Integer> a, Collection <L2RebirthSkillLearn> b){ + Iterator <L2RebirthSkillLearn> itr = b.iterator(); + while(itr.hasNext()){ + L2RebirthSkillLearn tempSkill = itr.next(); + a.put(tempSkill.getId(), tempSkill.getLevel()); + } + } + public static void addToListS(HashMap<Integer,Integer> a,L2Skill [] b){ + for(int c = 0;c<b.length;c++){ + a.put(b[c].getId(), b[c].getLevel()); + } + } This change should check player's skills on login and if there any that shouldn't be there just don't add it,plus it checks levels.What do you guys think?
  17. Do you mean not to allow players restart near villagemaster/class master? Couldn't they just avoid it by closing their client throught Task manager?
  18. Ayami-, I believe so,I am not really sure. Klay, Couldn't I add some check every time someone gets a skill?But I am not sure how to perform such check.
  19. Hello guys, There is a bug in my server,which allows players to have multiple classes skills. For example,Saggitarius with Paladin skills.I know it's related to PHX. I tried this fix,but it just removed every skill: public L2Skill addSkill(L2Skill newSkill, boolean store) { // Add a skill to the L2PcInstance _skills and its Func objects to the calculator set of the L2PcInstance L2Skill oldSkill = super.addSkill(newSkill); // Add or update a L2PcInstance skill in the character_skills table of the database if (store) storeSkill(newSkill, oldSkill, -1); + if(!SkillTreeTable.getInstance().getAllAvailableSkills(this, getClassId()).contains(newSkill)) + removeSkill(newSkill,false); return oldSkill; } I am using acis 320
  20. tb.replace("%objectID%",getObjectId()); before html.setHtml(tb.toString()); or something like that.
  21. Hello, I believe there should be a guide about adapting or patching code(I don't even know how it's called) But I am gonnna try to help You a bit. For example,this is a HopZone code from your linked thread: http://pastebin.com/ybQ6qkqR There is a line like this: public class VoteRewardHopzone It tells the name of your file (VoteRewardHopzone.java) This one: package net.sf.l2j.gameserver.model.entity; Tells the location of your file (net.sf.l2j.gameserver.model.entity) I recommend You to use some IDE(Eclipse or NetBeans) so if you are using some IDE just create a class called : VoteRewardHopzone at net.sf.l2j.gameserver.model.entity Then just copy paste code from there: http://pastebin.com/ybQ6qkqR Of course as this code is old and java has change quite a lot You will need a lot of adaption,plus this code was written for Interlude and You are using other chronicle So either way You have to learn some Java. In your linked thread anarchy just gives the files' names and doesn't tell at what lines that code should be added,so You will have to know it yourself. Usually there is something like this: Index: java/net/sf/l2j/custom/VoteRewardTopzone.java =================================================================== --- java/net/sf/l2j/custom/VoteRewardTopzone.java (revision 0) +++ java/net/sf/l2j/custom/VoteRewardTopzone.java (revision 0) @@ -0,0 +1,314 @@ It tells you that you should add the code in VoteRewardTopzone code starting line - 0. Anyways,I hope you understood at least something...
×
×
  • Create New...