MegaCheat Posted January 26, 2023 Posted January 26, 2023 (edited) Hallo Guys I want make killing spree this code ndex: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 4638) +++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -243,6 +243,7 @@ import com.l2jserver.gameserver.network.serverpackets.UserInfo; import com.l2jserver.gameserver.skills.AbnormalEffect; import com.l2jserver.gameserver.skills.Env; +import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage; import com.l2jserver.gameserver.skills.Formulas; import com.l2jserver.gameserver.skills.Stats; import com.l2jserver.gameserver.skills.l2skills.L2SkillSiegeFlag; @@ -5664,14 +5737,63 @@ * Increase the pvp kills count and send the info to the player * */ + private int impro = 0; public void increasePvpKills(L2Character target) { if (target instanceof L2PcInstance && AntiFeedManager.getInstance().check(this, target)) { + impro++; + + switch(impro){ + + case 3: + ExShowScreenMessage case3 = new ExShowScreenMessage("You reached 3 killing spree!", 10000); + sendPacket(case3); + Announcements.getInstance().announceToAll("Player: " + getName() + " :Just got a Triple Kill!"); + break; + + case 5: + ExShowScreenMessage case5 = new ExShowScreenMessage("You reached 5 killing spree!", 10000); + sendPacket(case5); + Announcements.getInstance().announceToAll("Player: " + getName() + " :Just got an Ultra Kill!"); + break; + + case 10: + ExShowScreenMessage case10 = new ExShowScreenMessage("You reached 10 killing spree!", 10000); + sendPacket(case10); + Announcements.getInstance().announceToAll("Player: " + getName() + " :reached 10 kill in a row!"); + break; + + case 15: + ExShowScreenMessage case15 = new ExShowScreenMessage("You reached 15 killing spree!", 10000); + sendPacket(case15); + Announcements.getInstance().announceToAll("Player: " + getName() + " :reached 15 kill in a row!"); + break; + + case 20: + ExShowScreenMessage case20 = new ExShowScreenMessage("You reached 20 killing spree!", 10000); + sendPacket(case20); + Announcements.getInstance().announceToAll("Player: " + getName() + " :reached 20 kill in a row!"); + break; + + case 25: + ExShowScreenMessage case25 = new ExShowScreenMessage("You reached 25 killing spree!", 10000); + sendPacket(case25); + Announcements.getInstance().announceToAll("Player: " + getName() + " :reached 25 kill in a row!"); + break; + default: + ; + } + + @@ -13495,6 +13639,8 @@ setCurrentFeed(0); stopFeed(); dismount(); + + impro = 0; sendPacket(SystemMessage.getSystemMessage(SystemMessageId.OUT_OF_FEED_MOUNT_CANCELED)); } But not when he dies but with time 1 min impro = 0; <<<< 1 min Edited January 26, 2023 by MegaCheat
1 'Baggos' Posted January 28, 2023 Posted January 28, 2023 Refreshing the time for every pvp you get If 1 minute passed without pvp kill, points returns to 0. https://pastebin.com/BC4Y8x19 Btw, you don't need to announce/screenmessage the pvp count in every line. 2
0 Tryskell Posted January 27, 2023 Posted January 27, 2023 1- You store a Future _spreeTask on the Player level (your impro variable should be named _impro, btw). 2 - You cancel it and relaunch it on every kill : if (_spreeTask != null) _spreeTask.cancel(false); _spreeTask = ThreadPool.schedule(() -> _impro = 0, 60000L); Basically, if you kill someone, it will cancel current task and reschedule it with a fresh timer. If you want to avoid to make one task per Player, you can also handled it using a Manager (similar to multiple other timed stuff : pvp, random animation timer, or even movement in default L2J...), where you register all Players on a 1sec task manager and test each of those every second. 1
0 Nightw0lf Posted January 28, 2023 Posted January 28, 2023 9 hours ago, Tryskell said: 1- You store a Future _spreeTask on the Player level (your impro variable should be named _impro, btw). 2 - You cancel it and relaunch it on every kill : if (_spreeTask != null) _spreeTask.cancel(false); _spreeTask = ThreadPool.schedule(() -> _impro = 0, 60000L); Basically, if you kill someone, it will cancel current task and reschedule it with a fresh timer. If you want to avoid to make one task per Player, you can also handled it using a Manager (similar to multiple other timed stuff : pvp, random animation timer, or even movement in default L2J...), where you register all Players on a 1sec task manager and test each of those every second. you talk to him like he is a casual Senior Java developer even tho you are right i dont think he will understand 49 minutes ago, 'Baggos' said: Refreshing the time for every pvp you get If 1 minute passed without pvp kill, points returns to 0. https://pastebin.com/BC4Y8x19 Btw, you don't need to announce/screenmessage the pvp count in every line. nice job buddy
0 MegaCheat Posted January 28, 2023 Author Posted January 28, 2023 (edited) thanks guys very mutch the problem is chronical Hi5 Edited January 28, 2023 by MegaCheat
0 'Baggos' Posted January 28, 2023 Posted January 28, 2023 (edited) 3 hours ago, MegaCheat said: thanks guys very mutch the problem is chronical Hi5 Just changes the imports. Only in KillingSpreeTaskManager you get errors. Remove imports, rename Player to L2PcInstance and press Ctrl + Shift + O Instead of var change it to int Remove: World.announceToOnlinePlayers("Player " + getName() + ": reached " + value + " kills in a row!", true); And put Announcements.getInstance().announceToAll("Player " + getName() + ": reached " + value + " kills in a row!", true); Edited January 28, 2023 by 'Baggos'
0 StinkyMadness Posted January 28, 2023 Posted January 28, 2023 (edited) private int _killCount; private long _killTime; public void increasePvpKills(L2Character target) { if (target instanceof L2PcInstance && AntiFeedManager.getInstance().check(this, target)) { if (_killTime < System.currentTimeMillis()) _killCount = 0; _killCount++; _killTime = System.currentTimeMillis() + 60000L; There is no need for any task @MegaCheat Edited January 29, 2023 by StinkyMadness 1 1 1
0 MegaCheat Posted January 29, 2023 Author Posted January 29, 2023 solved guys thanks very much all !!! baggos First!!
0 Zake Posted January 29, 2023 Posted January 29, 2023 8 minutes ago, MegaCheat said: solved guys thanks very much all !!! baggos First!! Topic locked.
Question
MegaCheat
Hallo Guys I want make killing spree
this code
ndex: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 4638) +++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -243,6 +243,7 @@ import com.l2jserver.gameserver.network.serverpackets.UserInfo; import com.l2jserver.gameserver.skills.AbnormalEffect; import com.l2jserver.gameserver.skills.Env; +import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage; import com.l2jserver.gameserver.skills.Formulas; import com.l2jserver.gameserver.skills.Stats; import com.l2jserver.gameserver.skills.l2skills.L2SkillSiegeFlag; @@ -5664,14 +5737,63 @@ * Increase the pvp kills count and send the info to the player * */ + private int impro = 0; public void increasePvpKills(L2Character target) { if (target instanceof L2PcInstance && AntiFeedManager.getInstance().check(this, target)) { + impro++; + + switch(impro){ + + case 3: + ExShowScreenMessage case3 = new ExShowScreenMessage("You reached 3 killing spree!", 10000); + sendPacket(case3); + Announcements.getInstance().announceToAll("Player: " + getName() + " :Just got a Triple Kill!"); + break; + + case 5: + ExShowScreenMessage case5 = new ExShowScreenMessage("You reached 5 killing spree!", 10000); + sendPacket(case5); + Announcements.getInstance().announceToAll("Player: " + getName() + " :Just got an Ultra Kill!"); + break; + + case 10: + ExShowScreenMessage case10 = new ExShowScreenMessage("You reached 10 killing spree!", 10000); + sendPacket(case10); + Announcements.getInstance().announceToAll("Player: " + getName() + " :reached 10 kill in a row!"); + break; + + case 15: + ExShowScreenMessage case15 = new ExShowScreenMessage("You reached 15 killing spree!", 10000); + sendPacket(case15); + Announcements.getInstance().announceToAll("Player: " + getName() + " :reached 15 kill in a row!"); + break; + + case 20: + ExShowScreenMessage case20 = new ExShowScreenMessage("You reached 20 killing spree!", 10000); + sendPacket(case20); + Announcements.getInstance().announceToAll("Player: " + getName() + " :reached 20 kill in a row!"); + break; + + case 25: + ExShowScreenMessage case25 = new ExShowScreenMessage("You reached 25 killing spree!", 10000); + sendPacket(case25); + Announcements.getInstance().announceToAll("Player: " + getName() + " :reached 25 kill in a row!"); + break; + default: + ; + } + + @@ -13495,6 +13639,8 @@ setCurrentFeed(0); stopFeed(); dismount(); + + impro = 0; sendPacket(SystemMessage.getSystemMessage(SystemMessageId.OUT_OF_FEED_MOUNT_CANCELED)); }
But not when he dies but with time 1 min
impro = 0; <<<< 1 min
8 answers to this question
Recommended Posts