Removed custom poly system.
This commit is contained in:
		| @@ -217,10 +217,6 @@ | ||||
| 	<admin command="admin_para_all_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_unpara_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_para_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_polyself" accessLevel="80" /> | ||||
| 	<admin command="admin_unpolyself" accessLevel="80" /> | ||||
| 	<admin command="admin_polyself_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_unpolyself_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_clearteams" accessLevel="80" /> | ||||
| 	<admin command="admin_setteam_close" accessLevel="80" /> <!-- set all Gm close players to val team --> | ||||
| 	<admin command="admin_setteam" accessLevel="80" /> | ||||
| @@ -274,8 +270,6 @@ | ||||
| 	<admin command="admin_event_name" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_kill" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_res" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_poly" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_unpoly" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_prize" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_chatban" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_finish" accessLevel="80" /> | ||||
| @@ -427,12 +421,6 @@ | ||||
| 	<!-- Section: Pledge --> | ||||
| 	<admin command="admin_pledge" accessLevel="90" /> <!-- Manage Clan --> | ||||
|  | ||||
| 	<!-- Section: Polymorph --> | ||||
| 	<admin command="admin_polymorph" accessLevel="90" /> | ||||
| 	<admin command="admin_unpolymorph" accessLevel="90" /> | ||||
| 	<admin command="admin_polymorph_menu" accessLevel="90" /> | ||||
| 	<admin command="admin_unpolymorph_menu" accessLevel="90" /> | ||||
|  | ||||
| 	<!-- Section: Quest --> | ||||
| 	<admin command="admin_quest_reload" accessLevel="90" /> | ||||
|  | ||||
|   | ||||
| @@ -11,12 +11,8 @@ | ||||
| <td><edit var="menu_command" width=120 height=15></td> | ||||
| <td><button value="Help" action="bypass -h admin_help help/effects_menu.htm" width=45 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| </tr></table><br> | ||||
| <font color="aadd77">Trasformations</font><table width=240><tr> | ||||
| <td><button value="PolyMorph" action="bypass -h admin_polymorph_menu $menu_command" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="UnPoly" action="bypass -h admin_unpolymorph_menu" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="PolySelf" action="bypass -h admin_polyself_menu $menu_command" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="UnPolySlf" action="bypass -h admin_unpolyself_menu" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| </tr><tr> | ||||
| <font color="aadd77">Effects</font><table width=240> | ||||
| <tr> | ||||
| <td><button value="Para" action="bypass -h admin_para_menu $menu_command" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="UnPara" action="bypass -h admin_unpara_menu $menu_command" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="ParaAll" action="bypass -h admin_para_all_menu" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
|   | ||||
| @@ -7,10 +7,6 @@ | ||||
| 3-Effect Panel Buttons<br></font> | ||||
| L2 special effects are here: earthquakes, sky changes, weird character and mob animations.<br> | ||||
| <font color="LEVEL">3-1 First pack of effects.<br> | ||||
| PolyMorph:</font> Make your target (player) look like the specified mob.<br> | ||||
| <font color="LEVEL">Unpoly:</font> Cancel polymorph effects that specified target may have.<br> | ||||
| <font color="LEVEL">PolySelf:</font> Polymorph yourself to specified npcId, you will see a title change only.<br> | ||||
| <font color="LEVEL">UnPolySelf:</font> Cancel any polymorph effect you could have.<br> | ||||
| <font color="LEVEL">Para:</font> Paralyze character (target/name).<br> | ||||
| <font color="LEVEL">UnPara:</font> Cancel Paralysis effect (target/name).<br> | ||||
| <font color="LEVEL">ParaAll:</font> Paralyze any character in the world, but yours. Use wisely, annoys people and causes lag.<br> | ||||
|   | ||||
| @@ -52,10 +52,5 @@ | ||||
| <font color="LEVEL">//setew value</font> - Sets enchantment of target player currently equipped weapon to value<br><font color="FF9933">Usage: //setew 9999</font><br> | ||||
| <font color="LEVEL">//banchat</font> - Mutes a player<br><font color="FF9933">Usage: //banchat kadar </font><br> | ||||
| <font color="LEVEL">//unbanchat</font> - Unmutes a player<br><font color="FF9933">Usage: //unbanchat kadar </font><br> | ||||
| <font color="LEVEL">//polymorph character npc id </font><br> | ||||
| <font color="LEVEL">//polymorph item id to poly target into id|</font><br> | ||||
| <font color="LEVEL">//polyself <npc id></font> - Used to polymorph yourself into a mob<br> | ||||
| <font color="LEVEL">//unpolyself</font> - Returns you to the normal state<br> | ||||
| <font color="LEVEL">//polymorph item <itemid></font> - Polymorphs an item<br> | ||||
| <center><button value="Index" action="bypass -h admin_help admhelp.htm" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"></center> | ||||
| </body></html> | ||||
| @@ -67,7 +67,6 @@ import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminOnline; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminPForge; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminPetition; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminPledge; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminPolymorph; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminQuest; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminReload; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminRepairChar; | ||||
| @@ -147,7 +146,6 @@ public class AdminCommandHandler | ||||
| 		registerAdminCommandHandler(new AdminPetition()); | ||||
| 		registerAdminCommandHandler(new AdminPForge()); | ||||
| 		registerAdminCommandHandler(new AdminPledge()); | ||||
| 		registerAdminCommandHandler(new AdminPolymorph()); | ||||
| 		registerAdminCommandHandler(new AdminQuest()); | ||||
| 		registerAdminCommandHandler(new AdminReload()); | ||||
| 		registerAdminCommandHandler(new AdminRepairChar()); | ||||
|   | ||||
| @@ -27,7 +27,6 @@ import org.l2jmobius.gameserver.model.actor.instance.ChestInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.network.SystemMessageId; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.CharInfo; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.Earthquake; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ExRedSky; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.GameServerPacket; | ||||
| @@ -38,7 +37,6 @@ import org.l2jmobius.gameserver.network.serverpackets.SocialAction; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.StopMove; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SunRise; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SunSet; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.UserInfo; | ||||
| import org.l2jmobius.gameserver.util.BuilderUtil; | ||||
|  | ||||
| /** | ||||
| @@ -49,7 +47,6 @@ import org.l2jmobius.gameserver.util.BuilderUtil; | ||||
|  * <li>gmspeed = temporary Super Haste effect. | ||||
|  * <li>para/unpara = paralyze/remove paralysis from target | ||||
|  * <li>para_all/unpara_all = same as para/unpara, affects the whole world. | ||||
|  * <li>polyself/unpolyself = makes you look as a specified mob. | ||||
|  * <li>changename = temporary change name | ||||
|  * <li>clearteams/setteam_close/setteam = team related commands | ||||
|  * <li>social = forces an Creature instance to broadcast social action packets. | ||||
| @@ -80,10 +77,6 @@ public class AdminEffects implements IAdminCommandHandler | ||||
| 		"admin_para_all_menu", | ||||
| 		"admin_unpara_menu", | ||||
| 		"admin_para_menu", | ||||
| 		"admin_polyself", | ||||
| 		"admin_unpolyself", | ||||
| 		"admin_polyself_menu", | ||||
| 		"admin_unpolyself_menu", | ||||
| 		"admin_clearteams", | ||||
| 		"admin_setteam_close", | ||||
| 		"admin_setteam", | ||||
| @@ -333,34 +326,6 @@ public class AdminEffects implements IAdminCommandHandler | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_polyself")) | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				final String id = st.nextToken(); | ||||
| 				activeChar.getPoly().setPolyInfo("npc", id); | ||||
| 				activeChar.teleToLocation(activeChar.getX(), activeChar.getY(), activeChar.getZ(), false); | ||||
| 				activeChar.broadcastPacket(new CharInfo(activeChar)); | ||||
| 				activeChar.sendPacket(new UserInfo(activeChar)); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_unpolyself")) | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				activeChar.getPoly().setPolyInfo(null, "1"); | ||||
| 				activeChar.decayMe(); | ||||
| 				activeChar.spawnMe(activeChar.getX(), activeChar.getY(), activeChar.getZ()); | ||||
| 				activeChar.broadcastPacket(new CharInfo(activeChar)); | ||||
| 				activeChar.sendPacket(new UserInfo(activeChar)); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.equals("admin_clear_teams")) | ||||
| 		{ | ||||
| 			try | ||||
|   | ||||
| @@ -36,13 +36,11 @@ import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.entity.event.GameEvent; | ||||
| import org.l2jmobius.gameserver.model.spawn.Spawn; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.CharInfo; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ItemList; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.PlaySound; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.Revive; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SocialAction; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.UserInfo; | ||||
|  | ||||
| /** | ||||
|  * This class handles following admin commands: - admin = shows menu | ||||
| @@ -70,8 +68,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 		"admin_event_name", | ||||
| 		"admin_event_control_kill", | ||||
| 		"admin_event_control_res", | ||||
| 		"admin_event_control_poly", | ||||
| 		"admin_event_control_unpoly", | ||||
| 		"admin_event_control_prize", | ||||
| 		"admin_event_control_chatban", | ||||
| 		"admin_event_control_finish" | ||||
| @@ -340,30 +336,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 			 | ||||
| 			showEventControl(activeChar); | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_event_control_poly")) | ||||
| 		{ | ||||
| 			final StringTokenizer st0 = new StringTokenizer(command.substring(25)); | ||||
| 			final StringTokenizer st = new StringTokenizer(st0.nextToken(), "-"); | ||||
| 			final String id = st0.nextToken(); | ||||
| 			 | ||||
| 			while (st.hasMoreElements()) | ||||
| 			{ | ||||
| 				polyTeam(Integer.parseInt(st.nextToken()), id); | ||||
| 			} | ||||
| 			 | ||||
| 			showEventControl(activeChar); | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_event_control_unpoly")) | ||||
| 		{ | ||||
| 			final StringTokenizer st = new StringTokenizer(command.substring(27), "-"); | ||||
| 			 | ||||
| 			while (st.hasMoreElements()) | ||||
| 			{ | ||||
| 				unpolyTeam(Integer.parseInt(st.nextToken())); | ||||
| 			} | ||||
| 			 | ||||
| 			showEventControl(activeChar); | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_event_control_prize")) | ||||
| 		{ | ||||
| 			final StringTokenizer st0 = new StringTokenizer(command.substring(26)); | ||||
| @@ -599,11 +571,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"Resurrect\" action=\"bypass -h admin_event_control_res $team_number\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td><font color=\"LEVEL\">Resurrect Team's members</font></td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"Polymorph\" action=\"bypass -h admin_event_control_poly $team_number $poly_id\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td><edit var=\"poly_id\" width=100 height=15><font color=\"LEVEL\">Polymorphs the team into the NPC with the id specified</font></td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"UnPolymorph\" action=\"bypass -h admin_event_control_unpoly $team_number\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td><font color=\"LEVEL\">Unpolymorph the team</font></td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"Give Item\" action=\"bypass -h admin_event_control_prize $team_number $n $id\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"> number <edit var=\"n\" width=100 height=15> item id <edit var=\"id\" width=100 height=15></td><td><font color=\"LEVEL\">Give the specified item id to every single member of the team, you can put 5*level, 5*kills or 5 in the number field for example</font></td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"End\" action=\"bypass -h admin_event_control_finish\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td><font color=\"LEVEL\">Will finish the event teleporting back all the players</font></td></tr>"); | ||||
| @@ -763,49 +730,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	void polyTeam(int team, String id) | ||||
| 	{ | ||||
| 		final LinkedList<String> linked = GameEvent.players.get(team); | ||||
| 		final Iterator<String> it = linked.iterator(); | ||||
| 		 | ||||
| 		while (it.hasNext()) | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				final PlayerInstance target = World.getInstance().getPlayer(it.next()); | ||||
| 				target.getPoly().setPolyInfo("npc", id); | ||||
| 				target.teleToLocation(target.getX(), target.getY(), target.getZ(), true); | ||||
| 				target.broadcastPacket(new CharInfo(target)); | ||||
| 				target.sendPacket(new UserInfo(target)); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	void unpolyTeam(int team) | ||||
| 	{ | ||||
| 		final LinkedList<String> linked = GameEvent.players.get(team); | ||||
| 		final Iterator<String> it = linked.iterator(); | ||||
| 		 | ||||
| 		while (it.hasNext()) | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				final PlayerInstance target = World.getInstance().getPlayer(it.next()); | ||||
| 				target.getPoly().setPolyInfo(null, "1"); | ||||
| 				target.decayMe(); | ||||
| 				target.spawnMe(target.getX(), target.getY(), target.getZ()); | ||||
| 				target.broadcastPacket(new CharInfo(target)); | ||||
| 				target.sendPacket(new UserInfo(target)); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void createItem(PlayerInstance activeChar, PlayerInstance player, int id, int num) | ||||
| 	{ | ||||
| 		player.getInventory().addItem("Event", id, num, player, activeChar); | ||||
| @@ -855,7 +779,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 	void telePlayersBack(int team) | ||||
| 	{ | ||||
| 		resTeam(team); | ||||
| 		unpolyTeam(team); | ||||
| 		 | ||||
| 		final LinkedList<String> linked = GameEvent.players.get(team); | ||||
| 		final Iterator<String> it = linked.iterator(); | ||||
|   | ||||
| @@ -1,135 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.handler.admincommandhandlers; | ||||
|  | ||||
| import java.util.StringTokenizer; | ||||
|  | ||||
| import org.l2jmobius.gameserver.handler.IAdminCommandHandler; | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.network.SystemMessageId; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; | ||||
| import org.l2jmobius.gameserver.util.BuilderUtil; | ||||
|  | ||||
| /** | ||||
|  * This class handles following admin commands: polymorph | ||||
|  * @version $Revision: 1.2.2.1.2.4 $ $Date: 2007/07/31 10:05:56 $ | ||||
|  */ | ||||
|  | ||||
| public class AdminPolymorph implements IAdminCommandHandler | ||||
| { | ||||
| 	private static final String[] ADMIN_COMMANDS = | ||||
| 	{ | ||||
| 		"admin_polymorph", | ||||
| 		"admin_unpolymorph", | ||||
| 		"admin_polymorph_menu", | ||||
| 		"admin_unpolymorph_menu" | ||||
| 	}; | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean useAdminCommand(String command, PlayerInstance activeChar) | ||||
| 	{ | ||||
| 		if (command.startsWith("admin_polymorph")) | ||||
| 		{ | ||||
| 			final StringTokenizer st = new StringTokenizer(command); | ||||
| 			final WorldObject target = activeChar.getTarget(); | ||||
| 			 | ||||
| 			try | ||||
| 			{ | ||||
| 				st.nextToken(); | ||||
| 				final String p1 = st.nextToken(); | ||||
| 				if (st.hasMoreTokens()) | ||||
| 				{ | ||||
| 					final String p2 = st.nextToken(); | ||||
| 					doPolymorph(activeChar, target, p2, p1); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					doPolymorph(activeChar, target, p1, "npc"); | ||||
| 				} | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 				BuilderUtil.sendSysMessage(activeChar, "Usage: //polymorph [type] <id>"); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.equals("admin_unpolymorph")) | ||||
| 		{ | ||||
| 			doUnpoly(activeChar, activeChar.getTarget()); | ||||
| 		} | ||||
| 		 | ||||
| 		if (command.contains("menu")) | ||||
| 		{ | ||||
| 			showMainPage(activeChar); | ||||
| 		} | ||||
| 		 | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String[] getAdminCommandList() | ||||
| 	{ | ||||
| 		return ADMIN_COMMANDS; | ||||
| 	} | ||||
| 	 | ||||
| 	private void doPolymorph(PlayerInstance activeChar, WorldObject obj, String id, String type) | ||||
| 	{ | ||||
| 		if (obj != null) | ||||
| 		{ | ||||
| 			obj.getPoly().setPolyInfo(type, id); | ||||
| 			 | ||||
| 			// animation | ||||
| 			if (obj instanceof Creature) | ||||
| 			{ | ||||
| 				final Creature creature = (Creature) obj; | ||||
| 				creature.broadcastPacket(new MagicSkillUse(creature, creature, 1008, 1, 4000, 0)); | ||||
| 				creature.sendPacket(new SetupGauge(0, 4000)); | ||||
| 			} | ||||
| 			 | ||||
| 			// end of animation | ||||
| 			obj.decayMe(); | ||||
| 			obj.spawnMe(obj.getX(), obj.getY(), obj.getZ()); | ||||
| 			BuilderUtil.sendSysMessage(activeChar, "Polymorph succeed"); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			activeChar.sendPacket(SystemMessageId.INVALID_TARGET); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void doUnpoly(PlayerInstance activeChar, WorldObject target) | ||||
| 	{ | ||||
| 		if (target != null) | ||||
| 		{ | ||||
| 			target.getPoly().setPolyInfo(null, "1"); | ||||
| 			target.decayMe(); | ||||
| 			target.spawnMe(target.getX(), target.getY(), target.getZ()); | ||||
| 			BuilderUtil.sendSysMessage(activeChar, "Unpolymorph succeed"); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			activeChar.sendPacket(SystemMessageId.INVALID_TARGET); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void showMainPage(PlayerInstance activeChar) | ||||
| 	{ | ||||
| 		AdminHelpPage.showHelpPage(activeChar, "effects_menu.htm"); | ||||
| 	} | ||||
| } | ||||
| @@ -25,7 +25,6 @@ import org.l2jmobius.gameserver.instancemanager.MercTicketManager; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.knownlist.WorldObjectKnownList; | ||||
| import org.l2jmobius.gameserver.model.actor.poly.ObjectPoly; | ||||
| import org.l2jmobius.gameserver.model.items.instance.ItemInstance; | ||||
| import org.l2jmobius.gameserver.network.GameClient; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; | ||||
| @@ -47,7 +46,6 @@ public abstract class WorldObject | ||||
| 	private WorldObjectKnownList _knownList; | ||||
| 	private String _name; | ||||
| 	private int _objectId; | ||||
| 	private ObjectPoly _poly; | ||||
| 	private ObjectPosition _position; | ||||
| 	 | ||||
| 	// Objects can only see objects in same instancezone, instance 0 is normal world -1 the all seeing world | ||||
| @@ -351,15 +349,6 @@ public abstract class WorldObject | ||||
| 		return _objectId; | ||||
| 	} | ||||
| 	 | ||||
| 	public ObjectPoly getPoly() | ||||
| 	{ | ||||
| 		if (_poly == null) | ||||
| 		{ | ||||
| 			_poly = new ObjectPoly(this); | ||||
| 		} | ||||
| 		return _poly; | ||||
| 	} | ||||
| 	 | ||||
| 	public ObjectPosition getPosition() | ||||
| 	{ | ||||
| 		if (_position == null) | ||||
|   | ||||
| @@ -4082,7 +4082,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder | ||||
| 	 * In Server->Client packet, each effect is represented by 1 bit of the map (ex : BLEEDING = 0x0001 (bit 1), SLEEP = 0x0080 (bit 8)...). The map is calculated by applying a BINARY OR operation on each effect.<br> | ||||
| 	 * <br> | ||||
| 	 * <b><u>Example of use</u>:</b><br> | ||||
| 	 * <li>Server Packet : CharInfo, NpcInfo, NpcInfoPoly, UserInfo...</li> | ||||
| 	 * <li>Server Packet : CharInfo, NpcInfo, UserInfo...</li> | ||||
| 	 * @return the abnormal effect | ||||
| 	 */ | ||||
| 	public int getAbnormalEffect() | ||||
|   | ||||
| @@ -44,7 +44,6 @@ import org.l2jmobius.gameserver.network.serverpackets.PrivateStoreMsgSell; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.RecipeShopMsg; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.RelationChanged; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SpawnItem; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SpawnItemPoly; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.StaticObject; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.VehicleInfo; | ||||
|  | ||||
| @@ -119,126 +118,119 @@ public class PlayerKnownList extends PlayableKnownList | ||||
| 		// On retail there is a similar, if not greater, delay as well. | ||||
| 		ThreadPool.schedule(() -> | ||||
| 		{ | ||||
| 			if (object.getPoly().isMorphed() && object.getPoly().getPolyType().equals("item")) | ||||
| 			if (object.isItem()) | ||||
| 			{ | ||||
| 				activeChar.sendPacket(new SpawnItemPoly(object)); | ||||
| 				if (dropper != null) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new DropItem((ItemInstance) object, dropper.getObjectId())); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new SpawnItem((ItemInstance) object)); | ||||
| 				} | ||||
| 			} | ||||
| 			else | ||||
| 			else if (object.isDoor()) | ||||
| 			{ | ||||
| 				if (object.isItem()) | ||||
| 				if (((DoorInstance) object).getCastle() != null) | ||||
| 				{ | ||||
| 					if (dropper != null) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new DropItem((ItemInstance) object, dropper.getObjectId())); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new SpawnItem((ItemInstance) object)); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new DoorInfo((DoorInstance) object, true)); | ||||
| 				} | ||||
| 				else if (object.isDoor()) | ||||
| 				else | ||||
| 				{ | ||||
| 					if (((DoorInstance) object).getCastle() != null) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new DoorInfo((DoorInstance) object, true)); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new DoorInfo((DoorInstance) object, false)); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new DoorStatusUpdate((DoorInstance) object)); | ||||
| 					activeChar.sendPacket(new DoorInfo((DoorInstance) object, false)); | ||||
| 				} | ||||
| 				else if (object.isBoat()) | ||||
| 				activeChar.sendPacket(new DoorStatusUpdate((DoorInstance) object)); | ||||
| 			} | ||||
| 			else if (object.isBoat()) | ||||
| 			{ | ||||
| 				if (!activeChar.isInBoat() && (object != activeChar.getBoat())) | ||||
| 				{ | ||||
| 					if (!activeChar.isInBoat() && (object != activeChar.getBoat())) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new VehicleInfo((BoatInstance) object)); | ||||
| 						((BoatInstance) object).sendVehicleDeparture(activeChar); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new VehicleInfo((BoatInstance) object)); | ||||
| 					((BoatInstance) object).sendVehicleDeparture(activeChar); | ||||
| 				} | ||||
| 				else if (object.isNpc()) | ||||
| 			} | ||||
| 			else if (object.isNpc()) | ||||
| 			{ | ||||
| 				activeChar.sendPacket(new NpcInfo((NpcInstance) object, activeChar)); | ||||
| 			} | ||||
| 			else if (object.isSummon()) | ||||
| 			{ | ||||
| 				final Summon summon = (Summon) object; | ||||
| 				 | ||||
| 				// Check if the PlayerInstance is the owner of the Pet | ||||
| 				if (activeChar.equals(summon.getOwner())) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new NpcInfo((NpcInstance) object, activeChar)); | ||||
| 				} | ||||
| 				else if (object.isSummon()) | ||||
| 				{ | ||||
| 					final Summon summon = (Summon) object; | ||||
| 					activeChar.sendPacket(new PetInfo(summon)); | ||||
| 					// The PetInfo packet wipes the PartySpelled (list of active spells' icons). Re-add them | ||||
| 					summon.updateEffectIcons(true); | ||||
| 					 | ||||
| 					// Check if the PlayerInstance is the owner of the Pet | ||||
| 					if (activeChar.equals(summon.getOwner())) | ||||
| 					if (summon instanceof PetInstance) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new PetInfo(summon)); | ||||
| 						// The PetInfo packet wipes the PartySpelled (list of active spells' icons). Re-add them | ||||
| 						summon.updateEffectIcons(true); | ||||
| 						 | ||||
| 						if (summon instanceof PetInstance) | ||||
| 						{ | ||||
| 							activeChar.sendPacket(new PetItemList((PetInstance) summon)); | ||||
| 						} | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new NpcInfo(summon, activeChar)); | ||||
| 						activeChar.sendPacket(new PetItemList((PetInstance) summon)); | ||||
| 					} | ||||
| 				} | ||||
| 				else if (object.isPlayer()) | ||||
| 				else | ||||
| 				{ | ||||
| 					final PlayerInstance otherPlayer = (PlayerInstance) object; | ||||
| 					if (otherPlayer.isInBoat()) | ||||
| 					activeChar.sendPacket(new NpcInfo(summon, activeChar)); | ||||
| 				} | ||||
| 			} | ||||
| 			else if (object.isPlayer()) | ||||
| 			{ | ||||
| 				final PlayerInstance otherPlayer = (PlayerInstance) object; | ||||
| 				if (otherPlayer.isInBoat()) | ||||
| 				{ | ||||
| 					otherPlayer.getPosition().setWorldPosition(otherPlayer.getBoat().getLocation()); | ||||
| 					activeChar.sendPacket(new CharInfo(otherPlayer)); | ||||
| 					 | ||||
| 					final int relation = otherPlayer.getRelation(activeChar); | ||||
| 					if ((otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation)) | ||||
| 					{ | ||||
| 						otherPlayer.getPosition().setWorldPosition(otherPlayer.getBoat().getLocation()); | ||||
| 						activeChar.sendPacket(new CharInfo(otherPlayer)); | ||||
| 						 | ||||
| 						final int relation = otherPlayer.getRelation(activeChar); | ||||
| 						if ((otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation)) | ||||
| 						{ | ||||
| 							activeChar.sendPacket(new RelationChanged(otherPlayer, relation, activeChar.isAutoAttackable(otherPlayer))); | ||||
| 						} | ||||
| 						 | ||||
| 						activeChar.sendPacket(new GetOnVehicle(otherPlayer, otherPlayer.getBoat(), otherPlayer.getBoatPosition().getX(), otherPlayer.getBoatPosition().getY(), otherPlayer.getBoatPosition().getZ())); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new CharInfo(otherPlayer)); | ||||
| 						 | ||||
| 						final int relation = otherPlayer.getRelation(activeChar); | ||||
| 						if ((otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation)) | ||||
| 						{ | ||||
| 							activeChar.sendPacket(new RelationChanged(otherPlayer, relation, activeChar.isAutoAttackable(otherPlayer))); | ||||
| 						} | ||||
| 						activeChar.sendPacket(new RelationChanged(otherPlayer, relation, activeChar.isAutoAttackable(otherPlayer))); | ||||
| 					} | ||||
| 					 | ||||
| 					if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_SELL) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new PrivateStoreMsgSell(otherPlayer)); | ||||
| 					} | ||||
| 					else if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_BUY) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new PrivateStoreMsgBuy(otherPlayer)); | ||||
| 					} | ||||
| 					else if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_MANUFACTURE) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new RecipeShopMsg(otherPlayer)); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new GetOnVehicle(otherPlayer, otherPlayer.getBoat(), otherPlayer.getBoatPosition().getX(), otherPlayer.getBoatPosition().getY(), otherPlayer.getBoatPosition().getZ())); | ||||
| 				} | ||||
| 				else if (object instanceof FenceInstance) | ||||
| 				else | ||||
| 				{ | ||||
| 					((FenceInstance) object).sendInfo(activeChar); | ||||
| 				} | ||||
| 				else if (object instanceof StaticObjectInstance) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new StaticObject((StaticObjectInstance) object)); | ||||
| 					activeChar.sendPacket(new CharInfo(otherPlayer)); | ||||
| 					 | ||||
| 					final int relation = otherPlayer.getRelation(activeChar); | ||||
| 					if ((otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation)) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new RelationChanged(otherPlayer, relation, activeChar.isAutoAttackable(otherPlayer))); | ||||
| 					} | ||||
| 				} | ||||
| 				 | ||||
| 				if (object.isCreature()) | ||||
| 				if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_SELL) | ||||
| 				{ | ||||
| 					// Update the state of the Creature object client side by sending Server->Client packet MoveToPawn/CharMoveToLocation and AutoAttackStart to the PlayerInstance | ||||
| 					final Creature obj = (Creature) object; | ||||
| 					final CreatureAI objAi = obj.getAI(); | ||||
| 					if (objAi != null) | ||||
| 					{ | ||||
| 						objAi.describeStateToPlayer(activeChar); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new PrivateStoreMsgSell(otherPlayer)); | ||||
| 				} | ||||
| 				else if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_BUY) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new PrivateStoreMsgBuy(otherPlayer)); | ||||
| 				} | ||||
| 				else if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_MANUFACTURE) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new RecipeShopMsg(otherPlayer)); | ||||
| 				} | ||||
| 			} | ||||
| 			else if (object instanceof FenceInstance) | ||||
| 			{ | ||||
| 				((FenceInstance) object).sendInfo(activeChar); | ||||
| 			} | ||||
| 			else if (object instanceof StaticObjectInstance) | ||||
| 			{ | ||||
| 				activeChar.sendPacket(new StaticObject((StaticObjectInstance) object)); | ||||
| 			} | ||||
| 			 | ||||
| 			if (object.isCreature()) | ||||
| 			{ | ||||
| 				// Update the state of the Creature object client side by sending Server->Client packet MoveToPawn/CharMoveToLocation and AutoAttackStart to the PlayerInstance | ||||
| 				final Creature obj = (Creature) object; | ||||
| 				final CreatureAI objAi = obj.getAI(); | ||||
| 				if (objAi != null) | ||||
| 				{ | ||||
| 					objAi.describeStateToPlayer(activeChar); | ||||
| 				} | ||||
| 			} | ||||
| 		}, _packetSendDelay + Rnd.get(50)); // Add additional 0-49ms in case of overlapping tasks on heavy load. | ||||
|   | ||||
| @@ -1,67 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.model.actor.poly; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
|  | ||||
| public class ObjectPoly | ||||
| { | ||||
| 	private final WorldObject _activeObject; | ||||
| 	private int _polyId; | ||||
| 	private String _polyType; | ||||
| 	 | ||||
| 	public ObjectPoly(WorldObject activeObject) | ||||
| 	{ | ||||
| 		_activeObject = activeObject; | ||||
| 	} | ||||
| 	 | ||||
| 	public void setPolyInfo(String polyType, String polyId) | ||||
| 	{ | ||||
| 		setPolyId(Integer.parseInt(polyId)); | ||||
| 		setPolyType(polyType); | ||||
| 	} | ||||
| 	 | ||||
| 	public WorldObject getActiveObject() | ||||
| 	{ | ||||
| 		return _activeObject; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isMorphed() | ||||
| 	{ | ||||
| 		return _polyType != null; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getPolyId() | ||||
| 	{ | ||||
| 		return _polyId; | ||||
| 	} | ||||
| 	 | ||||
| 	public void setPolyId(int value) | ||||
| 	{ | ||||
| 		_polyId = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getPolyType() | ||||
| 	{ | ||||
| 		return _polyType; | ||||
| 	} | ||||
| 	 | ||||
| 	public void setPolyType(String value) | ||||
| 	{ | ||||
| 		_polyType = value; | ||||
| 	} | ||||
| } | ||||
| @@ -35,7 +35,6 @@ import org.l2jmobius.gameserver.network.serverpackets.PetInfo; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.PetItemList; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.RelationChanged; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SpawnItem; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SpawnItemPoly; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.StaticObject; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.UserInfo; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.VehicleInfo; | ||||
| @@ -66,98 +65,91 @@ public class RequestRecordInfo extends GameClientPacket | ||||
| 				continue; | ||||
| 			} | ||||
| 			 | ||||
| 			if (object.getPoly().isMorphed() && object.getPoly().getPolyType().equals("item")) | ||||
| 			if (object instanceof ItemInstance) | ||||
| 			{ | ||||
| 				player.sendPacket(new SpawnItemPoly(object)); | ||||
| 				player.sendPacket(new SpawnItem((ItemInstance) object)); | ||||
| 			} | ||||
| 			else | ||||
| 			else if (object instanceof DoorInstance) | ||||
| 			{ | ||||
| 				if (object instanceof ItemInstance) | ||||
| 				if (((DoorInstance) object).getCastle() != null) | ||||
| 				{ | ||||
| 					player.sendPacket(new SpawnItem((ItemInstance) object)); | ||||
| 					player.sendPacket(new DoorInfo((DoorInstance) object, true)); | ||||
| 				} | ||||
| 				else if (object instanceof DoorInstance) | ||||
| 				else | ||||
| 				{ | ||||
| 					if (((DoorInstance) object).getCastle() != null) | ||||
| 					{ | ||||
| 						player.sendPacket(new DoorInfo((DoorInstance) object, true)); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						player.sendPacket(new DoorInfo((DoorInstance) object, false)); | ||||
| 					} | ||||
| 					player.sendPacket(new DoorStatusUpdate((DoorInstance) object)); | ||||
| 					player.sendPacket(new DoorInfo((DoorInstance) object, false)); | ||||
| 				} | ||||
| 				else if (object instanceof BoatInstance) | ||||
| 				player.sendPacket(new DoorStatusUpdate((DoorInstance) object)); | ||||
| 			} | ||||
| 			else if (object instanceof BoatInstance) | ||||
| 			{ | ||||
| 				if (!player.isInBoat() && (object != player.getBoat())) | ||||
| 				{ | ||||
| 					if (!player.isInBoat() && (object != player.getBoat())) | ||||
| 					player.sendPacket(new VehicleInfo((BoatInstance) object)); | ||||
| 					((BoatInstance) object).sendVehicleDeparture(player); | ||||
| 				} | ||||
| 			} | ||||
| 			else if (object instanceof StaticObjectInstance) | ||||
| 			{ | ||||
| 				player.sendPacket(new StaticObject((StaticObjectInstance) object)); | ||||
| 			} | ||||
| 			else if (object instanceof NpcInstance) | ||||
| 			{ | ||||
| 				player.sendPacket(new NpcInfo((NpcInstance) object, player)); | ||||
| 			} | ||||
| 			else if (object instanceof Summon) | ||||
| 			{ | ||||
| 				final Summon summon = (Summon) object; | ||||
| 				 | ||||
| 				// Check if the PlayerInstance is the owner of the Pet | ||||
| 				if (player.equals(summon.getOwner())) | ||||
| 				{ | ||||
| 					player.sendPacket(new PetInfo(summon)); | ||||
| 					if (summon instanceof PetInstance) | ||||
| 					{ | ||||
| 						player.sendPacket(new VehicleInfo((BoatInstance) object)); | ||||
| 						((BoatInstance) object).sendVehicleDeparture(player); | ||||
| 						player.sendPacket(new PetItemList((PetInstance) summon)); | ||||
| 					} | ||||
| 				} | ||||
| 				else if (object instanceof StaticObjectInstance) | ||||
| 				else | ||||
| 				{ | ||||
| 					player.sendPacket(new StaticObject((StaticObjectInstance) object)); | ||||
| 				} | ||||
| 				else if (object instanceof NpcInstance) | ||||
| 				{ | ||||
| 					player.sendPacket(new NpcInfo((NpcInstance) object, player)); | ||||
| 				} | ||||
| 				else if (object instanceof Summon) | ||||
| 				{ | ||||
| 					final Summon summon = (Summon) object; | ||||
| 					 | ||||
| 					// Check if the PlayerInstance is the owner of the Pet | ||||
| 					if (player.equals(summon.getOwner())) | ||||
| 					{ | ||||
| 						player.sendPacket(new PetInfo(summon)); | ||||
| 						if (summon instanceof PetInstance) | ||||
| 						{ | ||||
| 							player.sendPacket(new PetItemList((PetInstance) summon)); | ||||
| 						} | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						player.sendPacket(new NpcInfo(summon, player)); | ||||
| 					} | ||||
| 					 | ||||
| 					// The PetInfo packet wipes the PartySpelled (list of active spells' icons). Re-add them | ||||
| 					summon.updateEffectIcons(true); | ||||
| 				} | ||||
| 				else if (object instanceof PlayerInstance) | ||||
| 				{ | ||||
| 					final PlayerInstance otherPlayer = (PlayerInstance) object; | ||||
| 					if (otherPlayer.isInBoat()) | ||||
| 					{ | ||||
| 						otherPlayer.getPosition().setWorldPosition(otherPlayer.getBoat().getLocation()); | ||||
| 						player.sendPacket(new CharInfo(otherPlayer)); | ||||
| 						final int relation = otherPlayer.getRelation(player); | ||||
| 						if ((otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != relation)) | ||||
| 						{ | ||||
| 							player.sendPacket(new RelationChanged(otherPlayer, relation, player.isAutoAttackable(otherPlayer))); | ||||
| 						} | ||||
| 						player.sendPacket(new GetOnVehicle(otherPlayer, otherPlayer.getBoat(), otherPlayer.getBoatPosition().getX(), otherPlayer.getBoatPosition().getY(), otherPlayer.getBoatPosition().getZ())); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						player.sendPacket(new CharInfo(otherPlayer)); | ||||
| 						final int relation = otherPlayer.getRelation(player); | ||||
| 						if ((otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != relation)) | ||||
| 						{ | ||||
| 							player.sendPacket(new RelationChanged(otherPlayer, relation, player.isAutoAttackable(otherPlayer))); | ||||
| 						} | ||||
| 					} | ||||
| 					player.sendPacket(new NpcInfo(summon, player)); | ||||
| 				} | ||||
| 				 | ||||
| 				if (object instanceof Creature) | ||||
| 				// The PetInfo packet wipes the PartySpelled (list of active spells' icons). Re-add them | ||||
| 				summon.updateEffectIcons(true); | ||||
| 			} | ||||
| 			else if (object instanceof PlayerInstance) | ||||
| 			{ | ||||
| 				final PlayerInstance otherPlayer = (PlayerInstance) object; | ||||
| 				if (otherPlayer.isInBoat()) | ||||
| 				{ | ||||
| 					// Update the state of the Creature object client side by sending Server->Client packet MoveToPawn/CharMoveToLocation and AutoAttackStart to the PlayerInstance | ||||
| 					final Creature obj = (Creature) object; | ||||
| 					if (obj.hasAI()) | ||||
| 					otherPlayer.getPosition().setWorldPosition(otherPlayer.getBoat().getLocation()); | ||||
| 					player.sendPacket(new CharInfo(otherPlayer)); | ||||
| 					final int relation = otherPlayer.getRelation(player); | ||||
| 					if ((otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != relation)) | ||||
| 					{ | ||||
| 						obj.getAI().describeStateToPlayer(player); | ||||
| 						player.sendPacket(new RelationChanged(otherPlayer, relation, player.isAutoAttackable(otherPlayer))); | ||||
| 					} | ||||
| 					player.sendPacket(new GetOnVehicle(otherPlayer, otherPlayer.getBoat(), otherPlayer.getBoatPosition().getX(), otherPlayer.getBoatPosition().getY(), otherPlayer.getBoatPosition().getZ())); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					player.sendPacket(new CharInfo(otherPlayer)); | ||||
| 					final int relation = otherPlayer.getRelation(player); | ||||
| 					if ((otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != relation)) | ||||
| 					{ | ||||
| 						player.sendPacket(new RelationChanged(otherPlayer, relation, player.isAutoAttackable(otherPlayer))); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			if (object instanceof Creature) | ||||
| 			{ | ||||
| 				// Update the state of the Creature object client side by sending Server->Client packet MoveToPawn/CharMoveToLocation and AutoAttackStart to the PlayerInstance | ||||
| 				final Creature obj = (Creature) object; | ||||
| 				if (obj.hasAI()) | ||||
| 				{ | ||||
| 					obj.getAI().describeStateToPlayer(player); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -16,45 +16,25 @@ | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.network.serverpackets; | ||||
|  | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.gameserver.datatables.sql.NpcTable; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; | ||||
| import org.l2jmobius.gameserver.model.itemcontainer.Inventory; | ||||
|  | ||||
| public class CharInfo extends GameServerPacket | ||||
| { | ||||
| 	private static final Logger LOGGER = Logger.getLogger(CharInfo.class.getName()); | ||||
| 	 | ||||
| 	private final PlayerInstance _player; | ||||
| 	private final Inventory _inventory; | ||||
| 	private final int _x; | ||||
| 	private final int _y; | ||||
| 	private final int _z; | ||||
| 	private final int _heading; | ||||
| 	private final int _mAtkSpd; | ||||
| 	private final int _pAtkSpd; | ||||
| 	private final int _runSpd; | ||||
| 	private final int _walkSpd; | ||||
| 	private final int _flyRunSpd; | ||||
| 	private final int _flyWalkSpd; | ||||
| 	private final float _moveMultiplier; | ||||
| 	private final float _attackSpeedMultiplier; | ||||
| 	 | ||||
| 	public CharInfo(PlayerInstance player) | ||||
| 	{ | ||||
| 		_player = player; | ||||
| 		_inventory = player.getInventory(); | ||||
| 		_x = player.getX(); | ||||
| 		_y = player.getY(); | ||||
| 		_z = player.getZ(); | ||||
| 		_heading = player.getHeading(); | ||||
| 		_mAtkSpd = player.getMAtkSpd(); | ||||
| 		_pAtkSpd = player.getPAtkSpd(); | ||||
| 		_attackSpeedMultiplier = player.getAttackSpeedMultiplier(); | ||||
| 		_moveMultiplier = player.getMovementSpeedMultiplier(); | ||||
| 		_runSpd = Math.round(player.getRunSpeed() / _moveMultiplier); | ||||
| 		_walkSpd = Math.round(player.getWalkSpeed() / _moveMultiplier); | ||||
| @@ -66,237 +46,153 @@ public class CharInfo extends GameServerPacket | ||||
| 	protected final void writeImpl() | ||||
| 	{ | ||||
| 		boolean isGM = false; | ||||
| 		 | ||||
| 		final PlayerInstance tmp = getClient().getPlayer(); | ||||
| 		if ((tmp != null) && tmp.isGM()) | ||||
| 		{ | ||||
| 			isGM = true; | ||||
| 		} | ||||
| 		 | ||||
| 		if (!isGM && _player.getAppearance().isInvisible()) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		if (_player.getPoly().isMorphed()) | ||||
| 		writeC(0x03); | ||||
| 		writeD(_player.getX()); | ||||
| 		writeD(_player.getY()); | ||||
| 		writeD(_player.getZ()); | ||||
| 		writeD(_player.getBoat() != null ? _player.getBoat().getObjectId() : 0); | ||||
| 		writeD(_player.getObjectId()); | ||||
| 		writeS(_player.getName()); | ||||
| 		writeD(_player.getRace().ordinal()); | ||||
| 		writeD(_player.getAppearance().isFemale() ? 1 : 0); | ||||
| 		 | ||||
| 		if (_player.getClassIndex() == 0) | ||||
| 		{ | ||||
| 			final NpcTemplate template = NpcTable.getInstance().getTemplate(_player.getPoly().getPolyId()); | ||||
| 			if (template != null) | ||||
| 			{ | ||||
| 				writeC(0x16); | ||||
| 				writeD(_player.getObjectId()); | ||||
| 				writeD(_player.getPoly().getPolyId() + 1000000); // npctype id | ||||
| 				writeD(_player.getKarma() > 0 ? 1 : 0); | ||||
| 				writeD(_x); | ||||
| 				writeD(_y); | ||||
| 				writeD(_z); | ||||
| 				writeD(_heading); | ||||
| 				writeD(0x00); | ||||
| 				writeD(_mAtkSpd); | ||||
| 				writeD(_pAtkSpd); | ||||
| 				writeD(_runSpd); // base run speed | ||||
| 				writeD(_walkSpd); // base walk speed | ||||
| 				writeD(_runSpd); // swim run speed (calculated by getter) | ||||
| 				writeD(_walkSpd); // swim walk speed (calculated by getter) | ||||
| 				writeD(_flyRunSpd); // fly run speed ? | ||||
| 				writeD(_flyWalkSpd); // fly walk speed ? | ||||
| 				writeD(_flyRunSpd); | ||||
| 				writeD(_flyWalkSpd); | ||||
| 				writeF(_moveMultiplier); | ||||
| 				writeF(_attackSpeedMultiplier); | ||||
| 				writeF(template.getCollisionRadius()); | ||||
| 				writeF(template.getCollisionHeight()); | ||||
| 				writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); // right hand weapon | ||||
| 				writeD(0); | ||||
| 				writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); // left hand weapon | ||||
| 				writeC(1); // name above char 1=true ... ?? | ||||
| 				writeC(_player.isRunning() ? 1 : 0); | ||||
| 				writeC(_player.isInCombat() ? 1 : 0); | ||||
| 				writeC(_player.isAlikeDead() ? 1 : 0); | ||||
| 				 | ||||
| 				// if(gmSeeInvis) | ||||
| 				// { | ||||
| 				writeC(0); // if the charinfo is written means receiver can see the char | ||||
| 				// } | ||||
| 				// else | ||||
| 				// { | ||||
| 				// writeC(_player.getAppearance().getInvisible() ? 1 : 0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation) | ||||
| 				// } | ||||
| 				writeS(_player.getName()); | ||||
| 				 | ||||
| 				if (_player.getAppearance().isInvisible()) | ||||
| 				{ | ||||
| 					writeS("Invisible"); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					writeS(_player.getTitle()); | ||||
| 				} | ||||
| 				 | ||||
| 				writeD(0); | ||||
| 				writeD(0); | ||||
| 				writeD(0); // hmm karma ?? | ||||
| 				 | ||||
| 				if (_player.getAppearance().isInvisible()) | ||||
| 				{ | ||||
| 					writeD((_player.getAbnormalEffect() | Creature.ABNORMAL_EFFECT_STEALTH)); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					writeD(_player.getAbnormalEffect()); // C2 | ||||
| 				} | ||||
| 				 | ||||
| 				writeD(0); // C2 | ||||
| 				writeD(0); // C2 | ||||
| 				writeD(0); // C2 | ||||
| 				writeD(0); // C2 | ||||
| 				writeC(0); // C2 | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				LOGGER.warning("Character " + _player.getName() + " (" + _player.getObjectId() + ") morphed in a Npc (" + _player.getPoly().getPolyId() + ") w/o template."); | ||||
| 			} | ||||
| 			writeD(_player.getClassId().getId()); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			writeC(0x03); | ||||
| 			writeD(_x); | ||||
| 			writeD(_y); | ||||
| 			writeD(_z); | ||||
| 			writeD(_player.getBoat() != null ? _player.getBoat().getObjectId() : 0); | ||||
| 			writeD(_player.getObjectId()); | ||||
| 			writeS(_player.getName()); | ||||
| 			writeD(_player.getRace().ordinal()); | ||||
| 			writeD(_player.getAppearance().isFemale() ? 1 : 0); | ||||
| 			 | ||||
| 			if (_player.getClassIndex() == 0) | ||||
| 			{ | ||||
| 				writeD(_player.getClassId().getId()); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				writeD(_player.getBaseClass()); | ||||
| 			} | ||||
| 			 | ||||
| 			writeD(0x00); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_HEAD)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_FEET)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_BACK)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_HAIR)); | ||||
| 			 | ||||
| 			writeD(_player.getPvpFlag()); | ||||
| 			writeD(_player.getKarma()); | ||||
| 			 | ||||
| 			writeD(_mAtkSpd); | ||||
| 			writeD(_pAtkSpd); | ||||
| 			 | ||||
| 			writeD(_player.getPvpFlag()); | ||||
| 			writeD(_player.getKarma()); | ||||
| 			 | ||||
| 			writeD(_runSpd); // base run speed | ||||
| 			writeD(_walkSpd); // base walk speed | ||||
| 			writeD(_runSpd); // swim run speed (calculated by getter) | ||||
| 			writeD(_walkSpd); // swim walk speed (calculated by getter) | ||||
| 			writeD(_flyRunSpd); // fly run speed ? | ||||
| 			writeD(_flyWalkSpd); // fly walk speed ? | ||||
| 			writeD(_flyRunSpd); | ||||
| 			writeD(_flyWalkSpd); | ||||
| 			writeF(_moveMultiplier); | ||||
| 			writeF(_attackSpeedMultiplier); | ||||
| 			writeF(_player.getBaseTemplate().getCollisionRadius()); | ||||
| 			writeF(_player.getBaseTemplate().getCollisionHeight()); | ||||
| 			 | ||||
| 			writeD(_player.getAppearance().getHairStyle()); | ||||
| 			writeD(_player.getAppearance().getHairColor()); | ||||
| 			writeD(_player.getAppearance().getFace()); | ||||
| 			 | ||||
| 			if (_player.getAppearance().isInvisible()) | ||||
| 			{ | ||||
| 				writeS("[Invisible]"); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				writeS(_player.getTitle()); | ||||
| 			} | ||||
| 			 | ||||
| 			writeD(_player.getClanId()); | ||||
| 			writeD(_player.getClanCrestId()); | ||||
| 			writeD(_player.getAllyId()); | ||||
| 			writeD(_player.getAllyCrestId()); | ||||
| 			// In UserInfo leader rights and siege flags, but here found nothing?? | ||||
| 			// Therefore RelationChanged packet with that info is required | ||||
| 			writeD(0x00); | ||||
| 			 | ||||
| 			writeC(_player.isSitting() ? 0 : 1); // standing = 1 sitting = 0 | ||||
| 			writeC(_player.isRunning() ? 1 : 0); // running = 1 walking = 0 | ||||
| 			writeC(_player.isInCombat() ? 1 : 0); | ||||
| 			writeC(_player.isAlikeDead() ? 1 : 0); | ||||
| 			 | ||||
| 			// if(gmSeeInvis) | ||||
| 			// { | ||||
| 			writeC(0x00); // if the charinfo is written means receiver can see the char | ||||
| 			// } | ||||
| 			// else | ||||
| 			// { | ||||
| 			// writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible = 1 visible =0 | ||||
| 			// } | ||||
| 			writeC(_player.getMountType()); // 1 on strider 2 on wyvern 0 no mount | ||||
| 			writeC(_player.getPrivateStoreType()); // 1 - sellshop | ||||
| 			 | ||||
| 			writeH(_player.getCubics().size()); | ||||
| 			for (int cubicId : _player.getCubics().keySet()) | ||||
| 			{ | ||||
| 				writeH(cubicId); | ||||
| 			} | ||||
| 			 | ||||
| 			writeC(_player.isInPartyMatchRoom() ? 1 : 0); | ||||
| 			 | ||||
| 			if (_player.getAppearance().isInvisible()) | ||||
| 			{ | ||||
| 				writeD((_player.getAbnormalEffect() | Creature.ABNORMAL_EFFECT_STEALTH)); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				writeD(_player.getAbnormalEffect()); | ||||
| 			} | ||||
| 			 | ||||
| 			writeC(_player.getRecomLeft()); | ||||
| 			writeH(_player.getRecomHave()); // Blue value for name (0 = white, 255 = pure blue) | ||||
| 			writeD(_player.getClassId().getId()); | ||||
| 			 | ||||
| 			writeD(_player.getMaxCp()); | ||||
| 			writeD((int) _player.getCurrentCp()); | ||||
| 			writeC(_player.isMounted() ? 0 : _player.getEnchantEffect()); | ||||
| 			 | ||||
| 			if (_player.getTeam() == 1) | ||||
| 			{ | ||||
| 				writeC(0x01); // team circle around feet 1= Blue, 2 = red | ||||
| 			} | ||||
| 			else if (_player.getTeam() == 2) | ||||
| 			{ | ||||
| 				writeC(0x02); // team circle around feet 1= Blue, 2 = red | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				writeC(0x00); // team circle around feet 1= Blue, 2 = red | ||||
| 			} | ||||
| 			 | ||||
| 			writeD(_player.getClanCrestLargeId()); | ||||
| 			writeC(_player.isNoble() ? 1 : 0); // Symbol on char menu ctrl+I | ||||
| 			writeC((_player.isHero() || (_player.isGM() && Config.GM_HERO_AURA) || _player.isPVPHero()) ? 1 : 0); // Hero Aura | ||||
| 			 | ||||
| 			writeC(_player.isFishing() ? 1 : 0); // 0x01: Fishing Mode (Cant be undone by setting back to 0) | ||||
| 			writeD(_player.getFishX()); | ||||
| 			writeD(_player.getFishY()); | ||||
| 			writeD(_player.getFishZ()); | ||||
| 			 | ||||
| 			writeD(_player.getAppearance().getNameColor()); | ||||
| 			writeD(_player.getBaseClass()); | ||||
| 		} | ||||
| 		 | ||||
| 		writeD(0x00); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_HEAD)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_FEET)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_BACK)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_HAIR)); | ||||
| 		 | ||||
| 		writeD(_player.getPvpFlag()); | ||||
| 		writeD(_player.getKarma()); | ||||
| 		 | ||||
| 		writeD(_player.getMAtkSpd()); | ||||
| 		writeD(_player.getPAtkSpd()); | ||||
| 		 | ||||
| 		writeD(_player.getPvpFlag()); | ||||
| 		writeD(_player.getKarma()); | ||||
| 		 | ||||
| 		writeD(_runSpd); // base run speed | ||||
| 		writeD(_walkSpd); // base walk speed | ||||
| 		writeD(_runSpd); // swim run speed (calculated by getter) | ||||
| 		writeD(_walkSpd); // swim walk speed (calculated by getter) | ||||
| 		writeD(_flyRunSpd); // fly run speed ? | ||||
| 		writeD(_flyWalkSpd); // fly walk speed ? | ||||
| 		writeD(_flyRunSpd); | ||||
| 		writeD(_flyWalkSpd); | ||||
| 		writeF(_moveMultiplier); | ||||
| 		writeF(_player.getAttackSpeedMultiplier()); | ||||
| 		writeF(_player.getBaseTemplate().getCollisionRadius()); | ||||
| 		writeF(_player.getBaseTemplate().getCollisionHeight()); | ||||
| 		 | ||||
| 		writeD(_player.getAppearance().getHairStyle()); | ||||
| 		writeD(_player.getAppearance().getHairColor()); | ||||
| 		writeD(_player.getAppearance().getFace()); | ||||
| 		 | ||||
| 		if (_player.getAppearance().isInvisible()) | ||||
| 		{ | ||||
| 			writeS("[Invisible]"); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			writeS(_player.getTitle()); | ||||
| 		} | ||||
| 		 | ||||
| 		writeD(_player.getClanId()); | ||||
| 		writeD(_player.getClanCrestId()); | ||||
| 		writeD(_player.getAllyId()); | ||||
| 		writeD(_player.getAllyCrestId()); | ||||
| 		// In UserInfo leader rights and siege flags, but here found nothing?? | ||||
| 		// Therefore RelationChanged packet with that info is required | ||||
| 		writeD(0x00); | ||||
| 		 | ||||
| 		writeC(_player.isSitting() ? 0 : 1); // standing = 1 sitting = 0 | ||||
| 		writeC(_player.isRunning() ? 1 : 0); // running = 1 walking = 0 | ||||
| 		writeC(_player.isInCombat() ? 1 : 0); | ||||
| 		writeC(_player.isAlikeDead() ? 1 : 0); | ||||
| 		 | ||||
| 		// if(gmSeeInvis) | ||||
| 		// { | ||||
| 		writeC(0x00); // if the charinfo is written means receiver can see the char | ||||
| 		// } | ||||
| 		// else | ||||
| 		// { | ||||
| 		// writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible = 1 visible =0 | ||||
| 		// } | ||||
| 		writeC(_player.getMountType()); // 1 on strider 2 on wyvern 0 no mount | ||||
| 		writeC(_player.getPrivateStoreType()); // 1 - sellshop | ||||
| 		 | ||||
| 		writeH(_player.getCubics().size()); | ||||
| 		for (int cubicId : _player.getCubics().keySet()) | ||||
| 		{ | ||||
| 			writeH(cubicId); | ||||
| 		} | ||||
| 		 | ||||
| 		writeC(_player.isInPartyMatchRoom() ? 1 : 0); | ||||
| 		 | ||||
| 		if (_player.getAppearance().isInvisible()) | ||||
| 		{ | ||||
| 			writeD((_player.getAbnormalEffect() | Creature.ABNORMAL_EFFECT_STEALTH)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			writeD(_player.getAbnormalEffect()); | ||||
| 		} | ||||
| 		 | ||||
| 		writeC(_player.getRecomLeft()); | ||||
| 		writeH(_player.getRecomHave()); // Blue value for name (0 = white, 255 = pure blue) | ||||
| 		writeD(_player.getClassId().getId()); | ||||
| 		 | ||||
| 		writeD(_player.getMaxCp()); | ||||
| 		writeD((int) _player.getCurrentCp()); | ||||
| 		writeC(_player.isMounted() ? 0 : _player.getEnchantEffect()); | ||||
| 		 | ||||
| 		if (_player.getTeam() == 1) | ||||
| 		{ | ||||
| 			writeC(0x01); // team circle around feet 1= Blue, 2 = red | ||||
| 		} | ||||
| 		else if (_player.getTeam() == 2) | ||||
| 		{ | ||||
| 			writeC(0x02); // team circle around feet 1= Blue, 2 = red | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			writeC(0x00); // team circle around feet 1= Blue, 2 = red | ||||
| 		} | ||||
| 		 | ||||
| 		writeD(_player.getClanCrestLargeId()); | ||||
| 		writeC(_player.isNoble() ? 1 : 0); // Symbol on char menu ctrl+I | ||||
| 		writeC((_player.isHero() || (_player.isGM() && Config.GM_HERO_AURA) || _player.isPVPHero()) ? 1 : 0); // Hero Aura | ||||
| 		 | ||||
| 		writeC(_player.isFishing() ? 1 : 0); // 0x01: Fishing Mode (Cant be undone by setting back to 0) | ||||
| 		writeD(_player.getFishX()); | ||||
| 		writeD(_player.getFishY()); | ||||
| 		writeD(_player.getFishZ()); | ||||
| 		 | ||||
| 		writeD(_player.getAppearance().getNameColor()); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -61,9 +61,6 @@ public class NpcInfo extends GameServerPacket | ||||
| 	 */ | ||||
| 	public NpcInfo(NpcInstance cha, Creature attacker) | ||||
| 	{ | ||||
| 		/* | ||||
| 		 * if(cha.getMxcPoly() != null) { attacker.sendPacket(new MxCPolyInfo(cha)); return; } | ||||
| 		 */ | ||||
| 		if (cha.getCustomNpcInstance() != null) | ||||
| 		{ | ||||
| 			attacker.sendPacket(new CustomNpcInfo(cha)); | ||||
|   | ||||
| @@ -1,175 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.network.serverpackets; | ||||
|  | ||||
| import org.l2jmobius.gameserver.datatables.sql.NpcTable; | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; | ||||
| import org.l2jmobius.gameserver.model.items.instance.ItemInstance; | ||||
|  | ||||
| /** | ||||
|  * @version $Revision: 1.7.2.4.2.9 $ $Date: 2005/04/11 10:05:54 $ | ||||
|  */ | ||||
| public class NpcInfoPoly extends GameServerPacket | ||||
| { | ||||
| 	private Creature _creature; | ||||
| 	private final WorldObject _obj; | ||||
| 	private int _x; | ||||
| 	private int _y; | ||||
| 	private int _z; | ||||
| 	private int _heading; | ||||
| 	private final int _npcId; | ||||
| 	private boolean _isAttackable; | ||||
| 	private final boolean _isSummoned; | ||||
| 	private boolean _isRunning; | ||||
| 	private boolean _isInCombat; | ||||
| 	private boolean _isAlikeDead; | ||||
| 	private int _mAtkSpd; | ||||
| 	private int _pAtkSpd; | ||||
| 	private int _runSpd; | ||||
| 	private int _walkSpd; | ||||
| 	private int _swimRunSpd; | ||||
| 	private int _swimWalkSpd; | ||||
| 	private int _flRunSpd; | ||||
| 	private int _flWalkSpd; | ||||
| 	private int _flyRunSpd; | ||||
| 	private int _flyWalkSpd; | ||||
| 	private int _rhand; | ||||
| 	private int _lhand; | ||||
| 	private String _name; | ||||
| 	private String _title; | ||||
| 	private int _abnormalEffect; | ||||
| 	NpcTemplate _template; | ||||
| 	private final int _collisionRadius; | ||||
| 	private final int _collisionHeight; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Instantiates a new npc info poly. | ||||
| 	 * @param obj the obj | ||||
| 	 * @param attacker the attacker | ||||
| 	 */ | ||||
| 	public NpcInfoPoly(WorldObject obj, Creature attacker) | ||||
| 	{ | ||||
| 		_obj = obj; | ||||
| 		_npcId = obj.getPoly().getPolyId(); | ||||
| 		_template = NpcTable.getInstance().getTemplate(_npcId); | ||||
| 		_isAttackable = true; | ||||
| 		_rhand = 0; | ||||
| 		_lhand = 0; | ||||
| 		_isSummoned = false; | ||||
| 		_collisionRadius = _template.getCollisionRadius(); | ||||
| 		_collisionHeight = _template.getCollisionHeight(); | ||||
| 		if (_obj instanceof Creature) | ||||
| 		{ | ||||
| 			_creature = (Creature) obj; | ||||
| 			_isAttackable = obj.isAutoAttackable(attacker); | ||||
| 			_rhand = _template.getRhand(); | ||||
| 			_lhand = _template.getLhand(); | ||||
| 		} | ||||
| 		 | ||||
| 		if (_obj instanceof ItemInstance) | ||||
| 		{ | ||||
| 			_x = _obj.getX(); | ||||
| 			_y = _obj.getY(); | ||||
| 			_z = _obj.getZ(); | ||||
| 			_heading = 0; | ||||
| 			_mAtkSpd = 100; // yes, an item can be dread as death | ||||
| 			_pAtkSpd = 100; | ||||
| 			_runSpd = 120; | ||||
| 			_walkSpd = 80; | ||||
| 			_swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd; | ||||
| 			_swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd; | ||||
| 			_isRunning = _isInCombat = _isAlikeDead = false; | ||||
| 			_name = "item"; | ||||
| 			_title = "polymorphed"; | ||||
| 			_abnormalEffect = 0; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			_x = _creature.getX(); | ||||
| 			_y = _creature.getY(); | ||||
| 			_z = _creature.getZ(); | ||||
| 			_heading = _creature.getHeading(); | ||||
| 			_mAtkSpd = _creature.getMAtkSpd(); | ||||
| 			_pAtkSpd = _creature.getPAtkSpd(); | ||||
| 			_runSpd = _creature.getRunSpeed(); | ||||
| 			_walkSpd = _creature.getWalkSpeed(); | ||||
| 			_swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd; | ||||
| 			_swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd; | ||||
| 			_isRunning = _creature.isRunning(); | ||||
| 			_isInCombat = _creature.isInCombat(); | ||||
| 			_isAlikeDead = _creature.isAlikeDead(); | ||||
| 			_name = _creature.getName(); | ||||
| 			_title = _creature.getTitle(); | ||||
| 			_abnormalEffect = _creature.getAbnormalEffect(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	/* | ||||
| 	 * (non-Javadoc) | ||||
| 	 * @see org.l2jmobius.gameserver.network.serverpackets.L2GameServerPacket#writeImpl() | ||||
| 	 */ | ||||
| 	@Override | ||||
| 	protected final void writeImpl() | ||||
| 	{ | ||||
| 		writeC(0x16); | ||||
| 		writeD(_obj.getObjectId()); | ||||
| 		writeD(_npcId + 1000000); // npctype id | ||||
| 		writeD(_isAttackable ? 1 : 0); | ||||
| 		writeD(_x); | ||||
| 		writeD(_y); | ||||
| 		writeD(_z); | ||||
| 		writeD(_heading); | ||||
| 		writeD(0x00); | ||||
| 		writeD(_mAtkSpd); | ||||
| 		writeD(_pAtkSpd); | ||||
| 		writeD(_runSpd); | ||||
| 		writeD(_walkSpd); | ||||
| 		writeD(_swimRunSpd/* 0x32 */); // swimspeed | ||||
| 		writeD(_swimWalkSpd/* 0x32 */); // swimspeed | ||||
| 		writeD(_flRunSpd); | ||||
| 		writeD(_flWalkSpd); | ||||
| 		writeD(_flyRunSpd); | ||||
| 		writeD(_flyWalkSpd); | ||||
| 		writeF(1/* _activeChar.getProperMultiplier() */); | ||||
| 		writeF(1/* _activeChar.getAttackSpeedMultiplier() */); | ||||
| 		writeF(_collisionRadius); | ||||
| 		writeF(_collisionHeight); | ||||
| 		writeD(_rhand); // right hand weapon | ||||
| 		writeD(0); | ||||
| 		writeD(_lhand); // left hand weapon | ||||
| 		writeC(1); // name above char 1=true ... ?? | ||||
| 		writeC(_isRunning ? 1 : 0); | ||||
| 		writeC(_isInCombat ? 1 : 0); | ||||
| 		writeC(_isAlikeDead ? 1 : 0); | ||||
| 		writeC(_isSummoned ? 2 : 0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation) | ||||
| 		writeS(_name); | ||||
| 		writeS(_title); | ||||
| 		writeD(0); | ||||
| 		writeD(0); | ||||
| 		writeD(0000); // hmm karma ?? | ||||
| 		 | ||||
| 		writeH(_abnormalEffect); // C2 | ||||
| 		writeH(0x00); // C2 | ||||
| 		writeD(0000); // C2 | ||||
| 		writeD(0000); // C2 | ||||
| 		writeD(0000); // C2 | ||||
| 		writeD(0000); // C2 | ||||
| 		writeC(0000); // C2 | ||||
| 	} | ||||
| } | ||||
| @@ -1,76 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.network.serverpackets; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
| import org.l2jmobius.gameserver.model.items.instance.ItemInstance; | ||||
|  | ||||
| /** | ||||
|  * 15 ee cc 11 43 object id 39 00 00 00 item id 8f 14 00 00 x b7 f1 00 00 y 60 f2 ff ff z 01 00 00 00 show item count 7a 00 00 00 count . format dddddddd | ||||
|  * @version $Revision: 1.3.2.1.2.3 $ $Date: 2005/03/27 15:29:39 $ | ||||
|  */ | ||||
| public class SpawnItemPoly extends GameServerPacket | ||||
| { | ||||
| 	private int _objectId; | ||||
| 	private int _itemId; | ||||
| 	private int _x; | ||||
| 	private int _y; | ||||
| 	private int _z; | ||||
| 	private int _stackable; | ||||
| 	private int _count; | ||||
| 	 | ||||
| 	public SpawnItemPoly(WorldObject object) | ||||
| 	{ | ||||
| 		if (object instanceof ItemInstance) | ||||
| 		{ | ||||
| 			final ItemInstance item = (ItemInstance) object; | ||||
| 			_objectId = object.getObjectId(); | ||||
| 			_itemId = object.getPoly().getPolyId(); | ||||
| 			_x = item.getX(); | ||||
| 			_y = item.getY(); | ||||
| 			_z = item.getZ(); | ||||
| 			_stackable = item.isStackable() ? 0x01 : 0x00; | ||||
| 			_count = item.getCount(); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			_objectId = object.getObjectId(); | ||||
| 			_itemId = object.getPoly().getPolyId(); | ||||
| 			_x = object.getX(); | ||||
| 			_y = object.getY(); | ||||
| 			_z = object.getZ(); | ||||
| 			_stackable = 0x00; | ||||
| 			_count = 1; | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	protected final void writeImpl() | ||||
| 	{ | ||||
| 		writeC(0x0b); | ||||
| 		writeD(_objectId); | ||||
| 		writeD(_itemId); | ||||
| 		 | ||||
| 		writeD(_x); | ||||
| 		writeD(_y); | ||||
| 		writeD(_z); | ||||
| 		// only show item count if it is a stackable item | ||||
| 		writeD(_stackable); | ||||
| 		writeD(_count); | ||||
| 		writeD(0x00); // c2 | ||||
| 	} | ||||
| } | ||||
| @@ -17,11 +17,9 @@ | ||||
| package org.l2jmobius.gameserver.network.serverpackets; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.gameserver.datatables.sql.NpcTable; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.Summon; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; | ||||
| import org.l2jmobius.gameserver.model.itemcontainer.Inventory; | ||||
|  | ||||
| public class UserInfo extends GameServerPacket | ||||
| @@ -180,14 +178,6 @@ public class UserInfo extends GameServerPacket | ||||
| 		{ | ||||
| 			title = "[Invisible]"; | ||||
| 		} | ||||
| 		if (_player.getPoly().isMorphed()) | ||||
| 		{ | ||||
| 			final NpcTemplate polyObj = NpcTable.getInstance().getTemplate(_player.getPoly().getPolyId()); | ||||
| 			if (polyObj != null) | ||||
| 			{ | ||||
| 				title += " - " + polyObj.getName(); | ||||
| 			} | ||||
| 		} | ||||
| 		writeS(title); | ||||
| 		 | ||||
| 		writeD(_player.getClanId()); | ||||
|   | ||||
| @@ -225,10 +225,6 @@ | ||||
| 	<admin command="admin_para_all_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_unpara_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_para_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_polyself" accessLevel="80" /> | ||||
| 	<admin command="admin_unpolyself" accessLevel="80" /> | ||||
| 	<admin command="admin_polyself_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_unpolyself_menu" accessLevel="80" /> | ||||
| 	<admin command="admin_clearteams" accessLevel="80" /> | ||||
| 	<admin command="admin_setteam_close" accessLevel="80" /> <!-- set all Gm close players to val team --> | ||||
| 	<admin command="admin_setteam" accessLevel="80" /> | ||||
| @@ -282,8 +278,6 @@ | ||||
| 	<admin command="admin_event_name" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_kill" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_res" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_poly" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_unpoly" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_prize" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_chatban" accessLevel="80" /> | ||||
| 	<admin command="admin_event_control_finish" accessLevel="80" /> | ||||
| @@ -435,12 +429,6 @@ | ||||
| 	<!-- Section: Pledge --> | ||||
| 	<admin command="admin_pledge" accessLevel="90" /> <!-- Manage Clan --> | ||||
|  | ||||
| 	<!-- Section: Polymorph --> | ||||
| 	<admin command="admin_polymorph" accessLevel="90" /> | ||||
| 	<admin command="admin_unpolymorph" accessLevel="90" /> | ||||
| 	<admin command="admin_polymorph_menu" accessLevel="90" /> | ||||
| 	<admin command="admin_unpolymorph_menu" accessLevel="90" /> | ||||
|  | ||||
| 	<!-- Section: Quest --> | ||||
| 	<admin command="admin_quest_reload" accessLevel="90" /> | ||||
|  | ||||
|   | ||||
| @@ -11,12 +11,8 @@ | ||||
| <td><edit var="menu_command" width=120 height=15></td> | ||||
| <td><button value="Help" action="bypass -h admin_help help/effects_menu.htm" width=45 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| </tr></table><br> | ||||
| <font color="aadd77">Trasformations</font><table width=240><tr> | ||||
| <td><button value="PolyMorph" action="bypass -h admin_polymorph_menu $menu_command" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="UnPoly" action="bypass -h admin_unpolymorph_menu" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="PolySelf" action="bypass -h admin_polyself_menu $menu_command" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="UnPolySlf" action="bypass -h admin_unpolyself_menu" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| </tr><tr> | ||||
| <font color="aadd77">Effects</font><table width=240> | ||||
| <tr> | ||||
| <td><button value="Para" action="bypass -h admin_para_menu $menu_command" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="UnPara" action="bypass -h admin_unpara_menu $menu_command" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
| <td><button value="ParaAll" action="bypass -h admin_para_all_menu" width=55 height=15 back="sek.cbui94" fore="sek.cbui92"></td> | ||||
|   | ||||
| @@ -7,10 +7,6 @@ | ||||
| 3-Effect Panel Buttons<br></font> | ||||
| L2 special effects are here: earthquakes, sky changes, weird character and mob animations.<br> | ||||
| <font color="LEVEL">3-1 First pack of effects.<br> | ||||
| PolyMorph:</font> Make your target (player) look like the specified mob.<br> | ||||
| <font color="LEVEL">Unpoly:</font> Cancel polymorph effects that specified target may have.<br> | ||||
| <font color="LEVEL">PolySelf:</font> Polymorph yourself to specified npcId, you will see a title change only.<br> | ||||
| <font color="LEVEL">UnPolySelf:</font> Cancel any polymorph effect you could have.<br> | ||||
| <font color="LEVEL">Para:</font> Paralyze character (target/name).<br> | ||||
| <font color="LEVEL">UnPara:</font> Cancel Paralysis effect (target/name).<br> | ||||
| <font color="LEVEL">ParaAll:</font> Paralyze any character in the world, but yours. Use wisely, annoys people and causes lag.<br> | ||||
|   | ||||
| @@ -52,10 +52,5 @@ | ||||
| <font color="LEVEL">//setew value</font> - Sets enchantment of target player currently equipped weapon to value<br><font color="FF9933">Usage: //setew 9999</font><br> | ||||
| <font color="LEVEL">//banchat</font> - Mutes a player<br><font color="FF9933">Usage: //banchat kadar </font><br> | ||||
| <font color="LEVEL">//unbanchat</font> - Unmutes a player<br><font color="FF9933">Usage: //unbanchat kadar </font><br> | ||||
| <font color="LEVEL">//polymorph character npc id </font><br> | ||||
| <font color="LEVEL">//polymorph item id to poly target into id|</font><br> | ||||
| <font color="LEVEL">//polyself <npc id></font> - Used to polymorph yourself into a mob<br> | ||||
| <font color="LEVEL">//unpolyself</font> - Returns you to the normal state<br> | ||||
| <font color="LEVEL">//polymorph item <itemid></font> - Polymorphs an item<br> | ||||
| <center><button value="Index" action="bypass -h admin_help admhelp.htm" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"></center> | ||||
| </body></html> | ||||
| @@ -68,7 +68,6 @@ import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminOnline; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminPForge; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminPetition; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminPledge; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminPolymorph; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminQuest; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminReload; | ||||
| import org.l2jmobius.gameserver.handler.admincommandhandlers.AdminRepairChar; | ||||
| @@ -149,7 +148,6 @@ public class AdminCommandHandler | ||||
| 		registerAdminCommandHandler(new AdminPetition()); | ||||
| 		registerAdminCommandHandler(new AdminPForge()); | ||||
| 		registerAdminCommandHandler(new AdminPledge()); | ||||
| 		registerAdminCommandHandler(new AdminPolymorph()); | ||||
| 		registerAdminCommandHandler(new AdminQuest()); | ||||
| 		registerAdminCommandHandler(new AdminReload()); | ||||
| 		registerAdminCommandHandler(new AdminRepairChar()); | ||||
|   | ||||
| @@ -27,7 +27,6 @@ import org.l2jmobius.gameserver.model.actor.instance.ChestInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.network.SystemMessageId; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.CharInfo; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.Earthquake; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ExRedSky; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.GameServerPacket; | ||||
| @@ -38,7 +37,6 @@ import org.l2jmobius.gameserver.network.serverpackets.SocialAction; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.StopMove; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SunRise; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SunSet; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.UserInfo; | ||||
| import org.l2jmobius.gameserver.util.BuilderUtil; | ||||
|  | ||||
| /** | ||||
| @@ -49,7 +47,6 @@ import org.l2jmobius.gameserver.util.BuilderUtil; | ||||
|  * <li>gmspeed = temporary Super Haste effect. | ||||
|  * <li>para/unpara = paralyze/remove paralysis from target | ||||
|  * <li>para_all/unpara_all = same as para/unpara, affects the whole world. | ||||
|  * <li>polyself/unpolyself = makes you look as a specified mob. | ||||
|  * <li>changename = temporary change name | ||||
|  * <li>clearteams/setteam_close/setteam = team related commands | ||||
|  * <li>social = forces an Creature instance to broadcast social action packets. | ||||
| @@ -80,10 +77,6 @@ public class AdminEffects implements IAdminCommandHandler | ||||
| 		"admin_para_all_menu", | ||||
| 		"admin_unpara_menu", | ||||
| 		"admin_para_menu", | ||||
| 		"admin_polyself", | ||||
| 		"admin_unpolyself", | ||||
| 		"admin_polyself_menu", | ||||
| 		"admin_unpolyself_menu", | ||||
| 		"admin_clearteams", | ||||
| 		"admin_setteam_close", | ||||
| 		"admin_setteam", | ||||
| @@ -333,34 +326,6 @@ public class AdminEffects implements IAdminCommandHandler | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_polyself")) | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				final String id = st.nextToken(); | ||||
| 				activeChar.getPoly().setPolyInfo("npc", id); | ||||
| 				activeChar.teleToLocation(activeChar.getX(), activeChar.getY(), activeChar.getZ(), false); | ||||
| 				activeChar.broadcastPacket(new CharInfo(activeChar)); | ||||
| 				activeChar.sendPacket(new UserInfo(activeChar)); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_unpolyself")) | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				activeChar.getPoly().setPolyInfo(null, "1"); | ||||
| 				activeChar.decayMe(); | ||||
| 				activeChar.spawnMe(activeChar.getX(), activeChar.getY(), activeChar.getZ()); | ||||
| 				activeChar.broadcastPacket(new CharInfo(activeChar)); | ||||
| 				activeChar.sendPacket(new UserInfo(activeChar)); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.equals("admin_clear_teams")) | ||||
| 		{ | ||||
| 			try | ||||
|   | ||||
| @@ -36,13 +36,11 @@ import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.entity.event.GameEvent; | ||||
| import org.l2jmobius.gameserver.model.spawn.Spawn; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.CharInfo; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ItemList; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.PlaySound; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.Revive; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SocialAction; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.UserInfo; | ||||
|  | ||||
| /** | ||||
|  * This class handles following admin commands: - admin = shows menu | ||||
| @@ -70,8 +68,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 		"admin_event_name", | ||||
| 		"admin_event_control_kill", | ||||
| 		"admin_event_control_res", | ||||
| 		"admin_event_control_poly", | ||||
| 		"admin_event_control_unpoly", | ||||
| 		"admin_event_control_prize", | ||||
| 		"admin_event_control_chatban", | ||||
| 		"admin_event_control_finish" | ||||
| @@ -340,30 +336,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 			 | ||||
| 			showEventControl(activeChar); | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_event_control_poly")) | ||||
| 		{ | ||||
| 			final StringTokenizer st0 = new StringTokenizer(command.substring(25)); | ||||
| 			final StringTokenizer st = new StringTokenizer(st0.nextToken(), "-"); | ||||
| 			final String id = st0.nextToken(); | ||||
| 			 | ||||
| 			while (st.hasMoreElements()) | ||||
| 			{ | ||||
| 				polyTeam(Integer.parseInt(st.nextToken()), id); | ||||
| 			} | ||||
| 			 | ||||
| 			showEventControl(activeChar); | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_event_control_unpoly")) | ||||
| 		{ | ||||
| 			final StringTokenizer st = new StringTokenizer(command.substring(27), "-"); | ||||
| 			 | ||||
| 			while (st.hasMoreElements()) | ||||
| 			{ | ||||
| 				unpolyTeam(Integer.parseInt(st.nextToken())); | ||||
| 			} | ||||
| 			 | ||||
| 			showEventControl(activeChar); | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_event_control_prize")) | ||||
| 		{ | ||||
| 			final StringTokenizer st0 = new StringTokenizer(command.substring(26)); | ||||
| @@ -599,11 +571,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"Resurrect\" action=\"bypass -h admin_event_control_res $team_number\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td><font color=\"LEVEL\">Resurrect Team's members</font></td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"Polymorph\" action=\"bypass -h admin_event_control_poly $team_number $poly_id\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td><edit var=\"poly_id\" width=100 height=15><font color=\"LEVEL\">Polymorphs the team into the NPC with the id specified</font></td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"UnPolymorph\" action=\"bypass -h admin_event_control_unpoly $team_number\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td><font color=\"LEVEL\">Unpolymorph the team</font></td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"Give Item\" action=\"bypass -h admin_event_control_prize $team_number $n $id\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"> number <edit var=\"n\" width=100 height=15> item id <edit var=\"id\" width=100 height=15></td><td><font color=\"LEVEL\">Give the specified item id to every single member of the team, you can put 5*level, 5*kills or 5 in the number field for example</font></td></tr>"); | ||||
| 		replyMSG.append("<tr><td> </td></tr>"); | ||||
| 		replyMSG.append("<tr><td><button value=\"End\" action=\"bypass -h admin_event_control_finish\" width=90 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td><font color=\"LEVEL\">Will finish the event teleporting back all the players</font></td></tr>"); | ||||
| @@ -763,49 +730,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	void polyTeam(int team, String id) | ||||
| 	{ | ||||
| 		final LinkedList<String> linked = GameEvent.players.get(team); | ||||
| 		final Iterator<String> it = linked.iterator(); | ||||
| 		 | ||||
| 		while (it.hasNext()) | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				final PlayerInstance target = World.getInstance().getPlayer(it.next()); | ||||
| 				target.getPoly().setPolyInfo("npc", id); | ||||
| 				target.teleToLocation(target.getX(), target.getY(), target.getZ(), true); | ||||
| 				target.broadcastPacket(new CharInfo(target)); | ||||
| 				target.sendPacket(new UserInfo(target)); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	void unpolyTeam(int team) | ||||
| 	{ | ||||
| 		final LinkedList<String> linked = GameEvent.players.get(team); | ||||
| 		final Iterator<String> it = linked.iterator(); | ||||
| 		 | ||||
| 		while (it.hasNext()) | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				final PlayerInstance target = World.getInstance().getPlayer(it.next()); | ||||
| 				target.getPoly().setPolyInfo(null, "1"); | ||||
| 				target.decayMe(); | ||||
| 				target.spawnMe(target.getX(), target.getY(), target.getZ()); | ||||
| 				target.broadcastPacket(new CharInfo(target)); | ||||
| 				target.sendPacket(new UserInfo(target)); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void createItem(PlayerInstance activeChar, PlayerInstance player, int id, int num) | ||||
| 	{ | ||||
| 		player.getInventory().addItem("Event", id, num, player, activeChar); | ||||
| @@ -855,7 +779,6 @@ public class AdminEventEngine implements IAdminCommandHandler | ||||
| 	void telePlayersBack(int team) | ||||
| 	{ | ||||
| 		resTeam(team); | ||||
| 		unpolyTeam(team); | ||||
| 		 | ||||
| 		final LinkedList<String> linked = GameEvent.players.get(team); | ||||
| 		final Iterator<String> it = linked.iterator(); | ||||
|   | ||||
| @@ -1,135 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.handler.admincommandhandlers; | ||||
|  | ||||
| import java.util.StringTokenizer; | ||||
|  | ||||
| import org.l2jmobius.gameserver.handler.IAdminCommandHandler; | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.network.SystemMessageId; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; | ||||
| import org.l2jmobius.gameserver.util.BuilderUtil; | ||||
|  | ||||
| /** | ||||
|  * This class handles following admin commands: polymorph | ||||
|  * @version $Revision: 1.2.2.1.2.4 $ $Date: 2007/07/31 10:05:56 $ | ||||
|  */ | ||||
|  | ||||
| public class AdminPolymorph implements IAdminCommandHandler | ||||
| { | ||||
| 	private static final String[] ADMIN_COMMANDS = | ||||
| 	{ | ||||
| 		"admin_polymorph", | ||||
| 		"admin_unpolymorph", | ||||
| 		"admin_polymorph_menu", | ||||
| 		"admin_unpolymorph_menu" | ||||
| 	}; | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean useAdminCommand(String command, PlayerInstance activeChar) | ||||
| 	{ | ||||
| 		if (command.startsWith("admin_polymorph")) | ||||
| 		{ | ||||
| 			final StringTokenizer st = new StringTokenizer(command); | ||||
| 			final WorldObject target = activeChar.getTarget(); | ||||
| 			 | ||||
| 			try | ||||
| 			{ | ||||
| 				st.nextToken(); | ||||
| 				final String p1 = st.nextToken(); | ||||
| 				if (st.hasMoreTokens()) | ||||
| 				{ | ||||
| 					final String p2 = st.nextToken(); | ||||
| 					doPolymorph(activeChar, target, p2, p1); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					doPolymorph(activeChar, target, p1, "npc"); | ||||
| 				} | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 				BuilderUtil.sendSysMessage(activeChar, "Usage: //polymorph [type] <id>"); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.equals("admin_unpolymorph")) | ||||
| 		{ | ||||
| 			doUnpoly(activeChar, activeChar.getTarget()); | ||||
| 		} | ||||
| 		 | ||||
| 		if (command.contains("menu")) | ||||
| 		{ | ||||
| 			showMainPage(activeChar); | ||||
| 		} | ||||
| 		 | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String[] getAdminCommandList() | ||||
| 	{ | ||||
| 		return ADMIN_COMMANDS; | ||||
| 	} | ||||
| 	 | ||||
| 	private void doPolymorph(PlayerInstance activeChar, WorldObject obj, String id, String type) | ||||
| 	{ | ||||
| 		if (obj != null) | ||||
| 		{ | ||||
| 			obj.getPoly().setPolyInfo(type, id); | ||||
| 			 | ||||
| 			// animation | ||||
| 			if (obj instanceof Creature) | ||||
| 			{ | ||||
| 				final Creature creature = (Creature) obj; | ||||
| 				creature.broadcastPacket(new MagicSkillUse(creature, creature, 1008, 1, 4000, 0)); | ||||
| 				creature.sendPacket(new SetupGauge(0, 4000)); | ||||
| 			} | ||||
| 			 | ||||
| 			// end of animation | ||||
| 			obj.decayMe(); | ||||
| 			obj.spawnMe(obj.getX(), obj.getY(), obj.getZ()); | ||||
| 			BuilderUtil.sendSysMessage(activeChar, "Polymorph succeed"); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			activeChar.sendPacket(SystemMessageId.INVALID_TARGET); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void doUnpoly(PlayerInstance activeChar, WorldObject target) | ||||
| 	{ | ||||
| 		if (target != null) | ||||
| 		{ | ||||
| 			target.getPoly().setPolyInfo(null, "1"); | ||||
| 			target.decayMe(); | ||||
| 			target.spawnMe(target.getX(), target.getY(), target.getZ()); | ||||
| 			BuilderUtil.sendSysMessage(activeChar, "Unpolymorph succeed"); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			activeChar.sendPacket(SystemMessageId.INVALID_TARGET); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void showMainPage(PlayerInstance activeChar) | ||||
| 	{ | ||||
| 		AdminHelpPage.showHelpPage(activeChar, "effects_menu.htm"); | ||||
| 	} | ||||
| } | ||||
| @@ -25,7 +25,6 @@ import org.l2jmobius.gameserver.instancemanager.MercTicketManager; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.knownlist.WorldObjectKnownList; | ||||
| import org.l2jmobius.gameserver.model.actor.poly.ObjectPoly; | ||||
| import org.l2jmobius.gameserver.model.items.instance.ItemInstance; | ||||
| import org.l2jmobius.gameserver.network.GameClient; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; | ||||
| @@ -47,7 +46,6 @@ public abstract class WorldObject | ||||
| 	private WorldObjectKnownList _knownList; | ||||
| 	private String _name; | ||||
| 	private int _objectId; | ||||
| 	private ObjectPoly _poly; | ||||
| 	private ObjectPosition _position; | ||||
| 	 | ||||
| 	// Objects can only see objects in same instancezone, instance 0 is normal world -1 the all seeing world | ||||
| @@ -351,15 +349,6 @@ public abstract class WorldObject | ||||
| 		return _objectId; | ||||
| 	} | ||||
| 	 | ||||
| 	public ObjectPoly getPoly() | ||||
| 	{ | ||||
| 		if (_poly == null) | ||||
| 		{ | ||||
| 			_poly = new ObjectPoly(this); | ||||
| 		} | ||||
| 		return _poly; | ||||
| 	} | ||||
| 	 | ||||
| 	public ObjectPosition getPosition() | ||||
| 	{ | ||||
| 		if (_position == null) | ||||
|   | ||||
| @@ -4130,7 +4130,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder | ||||
| 	 * In Server->Client packet, each effect is represented by 1 bit of the map (ex : BLEEDING = 0x0001 (bit 1), SLEEP = 0x0080 (bit 8)...). The map is calculated by applying a BINARY OR operation on each effect.<br> | ||||
| 	 * <br> | ||||
| 	 * <b><u>Example of use</u>:</b><br> | ||||
| 	 * <li>Server Packet : CharInfo, NpcInfo, NpcInfoPoly, UserInfo...</li> | ||||
| 	 * <li>Server Packet : CharInfo, NpcInfo, UserInfo...</li> | ||||
| 	 * @return the abnormal effect | ||||
| 	 */ | ||||
| 	public int getAbnormalEffect() | ||||
|   | ||||
| @@ -44,7 +44,6 @@ import org.l2jmobius.gameserver.network.serverpackets.PrivateStoreMsgSell; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.RecipeShopMsg; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.RelationChanged; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SpawnItem; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SpawnItemPoly; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.StaticObject; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.VehicleInfo; | ||||
|  | ||||
| @@ -119,126 +118,119 @@ public class PlayerKnownList extends PlayableKnownList | ||||
| 		// On retail there is a similar, if not greater, delay as well. | ||||
| 		ThreadPool.schedule(() -> | ||||
| 		{ | ||||
| 			if (object.getPoly().isMorphed() && object.getPoly().getPolyType().equals("item")) | ||||
| 			if (object.isItem()) | ||||
| 			{ | ||||
| 				activeChar.sendPacket(new SpawnItemPoly(object)); | ||||
| 				if (dropper != null) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new DropItem((ItemInstance) object, dropper.getObjectId())); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new SpawnItem((ItemInstance) object)); | ||||
| 				} | ||||
| 			} | ||||
| 			else | ||||
| 			else if (object.isDoor()) | ||||
| 			{ | ||||
| 				if (object.isItem()) | ||||
| 				if (((DoorInstance) object).getCastle() != null) | ||||
| 				{ | ||||
| 					if (dropper != null) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new DropItem((ItemInstance) object, dropper.getObjectId())); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new SpawnItem((ItemInstance) object)); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new DoorInfo((DoorInstance) object, true)); | ||||
| 				} | ||||
| 				else if (object.isDoor()) | ||||
| 				else | ||||
| 				{ | ||||
| 					if (((DoorInstance) object).getCastle() != null) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new DoorInfo((DoorInstance) object, true)); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new DoorInfo((DoorInstance) object, false)); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new DoorStatusUpdate((DoorInstance) object)); | ||||
| 					activeChar.sendPacket(new DoorInfo((DoorInstance) object, false)); | ||||
| 				} | ||||
| 				else if (object.isBoat()) | ||||
| 				activeChar.sendPacket(new DoorStatusUpdate((DoorInstance) object)); | ||||
| 			} | ||||
| 			else if (object.isBoat()) | ||||
| 			{ | ||||
| 				if (!activeChar.isInBoat() && (object != activeChar.getBoat())) | ||||
| 				{ | ||||
| 					if (!activeChar.isInBoat() && (object != activeChar.getBoat())) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new VehicleInfo((BoatInstance) object)); | ||||
| 						((BoatInstance) object).sendVehicleDeparture(activeChar); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new VehicleInfo((BoatInstance) object)); | ||||
| 					((BoatInstance) object).sendVehicleDeparture(activeChar); | ||||
| 				} | ||||
| 				else if (object.isNpc()) | ||||
| 			} | ||||
| 			else if (object.isNpc()) | ||||
| 			{ | ||||
| 				activeChar.sendPacket(new NpcInfo((NpcInstance) object, activeChar)); | ||||
| 			} | ||||
| 			else if (object.isSummon()) | ||||
| 			{ | ||||
| 				final Summon summon = (Summon) object; | ||||
| 				 | ||||
| 				// Check if the PlayerInstance is the owner of the Pet | ||||
| 				if (activeChar.equals(summon.getOwner())) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new NpcInfo((NpcInstance) object, activeChar)); | ||||
| 				} | ||||
| 				else if (object.isSummon()) | ||||
| 				{ | ||||
| 					final Summon summon = (Summon) object; | ||||
| 					activeChar.sendPacket(new PetInfo(summon)); | ||||
| 					// The PetInfo packet wipes the PartySpelled (list of active spells' icons). Re-add them | ||||
| 					summon.updateEffectIcons(true); | ||||
| 					 | ||||
| 					// Check if the PlayerInstance is the owner of the Pet | ||||
| 					if (activeChar.equals(summon.getOwner())) | ||||
| 					if (summon instanceof PetInstance) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new PetInfo(summon)); | ||||
| 						// The PetInfo packet wipes the PartySpelled (list of active spells' icons). Re-add them | ||||
| 						summon.updateEffectIcons(true); | ||||
| 						 | ||||
| 						if (summon instanceof PetInstance) | ||||
| 						{ | ||||
| 							activeChar.sendPacket(new PetItemList((PetInstance) summon)); | ||||
| 						} | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new NpcInfo(summon, activeChar)); | ||||
| 						activeChar.sendPacket(new PetItemList((PetInstance) summon)); | ||||
| 					} | ||||
| 				} | ||||
| 				else if (object.isPlayer()) | ||||
| 				else | ||||
| 				{ | ||||
| 					final PlayerInstance otherPlayer = (PlayerInstance) object; | ||||
| 					if (otherPlayer.isInBoat()) | ||||
| 					activeChar.sendPacket(new NpcInfo(summon, activeChar)); | ||||
| 				} | ||||
| 			} | ||||
| 			else if (object.isPlayer()) | ||||
| 			{ | ||||
| 				final PlayerInstance otherPlayer = (PlayerInstance) object; | ||||
| 				if (otherPlayer.isInBoat()) | ||||
| 				{ | ||||
| 					otherPlayer.getPosition().setWorldPosition(otherPlayer.getBoat().getLocation()); | ||||
| 					activeChar.sendPacket(new CharInfo(otherPlayer)); | ||||
| 					 | ||||
| 					final int relation = otherPlayer.getRelation(activeChar); | ||||
| 					if ((otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation)) | ||||
| 					{ | ||||
| 						otherPlayer.getPosition().setWorldPosition(otherPlayer.getBoat().getLocation()); | ||||
| 						activeChar.sendPacket(new CharInfo(otherPlayer)); | ||||
| 						 | ||||
| 						final int relation = otherPlayer.getRelation(activeChar); | ||||
| 						if ((otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation)) | ||||
| 						{ | ||||
| 							activeChar.sendPacket(new RelationChanged(otherPlayer, relation, activeChar.isAutoAttackable(otherPlayer))); | ||||
| 						} | ||||
| 						 | ||||
| 						activeChar.sendPacket(new GetOnVehicle(otherPlayer, otherPlayer.getBoat(), otherPlayer.getBoatPosition().getX(), otherPlayer.getBoatPosition().getY(), otherPlayer.getBoatPosition().getZ())); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new CharInfo(otherPlayer)); | ||||
| 						 | ||||
| 						final int relation = otherPlayer.getRelation(activeChar); | ||||
| 						if ((otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation)) | ||||
| 						{ | ||||
| 							activeChar.sendPacket(new RelationChanged(otherPlayer, relation, activeChar.isAutoAttackable(otherPlayer))); | ||||
| 						} | ||||
| 						activeChar.sendPacket(new RelationChanged(otherPlayer, relation, activeChar.isAutoAttackable(otherPlayer))); | ||||
| 					} | ||||
| 					 | ||||
| 					if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_SELL) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new PrivateStoreMsgSell(otherPlayer)); | ||||
| 					} | ||||
| 					else if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_BUY) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new PrivateStoreMsgBuy(otherPlayer)); | ||||
| 					} | ||||
| 					else if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_MANUFACTURE) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new RecipeShopMsg(otherPlayer)); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new GetOnVehicle(otherPlayer, otherPlayer.getBoat(), otherPlayer.getBoatPosition().getX(), otherPlayer.getBoatPosition().getY(), otherPlayer.getBoatPosition().getZ())); | ||||
| 				} | ||||
| 				else if (object instanceof FenceInstance) | ||||
| 				else | ||||
| 				{ | ||||
| 					((FenceInstance) object).sendInfo(activeChar); | ||||
| 				} | ||||
| 				else if (object instanceof StaticObjectInstance) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new StaticObject((StaticObjectInstance) object)); | ||||
| 					activeChar.sendPacket(new CharInfo(otherPlayer)); | ||||
| 					 | ||||
| 					final int relation = otherPlayer.getRelation(activeChar); | ||||
| 					if ((otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation)) | ||||
| 					{ | ||||
| 						activeChar.sendPacket(new RelationChanged(otherPlayer, relation, activeChar.isAutoAttackable(otherPlayer))); | ||||
| 					} | ||||
| 				} | ||||
| 				 | ||||
| 				if (object.isCreature()) | ||||
| 				if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_SELL) | ||||
| 				{ | ||||
| 					// Update the state of the Creature object client side by sending Server->Client packet MoveToPawn/CharMoveToLocation and AutoAttackStart to the PlayerInstance | ||||
| 					final Creature obj = (Creature) object; | ||||
| 					final CreatureAI objAi = obj.getAI(); | ||||
| 					if (objAi != null) | ||||
| 					{ | ||||
| 						objAi.describeStateToPlayer(activeChar); | ||||
| 					} | ||||
| 					activeChar.sendPacket(new PrivateStoreMsgSell(otherPlayer)); | ||||
| 				} | ||||
| 				else if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_BUY) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new PrivateStoreMsgBuy(otherPlayer)); | ||||
| 				} | ||||
| 				else if (otherPlayer.getPrivateStoreType() == PlayerInstance.STORE_PRIVATE_MANUFACTURE) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(new RecipeShopMsg(otherPlayer)); | ||||
| 				} | ||||
| 			} | ||||
| 			else if (object instanceof FenceInstance) | ||||
| 			{ | ||||
| 				((FenceInstance) object).sendInfo(activeChar); | ||||
| 			} | ||||
| 			else if (object instanceof StaticObjectInstance) | ||||
| 			{ | ||||
| 				activeChar.sendPacket(new StaticObject((StaticObjectInstance) object)); | ||||
| 			} | ||||
| 			 | ||||
| 			if (object.isCreature()) | ||||
| 			{ | ||||
| 				// Update the state of the Creature object client side by sending Server->Client packet MoveToPawn/CharMoveToLocation and AutoAttackStart to the PlayerInstance | ||||
| 				final Creature obj = (Creature) object; | ||||
| 				final CreatureAI objAi = obj.getAI(); | ||||
| 				if (objAi != null) | ||||
| 				{ | ||||
| 					objAi.describeStateToPlayer(activeChar); | ||||
| 				} | ||||
| 			} | ||||
| 		}, _packetSendDelay + Rnd.get(50)); // Add additional 0-49ms in case of overlapping tasks on heavy load. | ||||
|   | ||||
| @@ -1,67 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.model.actor.poly; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
|  | ||||
| public class ObjectPoly | ||||
| { | ||||
| 	private final WorldObject _activeObject; | ||||
| 	private int _polyId; | ||||
| 	private String _polyType; | ||||
| 	 | ||||
| 	public ObjectPoly(WorldObject activeObject) | ||||
| 	{ | ||||
| 		_activeObject = activeObject; | ||||
| 	} | ||||
| 	 | ||||
| 	public void setPolyInfo(String polyType, String polyId) | ||||
| 	{ | ||||
| 		setPolyId(Integer.parseInt(polyId)); | ||||
| 		setPolyType(polyType); | ||||
| 	} | ||||
| 	 | ||||
| 	public WorldObject getActiveObject() | ||||
| 	{ | ||||
| 		return _activeObject; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isMorphed() | ||||
| 	{ | ||||
| 		return _polyType != null; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getPolyId() | ||||
| 	{ | ||||
| 		return _polyId; | ||||
| 	} | ||||
| 	 | ||||
| 	public void setPolyId(int value) | ||||
| 	{ | ||||
| 		_polyId = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getPolyType() | ||||
| 	{ | ||||
| 		return _polyType; | ||||
| 	} | ||||
| 	 | ||||
| 	public void setPolyType(String value) | ||||
| 	{ | ||||
| 		_polyType = value; | ||||
| 	} | ||||
| } | ||||
| @@ -35,7 +35,6 @@ import org.l2jmobius.gameserver.network.serverpackets.PetInfo; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.PetItemList; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.RelationChanged; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SpawnItem; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SpawnItemPoly; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.StaticObject; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.UserInfo; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.VehicleInfo; | ||||
| @@ -66,98 +65,91 @@ public class RequestRecordInfo extends GameClientPacket | ||||
| 				continue; | ||||
| 			} | ||||
| 			 | ||||
| 			if (object.getPoly().isMorphed() && object.getPoly().getPolyType().equals("item")) | ||||
| 			if (object instanceof ItemInstance) | ||||
| 			{ | ||||
| 				player.sendPacket(new SpawnItemPoly(object)); | ||||
| 				player.sendPacket(new SpawnItem((ItemInstance) object)); | ||||
| 			} | ||||
| 			else | ||||
| 			else if (object instanceof DoorInstance) | ||||
| 			{ | ||||
| 				if (object instanceof ItemInstance) | ||||
| 				if (((DoorInstance) object).getCastle() != null) | ||||
| 				{ | ||||
| 					player.sendPacket(new SpawnItem((ItemInstance) object)); | ||||
| 					player.sendPacket(new DoorInfo((DoorInstance) object, true)); | ||||
| 				} | ||||
| 				else if (object instanceof DoorInstance) | ||||
| 				else | ||||
| 				{ | ||||
| 					if (((DoorInstance) object).getCastle() != null) | ||||
| 					{ | ||||
| 						player.sendPacket(new DoorInfo((DoorInstance) object, true)); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						player.sendPacket(new DoorInfo((DoorInstance) object, false)); | ||||
| 					} | ||||
| 					player.sendPacket(new DoorStatusUpdate((DoorInstance) object)); | ||||
| 					player.sendPacket(new DoorInfo((DoorInstance) object, false)); | ||||
| 				} | ||||
| 				else if (object instanceof BoatInstance) | ||||
| 				player.sendPacket(new DoorStatusUpdate((DoorInstance) object)); | ||||
| 			} | ||||
| 			else if (object instanceof BoatInstance) | ||||
| 			{ | ||||
| 				if (!player.isInBoat() && (object != player.getBoat())) | ||||
| 				{ | ||||
| 					if (!player.isInBoat() && (object != player.getBoat())) | ||||
| 					player.sendPacket(new VehicleInfo((BoatInstance) object)); | ||||
| 					((BoatInstance) object).sendVehicleDeparture(player); | ||||
| 				} | ||||
| 			} | ||||
| 			else if (object instanceof StaticObjectInstance) | ||||
| 			{ | ||||
| 				player.sendPacket(new StaticObject((StaticObjectInstance) object)); | ||||
| 			} | ||||
| 			else if (object instanceof NpcInstance) | ||||
| 			{ | ||||
| 				player.sendPacket(new NpcInfo((NpcInstance) object, player)); | ||||
| 			} | ||||
| 			else if (object instanceof Summon) | ||||
| 			{ | ||||
| 				final Summon summon = (Summon) object; | ||||
| 				 | ||||
| 				// Check if the PlayerInstance is the owner of the Pet | ||||
| 				if (player.equals(summon.getOwner())) | ||||
| 				{ | ||||
| 					player.sendPacket(new PetInfo(summon)); | ||||
| 					if (summon instanceof PetInstance) | ||||
| 					{ | ||||
| 						player.sendPacket(new VehicleInfo((BoatInstance) object)); | ||||
| 						((BoatInstance) object).sendVehicleDeparture(player); | ||||
| 						player.sendPacket(new PetItemList((PetInstance) summon)); | ||||
| 					} | ||||
| 				} | ||||
| 				else if (object instanceof StaticObjectInstance) | ||||
| 				else | ||||
| 				{ | ||||
| 					player.sendPacket(new StaticObject((StaticObjectInstance) object)); | ||||
| 				} | ||||
| 				else if (object instanceof NpcInstance) | ||||
| 				{ | ||||
| 					player.sendPacket(new NpcInfo((NpcInstance) object, player)); | ||||
| 				} | ||||
| 				else if (object instanceof Summon) | ||||
| 				{ | ||||
| 					final Summon summon = (Summon) object; | ||||
| 					 | ||||
| 					// Check if the PlayerInstance is the owner of the Pet | ||||
| 					if (player.equals(summon.getOwner())) | ||||
| 					{ | ||||
| 						player.sendPacket(new PetInfo(summon)); | ||||
| 						if (summon instanceof PetInstance) | ||||
| 						{ | ||||
| 							player.sendPacket(new PetItemList((PetInstance) summon)); | ||||
| 						} | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						player.sendPacket(new NpcInfo(summon, player)); | ||||
| 					} | ||||
| 					 | ||||
| 					// The PetInfo packet wipes the PartySpelled (list of active spells' icons). Re-add them | ||||
| 					summon.updateEffectIcons(true); | ||||
| 				} | ||||
| 				else if (object instanceof PlayerInstance) | ||||
| 				{ | ||||
| 					final PlayerInstance otherPlayer = (PlayerInstance) object; | ||||
| 					if (otherPlayer.isInBoat()) | ||||
| 					{ | ||||
| 						otherPlayer.getPosition().setWorldPosition(otherPlayer.getBoat().getLocation()); | ||||
| 						player.sendPacket(new CharInfo(otherPlayer)); | ||||
| 						final int relation = otherPlayer.getRelation(player); | ||||
| 						if ((otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != relation)) | ||||
| 						{ | ||||
| 							player.sendPacket(new RelationChanged(otherPlayer, relation, player.isAutoAttackable(otherPlayer))); | ||||
| 						} | ||||
| 						player.sendPacket(new GetOnVehicle(otherPlayer, otherPlayer.getBoat(), otherPlayer.getBoatPosition().getX(), otherPlayer.getBoatPosition().getY(), otherPlayer.getBoatPosition().getZ())); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						player.sendPacket(new CharInfo(otherPlayer)); | ||||
| 						final int relation = otherPlayer.getRelation(player); | ||||
| 						if ((otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != relation)) | ||||
| 						{ | ||||
| 							player.sendPacket(new RelationChanged(otherPlayer, relation, player.isAutoAttackable(otherPlayer))); | ||||
| 						} | ||||
| 					} | ||||
| 					player.sendPacket(new NpcInfo(summon, player)); | ||||
| 				} | ||||
| 				 | ||||
| 				if (object instanceof Creature) | ||||
| 				// The PetInfo packet wipes the PartySpelled (list of active spells' icons). Re-add them | ||||
| 				summon.updateEffectIcons(true); | ||||
| 			} | ||||
| 			else if (object instanceof PlayerInstance) | ||||
| 			{ | ||||
| 				final PlayerInstance otherPlayer = (PlayerInstance) object; | ||||
| 				if (otherPlayer.isInBoat()) | ||||
| 				{ | ||||
| 					// Update the state of the Creature object client side by sending Server->Client packet MoveToPawn/CharMoveToLocation and AutoAttackStart to the PlayerInstance | ||||
| 					final Creature obj = (Creature) object; | ||||
| 					if (obj.hasAI()) | ||||
| 					otherPlayer.getPosition().setWorldPosition(otherPlayer.getBoat().getLocation()); | ||||
| 					player.sendPacket(new CharInfo(otherPlayer)); | ||||
| 					final int relation = otherPlayer.getRelation(player); | ||||
| 					if ((otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != relation)) | ||||
| 					{ | ||||
| 						obj.getAI().describeStateToPlayer(player); | ||||
| 						player.sendPacket(new RelationChanged(otherPlayer, relation, player.isAutoAttackable(otherPlayer))); | ||||
| 					} | ||||
| 					player.sendPacket(new GetOnVehicle(otherPlayer, otherPlayer.getBoat(), otherPlayer.getBoatPosition().getX(), otherPlayer.getBoatPosition().getY(), otherPlayer.getBoatPosition().getZ())); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					player.sendPacket(new CharInfo(otherPlayer)); | ||||
| 					final int relation = otherPlayer.getRelation(player); | ||||
| 					if ((otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != null) && (otherPlayer.getKnownList().getKnownRelations().get(player.getObjectId()) != relation)) | ||||
| 					{ | ||||
| 						player.sendPacket(new RelationChanged(otherPlayer, relation, player.isAutoAttackable(otherPlayer))); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			if (object instanceof Creature) | ||||
| 			{ | ||||
| 				// Update the state of the Creature object client side by sending Server->Client packet MoveToPawn/CharMoveToLocation and AutoAttackStart to the PlayerInstance | ||||
| 				final Creature obj = (Creature) object; | ||||
| 				if (obj.hasAI()) | ||||
| 				{ | ||||
| 					obj.getAI().describeStateToPlayer(player); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -16,46 +16,26 @@ | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.network.serverpackets; | ||||
|  | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.gameserver.datatables.sql.NpcTable; | ||||
| import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; | ||||
| import org.l2jmobius.gameserver.model.itemcontainer.Inventory; | ||||
|  | ||||
| public class CharInfo extends GameServerPacket | ||||
| { | ||||
| 	private static final Logger LOGGER = Logger.getLogger(CharInfo.class.getName()); | ||||
| 	 | ||||
| 	private final PlayerInstance _player; | ||||
| 	private final Inventory _inventory; | ||||
| 	private final int _x; | ||||
| 	private final int _y; | ||||
| 	private final int _z; | ||||
| 	private final int _heading; | ||||
| 	private final int _mAtkSpd; | ||||
| 	private final int _pAtkSpd; | ||||
| 	private final int _runSpd; | ||||
| 	private final int _walkSpd; | ||||
| 	private final int _flyRunSpd; | ||||
| 	private final int _flyWalkSpd; | ||||
| 	private final float _moveMultiplier; | ||||
| 	private final float _attackSpeedMultiplier; | ||||
| 	 | ||||
| 	public CharInfo(PlayerInstance player) | ||||
| 	{ | ||||
| 		_player = player; | ||||
| 		_inventory = player.getInventory(); | ||||
| 		_x = player.getX(); | ||||
| 		_y = player.getY(); | ||||
| 		_z = player.getZ(); | ||||
| 		_heading = player.getHeading(); | ||||
| 		_mAtkSpd = player.getMAtkSpd(); | ||||
| 		_pAtkSpd = player.getPAtkSpd(); | ||||
| 		_attackSpeedMultiplier = player.getAttackSpeedMultiplier(); | ||||
| 		_moveMultiplier = player.getMovementSpeedMultiplier(); | ||||
| 		_runSpd = Math.round(player.getRunSpeed() / _moveMultiplier); | ||||
| 		_walkSpd = Math.round(player.getWalkSpeed() / _moveMultiplier); | ||||
| @@ -67,278 +47,194 @@ public class CharInfo extends GameServerPacket | ||||
| 	protected final void writeImpl() | ||||
| 	{ | ||||
| 		boolean isGM = false; | ||||
| 		 | ||||
| 		final PlayerInstance tmp = getClient().getPlayer(); | ||||
| 		if ((tmp != null) && tmp.isGM()) | ||||
| 		{ | ||||
| 			isGM = true; | ||||
| 		} | ||||
| 		 | ||||
| 		if (!isGM && _player.getAppearance().isInvisible()) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		if (_player.getPoly().isMorphed()) | ||||
| 		writeC(0x03); | ||||
| 		writeD(_player.getX()); | ||||
| 		writeD(_player.getY()); | ||||
| 		writeD(_player.getZ()); | ||||
| 		writeD(_player.getBoat() != null ? _player.getBoat().getObjectId() : 0); | ||||
| 		writeD(_player.getObjectId()); | ||||
| 		writeS(_player.getName()); | ||||
| 		writeD(_player.getRace().ordinal()); | ||||
| 		writeD(_player.getAppearance().isFemale() ? 1 : 0); | ||||
| 		 | ||||
| 		if (_player.getClassIndex() == 0) | ||||
| 		{ | ||||
| 			final NpcTemplate template = NpcTable.getInstance().getTemplate(_player.getPoly().getPolyId()); | ||||
| 			if (template != null) | ||||
| 			{ | ||||
| 				writeC(0x16); | ||||
| 				writeD(_player.getObjectId()); | ||||
| 				writeD(_player.getPoly().getPolyId() + 1000000); // npctype id | ||||
| 				writeD(_player.getKarma() > 0 ? 1 : 0); | ||||
| 				writeD(_x); | ||||
| 				writeD(_y); | ||||
| 				writeD(_z); | ||||
| 				writeD(_heading); | ||||
| 				writeD(0x00); | ||||
| 				writeD(_mAtkSpd); | ||||
| 				writeD(_pAtkSpd); | ||||
| 				writeD(_runSpd); // base run speed | ||||
| 				writeD(_walkSpd); // base walk speed | ||||
| 				writeD(_runSpd); // swim run speed (calculated by getter) | ||||
| 				writeD(_walkSpd); // swim walk speed (calculated by getter) | ||||
| 				writeD(_flyRunSpd); // fly run speed ? | ||||
| 				writeD(_flyWalkSpd); // fly walk speed ? | ||||
| 				writeD(_flyRunSpd); | ||||
| 				writeD(_flyWalkSpd); | ||||
| 				writeF(_moveMultiplier); | ||||
| 				writeF(_attackSpeedMultiplier); | ||||
| 				writeF(template.getCollisionRadius()); | ||||
| 				writeF(template.getCollisionHeight()); | ||||
| 				writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); // right hand weapon | ||||
| 				writeD(0); | ||||
| 				writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); // left hand weapon | ||||
| 				writeC(1); // name above char 1=true ... ?? | ||||
| 				writeC(_player.isRunning() ? 1 : 0); | ||||
| 				writeC(_player.isInCombat() ? 1 : 0); | ||||
| 				writeC(_player.isAlikeDead() ? 1 : 0); | ||||
| 				 | ||||
| 				// if(gmSeeInvis) | ||||
| 				// { | ||||
| 				writeC(0); // if the charinfo is written means receiver can see the char | ||||
| 				// } | ||||
| 				// else | ||||
| 				// { | ||||
| 				// writeC(_player.getAppearance().getInvisible() ? 1 : 0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation) | ||||
| 				// } | ||||
| 				writeS(_player.getName()); | ||||
| 				 | ||||
| 				if (_player.getAppearance().isInvisible()) | ||||
| 				{ | ||||
| 					writeS("Invisible"); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					writeS(_player.getTitle()); | ||||
| 				} | ||||
| 				 | ||||
| 				writeD(0); | ||||
| 				writeD(0); | ||||
| 				writeD(0); // hmm karma ?? | ||||
| 				 | ||||
| 				if (_player.getAppearance().isInvisible()) | ||||
| 				{ | ||||
| 					writeD((_player.getAbnormalEffect() | Creature.ABNORMAL_EFFECT_STEALTH)); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					writeD(_player.getAbnormalEffect()); // C2 | ||||
| 				} | ||||
| 				 | ||||
| 				writeD(0); // C2 | ||||
| 				writeD(0); // C2 | ||||
| 				writeD(0); // C2 | ||||
| 				writeD(0); // C2 | ||||
| 				writeC(0); // C2 | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				LOGGER.warning("Character " + _player.getName() + " (" + _player.getObjectId() + ") morphed in a Npc (" + _player.getPoly().getPolyId() + ") w/o template."); | ||||
| 			} | ||||
| 			writeD(_player.getClassId().getId()); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			writeD(_player.getBaseClass()); | ||||
| 		} | ||||
| 		 | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_HEAD)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_FEET)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_BACK)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_HAIR)); | ||||
| 		writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_FACE)); | ||||
| 		 | ||||
| 		// c6 new h's | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeD(_inventory.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND)); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeD(_inventory.getPaperdollAugmentationId(Inventory.PAPERDOLL_LRHAND)); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		writeH(0x00); | ||||
| 		 | ||||
| 		writeD(_player.getPvpFlag()); | ||||
| 		writeD(_player.getKarma()); | ||||
| 		 | ||||
| 		writeD(_player.getMAtkSpd()); | ||||
| 		writeD(_player.getPAtkSpd()); | ||||
| 		 | ||||
| 		writeD(_player.getPvpFlag()); | ||||
| 		writeD(_player.getKarma()); | ||||
| 		 | ||||
| 		writeD(_runSpd); // base run speed | ||||
| 		writeD(_walkSpd); // base walk speed | ||||
| 		writeD(_runSpd); // swim run speed (calculated by getter) | ||||
| 		writeD(_walkSpd); // swim walk speed (calculated by getter) | ||||
| 		writeD(_flyRunSpd); // fly run speed ? | ||||
| 		writeD(_flyWalkSpd); // fly walk speed ? | ||||
| 		writeD(_flyRunSpd); | ||||
| 		writeD(_flyWalkSpd); | ||||
| 		writeF(_moveMultiplier); | ||||
| 		writeF(_player.getAttackSpeedMultiplier()); | ||||
| 		writeF(_player.getBaseTemplate().getCollisionRadius()); | ||||
| 		writeF(_player.getBaseTemplate().getCollisionHeight()); | ||||
| 		 | ||||
| 		writeD(_player.getAppearance().getHairStyle()); | ||||
| 		writeD(_player.getAppearance().getHairColor()); | ||||
| 		writeD(_player.getAppearance().getFace()); | ||||
| 		 | ||||
| 		if (_player.getAppearance().isInvisible()) | ||||
| 		{ | ||||
| 			writeS("[Invisible]"); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			writeS(_player.getTitle()); | ||||
| 		} | ||||
| 		 | ||||
| 		writeD(_player.getClanId()); | ||||
| 		writeD(_player.getClanCrestId()); | ||||
| 		writeD(_player.getAllyId()); | ||||
| 		writeD(_player.getAllyCrestId()); | ||||
| 		// In UserInfo leader rights and siege flags, but here found nothing?? | ||||
| 		// Therefore RelationChanged packet with that info is required | ||||
| 		writeD(0x00); | ||||
| 		 | ||||
| 		writeC(_player.isSitting() ? 0 : 1); // standing = 1 sitting = 0 | ||||
| 		writeC(_player.isRunning() ? 1 : 0); // running = 1 walking = 0 | ||||
| 		writeC(_player.isInCombat() ? 1 : 0); | ||||
| 		writeC(_player.isAlikeDead() ? 1 : 0); | ||||
| 		 | ||||
| 		// if(gmSeeInvis) | ||||
| 		// { | ||||
| 		writeC(0x00); // if the charinfo is written means receiver can see the char | ||||
| 		// } | ||||
| 		// else | ||||
| 		// { | ||||
| 		// writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible = 1 visible =0 | ||||
| 		// } | ||||
| 		writeC(_player.getMountType()); // 1 on strider 2 on wyvern 0 no mount | ||||
| 		writeC(_player.getPrivateStoreType()); // 1 - sellshop | ||||
| 		 | ||||
| 		writeH(_player.getCubics().size()); | ||||
| 		for (int cubicId : _player.getCubics().keySet()) | ||||
| 		{ | ||||
| 			writeH(cubicId); | ||||
| 		} | ||||
| 		 | ||||
| 		writeC(_player.isInPartyMatchRoom() ? 1 : 0); | ||||
| 		 | ||||
| 		if (_player.getAppearance().isInvisible()) | ||||
| 		{ | ||||
| 			writeD((_player.getAbnormalEffect() | Creature.ABNORMAL_EFFECT_STEALTH)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			writeD(_player.getAbnormalEffect()); | ||||
| 		} | ||||
| 		 | ||||
| 		writeC(_player.getRecomLeft()); | ||||
| 		writeH(_player.getRecomHave()); // Blue value for name (0 = white, 255 = pure blue) | ||||
| 		writeD(_player.getClassId().getId()); | ||||
| 		 | ||||
| 		writeD(_player.getMaxCp()); | ||||
| 		writeD((int) _player.getCurrentCp()); | ||||
| 		writeC(_player.isMounted() ? 0 : _player.getEnchantEffect()); | ||||
| 		 | ||||
| 		if (_player.getTeam() == 1) | ||||
| 		{ | ||||
| 			writeC(0x01); // team circle around feet 1= Blue, 2 = red | ||||
| 		} | ||||
| 		else if (_player.getTeam() == 2) | ||||
| 		{ | ||||
| 			writeC(0x02); // team circle around feet 1= Blue, 2 = red | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			writeC(0x00); // team circle around feet 1= Blue, 2 = red | ||||
| 		} | ||||
| 		 | ||||
| 		writeD(_player.getClanCrestLargeId()); | ||||
| 		writeC(_player.isNoble() ? 1 : 0); // Symbol on char menu ctrl+I | ||||
| 		writeC((_player.isHero() || (_player.isGM() && Config.GM_HERO_AURA) || _player.isPVPHero()) ? 1 : 0); // Hero Aura | ||||
| 		 | ||||
| 		writeC(_player.isFishing() ? 1 : 0); // 0x01: Fishing Mode (Cant be undone by setting back to 0) | ||||
| 		writeD(_player.getFishX()); | ||||
| 		writeD(_player.getFishY()); | ||||
| 		writeD(_player.getFishZ()); | ||||
| 		 | ||||
| 		writeD(_player.getAppearance().getNameColor()); | ||||
| 		 | ||||
| 		writeD(_player.getHeading()); | ||||
| 		 | ||||
| 		writeD(_player.getPledgeClass()); | ||||
| 		writeD(_player.getPledgeType()); | ||||
| 		 | ||||
| 		writeD(_player.getAppearance().getTitleColor()); | ||||
| 		 | ||||
| 		if (_player.isCursedWeaponEquiped()) | ||||
| 		{ | ||||
| 			writeD(CursedWeaponsManager.getInstance().getLevel(_player.getCursedWeaponEquipedId())); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			writeC(0x03); | ||||
| 			writeD(_x); | ||||
| 			writeD(_y); | ||||
| 			writeD(_z); | ||||
| 			writeD(_player.getBoat() != null ? _player.getBoat().getObjectId() : 0); | ||||
| 			writeD(_player.getObjectId()); | ||||
| 			writeS(_player.getName()); | ||||
| 			writeD(_player.getRace().ordinal()); | ||||
| 			writeD(_player.getAppearance().isFemale() ? 1 : 0); | ||||
| 			 | ||||
| 			if (_player.getClassIndex() == 0) | ||||
| 			{ | ||||
| 				writeD(_player.getClassId().getId()); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				writeD(_player.getBaseClass()); | ||||
| 			} | ||||
| 			 | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_HEAD)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_FEET)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_BACK)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_HAIR)); | ||||
| 			writeD(_inventory.getPaperdollItemId(Inventory.PAPERDOLL_FACE)); | ||||
| 			 | ||||
| 			// c6 new h's | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeD(_inventory.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND)); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeD(_inventory.getPaperdollAugmentationId(Inventory.PAPERDOLL_LRHAND)); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			writeH(0x00); | ||||
| 			 | ||||
| 			writeD(_player.getPvpFlag()); | ||||
| 			writeD(_player.getKarma()); | ||||
| 			 | ||||
| 			writeD(_mAtkSpd); | ||||
| 			writeD(_pAtkSpd); | ||||
| 			 | ||||
| 			writeD(_player.getPvpFlag()); | ||||
| 			writeD(_player.getKarma()); | ||||
| 			 | ||||
| 			writeD(_runSpd); // base run speed | ||||
| 			writeD(_walkSpd); // base walk speed | ||||
| 			writeD(_runSpd); // swim run speed (calculated by getter) | ||||
| 			writeD(_walkSpd); // swim walk speed (calculated by getter) | ||||
| 			writeD(_flyRunSpd); // fly run speed ? | ||||
| 			writeD(_flyWalkSpd); // fly walk speed ? | ||||
| 			writeD(_flyRunSpd); | ||||
| 			writeD(_flyWalkSpd); | ||||
| 			writeF(_moveMultiplier); | ||||
| 			writeF(_attackSpeedMultiplier); | ||||
| 			writeF(_player.getBaseTemplate().getCollisionRadius()); | ||||
| 			writeF(_player.getBaseTemplate().getCollisionHeight()); | ||||
| 			 | ||||
| 			writeD(_player.getAppearance().getHairStyle()); | ||||
| 			writeD(_player.getAppearance().getHairColor()); | ||||
| 			writeD(_player.getAppearance().getFace()); | ||||
| 			 | ||||
| 			if (_player.getAppearance().isInvisible()) | ||||
| 			{ | ||||
| 				writeS("[Invisible]"); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				writeS(_player.getTitle()); | ||||
| 			} | ||||
| 			 | ||||
| 			writeD(_player.getClanId()); | ||||
| 			writeD(_player.getClanCrestId()); | ||||
| 			writeD(_player.getAllyId()); | ||||
| 			writeD(_player.getAllyCrestId()); | ||||
| 			// In UserInfo leader rights and siege flags, but here found nothing?? | ||||
| 			// Therefore RelationChanged packet with that info is required | ||||
| 			writeD(0x00); | ||||
| 			 | ||||
| 			writeC(_player.isSitting() ? 0 : 1); // standing = 1 sitting = 0 | ||||
| 			writeC(_player.isRunning() ? 1 : 0); // running = 1 walking = 0 | ||||
| 			writeC(_player.isInCombat() ? 1 : 0); | ||||
| 			writeC(_player.isAlikeDead() ? 1 : 0); | ||||
| 			 | ||||
| 			// if(gmSeeInvis) | ||||
| 			// { | ||||
| 			writeC(0x00); // if the charinfo is written means receiver can see the char | ||||
| 			// } | ||||
| 			// else | ||||
| 			// { | ||||
| 			// writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible = 1 visible =0 | ||||
| 			// } | ||||
| 			writeC(_player.getMountType()); // 1 on strider 2 on wyvern 0 no mount | ||||
| 			writeC(_player.getPrivateStoreType()); // 1 - sellshop | ||||
| 			 | ||||
| 			writeH(_player.getCubics().size()); | ||||
| 			for (int cubicId : _player.getCubics().keySet()) | ||||
| 			{ | ||||
| 				writeH(cubicId); | ||||
| 			} | ||||
| 			 | ||||
| 			writeC(_player.isInPartyMatchRoom() ? 1 : 0); | ||||
| 			 | ||||
| 			if (_player.getAppearance().isInvisible()) | ||||
| 			{ | ||||
| 				writeD((_player.getAbnormalEffect() | Creature.ABNORMAL_EFFECT_STEALTH)); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				writeD(_player.getAbnormalEffect()); | ||||
| 			} | ||||
| 			 | ||||
| 			writeC(_player.getRecomLeft()); | ||||
| 			writeH(_player.getRecomHave()); // Blue value for name (0 = white, 255 = pure blue) | ||||
| 			writeD(_player.getClassId().getId()); | ||||
| 			 | ||||
| 			writeD(_player.getMaxCp()); | ||||
| 			writeD((int) _player.getCurrentCp()); | ||||
| 			writeC(_player.isMounted() ? 0 : _player.getEnchantEffect()); | ||||
| 			 | ||||
| 			if (_player.getTeam() == 1) | ||||
| 			{ | ||||
| 				writeC(0x01); // team circle around feet 1= Blue, 2 = red | ||||
| 			} | ||||
| 			else if (_player.getTeam() == 2) | ||||
| 			{ | ||||
| 				writeC(0x02); // team circle around feet 1= Blue, 2 = red | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				writeC(0x00); // team circle around feet 1= Blue, 2 = red | ||||
| 			} | ||||
| 			 | ||||
| 			writeD(_player.getClanCrestLargeId()); | ||||
| 			writeC(_player.isNoble() ? 1 : 0); // Symbol on char menu ctrl+I | ||||
| 			writeC((_player.isHero() || (_player.isGM() && Config.GM_HERO_AURA) || _player.isPVPHero()) ? 1 : 0); // Hero Aura | ||||
| 			 | ||||
| 			writeC(_player.isFishing() ? 1 : 0); // 0x01: Fishing Mode (Cant be undone by setting back to 0) | ||||
| 			writeD(_player.getFishX()); | ||||
| 			writeD(_player.getFishY()); | ||||
| 			writeD(_player.getFishZ()); | ||||
| 			 | ||||
| 			writeD(_player.getAppearance().getNameColor()); | ||||
| 			 | ||||
| 			writeD(_heading); | ||||
| 			 | ||||
| 			writeD(_player.getPledgeClass()); | ||||
| 			writeD(_player.getPledgeType()); | ||||
| 			 | ||||
| 			writeD(_player.getAppearance().getTitleColor()); | ||||
| 			 | ||||
| 			if (_player.isCursedWeaponEquiped()) | ||||
| 			{ | ||||
| 				writeD(CursedWeaponsManager.getInstance().getLevel(_player.getCursedWeaponEquipedId())); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				writeD(0x00); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -61,9 +61,6 @@ public class NpcInfo extends GameServerPacket | ||||
| 	 */ | ||||
| 	public NpcInfo(NpcInstance cha, Creature attacker) | ||||
| 	{ | ||||
| 		/* | ||||
| 		 * if(cha.getMxcPoly() != null) { attacker.sendPacket(new MxCPolyInfo(cha)); return; } | ||||
| 		 */ | ||||
| 		if (cha.getCustomNpcInstance() != null) | ||||
| 		{ | ||||
| 			attacker.sendPacket(new CustomNpcInfo(cha)); | ||||
|   | ||||
| @@ -1,175 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.network.serverpackets; | ||||
|  | ||||
| import org.l2jmobius.gameserver.datatables.sql.NpcTable; | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; | ||||
| import org.l2jmobius.gameserver.model.items.instance.ItemInstance; | ||||
|  | ||||
| /** | ||||
|  * @version $Revision: 1.7.2.4.2.9 $ $Date: 2005/04/11 10:05:54 $ | ||||
|  */ | ||||
| public class NpcInfoPoly extends GameServerPacket | ||||
| { | ||||
| 	private Creature _creature; | ||||
| 	private final WorldObject _obj; | ||||
| 	private int _x; | ||||
| 	private int _y; | ||||
| 	private int _z; | ||||
| 	private int _heading; | ||||
| 	private final int _npcId; | ||||
| 	private boolean _isAttackable; | ||||
| 	private final boolean _isSummoned; | ||||
| 	private boolean _isRunning; | ||||
| 	private boolean _isInCombat; | ||||
| 	private boolean _isAlikeDead; | ||||
| 	private int _mAtkSpd; | ||||
| 	private int _pAtkSpd; | ||||
| 	private int _runSpd; | ||||
| 	private int _walkSpd; | ||||
| 	private int _swimRunSpd; | ||||
| 	private int _swimWalkSpd; | ||||
| 	private int _flRunSpd; | ||||
| 	private int _flWalkSpd; | ||||
| 	private int _flyRunSpd; | ||||
| 	private int _flyWalkSpd; | ||||
| 	private int _rhand; | ||||
| 	private int _lhand; | ||||
| 	private String _name; | ||||
| 	private String _title; | ||||
| 	private int _abnormalEffect; | ||||
| 	NpcTemplate _template; | ||||
| 	private final int _collisionRadius; | ||||
| 	private final int _collisionHeight; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Instantiates a new npc info poly. | ||||
| 	 * @param obj the obj | ||||
| 	 * @param attacker the attacker | ||||
| 	 */ | ||||
| 	public NpcInfoPoly(WorldObject obj, Creature attacker) | ||||
| 	{ | ||||
| 		_obj = obj; | ||||
| 		_npcId = obj.getPoly().getPolyId(); | ||||
| 		_template = NpcTable.getInstance().getTemplate(_npcId); | ||||
| 		_isAttackable = true; | ||||
| 		_rhand = 0; | ||||
| 		_lhand = 0; | ||||
| 		_isSummoned = false; | ||||
| 		_collisionRadius = _template.getCollisionRadius(); | ||||
| 		_collisionHeight = _template.getCollisionHeight(); | ||||
| 		if (_obj instanceof Creature) | ||||
| 		{ | ||||
| 			_creature = (Creature) obj; | ||||
| 			_isAttackable = obj.isAutoAttackable(attacker); | ||||
| 			_rhand = _template.getRhand(); | ||||
| 			_lhand = _template.getLhand(); | ||||
| 		} | ||||
| 		 | ||||
| 		if (_obj instanceof ItemInstance) | ||||
| 		{ | ||||
| 			_x = _obj.getX(); | ||||
| 			_y = _obj.getY(); | ||||
| 			_z = _obj.getZ(); | ||||
| 			_heading = 0; | ||||
| 			_mAtkSpd = 100; // yes, an item can be dread as death | ||||
| 			_pAtkSpd = 100; | ||||
| 			_runSpd = 120; | ||||
| 			_walkSpd = 80; | ||||
| 			_swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd; | ||||
| 			_swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd; | ||||
| 			_isRunning = _isInCombat = _isAlikeDead = false; | ||||
| 			_name = "item"; | ||||
| 			_title = "polymorphed"; | ||||
| 			_abnormalEffect = 0; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			_x = _creature.getX(); | ||||
| 			_y = _creature.getY(); | ||||
| 			_z = _creature.getZ(); | ||||
| 			_heading = _creature.getHeading(); | ||||
| 			_mAtkSpd = _creature.getMAtkSpd(); | ||||
| 			_pAtkSpd = _creature.getPAtkSpd(); | ||||
| 			_runSpd = _creature.getRunSpeed(); | ||||
| 			_walkSpd = _creature.getWalkSpeed(); | ||||
| 			_swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd; | ||||
| 			_swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd; | ||||
| 			_isRunning = _creature.isRunning(); | ||||
| 			_isInCombat = _creature.isInCombat(); | ||||
| 			_isAlikeDead = _creature.isAlikeDead(); | ||||
| 			_name = _creature.getName(); | ||||
| 			_title = _creature.getTitle(); | ||||
| 			_abnormalEffect = _creature.getAbnormalEffect(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	/* | ||||
| 	 * (non-Javadoc) | ||||
| 	 * @see org.l2jmobius.gameserver.network.serverpackets.L2GameServerPacket#writeImpl() | ||||
| 	 */ | ||||
| 	@Override | ||||
| 	protected final void writeImpl() | ||||
| 	{ | ||||
| 		writeC(0x16); | ||||
| 		writeD(_obj.getObjectId()); | ||||
| 		writeD(_npcId + 1000000); // npctype id | ||||
| 		writeD(_isAttackable ? 1 : 0); | ||||
| 		writeD(_x); | ||||
| 		writeD(_y); | ||||
| 		writeD(_z); | ||||
| 		writeD(_heading); | ||||
| 		writeD(0x00); | ||||
| 		writeD(_mAtkSpd); | ||||
| 		writeD(_pAtkSpd); | ||||
| 		writeD(_runSpd); | ||||
| 		writeD(_walkSpd); | ||||
| 		writeD(_swimRunSpd/* 0x32 */); // swimspeed | ||||
| 		writeD(_swimWalkSpd/* 0x32 */); // swimspeed | ||||
| 		writeD(_flRunSpd); | ||||
| 		writeD(_flWalkSpd); | ||||
| 		writeD(_flyRunSpd); | ||||
| 		writeD(_flyWalkSpd); | ||||
| 		writeF(1/* _activeChar.getProperMultiplier() */); | ||||
| 		writeF(1/* _activeChar.getAttackSpeedMultiplier() */); | ||||
| 		writeF(_collisionRadius); | ||||
| 		writeF(_collisionHeight); | ||||
| 		writeD(_rhand); // right hand weapon | ||||
| 		writeD(0); | ||||
| 		writeD(_lhand); // left hand weapon | ||||
| 		writeC(1); // name above char 1=true ... ?? | ||||
| 		writeC(_isRunning ? 1 : 0); | ||||
| 		writeC(_isInCombat ? 1 : 0); | ||||
| 		writeC(_isAlikeDead ? 1 : 0); | ||||
| 		writeC(_isSummoned ? 2 : 0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation) | ||||
| 		writeS(_name); | ||||
| 		writeS(_title); | ||||
| 		writeD(0); | ||||
| 		writeD(0); | ||||
| 		writeD(0000); // hmm karma ?? | ||||
| 		 | ||||
| 		writeH(_abnormalEffect); // C2 | ||||
| 		writeH(0x00); // C2 | ||||
| 		writeD(0000); // C2 | ||||
| 		writeD(0000); // C2 | ||||
| 		writeD(0000); // C2 | ||||
| 		writeD(0000); // C2 | ||||
| 		writeC(0000); // C2 | ||||
| 	} | ||||
| } | ||||
| @@ -1,76 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.network.serverpackets; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
| import org.l2jmobius.gameserver.model.items.instance.ItemInstance; | ||||
|  | ||||
| /** | ||||
|  * 15 ee cc 11 43 object id 39 00 00 00 item id 8f 14 00 00 x b7 f1 00 00 y 60 f2 ff ff z 01 00 00 00 show item count 7a 00 00 00 count . format dddddddd | ||||
|  * @version $Revision: 1.3.2.1.2.3 $ $Date: 2005/03/27 15:29:39 $ | ||||
|  */ | ||||
| public class SpawnItemPoly extends GameServerPacket | ||||
| { | ||||
| 	private int _objectId; | ||||
| 	private int _itemId; | ||||
| 	private int _x; | ||||
| 	private int _y; | ||||
| 	private int _z; | ||||
| 	private int _stackable; | ||||
| 	private int _count; | ||||
| 	 | ||||
| 	public SpawnItemPoly(WorldObject object) | ||||
| 	{ | ||||
| 		if (object instanceof ItemInstance) | ||||
| 		{ | ||||
| 			final ItemInstance item = (ItemInstance) object; | ||||
| 			_objectId = object.getObjectId(); | ||||
| 			_itemId = object.getPoly().getPolyId(); | ||||
| 			_x = item.getX(); | ||||
| 			_y = item.getY(); | ||||
| 			_z = item.getZ(); | ||||
| 			_stackable = item.isStackable() ? 0x01 : 0x00; | ||||
| 			_count = item.getCount(); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			_objectId = object.getObjectId(); | ||||
| 			_itemId = object.getPoly().getPolyId(); | ||||
| 			_x = object.getX(); | ||||
| 			_y = object.getY(); | ||||
| 			_z = object.getZ(); | ||||
| 			_stackable = 0x00; | ||||
| 			_count = 1; | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	protected final void writeImpl() | ||||
| 	{ | ||||
| 		writeC(0x0b); | ||||
| 		writeD(_objectId); | ||||
| 		writeD(_itemId); | ||||
| 		 | ||||
| 		writeD(_x); | ||||
| 		writeD(_y); | ||||
| 		writeD(_z); | ||||
| 		// only show item count if it is a stackable item | ||||
| 		writeD(_stackable); | ||||
| 		writeD(_count); | ||||
| 		writeD(0x00); // c2 | ||||
| 	} | ||||
| } | ||||
| @@ -17,12 +17,10 @@ | ||||
| package org.l2jmobius.gameserver.network.serverpackets; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.gameserver.datatables.sql.NpcTable; | ||||
| import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.Summon; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; | ||||
| import org.l2jmobius.gameserver.model.itemcontainer.Inventory; | ||||
|  | ||||
| public class UserInfo extends GameServerPacket | ||||
| @@ -217,14 +215,6 @@ public class UserInfo extends GameServerPacket | ||||
| 		{ | ||||
| 			title = "[Invisible]"; | ||||
| 		} | ||||
| 		if (_player.getPoly().isMorphed()) | ||||
| 		{ | ||||
| 			final NpcTemplate polyObj = NpcTable.getInstance().getTemplate(_player.getPoly().getPolyId()); | ||||
| 			if (polyObj != null) | ||||
| 			{ | ||||
| 				title += " - " + polyObj.getName(); | ||||
| 			} | ||||
| 		} | ||||
| 		writeS(title); | ||||
| 		 | ||||
| 		writeD(_player.getClanId()); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment