Olympiad Bug Pet

Support for the latest build of L2J Server, get help here with installations, upgrades, problems.
Do not post bugs reports here, use viewforum.php?f=77 instead.
There is no support for other server builds than the official provided by l2jserver.com
Forum rules
READ NOW: L2j Forums Rules of Conduct
Post Reply
mikewasosky
Posts: 11
Joined: Tue Aug 09, 2011 11:30 pm

Olympiad Bug Pet

Post by mikewasosky »

Well there is a bugg in H5 Olympiads (I think in all revisions).
If u use an item to summon a pet when countdown to enter to olympiad stadium is 5 +-, your skill isn't aborted and when u enter to the stadium, after 2-3 seconds, the pet will summon.

http://imageshack.us/photo/my-images/198/34560367.jpg/

I made a fix by myself and for me it's working fine:

Code: Select all

Index: java/com/l2jserver/gameserver/model/olympiad/AbstractOlympiadGame.java===================================================================--- java/com/l2jserver/gameserver/model/olympiad/AbstractOlympiadGame.java (revision 0)+++ java/com/l2jserver/gameserver/model/olympiad/AbstractOlympiadGame.java (revision 0) protected static final void portPlayerBack(L2PcInstance player){if (player == null)return; if (player.getLastX() == 0 && player.getLastY() == 0)return;+ L2PcInstance._OlyRegistered=false;player.setInstanceId(0);player.teleToLocation(player.getLastX(), player.getLastY(), player.getLastZ());player.setLastCords(0, 0, 0);} Index: java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java===================================================================--- java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java (revision 0)+++ java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java (revision 0) List<Integer> classed = _classBasedRegisters.get(player.getBaseClass());if (classed != null)classed.add(player.getObjectId());else{classed = new FastList<Integer>().shared();classed.add(player.getObjectId());_classBasedRegisters.put(player.getBaseClass(), classed);}+ player._OlyRegistered=true;player.sendPacket(SystemMessageId.YOU_HAVE_BEEN_REGISTERED_IN_A_WAITING_LIST_OF_CLASSIFIED_GAMES);break;  }case NON_CLASSED:{if (!checkNoble(player, player))return false; if (Olympiad.getInstance().getRemainingWeeklyMatchesNonClassed(player.getObjectId()) < 1){player.sendPacket(SystemMessageId.MAX_OLY_WEEKLY_MATCHES_REACHED_60_NON_CLASSED_30_CLASSED_10_TEAM);return false;} _nonClassBasedRegisters.add(player.getObjectId());+ player._OlyRegistered=true;player.sendPacket(SystemMessageId.YOU_HAVE_BEEN_REGISTERED_IN_A_WAITING_LIST_OF_NO_CLASS_GAMES);break;}  ================================================================================================================================ if (teamPoints < 10){// TODO: replace with retail messageplayer.sendMessage("Your team must have at least 10 points in total.");// remove previously registered party membersif (Config.L2JMOD_DUALBOX_CHECK_MAX_OLYMPIAD_PARTICIPANTS_PER_IP > 0){for (L2PcInstance unreg : party.getPartyMembers())AntiFeedManager.getInstance().removePlayer(AntiFeedManager.OLYMPIAD_ID, unreg);}return false;}+ for (L2PcInstance partyMember : party.getPartyMembers()){+ partyMember._OlyRegistered=true;+ }party.broadcastToPartyMembers(SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_REGISTERED_IN_A_WAITING_LIST_OF_TEAM_GAMES));_teamsBasedRegisters.add(team);break; ================================================================================================================================== Integer objId = Integer.valueOf(noble.getObjectId());if (_nonClassBasedRegisters.remove(objId)){if (Config.L2JMOD_DUALBOX_CHECK_MAX_OLYMPIAD_PARTICIPANTS_PER_IP > 0)AntiFeedManager.getInstance().removePlayer(AntiFeedManager.OLYMPIAD_ID, noble); + noble._OlyRegistered=false;noble.sendPacket(SystemMessageId.YOU_HAVE_BEEN_DELETED_FROM_THE_WAITING_LIST_OF_A_GAME);return true;}final List<Integer> classed = _classBasedRegisters.get(noble.getBaseClass());if (classed != null && classed.remove(objId)){_classBasedRegisters.remove(noble.getBaseClass());_classBasedRegisters.put(noble.getBaseClass(), classed); if (Config.L2JMOD_DUALBOX_CHECK_MAX_OLYMPIAD_PARTICIPANTS_PER_IP > 0)AntiFeedManager.getInstance().removePlayer(AntiFeedManager.OLYMPIAD_ID, noble);+ noble._OlyRegistered=false;noble.sendPacket(SystemMessageId.YOU_HAVE_BEEN_DELETED_FROM_THE_WAITING_LIST_OF_A_GAME);return true;} ================================================================================================================================== private static final class AnnounceUnregToTeam implements Runnable{private final List<Integer> _team; public AnnounceUnregToTeam(List<Integer> t){_team = t;} public final void run(){L2PcInstance teamMember;final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_BEEN_DELETED_FROM_THE_WAITING_LIST_OF_A_GAME);for (int objectId : _team){teamMember = L2World.getInstance().getPlayer(objectId);if (teamMember != null){+ teamMember._OlyRegistered=false;teamMember.sendPacket(sm);if (Config.L2JMOD_DUALBOX_CHECK_MAX_OLYMPIAD_PARTICIPANTS_PER_IP > 0)AntiFeedManager.getInstance().removePlayer(AntiFeedManager.OLYMPIAD_ID, teamMember);}}teamMember = null;}} Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java===================================================================--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 0)+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 0) public final class L2PcInstance extends L2Playable{ +public boolean _OlyRegistered = false; ======================================================================================================================================  + public boolean _OlyRegistered(L2Character target)+ {+ L2PcInstance targetPlayer = target.getActingPlayer();+ return targetPlayer._OlyRegistered;+ }    /*** Increase pk count, karma and send the info to the player* @param target*/public void increasePkKillsAndKarma(L2Character target){   Index: dist/game/data/scripts/handlers/itemhandlers/SummonItems.java===================================================================--- dist/game/data/scripts/handlers/itemhandlers/SummonItems.java (revision 0)+++ dist/game/data/scripts/handlers/itemhandlers/SummonItems.java (revision 0) if (activeChar.isInOlympiadMode()){activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));return;} +if (activeChar._OlyRegistered==true)+ {+ activeChar.sendMessage("You can't summon any pet until you are registered to olympiads.");+ return;+ } 
User avatar
Zoey76
L2j Inner Circle
L2j Inner Circle
Posts: 7008
Joined: Tue Aug 11, 2009 3:36 am

Re: Olympiad Bug Pet

Post by Zoey76 »

I'm pretty sure we already have a boolean to keep track of registering to Olympiad Games.

The only part that could be useful is the datapck part for item handler, but I don't think it's retail like, and if it's the system message is custom, we have to avoid hardcoding messages everywhere is possible.

Also the problem should be fixed in other way probably, in teleport task along with items check should be removed all pets, but left servitors and cubics.

Anyway thanks for the contribution, I think the approach is Okay, just need some tunning.

By the way, the patch is broken, try using a pastebin system or attach a zip file with the patch, thanks :wink:
Powered by Eclipse 4.34 🌌 | Eclipse Temurin 21 ☕ | MariaDB 11.3.2 🗃️ | L2J Server 2.6.3.0 - High Five 🚀

🔗 Join our Discord! 🎮💬
Post Reply