Page 1 of 1

Olympiad Bug Pet

Posted: Sat Feb 11, 2012 1:55 pm
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;+ } 

Re: Olympiad Bug Pet

Posted: Sat Feb 11, 2012 2:52 pm
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: