public L2SkillTeleport(StatsSet set) { super(set); _recallType = set.getString("recallType", ""); String coords = set.getString("teleCoords", null); if (coords != null) { String[] valuesSplit = coords.split(","); _loc = new Location( Integer.parseInt(valuesSplit[0]), Integer.parseInt(valuesSplit[1]), Integer.parseInt(valuesSplit[2])); } else _loc = null; }
@Override protected final void writeImpl() { int winningCabal = SevenSigns.getInstance().getCabalHighestScore(); int totalDawnMembers = SevenSigns.getInstance().getTotalMembers(SevenSigns.CABAL_DAWN); int totalDuskMembers = SevenSigns.getInstance().getTotalMembers(SevenSigns.CABAL_DUSK); writeC(0xf5); writeC(_page); writeC(SevenSigns.getInstance().getCurrentPeriod()); // current period? int dawnPercent = 0; int duskPercent = 0; switch (_page) { case 1: // [ddd cc dd ddd c ddd c] writeD(SevenSigns.getInstance().getCurrentCycle()); int currentPeriod = SevenSigns.getInstance().getCurrentPeriod(); switch (currentPeriod) { case SevenSigns.PERIOD_COMP_RECRUITING: writeD(SystemMessageId.INITIAL_PERIOD.getId()); break; case SevenSigns.PERIOD_COMPETITION: writeD(SystemMessageId.QUEST_EVENT_PERIOD.getId()); break; case SevenSigns.PERIOD_COMP_RESULTS: writeD(SystemMessageId.RESULTS_PERIOD.getId()); break; case SevenSigns.PERIOD_SEAL_VALIDATION: writeD(SystemMessageId.VALIDATION_PERIOD.getId()); break; } switch (currentPeriod) { case SevenSigns.PERIOD_COMP_RECRUITING: case SevenSigns.PERIOD_COMP_RESULTS: writeD(SystemMessageId.UNTIL_TODAY_6PM.getId()); break; case SevenSigns.PERIOD_COMPETITION: case SevenSigns.PERIOD_SEAL_VALIDATION: writeD(SystemMessageId.UNTIL_MONDAY_6PM.getId()); break; } writeC(SevenSigns.getInstance().getPlayerCabal(_objectId)); writeC(SevenSigns.getInstance().getPlayerSeal(_objectId)); writeD(SevenSigns.getInstance().getPlayerStoneContrib(_objectId)); // Seal Stones Turned-In writeD( SevenSigns.getInstance().getPlayerAdenaCollect(_objectId)); // Ancient Adena to Collect double dawnStoneScore = SevenSigns.getInstance().getCurrentStoneScore(SevenSigns.CABAL_DAWN); int dawnFestivalScore = SevenSigns.getInstance().getCurrentFestivalScore(SevenSigns.CABAL_DAWN); double duskStoneScore = SevenSigns.getInstance().getCurrentStoneScore(SevenSigns.CABAL_DUSK); int duskFestivalScore = SevenSigns.getInstance().getCurrentFestivalScore(SevenSigns.CABAL_DUSK); double totalStoneScore = duskStoneScore + dawnStoneScore; /* * Scoring seems to be proportionate to a set base value, so base this on the maximum obtainable score from festivals, which is * 500. */ int duskStoneScoreProp = 0; int dawnStoneScoreProp = 0; if (totalStoneScore != 0) { duskStoneScoreProp = Math.round(((float) duskStoneScore / (float) totalStoneScore) * 500); dawnStoneScoreProp = Math.round(((float) dawnStoneScore / (float) totalStoneScore) * 500); } int duskTotalScore = SevenSigns.getInstance().getCurrentScore(SevenSigns.CABAL_DUSK); int dawnTotalScore = SevenSigns.getInstance().getCurrentScore(SevenSigns.CABAL_DAWN); int totalOverallScore = duskTotalScore + dawnTotalScore; if (totalOverallScore != 0) { dawnPercent = Math.round(((float) dawnTotalScore / (float) totalOverallScore) * 100); duskPercent = Math.round(((float) duskTotalScore / (float) totalOverallScore) * 100); } if (_log.isDebugEnabled()) { _log.info( "Dusk Stone Score: " + duskStoneScore + " - Dawn Stone Score: " + dawnStoneScore); _log.info( "Dusk Festival Score: " + duskFestivalScore + " - Dawn Festival Score: " + dawnFestivalScore); _log.info("Dusk Score: " + duskTotalScore + " - Dawn Score: " + dawnTotalScore); _log.info("Overall Score: " + totalOverallScore); _log.info(""); if (totalStoneScore == 0) _log.info("Dusk Prop: 0 - Dawn Prop: 0"); else _log.info( "Dusk Prop: " + ((duskStoneScore / totalStoneScore) * 500) + " - Dawn Prop: " + ((dawnStoneScore / totalStoneScore) * 500)); _log.info("Dusk %: " + duskPercent + " - Dawn %: " + dawnPercent); } /* DUSK */ writeD(duskStoneScoreProp); // Seal Stone Score writeD(duskFestivalScore); // Festival Score writeD(duskTotalScore); // Total Score writeC(duskPercent); // Dusk % /* DAWN */ writeD(dawnStoneScoreProp); // Seal Stone Score writeD(dawnFestivalScore); // Festival Score writeD(dawnTotalScore); // Total Score writeC(dawnPercent); // Dawn % break; case 2: // c cc hc [cd (dc (S))] writeH(1); writeC(5); // Total number of festivals for (int i = 0; i < 5; i++) { writeC(i + 1); // Current client-side festival ID writeD(SevenSignsFestival.FESTIVAL_LEVEL_SCORES[i]); int duskScore = SevenSignsFestival.getInstance().getHighestScore(SevenSigns.CABAL_DUSK, i); int dawnScore = SevenSignsFestival.getInstance().getHighestScore(SevenSigns.CABAL_DAWN, i); // Dusk Score \\ writeD(duskScore); StatsSet highScoreData = SevenSignsFestival.getInstance().getHighestScoreData(SevenSigns.CABAL_DUSK, i); String[] partyMembers = highScoreData.getString("members").split(","); if (partyMembers != null) { writeC(partyMembers.length); for (String partyMember : partyMembers) writeS(partyMember); } else { writeC(0); } // Dawn Score \\ writeD(dawnScore); highScoreData = SevenSignsFestival.getInstance().getHighestScoreData(SevenSigns.CABAL_DAWN, i); partyMembers = highScoreData.getString("members").split(","); if (partyMembers != null) { writeC(partyMembers.length); for (String partyMember : partyMembers) writeS(partyMember); } else { writeC(0); } } break; case 3: // c cc [ccc (cccc)] writeC(10); // Minimum limit for winning cabal to retain their seal writeC(35); // Minimum limit for winning cabal to claim a seal writeC(3); // Total number of seals for (int i = 1; i < 4; i++) { int dawnProportion = SevenSigns.getInstance().getSealProportion(i, SevenSigns.CABAL_DAWN); int duskProportion = SevenSigns.getInstance().getSealProportion(i, SevenSigns.CABAL_DUSK); _log.debug( SevenSigns.getSealName(i, true) + " = Dawn Prop: " + dawnProportion + "(" + ((dawnProportion / totalDawnMembers) * 100) + "%)" + ", Dusk Prop: " + duskProportion + "(" + ((duskProportion / totalDuskMembers) * 100) + "%)"); writeC(i); writeC(SevenSigns.getInstance().getSealOwner(i)); if (totalDuskMembers == 0) { if (totalDawnMembers == 0) { writeC(0); writeC(0); } else { writeC(0); writeC(Math.round(((float) dawnProportion / (float) totalDawnMembers) * 100)); } } else { if (totalDawnMembers == 0) { writeC(Math.round(((float) duskProportion / (float) totalDuskMembers) * 100)); writeC(0); } else { writeC(Math.round(((float) duskProportion / (float) totalDuskMembers) * 100)); writeC(Math.round(((float) dawnProportion / (float) totalDawnMembers) * 100)); } } } break; case 4: // c cc [cc (cchh)] writeC(winningCabal); // Overall predicted winner writeC(3); // Total number of seals for (int i = 1; i < 4; i++) { int dawnProportion = SevenSigns.getInstance().getSealProportion(i, SevenSigns.CABAL_DAWN); int duskProportion = SevenSigns.getInstance().getSealProportion(i, SevenSigns.CABAL_DUSK); dawnPercent = Math.round( (dawnProportion / (totalDawnMembers == 0 ? 1 : (float) totalDawnMembers)) * 100); duskPercent = Math.round( (duskProportion / (totalDuskMembers == 0 ? 1 : (float) totalDuskMembers)) * 100); int sealOwner = SevenSigns.getInstance().getSealOwner(i); writeC(i); switch (sealOwner) { case SevenSigns.CABAL_NULL: switch (winningCabal) { case SevenSigns.CABAL_NULL: writeC(SevenSigns.CABAL_NULL); writeH(SystemMessageId.COMPETITION_TIE_SEAL_NOT_AWARDED.getId()); break; case SevenSigns.CABAL_DAWN: if (dawnPercent >= 35) { writeC(SevenSigns.CABAL_DAWN); writeH(SystemMessageId.SEAL_NOT_OWNED_35_MORE_VOTED.getId()); } else { writeC(SevenSigns.CABAL_NULL); writeH(SystemMessageId.SEAL_NOT_OWNED_35_LESS_VOTED.getId()); } break; case SevenSigns.CABAL_DUSK: if (duskPercent >= 35) { writeC(SevenSigns.CABAL_DUSK); writeH(SystemMessageId.SEAL_NOT_OWNED_35_MORE_VOTED.getId()); } else { writeC(SevenSigns.CABAL_NULL); writeH(SystemMessageId.SEAL_NOT_OWNED_35_LESS_VOTED.getId()); } break; } break; case SevenSigns.CABAL_DAWN: switch (winningCabal) { case SevenSigns.CABAL_NULL: if (dawnPercent >= 10) { writeC(SevenSigns.CABAL_DAWN); writeH(SystemMessageId.SEAL_OWNED_10_MORE_VOTED.getId()); } else { writeC(SevenSigns.CABAL_NULL); writeH(SystemMessageId.COMPETITION_TIE_SEAL_NOT_AWARDED.getId()); } break; case SevenSigns.CABAL_DAWN: if (dawnPercent >= 10) { writeC(sealOwner); writeH(SystemMessageId.SEAL_OWNED_10_MORE_VOTED.getId()); } else { writeC(SevenSigns.CABAL_NULL); writeH(SystemMessageId.SEAL_OWNED_10_LESS_VOTED.getId()); } break; case SevenSigns.CABAL_DUSK: if (duskPercent >= 35) { writeC(SevenSigns.CABAL_DUSK); writeH(SystemMessageId.SEAL_NOT_OWNED_35_MORE_VOTED.getId()); } else if (dawnPercent >= 10) { writeC(SevenSigns.CABAL_DAWN); writeH(SystemMessageId.SEAL_OWNED_10_MORE_VOTED.getId()); } else { writeC(SevenSigns.CABAL_NULL); writeH(SystemMessageId.SEAL_OWNED_10_LESS_VOTED.getId()); } break; } break; case SevenSigns.CABAL_DUSK: switch (winningCabal) { case SevenSigns.CABAL_NULL: if (duskPercent >= 10) { writeC(SevenSigns.CABAL_DUSK); writeH(SystemMessageId.SEAL_OWNED_10_MORE_VOTED.getId()); } else { writeC(SevenSigns.CABAL_NULL); writeH(SystemMessageId.COMPETITION_TIE_SEAL_NOT_AWARDED.getId()); } break; case SevenSigns.CABAL_DAWN: if (dawnPercent >= 35) { writeC(SevenSigns.CABAL_DAWN); writeH(SystemMessageId.SEAL_NOT_OWNED_35_MORE_VOTED.getId()); } else if (duskPercent >= 10) { writeC(sealOwner); writeH(SystemMessageId.SEAL_OWNED_10_MORE_VOTED.getId()); } else { writeC(SevenSigns.CABAL_NULL); writeH(SystemMessageId.SEAL_OWNED_10_LESS_VOTED.getId()); } break; case SevenSigns.CABAL_DUSK: if (duskPercent >= 10) { writeC(sealOwner); writeH(SystemMessageId.SEAL_OWNED_10_MORE_VOTED.getId()); } else { writeC(SevenSigns.CABAL_NULL); writeH(SystemMessageId.SEAL_OWNED_10_LESS_VOTED.getId()); } break; } break; } } break; } }