Skip to content

Instantly share code, notes, and snippets.

@St3eT
Last active February 25, 2016 15:14
Show Gist options
  • Save St3eT/5a1c955533368f6b83b8 to your computer and use it in GitHub Desktop.
Save St3eT/5a1c955533368f6b83b8 to your computer and use it in GitHub Desktop.
Hero Confirm edited - original by Janiko
### Eclipse Workspace Patch 1.0
#P L2J_Milenium_DataPack
Index: dist/game/data/html/olympiad/hero_already.htm
===================================================================
--- dist/game/data/html/olympiad/hero_already.htm (revision 0)
+++ dist/game/data/html/olympiad/hero_already.htm (working copy)
@@ -0,0 +1,11 @@
+<html><head><body scroll="no">
+<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
+ <tr><td height=34></td></tr>
+ <tr><td align=center>You are already a hero.</td></tr>
+ <tr><td height=10></td></tr>
+ <tr><td align=center></td></tr>
+ <tr><td height=34></td></tr>
+ <tr><td align=center><button action="bypass -h npc_%objectId%_Chat 0" value="Back" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Back_Down" fore="L2UI_CT1.OlympiadWnd_DF_Back"></td></tr>
+ <tr><td height=200></td></tr>
+</table>
+</body></html>
\ No newline at end of file
Index: dist/game/data/scripts/handlers/bypasshandlers/OlympiadManagerLink.java
===================================================================
--- dist/game/data/scripts/handlers/bypasshandlers/OlympiadManagerLink.java (revision 250)
+++ dist/game/data/scripts/handlers/bypasshandlers/OlympiadManagerLink.java (working copy)
@@ -32,6 +32,7 @@
import com.l2jserver.gameserver.model.actor.L2Summon;
import com.l2jserver.gameserver.model.actor.instance.L2OlympiadManagerInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.entity.Hero;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.model.olympiad.CompetitionType;
import com.l2jserver.gameserver.model.olympiad.Olympiad;
@@ -108,15 +109,11 @@
case 0: // H5 match selection
if (!OlympiadManager.getInstance().isRegistered(activeChar))
{
- final int olympiad_round = 0; // TODO : implement me
- final int olympiad_week = 0; // TODO: implement me
- final int olympiad_participant = 0; // TODO: implement me
-
html.setFile(activeChar.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "noble_desc2a.htm");
html.replace("%objectId%", String.valueOf(target.getObjectId()));
- html.replace("%olympiad_round%", String.valueOf(olympiad_round));
- html.replace("%olympiad_week%", String.valueOf(olympiad_week));
- html.replace("%olympiad_participant%", String.valueOf(olympiad_participant));
+ html.replace("%olympiad_period%", String.valueOf(Olympiad.getInstance().getPeriod()));
+ html.replace("%olympiad_cycle%", String.valueOf(Olympiad.getInstance().getCurrentCycle()));
+ html.replace("%olympiad_opponent%", String.valueOf(OlympiadManager.getInstance().getCountOpponents()));
activeChar.sendPacket(html);
}
else
@@ -323,6 +320,22 @@
case 4: // hero list
activeChar.sendPacket(new ExHeroList());
break;
+ case 5: // HeroCertification
+ if (Hero.getInstance().isInactiveHero(activeChar.getObjectId()))
+ {
+ Hero.getInstance().activateHero(activeChar);
+ reply.setFile(activeChar.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "hero_receive.htm");
+ }
+ else if (activeChar.isHero())
+ {
+ reply.setFile(activeChar.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "hero_already.htm");
+ }
+ else
+ {
+ reply.setFile(activeChar.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "hero_notreceive.htm");
+ }
+ activeChar.sendPacket(reply);
+ break;
default:
_log.warning("Olympiad System: Couldnt send packet for request " + val);
break;
Index: dist/game/data/html/olympiad/hero_main.htm
===================================================================
--- dist/game/data/html/olympiad/hero_main.htm (revision 250)
+++ dist/game/data/html/olympiad/hero_main.htm (working copy)
@@ -11,6 +11,7 @@
<tr><td height=10></td></tr>
<tr><td align=center>It offers several services with regard to heroes.</td></tr>
<tr><td height=34></td></tr>
+ <tr><td align=center><button action="bypass npc_%objectId%_Olympiad 5" value="Hero Certification" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_HeroConfirm_Down" fore="L2UI_CT1.OlympiadWnd_DF_HeroConfirm"></td></tr>
<tr><td align=center><button action="bypass -h npc_%objectId%_Link olympiad/hero_main2.htm" value="Receive Reward" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Reward_Down" fore="L2UI_CT1.OlympiadWnd_DF_Reward"></td></tr>
<tr><td align=center><button action="bypass npc_%objectId%_Olympiad 4" value="Hero List" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_HeroConfirm_Down" fore="L2UI_CT1.OlympiadWnd_DF_HeroConfirm"></td></tr>
</table>
Index: dist/game/data/html/olympiad/noble_desc2a.htm
===================================================================
--- dist/game/data/html/olympiad/noble_desc2a.htm (revision 250)
+++ dist/game/data/html/olympiad/noble_desc2a.htm (working copy)
@@ -9,7 +9,7 @@
<table border=0 cellpadding=0 cellspacing=0>
<tr><td align=center>Select the match you desire.</td></tr>
<tr><td height=10></td></tr>
- <tr><td align=center><font color="bea27b">(%olympiad_round% period %olympiad_week% rounds currently %olympiad_participant% people participating)</font></td></tr>
+ <tr><td align=center><font color="bea27b">(%olympiad_period% period %olympiad_cycle% rounds currently %olympiad_opponent% people participating)</font></td></tr>
<tr><td height=19></td></tr>
<tr><td align=center><button action="bypass -h npc_%objectId%_OlympiadDesc 2c" msg="1482" value="1 vs 1 Class Match" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Apply_Down" fore="L2UI_CT1.OlympiadWnd_DF_Apply"></td></tr>
<tr><td align=center><button action="bypass -h npc_%objectId%_OlympiadDesc 2d" msg="1481" value="1 vs 1 Match" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Fight1None_Down" fore="L2UI_CT1.OlympiadWnd_DF_Fight1None"></td></tr>
Index: dist/game/data/html/olympiad/hero_notreceive.htm
===================================================================
--- dist/game/data/html/olympiad/hero_notreceive.htm (revision 0)
+++ dist/game/data/html/olympiad/hero_notreceive.htm (working copy)
@@ -0,0 +1,11 @@
+<html><head><body scroll="no">
+<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
+ <tr><td height=34></td></tr>
+ <tr><td align=center>You are not qualified to become a hero.</td></tr>
+ <tr><td height=10></td></tr>
+ <tr><td align=center></td></tr>
+ <tr><td height=34></td></tr>
+ <tr><td align=center><button action="bypass -h npc_%objectId%_Chat 0" value="Back" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Back_Down" fore="L2UI_CT1.OlympiadWnd_DF_Back"></td></tr>
+ <tr><td height=200></td></tr>
+</table>
+</body></html>
\ No newline at end of file
Index: dist/game/data/html/olympiad/hero_receive.htm
===================================================================
--- dist/game/data/html/olympiad/hero_receive.htm (revision 0)
+++ dist/game/data/html/olympiad/hero_receive.htm (working copy)
@@ -0,0 +1,11 @@
+<html><head><body scroll="no">
+<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
+ <tr><td height=34></td></tr>
+ <tr><td align=center>Congratulations! You are a Hero now.</td></tr>
+ <tr><td height=10></td></tr>
+ <tr><td align=center></td></tr>
+ <tr><td height=34></td></tr>
+ <tr><td align=center><button action="bypass -h npc_%objectId%_Chat 0" value="Back" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Back_Down" fore="L2UI_CT1.OlympiadWnd_DF_Back"></td></tr>
+ <tr><td height=200></td></tr>
+</table>
+</body></html>
\ No newline at end of file
Index: dist/sql/game/heroes.sql
===================================================================
--- dist/sql/game/heroes.sql (revision 250)
+++ dist/sql/game/heroes.sql (working copy)
@@ -3,6 +3,7 @@
`class_id` decimal(3,0) NOT NULL DEFAULT 0,
`count` decimal(3,0) NOT NULL DEFAULT 0,
`played` decimal(1,0) NOT NULL DEFAULT 0,
+ `active` decimal(1,0) NOT NULL default 0,
`message` varchar(300) NOT NULL DEFAULT '',
PRIMARY KEY (`charId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
\ No newline at end of file
#P L2J_Milenium_Core
Index: java/com/l2jserver/gameserver/network/serverpackets/ExHeroList.java
===================================================================
--- java/com/l2jserver/gameserver/network/serverpackets/ExHeroList.java (revision 250)
+++ java/com/l2jserver/gameserver/network/serverpackets/ExHeroList.java (working copy)
@@ -39,20 +39,32 @@
@Override
protected void writeImpl()
{
+ int count = 0;
+ for (int heroId : _heroList.keySet())
+ {
+ if (Hero.getInstance().isHero(heroId))
+ {
+ count++;
+ }
+ }
+
writeC(0xFE);
writeH(0x79);
- writeD(_heroList.size());
+ writeD(count);
for (Integer heroId : _heroList.keySet())
{
- StatsSet hero = _heroList.get(heroId);
- writeS(hero.getString(Olympiad.CHAR_NAME));
- writeD(hero.getInt(Olympiad.CLASS_ID));
- writeS(hero.getString(Hero.CLAN_NAME, ""));
- writeD(hero.getInt(Hero.CLAN_CREST, 0));
- writeS(hero.getString(Hero.ALLY_NAME, ""));
- writeD(hero.getInt(Hero.ALLY_CREST, 0));
- writeD(hero.getInt(Hero.COUNT));
+ if (Hero.getInstance().isHero(heroId))
+ {
+ StatsSet hero = _heroList.get(heroId);
+ writeS(hero.getString(Olympiad.CHAR_NAME));
+ writeD(hero.getInt(Olympiad.CLASS_ID));
+ writeS(hero.getString(Hero.CLAN_NAME, ""));
+ writeD(hero.getInt(Hero.CLAN_CREST, 0));
+ writeS(hero.getString(Hero.ALLY_NAME, ""));
+ writeD(hero.getInt(Hero.ALLY_CREST, 0));
+ writeD(hero.getInt(Hero.COUNT));
+ }
}
}
}
\ No newline at end of file
Index: java/com/l2jserver/gameserver/model/olympiad/Olympiad.java
===================================================================
--- java/com/l2jserver/gameserver/model/olympiad/Olympiad.java (revision 250)
+++ java/com/l2jserver/gameserver/model/olympiad/Olympiad.java (working copy)
@@ -693,6 +693,11 @@
return _currentCycle;
}
+ public int getPeriod()
+ {
+ return _period;
+ }
+
public boolean playerInStadia(L2PcInstance player)
{
return (ZoneManager.getInstance().getOlympiadStadium(player) != null);
Index: java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java
===================================================================
--- java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java (revision 250)
+++ java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java (working copy)
@@ -585,6 +585,11 @@
}
}
+ public int getCountOpponents()
+ {
+ return _nonClassBasedRegisters.size() + _classBasedRegisters.size() + _teamsBasedRegisters.size();
+ }
+
private static class SingletonHolder
{
protected static final OlympiadManager _instance = new OlympiadManager();
Index: java/com/l2jserver/gameserver/model/entity/Hero.java
===================================================================
--- java/com/l2jserver/gameserver/model/entity/Hero.java (revision 250)
+++ java/com/l2jserver/gameserver/model/entity/Hero.java (working copy)
@@ -56,6 +56,7 @@
import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
+import com.l2jserver.gameserver.network.serverpackets.SocialAction;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.network.serverpackets.UserInfo;
import com.l2jserver.util.StringUtil;
@@ -67,13 +68,12 @@
{
private static final Logger _log = Logger.getLogger(Hero.class.getName());
- private static final String GET_HEROES = "SELECT heroes.charId, characters.char_name, heroes.class_id, heroes.count, heroes.played FROM heroes, characters WHERE characters.charId = heroes.charId AND heroes.played = 1";
- private static final String GET_ALL_HEROES = "SELECT heroes.charId, characters.char_name, heroes.class_id, heroes.count, heroes.played FROM heroes, characters WHERE characters.charId = heroes.charId";
+ private static final String GET_HEROES = "SELECT heroes.charId, characters.char_name, heroes.class_id, heroes.count, heroes.played, heroes.active FROM heroes, characters WHERE characters.charId = heroes.charId AND heroes.played = 1";
+ private static final String GET_ALL_HEROES = "SELECT heroes.charId, characters.char_name, heroes.class_id, heroes.count, heroes.played, heroes.active FROM heroes, characters WHERE characters.charId = heroes.charId";
private static final String UPDATE_ALL = "UPDATE heroes SET played = 0";
- private static final String INSERT_HERO = "INSERT INTO heroes (charId, class_id, count, played) VALUES (?,?,?,?)";
- private static final String UPDATE_HERO = "UPDATE heroes SET count = ?, played = ? WHERE charId = ?";
+ private static final String INSERT_HERO = "INSERT INTO heroes (charId, class_id, count, played, active) VALUES (?,?,?,?,?)";
+ private static final String UPDATE_HERO = "UPDATE heroes SET count = ?, played = ?, active = ? WHERE charId = ?";
private static final String GET_CLAN_ALLY = "SELECT characters.clanid AS clanid, coalesce(clan_data.ally_Id, 0) AS allyId FROM characters LEFT JOIN clan_data ON clan_data.clan_id = characters.clanid WHERE characters.charId = ?";
- private static final String GET_CLAN_NAME = "SELECT clan_name FROM clan_data WHERE clan_id = (SELECT clanid FROM characters WHERE charId = ?)";
// delete hero items
private static final String DELETE_ITEMS = "DELETE FROM items WHERE item_id IN (6842, 6611, 6612, 6613, 6614, 6615, 6616, 6617, 6618, 6619, 6620, 6621, 9388, 9389, 9390) AND owner_id NOT IN (SELECT charId FROM characters WHERE accesslevel > 0)";
@@ -88,6 +88,7 @@
public static final String COUNT = "count";
public static final String PLAYED = "played";
+ public static final String ACTIVE = "active";
public static final String CLAN_NAME = "clan_name";
public static final String CLAN_CREST = "clan_crest";
public static final String ALLY_NAME = "ally_name";
@@ -131,6 +132,7 @@
hero.set(Olympiad.CLASS_ID, rset.getInt(Olympiad.CLASS_ID));
hero.set(COUNT, rset.getInt(COUNT));
hero.set(PLAYED, rset.getInt(PLAYED));
+ hero.set(ACTIVE, rset.getInt(ACTIVE));
loadFights(charId);
loadDiary(charId);
@@ -149,6 +151,7 @@
hero.set(Olympiad.CLASS_ID, rset2.getInt(Olympiad.CLASS_ID));
hero.set(COUNT, rset2.getInt(COUNT));
hero.set(PLAYED, rset2.getInt(PLAYED));
+ hero.set(ACTIVE, rset2.getInt(ACTIVE));
processHeros(ps, charId, hero);
@@ -687,7 +690,7 @@
int count = oldHero.getInt(COUNT);
oldHero.set(COUNT, count + 1);
oldHero.set(PLAYED, 1);
-
+ oldHero.set(ACTIVE, 0);
heroes.put(charId, oldHero);
}
else
@@ -697,7 +700,7 @@
newHero.set(Olympiad.CLASS_ID, hero.getInt(Olympiad.CLASS_ID));
newHero.set(COUNT, 1);
newHero.set(PLAYED, 1);
-
+ newHero.set(ACTIVE, 0);
heroes.put(charId, newHero);
}
}
@@ -710,71 +713,6 @@
heroes.clear();
updateHeroes(false);
-
- L2PcInstance player;
- for (Integer charId : _heroes.keySet())
- {
- player = L2World.getInstance().getPlayer(charId);
- if (player != null)
- {
- player.setHero(true);
- L2Clan clan = player.getClan();
- if (clan != null)
- {
- clan.addReputationScore(Config.HERO_POINTS, true);
- SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_MEMBER_C1_BECAME_HERO_AND_GAINED_S2_REPUTATION_POINTS);
- sm.addString(CharNameTable.getInstance().getNameById(charId));
- sm.addInt(Config.HERO_POINTS);
- clan.broadcastToOnlineMembers(sm);
- }
- player.sendPacket(new UserInfo(player));
- player.sendPacket(new ExBrExtraUserInfo(player));
- player.broadcastUserInfo();
-
- // Set Gained hero and reload data
- setHeroGained(player.getObjectId());
- loadFights(player.getObjectId());
- loadDiary(player.getObjectId());
- _heroMessage.put(player.getObjectId(), "");
- }
- else
- {
- // Set Gained hero and reload data
- setHeroGained(charId);
- loadFights(charId);
- loadDiary(charId);
- _heroMessage.put(charId, "");
-
- try (Connection con = L2DatabaseFactory.getInstance().getConnection();
- PreparedStatement statement = con.prepareStatement(GET_CLAN_NAME))
- {
- statement.setInt(1, charId);
- try (ResultSet rset = statement.executeQuery())
- {
- if (rset.next())
- {
- String clanName = rset.getString("clan_name");
- if (clanName != null)
- {
- L2Clan clan = ClanTable.getInstance().getClanByName(clanName);
- if (clan != null)
- {
- clan.addReputationScore(Config.HERO_POINTS, true);
- SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_MEMBER_C1_BECAME_HERO_AND_GAINED_S2_REPUTATION_POINTS);
- sm.addString(CharNameTable.getInstance().getNameById(charId));
- sm.addInt(Config.HERO_POINTS);
- clan.broadcastToOnlineMembers(sm);
- }
- }
- }
- }
- }
- catch (Exception e)
- {
- _log.warning("could not get clan name of player with objectId:" + charId + ": " + e);
- }
- }
- }
}
public void updateHeroes(boolean setDefault)
@@ -804,6 +742,7 @@
insert.setInt(2, hero.getInt(Olympiad.CLASS_ID));
insert.setInt(3, hero.getInt(COUNT));
insert.setInt(4, hero.getInt(PLAYED));
+ insert.setInt(5, hero.getInt(ACTIVE));
insert.execute();
insert.close();
}
@@ -853,7 +792,8 @@
{
statement.setInt(1, hero.getInt(COUNT));
statement.setInt(2, hero.getInt(PLAYED));
- statement.setInt(3, heroId);
+ statement.setInt(3, hero.getInt(ACTIVE));
+ statement.setInt(4, heroId);
statement.execute();
}
}
@@ -1000,9 +940,59 @@
*/
public boolean isHero(int objectId)
{
- return _heroes.containsKey(objectId);
+ return _heroes.containsKey(objectId) && (_heroes.get(objectId).getInt(ACTIVE) == 1);
}
+ /**
+ * @param objectId the player's object Id to verify.
+ * @return
+ */
+ public boolean isInactiveHero(int objectId)
+ {
+ if (_heroes.isEmpty())
+ {
+ return false;
+ }
+ if (_heroes.containsKey(objectId) && (_heroes.get(objectId).getInt(ACTIVE) == 0))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param player becomes hero
+ */
+ public void activateHero(L2PcInstance player)
+ {
+ final StatsSet hero = _heroes.get(player.getObjectId());
+ hero.set(ACTIVE, 1);
+ _heroes.put(player.getObjectId(), hero);
+
+ L2Clan clan = player.getClan();
+ if ((clan != null) && (clan.getLevel() >= 5))
+ {
+ clan.addReputationScore(Config.HERO_POINTS, true);
+ SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_MEMBER_C1_BECAME_HERO_AND_GAINED_S2_REPUTATION_POINTS);
+ sm.addString(CharNameTable.getInstance().getNameById(player.getObjectId()));
+ sm.addInt(Config.HERO_POINTS);
+ clan.broadcastToOnlineMembers(sm);
+ }
+
+ player.setHero(true);
+ player.broadcastPacket(new SocialAction(player.getObjectId(), 20016)); // Hero Animation
+ player.sendPacket(new UserInfo(player));
+ player.sendPacket(new ExBrExtraUserInfo(player));
+ player.broadcastUserInfo();
+ // Set Gained hero and reload data
+ setHeroGained(player.getObjectId());
+ loadFights(player.getObjectId());
+ loadDiary(player.getObjectId());
+ _heroMessage.put(player.getObjectId(), "");
+
+ updateHeroes(false);
+ }
+
private static class SingletonHolder
{
protected static final Hero _instance = new Hero();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment