Advertisement
tiagopgeremias

Aio_System_L2jAcis360

Jun 28th, 2016
722
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 33.04 KB | None | 0 0
  1. diff --git a/aCis_datapack/data/html/admin/aio.htm b/aCis_datapack/data/html/admin/aio.htm
  2. new file mode 100644
  3. index 0000000..c961393
  4. --- /dev/null
  5. +++ b/aCis_datapack/data/html/admin/aio.htm
  6. @@ -0,0 +1,27 @@
  7. +<html>
  8. +   <title>
  9. +       AIO System
  10. +   </title>
  11. +
  12. +   <body>
  13. +   <center>
  14. +       AIO(s) <font color=00FF00>Online</font>
  15. +       <br>
  16. +       <img src=\"L2UI.SquareGray\" width=270 height=1>
  17. +       <table bgcolor="000000">
  18. +           <tr>
  19. +               <td width=10></td>
  20. +               <td width=20>No</td>
  21. +               <td width=80>Name</td>
  22. +               <td width=110>Loc</td>
  23. +               <td width=50>Status</td>
  24. +           </tr>
  25. +       </table>
  26. +       <img src=\"L2UI.SquareGray\" width=270 height=1>
  27. +       <br>
  28. +       <table bgcolor="000000">
  29. +               %show_aio%
  30. +       </table>
  31. +   </center>
  32. +   </body>
  33. +</html>
  34. \ No newline at end of file
  35. diff --git a/aCis_datapack/data/xml/admin_commands_rights.xml b/aCis_datapack/data/xml/admin_commands_rights.xml
  36. index cd3e201..eac6438 100644
  37. --- a/aCis_datapack/data/xml/admin_commands_rights.xml
  38. +++ b/aCis_datapack/data/xml/admin_commands_rights.xml
  39. @@ -354,4 +354,9 @@
  40.     <aCar name="admin_zone_check" accessLevel="1" />
  41.     <aCar name="admin_zone_visual" accessLevel="1" />
  42.    
  43. +   <!-- AIO Buffer -->
  44. +   <aCar name="admin_setaio" accessLevel="1" />
  45. +   <aCar name="admin_removeaio" accessLevel="1" />
  46. +   <aCar name="admin_showaio" accessLevel="1" />
  47. +  
  48.  </list>
  49. \ No newline at end of file
  50. diff --git a/aCis_datapack/data/xml/skills/7000-7099.xml b/aCis_datapack/data/xml/skills/7000-7099.xml
  51. index a20ccc6..10484d8 100644
  52. --- a/aCis_datapack/data/xml/skills/7000-7099.xml
  53. +++ b/aCis_datapack/data/xml/skills/7000-7099.xml
  54. @@ -212,4 +212,17 @@
  55.         <set name="skillType" val="NOTDONE" />
  56.         <set name="operateType" val="OP_PASSIVE" />
  57.     </skill>
  58. +   <skill id="7065" levels="1" name="AIO-Recovery">
  59. +   <set name="target" val="TARGET_SELF"/>
  60. +   <set name="skillType" val="BUFF"/>
  61. +   <set name="operateType" val="OP_PASSIVE"/>
  62. +   <for>
  63. +       <add order="0x40" stat="maxMp" val="10000" />
  64. +       <add order="0x40" stat="regMp" val="10000"/>
  65. +       <add order="0x40" stat="mAtkSpd" val="1900"/>
  66. +       <add order="0x40" stat="pAtkSpd" val="1900"/>
  67. +       <add order="0x40" stat="runSpd" val="80"/>
  68. +   </for>
  69. +   </skill>
  70. +  
  71.  </list>
  72. \ No newline at end of file
  73. diff --git a/aCis_datapack/sql/characters.sql b/aCis_datapack/sql/characters.sql
  74. index 6882275..523b71c 100644
  75. --- a/aCis_datapack/sql/characters.sql
  76. +++ b/aCis_datapack/sql/characters.sql
  77. @@ -54,6 +54,8 @@ CREATE TABLE IF NOT EXISTS characters (
  78.    `clan_join_expiry_time` BIGINT UNSIGNED NOT NULL DEFAULT 0,
  79.    `clan_create_expiry_time` BIGINT UNSIGNED NOT NULL DEFAULT 0,
  80.    `death_penalty_level` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
  81. +  `aio` decimal(1,0) NOT NULL DEFAULT 0,
  82. +  `aio_end` decimal(20,0) NOT NULL DEFAULT 0,
  83.    PRIMARY KEY (obj_Id),
  84.    KEY `clanid` (`clanid`)
  85.  );
  86. --- /dev/null
  87. +++ b/aCis_gameserver/config/AIO.properties
  88. @@ -0,0 +1,33 @@
  89. +#=============================================================
  90. +#                        AIO System
  91. +#=============================================================
  92. +EnableAioSystem = True
  93. +
  94. +# Enable / Disable name color
  95. +AllowAioNameColor = True
  96. +#Hexadecimal code
  97. +AioNameColor = 88AA88
  98. +
  99. +# Enable / Disable title color
  100. +AllowAioTitleColor = True
  101. +#Hexadecimal code
  102. +AioTitleColor = 88AA88
  103. +
  104. +# List of Aio Skills
  105. +# Format : skillid,skilllvl;skillid2,skilllvl2;
  106. +AioSkills = 7065,1;1085,3;1304,3;1087,3;1354,1;1062,2;1243,6;1045,6;1048,6;1429,1;163,1;\
  107. +1311,6;213,8;1007,3;1309,3;1552,3;1006,3;1308,3;1253,3;1284,3;1392,3;1393,3;214,1;\
  108. +1009,3;1310,4;1363,1;1362,1;1397,3;1292,6;1078,6;307,1;276,1;309,1;274,1;275,1;164,3;\
  109. +272,1;277,1;273,1;311,1;366,1;365,1;310,1;271,1;1242,3;1353,3;1391,3;1002,3;\
  110. +1352,1;229,7;228,3;1077,3;1218,33;1059,3;1219,33;1388,3;1389,3;1240,3;1413,1;\
  111. +1086,2;1036,2;1035,4;1068,3;1356,1;1355,1;1357,1;1307,3;1410,1;1409,1;1353,1;\
  112. +1044,3;1182,3;1191,3;1189,3;1259,4;1306,6;234,23;1040,3;364,1;264,1;306,1;\
  113. +269,1;270,1;265,1;363,1;349,1;308,1;305,1;304,1;267,1;266,1;268,1;1390,3;1303,2;\
  114. +1204,2;1268,4;4699,13;4700,13;4702,13;4703,13;1323,1;1251,2;1328,7;1329,9;1330,8
  115. +
  116. +# Allow / Do not allow AIO teleport
  117. +# If true only allows teleport between towns
  118. +AllowAIOTeleport = True
  119. +
  120. +# Enable / Disable teleport cost
  121. +EnableFreeTeleport = False
  122. \ No newline at end of file
  123. diff --git a/aCis_gameserver/java/net/sf/l2j/Config.java b/aCis_gameserver/java/net/sf/l2j/Config.java
  124. index 937c0f8..73309f4 100644
  125. --- a/aCis_gameserver/java/net/sf/l2j/Config.java
  126. +++ b/aCis_gameserver/java/net/sf/l2j/Config.java
  127. @@ -51,6 +51,19 @@ public final class Config
  128.     public static final String PLAYERS_FILE = "./config/players.properties";
  129.     public static final String SERVER_FILE = "./config/server.properties";
  130.     public static final String SIEGE_FILE = "./config/siege.properties";
  131. +   public static final String AIO_FILE = "./config/AIO.properties";
  132. +  
  133. +   //------------------------------------------------
  134. +   //  Aio - System
  135. +   //------------------------------------------------
  136. +   public static boolean ENABLE_AIO_SYSTEM;
  137. +   public static Map<Integer, Integer> AIO_SKILLS;
  138. +   public static boolean ALLOW_AIO_NCOLOR;
  139. +   public static int AIO_NCOLOR;
  140. +   public static boolean ALLOW_AIO_TCOLOR;
  141. +   public static int AIO_TCOLOR;
  142. +   public static boolean ALLOW_AIO_TELEPORT;
  143. +   public static boolean ENABLE_AIO_FREE_TELEPORT;
  144.    
  145.     // --------------------------------------------------
  146.     // Clans settings
  147. @@ -1403,10 +1416,50 @@ public final class Config
  148.         MAX_CONNECTION_PER_IP = server.getProperty("MaxConnectionPerIP", 50);
  149.     }
  150.    
  151. +   private static final void loadAioSystem(){
  152. +       // AIO settings
  153. +       ExProperties aio = initProperties(AIO_FILE);
  154. +       ENABLE_AIO_SYSTEM = aio.getProperty("EnableAioSystem", false);
  155. +       ALLOW_AIO_NCOLOR = aio.getProperty("AllowAioNameColor", false);
  156. +       AIO_NCOLOR = Integer.decode("0x" + aio.getProperty("AioNameColor", "88AA88"));
  157. +       ALLOW_AIO_TCOLOR = aio.getProperty("AllowAioTitleColor", false);
  158. +       AIO_TCOLOR = Integer.decode("0x" + aio.getProperty("AioTitleColor", "88AA88"));
  159. +       ALLOW_AIO_TELEPORT = aio.getProperty("AllowAIOTeleport", false);
  160. +       ENABLE_AIO_FREE_TELEPORT = aio.getProperty("EnableFreeTeleport", false);
  161. +                  
  162. +                  
  163. +       if (ENABLE_AIO_SYSTEM) // create map if system is enabled
  164. +       {
  165. +           String[] AioSkillsSplit = aio.getProperty("AioSkills", "").split(";");
  166. +           AIO_SKILLS = new HashMap<>(AioSkillsSplit.length);
  167. +           for (String skill : AioSkillsSplit)
  168. +           {
  169. +               String[] skillSplit = skill.split(",");
  170. +               if (skillSplit.length != 2)
  171. +                   _log.info("[Aio System]: invalid config property in AIO.properties -> AioSkills \"" + skill + "\"");
  172. +               else
  173. +               {
  174. +                   try
  175. +                   {
  176. +                       AIO_SKILLS.put(Integer.parseInt(skillSplit[0]), Integer.parseInt(skillSplit[1]));
  177. +                   }
  178. +                   catch (NumberFormatException nfe)
  179. +                   {
  180. +                       if (!skill.equals(""))
  181. +                           _log.info("[Aio System]: invalid config property in AIO.properties -> AioSkills \"" + skillSplit[0] + "\"" + skillSplit[1]);
  182. +                   }
  183. +               }
  184. +           }
  185. +       }
  186. +   }
  187. +  
  188.     public static final void loadGameServer()
  189.     {
  190.         _log.info("Loading gameserver configuration files.");
  191.        
  192. +       //Aio System
  193. +       loadAioSystem();
  194. +      
  195.         // clans settings
  196.         loadClans();
  197.        
  198. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java b/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
  199. index a5644c9..ed98d28 100644
  200. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
  201. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
  202. @@ -200,6 +200,10 @@ public class GameServer
  203.         PartyMatchRoomList.getInstance();
  204.         RaidBossPointsManager.getInstance();
  205.        
  206. +       StringUtil.printSection("AIO");
  207. +           if (Config.ENABLE_AIO_SYSTEM)
  208. +               _log.config(Config.ENABLE_AIO_SYSTEM ? "AIO: Enabled" : "Disabled");
  209. +      
  210.         StringUtil.printSection("Community server");
  211.         if (Config.ENABLE_COMMUNITY_BOARD) // Forums has to be loaded before clan data
  212.             ForumsBBSManager.getInstance().initRoot();
  213. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
  214. index f351518..7569e84 100644
  215. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
  216. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
  217. @@ -18,6 +18,7 @@ import java.util.HashMap;
  218.  import java.util.Map;
  219.  
  220.  import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminAdmin;
  221. +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminAio;
  222.  import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminAnnouncements;
  223.  import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminBan;
  224.  import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminBookmark;
  225. @@ -76,6 +77,7 @@ public class AdminCommandHandler
  226.     protected AdminCommandHandler()
  227.     {
  228.         registerAdminCommandHandler(new AdminAdmin());
  229. +       registerAdminCommandHandler(new AdminAio());
  230.         registerAdminCommandHandler(new AdminAnnouncements());
  231.         registerAdminCommandHandler(new AdminBan());
  232.         registerAdminCommandHandler(new AdminBookmark());
  233. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAio.java b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAio.java
  234. new file mode 100644
  235. index 0000000..9e77af4
  236. --- /dev/null
  237. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAio.java
  238. @@ -0,0 +1,280 @@
  239. +/*
  240. + * This program is free software; you can redistribute it and/or modify
  241. + * it under the terms of the GNU General Public License as published by
  242. + * the Free Software Foundation; either version 2, or (at your option)
  243. + * any later version.
  244. + *
  245. + * This program is distributed in the hope that it will be useful,
  246. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  247. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  248. + * GNU General Public License for more details.
  249. + *
  250. + * You should have received a copy of the GNU General Public License
  251. + * along with this program; if not, write to the Free Software
  252. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  253. + * 02111-1307, USA.
  254. + *
  255. + * http://www.gnu.org/copyleft/gpl.html
  256. + */
  257. +package net.sf.l2j.gameserver.handler.admincommandhandlers;
  258. +
  259. +
  260. +import java.sql.Connection;
  261. +import java.sql.PreparedStatement;
  262. +import java.util.StringTokenizer;
  263. +import java.util.logging.Level;
  264. +import java.util.logging.Logger;
  265. +
  266. +import net.sf.l2j.Config;
  267. +import net.sf.l2j.L2DatabaseFactory;
  268. +import net.sf.l2j.gameserver.datatables.GmListTable;
  269. +import net.sf.l2j.gameserver.datatables.MapRegionTable;
  270. +import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
  271. +import net.sf.l2j.gameserver.model.L2Object;
  272. +import net.sf.l2j.gameserver.model.L2World;
  273. +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  274. +import net.sf.l2j.gameserver.network.clientpackets.Say2;
  275. +import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
  276. +import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
  277. +import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
  278. +import net.sf.l2j.gameserver.network.serverpackets.StopMove;
  279. +
  280. +/**
  281. + *  "//setaio" give aio status to player Changes name color and title color if enabled Uses: setaio [<player_name>] [<time_duration in days>]
  282. + *  "//removeaio"  Uses: removeaio [<player_name>] if <player_name> is not specified, the current target player is used.
  283. + * @author KhayrusS, SweeTs, Reynald0
  284. + */
  285. +public class AdminAio implements IAdminCommandHandler
  286. +{
  287. +   private static String[] _adminCommands =
  288. +   {
  289. +       "admin_setaio",
  290. +       "admin_removeaio",
  291. +       "admin_showaio",
  292. +       "admin_gift"
  293. +   };
  294. +   private static Logger _log = Logger.getLogger(MapRegionTable.class.getName());
  295. +  
  296. +   @Override
  297. +   public boolean useAdminCommand(String command, L2PcInstance activeChar)
  298. +   {
  299. +       if (command.startsWith("admin_setaio"))
  300. +       {
  301. +           if(!Config.ENABLE_AIO_SYSTEM)
  302. +           {
  303. +               activeChar.sendMessage("AIO system disabled");
  304. +               return false;
  305. +           }
  306. +          
  307. +           StringTokenizer str = new StringTokenizer(command);
  308. +          
  309. +           L2Object target = activeChar.getTarget();
  310. +           L2PcInstance player = null;
  311. +          
  312. +           if (target != null && target instanceof L2PcInstance)
  313. +               player = (L2PcInstance) target;
  314. +           else
  315. +               player = activeChar;
  316. +          
  317. +           try
  318. +           {
  319. +               str.nextToken();
  320. +               String time = str.nextToken();
  321. +               if (str.hasMoreTokens())
  322. +               {
  323. +                   String playername = time;
  324. +                   time = str.nextToken();
  325. +                   player = L2World.getInstance().getPlayer(playername);
  326. +                   doAio(activeChar, player, playername, time);
  327. +               }
  328. +               else
  329. +               {
  330. +                   String playername = player.getName();
  331. +                   doAio(activeChar, player, playername, time);
  332. +               }
  333. +           }
  334. +           catch (Exception e)
  335. +           {
  336. +               activeChar.sendMessage("Usage: //setaio <char_name> [time](in days)");
  337. +           }
  338. +          
  339. +           player.broadcastUserInfo();
  340. +          
  341. +           if (player.isAio())
  342. +               return true;
  343. +       }
  344. +       else if (command.startsWith("admin_removeaio"))
  345. +       {
  346. +           StringTokenizer str = new StringTokenizer(command);
  347. +           L2Object target = activeChar.getTarget();
  348. +           L2PcInstance player = null;
  349. +          
  350. +           if (target instanceof L2PcInstance)
  351. +               player = (L2PcInstance) target;
  352. +           else
  353. +               player = activeChar;
  354. +          
  355. +           try
  356. +           {
  357. +               str.nextToken();
  358. +              
  359. +               if (str.hasMoreTokens())
  360. +               {
  361. +                   String playername = str.nextToken();
  362. +                   player = L2World.getInstance().getPlayer(playername);
  363. +                   removeAio(activeChar, player, playername);
  364. +               }
  365. +               else
  366. +               {
  367. +                   String playername = player.getName();
  368. +                   removeAio(activeChar, player, playername);
  369. +               }
  370. +           }
  371. +           catch (Exception e)
  372. +           {
  373. +               activeChar.sendMessage("Usage: //removeaio <char_name>");
  374. +           }
  375. +           player.broadcastUserInfo();
  376. +       }
  377. +       else if (command.startsWith("admin_showaio"))
  378. +           showAllAio(activeChar);
  379. +       return false;
  380. +   }
  381. +  
  382. +   public void doAio(L2PcInstance activeChar, L2PcInstance _player, String _playername, String _time)
  383. +   {
  384. +       int days = Integer.parseInt(_time);
  385. +      
  386. +       if (_player == null)
  387. +       {
  388. +           activeChar.sendMessage("Character not found.");
  389. +           return;
  390. +       }
  391. +       if (_player.isAio())
  392. +       {
  393. +           activeChar.sendMessage("Player " + _playername + " is already an AIO.");
  394. +           return;
  395. +       }
  396. +      
  397. +       if (days > 0)
  398. +       {
  399. +           _player.getStat().addExp(_player.getStat().getExpForLevel(81));
  400. +           _player.setClassId(_player.getClassId().getFirstClass().getId());
  401. +           _player.lostAioSkills();
  402. +           _player.setAio(true);
  403. +           _player.setName("[AIO]-" + _player.getName());
  404. +           _player.setTitle(".-=Special=-.");
  405. +           _player.setEndTime("aio", days);
  406. +           _player.sendPacket(new CreatureSay(0, Say2.PARTY, "System", "Dear player, you are now an AIO, congratulations."));
  407. +          
  408. +           try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  409. +           {
  410. +               PreparedStatement statement = con.prepareStatement("UPDATE characters SET aio=1, aio_end=? WHERE obj_id=?");
  411. +               statement.setLong(1, _player.getAioEndTime());
  412. +               statement.setInt(2, _player.getObjectId());
  413. +               statement.execute();
  414. +               statement.close();
  415. +              
  416. +               if (Config.ALLOW_AIO_NCOLOR)
  417. +                   _player.getAppearance().setNameColor(Config.AIO_NCOLOR);
  418. +              
  419. +               if (Config.ALLOW_AIO_TCOLOR)
  420. +                   _player.getAppearance().setTitleColor(Config.AIO_TCOLOR);
  421. +              
  422. +               _player.rewardAioSkills();
  423. +              
  424. +               updateChar(_player);
  425. +              
  426. +               GmListTable.broadcastMessageToGMs("GM " + activeChar.getName() + " set an AIO status for player " + _playername + " for " + _time + " day(s)");
  427. +           }
  428. +           catch (Exception e)
  429. +           {
  430. +               _log.log(Level.WARNING, "Something went wrong, check log folder for details", e);
  431. +           }
  432. +       }
  433. +   }
  434. +  
  435. +   public void removeAio(L2PcInstance activeChar, L2PcInstance _player, String _playername)
  436. +   {
  437. +       if (!_player.isAio() && activeChar != null)
  438. +       {
  439. +           activeChar.sendMessage("Player " + _playername + " is not an AIO.");
  440. +           return;
  441. +       }
  442. +       //Paralyze player
  443. +       _player.startAbnormalEffect(0x0800);
  444. +       _player.setIsParalyzed(true);
  445. +       _player.broadcastPacket(new StopMove(_player));
  446. +       _player.lostAioSkills();
  447. +       _player.setAioEndTime(0);
  448. +       _player.setAio(false);
  449. +      
  450. +       try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  451. +       {
  452. +           PreparedStatement statement = con.prepareStatement("UPDATE characters SET Aio=0, Aio_end=0 WHERE obj_id=?");
  453. +           statement.setInt(1, _player.getObjectId());
  454. +           statement.execute();
  455. +           statement.close();
  456. +          
  457. +           _player.removeExpAndSp(6299994999L, 0);
  458. +           _player.setName(_player.getName().replace("[AIO]-", ""));
  459. +           _player.setTitle("");
  460. +           _player.getAppearance().setNameColor(0xFFFFFF);
  461. +           _player.getAppearance().setTitleColor(0xFFFFFF);
  462. +           updateChar(_player);
  463. +          
  464. +          
  465. +           if(activeChar != null && _playername != "")
  466. +           {
  467. +               GmListTable.broadcastMessageToGMs("GM " + activeChar.getName() + " removed AIO status from " + _playername);
  468. +               _player.sendPacket(new CreatureSay(0, Say2.PARTYROOM_COMMANDER, "System", "Your AIO period has been finished."));
  469. +           }
  470. +           else
  471. +               _player.sendPacket(new CreatureSay(0, Say2.PARTYROOM_COMMANDER, "System", "Your AIO period ends."));
  472. +       }
  473. +       catch (Exception e)
  474. +       {
  475. +           _log.log(Level.WARNING, "Something went wrong, check log folder for details", e);
  476. +       }
  477. +       //Unparalyze player
  478. +       _player.stopAbnormalEffect(0x0800);
  479. +       _player.setIsParalyzed(false);
  480. +   }
  481. +  
  482. +   public void updateChar(L2PcInstance player)
  483. +   {
  484. +       player.sendPacket(new InventoryUpdate());
  485. +       player.broadcastUserInfo();
  486. +       player.broadcastCharInfo();
  487. +       player.sendSkillList();
  488. +       player.store();
  489. +   }
  490. +  
  491. +   public void showAllAio(L2PcInstance activeChar)
  492. +   {
  493. +       short num = 0;
  494. +       NpcHtmlMessage html = new NpcHtmlMessage(0);
  495. +       html.setFile("data/html/admin/aio.htm");
  496. +       StringBuilder sb = new StringBuilder();
  497. +       for (L2PcInstance player : L2World.getInstance().getPlayers())
  498. +       {
  499. +           if (player.isAio())
  500. +           {
  501. +               num++;
  502. +               sb.append("<tr><td width=10></td>" +
  503. +                   "<td width=20>" + num + "</td>" +
  504. +                   "<td width=80><font color=\"LEVEL\">" + player.getName() + "</font></td>" +
  505. +                   "<td width=110>" + MapRegionTable.getInstance().getClosestTownName(player.getX(), player.getY()) + "</td>" +
  506. +                   "<td width=50><font color=\"00FF00\">ON</font></td></tr>");
  507. +           }
  508. +       }
  509. +       html.replace("%show_aio%", num > 0 ? sb.toString() : "");
  510. +       activeChar.sendPacket(html);
  511. +   }
  512. +  
  513. +   @Override
  514. +   public String[] getAdminCommandList()
  515. +   {
  516. +       return _adminCommands;
  517. +   }
  518. +}
  519. \ No newline at end of file
  520. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java
  521. index 7176fb0..f874940 100644
  522. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java
  523. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java
  524. @@ -68,6 +68,12 @@ public final class L2ClassMasterInstance extends L2NpcInstance
  525.     @Override
  526.     public void onBypassFeedback(L2PcInstance player, String command)
  527.     {
  528. +       if (player.isAio())
  529. +       {
  530. +           player.sendMessage("You're not allowed to change your class.");
  531. +           return;
  532. +       }
  533. +      
  534.         if (!Config.ALLOW_CLASS_MASTERS)
  535.             return;
  536.        
  537. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
  538. index c0c4745..c39efcb 100644
  539. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
  540. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
  541. @@ -154,12 +154,14 @@ import net.sf.l2j.gameserver.model.zone.ZoneId;
  542.  import net.sf.l2j.gameserver.model.zone.type.L2BossZone;
  543.  import net.sf.l2j.gameserver.network.L2GameClient;
  544.  import net.sf.l2j.gameserver.network.SystemMessageId;
  545. +import net.sf.l2j.gameserver.network.clientpackets.Say2;
  546.  import net.sf.l2j.gameserver.network.serverpackets.AbstractNpcInfo;
  547.  import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
  548.  import net.sf.l2j.gameserver.network.serverpackets.ChairSit;
  549.  import net.sf.l2j.gameserver.network.serverpackets.ChangeWaitType;
  550.  import net.sf.l2j.gameserver.network.serverpackets.CharInfo;
  551.  import net.sf.l2j.gameserver.network.serverpackets.ConfirmDlg;
  552. +import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
  553.  import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate;
  554.  import net.sf.l2j.gameserver.network.serverpackets.ExAutoSoulShot;
  555.  import net.sf.l2j.gameserver.network.serverpackets.ExDuelUpdateUserInfo;
  556. @@ -314,8 +316,8 @@ public final class L2PcInstance extends L2Playable
  557.     private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE char_obj_id=? AND class_index=?";
  558.    
  559.     private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,obj_Id,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,nobless,power_grade,last_recom_date) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  560. -   private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=? WHERE obj_id=?";
  561. -   private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level FROM characters WHERE obj_id=?";
  562. +   private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,aio=?,aio_end=? WHERE obj_id=?";
  563. +   private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,aio,aio_end FROM characters WHERE obj_id=?";  
  564.    
  565.     private static final String RESTORE_CHAR_SUBCLASSES = "SELECT class_id,exp,sp,level,class_index FROM character_subclasses WHERE char_obj_id=? ORDER BY class_index ASC";
  566.     private static final String ADD_CHAR_SUBCLASS = "INSERT INTO character_subclasses (char_obj_id,class_id,exp,sp,level,class_index) VALUES (?,?,?,?,?,?)";
  567. @@ -460,6 +462,9 @@ public final class L2PcInstance extends L2Playable
  568.     private boolean _isNoble;
  569.     private boolean _isHero;
  570.    
  571. +   private boolean _isAio = false;
  572. +   private long _aio_endTime = 0;
  573. +      
  574.     private L2Npc _currentFolkNpc;
  575.    
  576.     private int _questNpcObject;
  577. @@ -5401,6 +5406,9 @@ public final class L2PcInstance extends L2Playable
  578.                
  579.                 player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level"));
  580.                
  581. +               player.setAio(rset.getInt("aio") == 1 ? true : false);
  582. +               player.setAioEndTime(rset.getLong("aio_end"));
  583. +              
  584.                 // Set the x,y,z position of the L2PcInstance and make it invisible
  585.                 player.setXYZInvisible(rset.getInt("x"), rset.getInt("y"), rset.getInt("z"));
  586.                
  587. @@ -5733,7 +5741,10 @@ public final class L2PcInstance extends L2Playable
  588.             statement.setLong(47, getClanCreateExpiryTime());
  589.             statement.setString(48, getName());
  590.             statement.setLong(49, getDeathPenaltyBuffLevel());
  591. -           statement.setInt(50, getObjectId());
  592. +           statement.setInt(50, isAio() ? 1 : 0);
  593. +           statement.setLong(51, getAioEndTime());
  594. +           statement.setInt(52, getObjectId());
  595. +          
  596.            
  597.             statement.execute();
  598.             statement.close();
  599. @@ -6535,6 +6546,12 @@ public final class L2PcInstance extends L2Playable
  600.             return false;
  601.         }
  602.        
  603. +       if (isAio() && !isGM() && !isInsideZone(ZoneId.TOWN))
  604. +       {
  605. +           sendPacket(ActionFailed.STATIC_PACKET);
  606. +           return false;
  607. +       }
  608. +      
  609.         // Cancels the use of skills when player uses a cursed weapon or is flying.
  610.         if ((isCursedWeaponEquipped() && !skill.isDemonicSkill()) // If CW, allow ONLY demonic skills.
  611.             || (getMountType() == 1 && !skill.isStriderSkill()) // If mounted, allow ONLY Strider skills.
  612. @@ -8079,6 +8096,9 @@ public final class L2PcInstance extends L2Playable
  613.             if (isWearingFormalWear)
  614.                 isDisabled = true;
  615.            
  616. +           if (isAio() && !isGM() && !isInsideZone(ZoneId.TOWN))
  617. +               isDisabled = true;
  618. +          
  619.             sl.addSkill(s.getId(), s.getLevel(), s.isPassive(), isDisabled);
  620.         }
  621.         sendPacket(sl);
  622. @@ -8700,6 +8720,12 @@ public final class L2PcInstance extends L2Playable
  623.         // Force a revalidation
  624.         revalidateZone(true);
  625.        
  626. +       if(isAio() && !isInsideZone(ZoneId.TOWN) && !isInsideZone(ZoneId.PEACE))
  627. +       {
  628. +           sendPacket(new CreatureSay(0, Say2.SHOUT, "System", "You can only teleport to another town while being an AIO!"));
  629. +           teleToLocation(TeleportWhereType.TOWN);
  630. +       }
  631. +      
  632.         if (Config.PLAYER_SPAWN_PROTECTION > 0)
  633.             setSpawnProtection(true);
  634.        
  635. @@ -9688,6 +9714,54 @@ public final class L2PcInstance extends L2Playable
  636.         }
  637.     }
  638.    
  639. +   public boolean isAio()
  640. +   {
  641. +       return _isAio;
  642. +   }
  643. +      
  644. +   public void setAio(boolean val)
  645. +   {
  646. +       _isAio = val;
  647. +   }
  648. +          
  649. +   public long getAioEndTime()
  650. +   {
  651. +       return _aio_endTime;
  652. +   }
  653. +      
  654. +   public void setAioEndTime(long val)
  655. +   {
  656. +       _aio_endTime = val;
  657. +   }
  658. +      
  659. +   public void rewardAioSkills()
  660. +   {
  661. +       L2Skill skill;
  662. +       for (Integer skillid : Config.AIO_SKILLS.keySet())
  663. +       {
  664. +           int skilllvl = Config.AIO_SKILLS.get(skillid);
  665. +           skill = SkillTable.getInstance().getInfo(skillid, skilllvl);
  666. +           if (skill != null)
  667. +               addSkill(skill, true);
  668. +       }
  669. +   }
  670. +      
  671. +   public void lostAioSkills()
  672. +   {
  673. +       for (L2Skill skill : this.getSkills().values())
  674. +           this.removeSkill(skill);
  675. +   }
  676. +  
  677. +   public void setEndTime(String process, int val)
  678. +   {
  679. +       Calendar calendar = Calendar.getInstance();
  680. +       calendar.add(Calendar.DAY_OF_MONTH, val);
  681. +       long end_day = calendar.getTimeInMillis();
  682. +      
  683. +       if (process.equals("aio"))
  684. +           _aio_endTime = end_day;
  685. +   }
  686. +  
  687.     public int getPowerGrade()
  688.     {
  689.         return _powerGrade;
  690. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2TeleporterInstance.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2TeleporterInstance.java
  691. index 6297143..269410d 100644
  692. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2TeleporterInstance.java
  693. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2TeleporterInstance.java
  694. @@ -27,7 +27,9 @@ import net.sf.l2j.gameserver.model.L2TeleportLocation;
  695.  import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
  696.  import net.sf.l2j.gameserver.model.zone.ZoneId;
  697.  import net.sf.l2j.gameserver.network.SystemMessageId;
  698. +import net.sf.l2j.gameserver.network.clientpackets.Say2;
  699.  import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
  700. +import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
  701.  import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
  702.  
  703.  /**
  704. @@ -184,6 +186,23 @@ public final class L2TeleporterInstance extends L2NpcInstance
  705.             if (player.isAlikeDead())
  706.                 return;
  707.            
  708. +          
  709. +           if(player.isAio())
  710. +           {
  711. +               if (!Config.ALLOW_AIO_TELEPORT)
  712. +               {
  713. +                   player.sendPacket(new CreatureSay(0, Say2.SHOUT, "System", "You cant teleport while being an AIO!"));
  714. +                   return;
  715. +               }
  716. +               else if (Config.ALLOW_AIO_TELEPORT && Config.ENABLE_AIO_FREE_TELEPORT)
  717. +               {
  718. +                   player.sendPacket(new CreatureSay(0, Say2.PARTY, "System", "Free teleport!"));
  719. +                   player.teleToLocation(list.getLocX(), list.getLocY(), list.getLocZ(), 20);
  720. +                   return;
  721. +               }
  722. +           }
  723. +          
  724. +          
  725.             Calendar cal = Calendar.getInstance();
  726.             int price = list.getPrice();
  727.            
  728. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/base/ClassId.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/base/ClassId.java
  729. index b9bc9c1..f43582b 100644
  730. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/base/ClassId.java
  731. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/base/ClassId.java
  732. @@ -223,6 +223,17 @@ public enum ClassId
  733.     }
  734.    
  735.     /**
  736. +   * @return to the first class
  737. +   */
  738. +   public final ClassId getFirstClass()
  739. +   {
  740. +       if (_parent == null)
  741. +           return this;
  742. +          
  743. +       return _parent.getFirstClass();
  744. +   }
  745. +  
  746. +   /**
  747.      * Returns the {@link ClassType} of the {@link ClassId}.
  748.      * @return {@link ClassType} : The type.
  749.      */
  750. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java b/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
  751. index 7904874..c11294a 100644
  752. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
  753. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
  754. @@ -19,6 +19,8 @@ import java.sql.PreparedStatement;
  755.  import java.sql.ResultSet;
  756.  import java.util.logging.Level;
  757.  
  758. +import java.util.Calendar;
  759. +import java.util.Date;
  760.  import net.sf.l2j.Config;
  761.  import net.sf.l2j.L2DatabaseFactory;
  762.  import net.sf.l2j.gameserver.communitybbs.Manager.MailBBSManager;
  763. @@ -27,6 +29,7 @@ import net.sf.l2j.gameserver.datatables.AnnouncementTable;
  764.  import net.sf.l2j.gameserver.datatables.GmListTable;
  765.  import net.sf.l2j.gameserver.datatables.MapRegionTable.TeleportWhereType;
  766.  import net.sf.l2j.gameserver.datatables.SkillTable.FrequentSkill;
  767. +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminAio;
  768.  import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
  769.  import net.sf.l2j.gameserver.instancemanager.CoupleManager;
  770.  import net.sf.l2j.gameserver.instancemanager.DimensionalRiftManager;
  771. @@ -44,6 +47,7 @@ import net.sf.l2j.gameserver.model.entity.Siege;
  772.  import net.sf.l2j.gameserver.model.olympiad.Olympiad;
  773.  import net.sf.l2j.gameserver.model.zone.ZoneId;
  774.  import net.sf.l2j.gameserver.network.SystemMessageId;
  775. +import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
  776.  import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
  777.  import net.sf.l2j.gameserver.network.serverpackets.Die;
  778.  import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate;
  779. @@ -283,6 +287,15 @@ public class EnterWorld extends L2GameClientPacket
  780.        
  781.         activeChar.sendPacket(new QuestList(activeChar));
  782.        
  783. +       if (activeChar.isAio())
  784. +           onEnterAio(activeChar);
  785. +                  
  786. +       if (Config.ALLOW_AIO_NCOLOR && activeChar.isAio())
  787. +           activeChar.getAppearance().setNameColor(Config.AIO_NCOLOR);
  788. +                          
  789. +       if (Config.ALLOW_AIO_TCOLOR && activeChar.isAio())
  790. +           activeChar.getAppearance().setTitleColor(Config.AIO_TCOLOR);
  791. +      
  792.         // Unread mails make a popup appears.
  793.         if (Config.ENABLE_COMMUNITY_BOARD && MailBBSManager.getInstance().checkUnreadMail(activeChar) > 0)
  794.         {
  795. @@ -334,6 +347,26 @@ public class EnterWorld extends L2GameClientPacket
  796.         activeChar.sendPacket(ActionFailed.STATIC_PACKET);
  797.     }
  798.    
  799. +   private static void onEnterAio(L2PcInstance activeChar)
  800. +   {
  801. +       if(activeChar.isAio() && !activeChar.isInsideZone(ZoneId.TOWN) && !activeChar.isInsideZone(ZoneId.PEACE))
  802. +       {
  803. +           activeChar.sendPacket(new CreatureSay(0, Say2.SHOUT, "System", "You can only teleport to another town while being an AIO!"));
  804. +           activeChar.teleToLocation(TeleportWhereType.TOWN);
  805. +       }
  806. +      
  807. +       long now = Calendar.getInstance().getTimeInMillis();
  808. +       long endDay = activeChar.getAioEndTime();
  809. +       if (now > endDay)
  810. +           new AdminAio().removeAio(null, activeChar, "");
  811. +       else
  812. +       {
  813. +           Date dt = new Date(endDay);
  814. +           if (activeChar.isAio())
  815. +               activeChar.sendPacket(new CreatureSay(0, Say2.ALLIANCE, "System", "Your AIO period ends at: " + dt));
  816. +       }
  817. +   }
  818. +  
  819.     @Override
  820.     protected boolean triggersOnActionRequest()
  821.     {
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement