Przeglądaj źródła

Again some updates from Gnacik:
Missing System Message
Say2 little changes
Cleanup
Decrease spawn coords due to problem with geo in small places
Pet Manager Mickey retail-like pet restore
Fortress siege fix. Defenders should not have ability to open/close doors on siege because they can close Command Barracs and block whole siege process. Attackers cannot take flag, because CB doors are not destroyable.

JIV 15 lat temu
rodzic
commit
6799752726

+ 2 - 6
L2_GameServer/java/com/l2jserver/gameserver/lib/Log.java

@@ -52,14 +52,14 @@ public class Log
 		
 		try
 		{
-			File file = new File("log/game/" + (curr != null ? curr : "" )+( cat != null ? cat : "unk" )+ ".txt");
+			File file = new File("log/game/" + (curr != null ? curr : "" )+(cat != null ? cat : "unk") + ".txt");
 			save = new FileWriter(file, true);
 			String out = "[" + date + "] " + text + "\n";
 			save.write(out);
 		}
 		catch (IOException e)
 		{
-			_log.warning("saving chat log failed: " + e);
+			_log.warning("Error saving logfile: " + e);
 			e.printStackTrace();
 		}
 		finally
@@ -72,10 +72,6 @@ public class Log
 			{
 			}
 		}
-		
-		if (cat != null)
-			add(text, null);
-		
 	}
 	
 	@Deprecated

+ 21 - 3
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortDoormenInstance.java

@@ -16,6 +16,8 @@ package com.l2jserver.gameserver.model.actor.instance;
 
 import java.util.StringTokenizer;
 
+import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
+import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
 
 
@@ -26,6 +28,23 @@ public class L2FortDoormenInstance extends L2DoormenInstance
 		super(objectID, template);
 	}
 
+	public void showChatWindow(L2PcInstance player)
+	{
+		player.sendPacket(ActionFailed.STATIC_PACKET);
+		
+		NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
+
+		if (!isOwnerClan(player))
+			html.setFile("data/html/doormen/"+ getTemplate().npcId + "-no.htm");
+		else if (isUnderSiege())
+			html.setFile("data/html/doormen/"+ getTemplate().npcId + "-busy.htm");
+		else
+			html.setFile("data/html/doormen/"+ getTemplate().npcId + ".htm");
+
+		html.replace("%objectId%", String.valueOf(getObjectId()));
+		player.sendPacket(html);
+	}
+	
 	@Override
 	protected final void openDoors(L2PcInstance player, String command)
 	{
@@ -61,10 +80,9 @@ public class L2FortDoormenInstance extends L2DoormenInstance
 		return false;
 	}
 
-	// TODO: enable then teleports for forts will be done
-/*	@Override
+	@Override
 	protected final boolean isUnderSiege()
 	{
 		return getFort().getZone().isActive();
-	}*/
+	}
 }

+ 11 - 6
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PetManagerInstance.java

@@ -15,6 +15,7 @@
 package com.l2jserver.gameserver.model.actor.instance;
 
 import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
 import com.l2jserver.gameserver.util.Evolve;
@@ -48,6 +49,10 @@ public class L2PetManagerInstance extends L2MerchantInstance
 	{
 		String filename = "data/html/petmanager/" + getNpcId() + ".htm";
 		
+		L2Summon summon = player.getPet();
+		if (getNpcId() == 36478 && summon != null)
+			filename = "data/html/petmanager/restore-unsummonpet.htm";
+
 		NpcHtmlMessage html = new NpcHtmlMessage(1);
 		html.setFile(filename);
 		if (Config.ALLOW_RENTPET && Config.LIST_PET_RENT_NPC.contains(getNpcId()))
@@ -117,25 +122,25 @@ public class L2PetManagerInstance extends L2MerchantInstance
 			{
 				//Info evolve(player, "curent pet summon item", "new pet summon item", "lvl required to evolve")
 				case 1:
-					ok = Evolve.doEvolve(player, this, 9882, 2375, 55);
+					ok = Evolve.doRestore(player, this, 10307, 9882, 55);
 					break;
 				case 2:
-					ok = Evolve.doEvolve(player, this, 10611, 10426, 55);
+					ok = Evolve.doRestore(player, this, 10611, 10426, 70);
 					break;
 				case 3:
-					ok = Evolve.doEvolve(player, this, 10308, 4422, 55);
+					ok = Evolve.doRestore(player, this, 10308, 4422, 55);
 					break;
 				case 4:
-					ok = Evolve.doEvolve(player, this, 10309, 4423, 55);
+					ok = Evolve.doRestore(player, this, 10309, 4423, 55);
 					break;
 				case 5:
-					ok = Evolve.doEvolve(player, this, 10310, 4424, 55);
+					ok = Evolve.doRestore(player, this, 10310, 4424, 55);
 					break;
 			}
 			if (!ok)
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile("data/html/petmanager/evolve_no.htm");
+				html.setFile("data/html/petmanager/restore_no.htm");
 				player.sendPacket(html);
 			}
 		}

+ 6 - 6
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestAnswerJoinParty.java

@@ -49,8 +49,8 @@ public final class RequestAnswerJoinParty extends L2GameClientPacket
         if(player != null)
         {
     		L2PcInstance requestor = player.getActiveRequester();
-		if (requestor == null)
-		    return;
+    		if (requestor == null)
+    			return;
 
     		JoinParty join = new JoinParty(_response);
     		requestor.sendPacket(join);
@@ -67,15 +67,15 @@ public final class RequestAnswerJoinParty extends L2GameClientPacket
 					}
 				}//Update by rocknow-End
     			player.joinParty(requestor.getParty());
-    		} else
+    		}
+    		else
             {
-    			SystemMessage msg = new SystemMessage(SystemMessageId.PLAYER_DECLINED);
-    			requestor.sendPacket(msg);
-                msg = null;
+    			requestor.sendPacket(new SystemMessage(SystemMessageId.PLAYER_DECLINED));
 
     			//activate garbage collection if there are no other members in party (happens when we were creating new one)
     			if (requestor.getParty() != null && requestor.getParty().getMemberCount() == 1) requestor.setParty(null);
     		}
+    		
     		if (requestor.getParty() != null)
     			requestor.getParty().setPendingInvitation(false); // if party is null, there is no need of decreasing
 

+ 4 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestJoinParty.java

@@ -116,6 +116,10 @@ public final class RequestJoinParty extends L2GameClientPacket
         if (target.isInOlympiadMode() || requestor.isInOlympiadMode())
             return;
 
+	    SystemMessage info = new SystemMessage(SystemMessageId.C1_INVITED_TO_PARTY);
+	    info.addCharName(target);
+	    requestor.sendPacket(info);
+        
         if (!requestor.isInParty())     //Asker has no party
         {
             createNewParty(target, requestor);

+ 8 - 10
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/Say2.java

@@ -49,8 +49,9 @@ public final class Say2 extends L2GameClientPacket
 	public final static int TRADE = 8; //+
 	public final static int ALLIANCE = 9; //$
 	public final static int ANNOUNCEMENT = 10;
-	public final static int PARTYROOM_ALL = 16; //(Red)
+	public final static int PARTYMATCH_ROOM = 14;
 	public final static int PARTYROOM_COMMANDER = 15; //(Yellow)
+	public final static int PARTYROOM_ALL = 16; //(Red)
 	public final static int HERO_VOICE = 17;
 	public final static int BATTLEFIELD = 20;
 
@@ -70,7 +71,7 @@ public final class Say2 extends L2GameClientPacket
 		"WILLCRASHCLIENT:)",
 		"FAKEALL?",
 		"FAKEALL?",
-		"FAKEALL?",
+		"PARTYMATCH_ROOM",
 		"PARTYROOM_ALL",
 		"PARTYROOM_COMMANDER",
 		"HERO_VOICE",
@@ -104,16 +105,13 @@ public final class Say2 extends L2GameClientPacket
 		if (Config.DEBUG)
 			_log.info("Say2: Msg Type = '" + _type + "' Text = '" + _text + "'.");
 
-		if (_type < 0 || _type >= CHAT_NAMES.length)
-		{
-			_log.warning("Say2: Invalid type: "+_type);
-			return;
-		}
-
 		L2PcInstance activeChar = getClient().getActiveChar();
 		if (activeChar == null)
+			return;
+		
+		if (_type < 0 || _type >= CHAT_NAMES.length)
 		{
-			_log.warning("[Say2.java] Active Character is null.");
+			_log.warning("Say2: Invalid type: " +_type + " Player : " + activeChar.getName() + " text: " + String.valueOf(_text));
 			return;
 		}
 		
@@ -125,7 +123,7 @@ public final class Say2 extends L2GameClientPacket
 		
 		// Even though the client can handle more characters than it's current limit allows, an overflow (critical error) happens if you pass a huge (1000+) message.
 		// April 27, 2009 - Verified on Gracia P2 & Final official client as 105
-		if (_text.length() > 105)
+		if (_text.length() > 105 && !activeChar.isGM())
 		{
 			activeChar.sendPacket(new SystemMessage(SystemMessageId.DONT_SPAM));
 			return;

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/skills/l2skills/L2SkillSummon.java

@@ -235,7 +235,7 @@ public class L2SkillSummon extends L2Skill
     		activeChar.setPet(summon);
 
     	L2World.getInstance().storeObject(summon);
-        summon.spawnMe(activeChar.getX()+50, activeChar.getY()+100, activeChar.getZ());
+        summon.spawnMe(activeChar.getX()+20, activeChar.getY()+20, activeChar.getZ());
 	}
 
 	public final boolean isCubic()

+ 106 - 0
L2_GameServer/java/com/l2jserver/gameserver/util/Evolve.java

@@ -14,7 +14,11 @@
  */
 package com.l2jserver.gameserver.util;
 
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+
 import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.datatables.NpcTable;
 import com.l2jserver.gameserver.datatables.SummonItemsData;
@@ -26,8 +30,10 @@ import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
+import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
 
@@ -126,6 +132,106 @@ public final class Evolve
 		return true;
 	}
 
+	public static final boolean doRestore(L2PcInstance player, L2Npc npc, int itemIdtake, int itemIdgive, int petminlvl)
+	{
+		if (itemIdtake == 0 || itemIdgive == 0 || petminlvl == 0)
+			return false;
+
+		L2ItemInstance item = player.getInventory().getItemByItemId(itemIdtake);
+		if (item == null)
+			return false;
+
+		int oldpetlvl = item.getEnchantLevel();
+		if (oldpetlvl < petminlvl)
+			oldpetlvl = petminlvl;
+
+		L2SummonItem oldItem = SummonItemsData.getInstance().getSummonItem(itemIdtake);
+		if (oldItem == null)
+			return false;
+
+		L2SummonItem sItem = SummonItemsData.getInstance().getSummonItem(itemIdgive);
+		if (sItem == null)
+			return false;
+
+		int npcId = sItem.getNpcId();
+		if (npcId == 0)
+			return false;
+
+		L2NpcTemplate npcTemplate = NpcTable.getInstance().getTemplate(npcId);
+
+		//deleting old pet item
+		L2ItemInstance removedItem = player.getInventory().destroyItem("PetRestore", item, player, npc);
+		player.sendPacket(new SystemMessage(SystemMessageId.S1_DISAPPEARED).addItemName(removedItem));
+
+		//Give new pet item
+		L2ItemInstance addedItem = player.getInventory().addItem("PetRestore", itemIdgive, 1, player, npc);
+
+		//Summoning new pet
+		L2PetInstance petSummon = L2PetInstance.spawnPet(npcTemplate, player, addedItem);
+		if (petSummon == null)
+			return false;
+
+		long _maxexp = petSummon.getStat().getExpForLevel(oldpetlvl);
+
+		petSummon.getStat().addExp(_maxexp);
+		petSummon.setCurrentHp(petSummon.getMaxHp());
+		petSummon.setCurrentMp(petSummon.getMaxMp());
+		petSummon.setCurrentFed(petSummon.getMaxFed());
+		petSummon.setTitle(player.getName());
+		petSummon.setRunning();
+		petSummon.store();
+
+		player.setPet(petSummon);
+
+		player.sendPacket(new MagicSkillUse(npc, 2046, 1, 1000, 600000));
+		player.sendPacket(new SystemMessage(SystemMessageId.SUMMON_A_PET));
+		L2World.getInstance().storeObject(petSummon);
+		petSummon.spawnMe(player.getX(), player.getY(), player.getZ());
+		petSummon.startFeed();
+		addedItem.setEnchantLevel(petSummon.getLevel());
+
+		//Inventory update
+		InventoryUpdate iu = new InventoryUpdate();
+		iu.addRemovedItem(removedItem);
+		player.sendPacket(iu);
+
+		StatusUpdate su = new StatusUpdate(player.getObjectId());
+		su.addAttribute(StatusUpdate.CUR_LOAD, player.getCurrentLoad());
+		player.sendPacket(su);
+
+		player.broadcastUserInfo();
+
+		L2World world = L2World.getInstance();
+		world.removeObject(removedItem);
+
+		ThreadPoolManager.getInstance().scheduleGeneral(new EvolveFinalizer(player, petSummon), 900);
+
+		if (petSummon.getCurrentFed() <= 0)
+			ThreadPoolManager.getInstance().scheduleGeneral(new EvolveFeedWait(player, petSummon), 60000);
+		else
+			petSummon.startFeed();
+
+		// pet control item no longer exists, delete the pet from the db
+		Connection con = null;
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			PreparedStatement statement = con.prepareStatement("DELETE FROM pets WHERE item_obj_id=?");
+			statement.setInt(1, removedItem.getObjectId());
+			statement.execute();
+			statement.close();
+		}
+		catch (Exception e)
+		{
+		}
+		finally
+		{
+			try { con.close(); } catch (Exception e) {}
+		}
+
+		return true;
+	}
+	
 	static final class EvolveFeedWait implements Runnable
 	{
 		private final L2PcInstance _activeChar;