All pastes #50796 Raw Edit

Unnamed

public text v1 · immutable
#50796 ·published 2006-04-23 23:06 UTC
rendered paste body
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/Config.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/Config.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/Config.java	(working copy)
@@ -511,6 +511,8 @@
     
     public static boolean GM_NAME_COLOUR_ENABLED;
     public static int GM_NAME_COLOUR;
+    public static boolean GM_STARTUP_INVISIBLE;
+    public static boolean GM_STARTUP_SILENCE;
     
     /** Alternative AI setting*/
     public static boolean	AI_ENABLED;
@@ -822,7 +824,8 @@
                 
                 GM_NAME_COLOUR_ENABLED = Boolean.parseBoolean(otherSettings.getProperty("GMNameColourEnabled", "False"));
                 GM_NAME_COLOUR = Integer.decode("0x" + otherSettings.getProperty("GMNameColour", "00FF00"));
-                
+                GM_STARTUP_INVISIBLE = Boolean.parseBoolean(otherSettings.getProperty("GMStartupInvisible", "True"));
+                GM_STARTUP_SILENCE = Boolean.parseBoolean(otherSettings.getProperty("GMStartupSilence", "True"));
 	        }
 	        catch (Exception e)
 	        {
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/loginserver/ClientThread.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/loginserver/ClientThread.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/loginserver/ClientThread.java	(working copy)
@@ -267,7 +267,8 @@
                     
                     case 07: // new GG Auth packet (GG = GameGuard)
                     {
-                        _log.warning("Client requested GG Auth");
+                        if (Config.DEBUG)
+                        _log.info("Client requested GG Auth");
                         GGAuth sp = new GGAuth(GGAuth.SKIP_GG_AUTH_REQUEST);
                         sendPacket(sp);
                         break;
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/SelectorThread.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/SelectorThread.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/SelectorThread.java	(working copy)
@@ -256,35 +256,37 @@
 					continue;
 				// iterate over selected keys
 				Iterator<SelectionKey> it = _selector.selectedKeys().iterator();
-				while (it.hasNext()) {
+while (it.hasNext())
+{
 					SelectionKey sk = it.next();
 					it.remove();
 					if (!sk.isValid())
 						continue;
 					// Obtain the interest of the key
-    					int readyOps = sk.readyOps();
-    					switch (readyOps) {
-    					case SelectionKey.OP_WRITE:
-    						writeData(sk);
-    						break;
-    					case SelectionKey.OP_READ:
-    						readData(sk);
-    						break;
-    					case SelectionKey.OP_WRITE | SelectionKey.OP_READ:
-    						writeData(sk);
-    						readData(sk);
-    						break;
-							case SelectionKey.OP_ACCEPT:
-								acceptConnection(sk);
-								break;    						
-    					default:
-    						System.err.println("Impossible readyOps="+readyOps);
-    						_log.severe("Impossible readyOps="+readyOps);
-    						sk.cancel();
-    						break;
-    					}
-                    }
-				}
+    int readyOps = sk.readyOps(); //the key CAN be invalid at this point (rare but happens: the key becomes invalid just after the isValid() check)
+    switch (readyOps)
+    {
+    case SelectionKey.OP_WRITE:
+    writeData(sk);
+    break;
+    case SelectionKey.OP_READ:
+    readData(sk);
+    break;
+    case SelectionKey.OP_WRITE | SelectionKey.OP_READ:
+    writeData(sk);
+    readData(sk);
+    break;
+case SelectionKey.OP_ACCEPT:
+acceptConnection(sk);
+break;    
+    default:
+    System.err.println("Impossible readyOps="+readyOps);
+    _log.severe("Impossible readyOps="+readyOps);
+    sk.cancel();
+    break;
+    }
+}
+}
 		} catch (Throwable t) {
 			_log.log(Level.SEVERE, "", t);
 			System.exit(1);
@@ -336,7 +338,7 @@
 			sk.interestOps(sk.interestOps() & ~SelectionKey.OP_WRITE);
 		} catch (IOException e) {
             try
-            {
+            {
                 _log.info("Error on network write, player "+con.getClient().getActiveChar().getName()+" disconnected?");
             }
             catch(NullPointerException npe)
@@ -344,7 +346,7 @@
                 _log.info("Error on network write, player disconnected? (nullpointer, couldn't get player name)");
             }
             
-            if (con != null) closeClient(con);
+            if (con != null) closeClient(con);
 		} catch (Throwable t) {
 			_log.log(Level.INFO, "", t);
             
@@ -440,7 +442,7 @@
             try
             {
                 _log.info("Error on network read, player "+con.getClient().getActiveChar().getName()+" disconnected?");
-		con.getClient().getActiveChar().getInventory().updateDatabase();
+		con.getClient().getActiveChar().getInventory().updateDatabase();
             }
             catch(NullPointerException npe)
             {
@@ -542,8 +544,8 @@
 		{  
 			updateCounter(msg);  
 		}
-		if (msg.getLifeTime() > 0)
-		    msg.setTime(System.currentTimeMillis());
+		if (msg.getLifeTime() > 0)
+		    msg.setTime(System.currentTimeMillis());
 		sendMsgQueue.put(msg);
 		msgCounter++;
 		if (msgCounter > 20 || msg instanceof LeaveWorld) {
@@ -580,14 +582,14 @@
 		while (iter.hasNext())
 		{
 			ServerBasePacket msg = (ServerBasePacket)iter.next();
-			if (msg.getLifeTime() > 0)
-			    if (System.currentTimeMillis()-msg.getTime()>msg.getLifeTime())
-			    {
-				iter.remove();
-				continue;
-			    }
-				
-			
+			if (msg.getLifeTime() > 0)
+			    if (System.currentTimeMillis()-msg.getTime()>msg.getLifeTime())
+			    {
+				iter.remove();
+				continue;
+			    }
+				
+			
 			Connection con = msg.getConnection();
 			SelectionKey sk = con.getChannel().keyFor(_selector);
 			if (sk == null || !sk.isValid())
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java	(working copy)
@@ -32,6 +32,7 @@
 import net.sf.l2j.gameserver.ClientThread;
 import net.sf.l2j.gameserver.LoginServerThread;
 import net.sf.l2j.gameserver.SevenSigns;
+import net.sf.l2j.gameserver.handler.AdminCommandHandler;
 import net.sf.l2j.gameserver.model.L2Clan;
 import net.sf.l2j.gameserver.model.L2Effect;
 import net.sf.l2j.gameserver.model.L2World;
@@ -92,9 +93,20 @@
 			//activeChar.closeNetConnection();
 		}
 		
-        if(activeChar.isGM() && activeChar.getAccessLevel()>9)
+        if(activeChar.isGM())
         {
-            activeChar.setInvisible();
+            if(Config.GM_STARTUP_INVISIBLE 
+                    && (!Config.ALT_PRIVILEGES_ADMIN && activeChar.getAccessLevel() >= Config.GM_GODMODE
+                      || Config.ALT_PRIVILEGES_ADMIN && AdminCommandHandler.getInstance().checkPrivileges(activeChar, "admin_invisible")))
+                activeChar.setInvisible();
+
+            if(Config.GM_STARTUP_SILENCE 
+                    && (!Config.ALT_PRIVILEGES_ADMIN && activeChar.getAccessLevel() >= Config.GM_MENU
+                      || Config.ALT_PRIVILEGES_ADMIN && AdminCommandHandler.getInstance().checkPrivileges(activeChar, "admin_silence")))
+                activeChar.setMessageRefusal(true);
+            
+            if(Config.GM_NAME_COLOUR_ENABLED)
+                activeChar.setNameColor(Config.GM_NAME_COLOUR);
         }
         
         if (Config.PLAYER_SPAWN_PROTECTION > 0)
@@ -208,17 +220,6 @@
 		notifyClanMembers(activeChar);
         
         activeChar.onPlayerEnter();
-        
-        if(activeChar.isGM() && activeChar.getAccessLevel()>9)
-        {
-            activeChar.sendPacket(new CreatureSay(0,5,"SYS","Hide is default for builder"));
-            activeChar.setMessageRefusal(true);
-            activeChar.sendPacket(new CreatureSay(0,5,"SYS","Message refusal mode"));
-            if(Config.GM_NAME_COLOUR_ENABLED)
-            {
-                activeChar.setNameColor(Config.GM_NAME_COLOUR);
-            }
-        }
 	}
     
 	/**
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/L2GroupSpawn.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/L2GroupSpawn.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/L2GroupSpawn.java	(working copy)
@@ -20,7 +20,7 @@
 	
 	public L2GroupSpawn(L2NpcTemplate mobTemplate) throws SecurityException, ClassNotFoundException {
 		super(mobTemplate);
-		_constructor = Class.forName("net.sf.l2j.gameserver.model.L2ControllableMobInstance").getConstructors()[0];
+_constructor = Class.forName("net.sf.l2j.gameserver.model.actor.instance.L2ControllableMobInstance").getConstructors()[0];
 		_template = mobTemplate;
 		setAmount(1);
 	}
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeGuardInstance.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeGuardInstance.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeGuardInstance.java	(working copy)
@@ -77,13 +77,13 @@
 	 */
     public boolean isAutoAttackable(L2Character attacker) 
 	{
-		// Attackable during siege by attacker only
+ // Attackable during siege by all except defenders
 		return (attacker != null 
 		        && attacker instanceof L2PcInstance 
 		        && getCastle() != null
 		        && getCastle().getCastleId() > 0
 		        && getCastle().getSiege().getIsInProgress()
-		        && getCastle().getSiege().checkIsAttacker(((L2PcInstance)attacker).getClan()));
+		        && (!getCastle().getSiege().checkIsDefender(((L2PcInstance)attacker).getClan())) || getCastle().getSiege().checkIsAttacker(((L2PcInstance)attacker).getClan()));
     }
     
     /**
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java	(working copy)
@@ -38,6 +38,8 @@
 public final class L2ClassMasterInstance extends L2FolkInstance
 {
 	private static Logger _log = Logger.getLogger(L2ClassMasterInstance.class.getName());
+private static int[] _secondClassIds = {2,3,5,6,9,8,12,13,14,16,17,20,21,23,24,27,
+                                        28,30,33,34,36,37,40,41,43,46,48,51,52,55,57};
 	
 	/**
 	 * @param template
@@ -120,6 +122,19 @@
 			{				
 				showChatWindow(player, classId.getId());
 			}
+else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && classId.getId() < 88)
+{
+for (int i = 0; i < _secondClassIds.length; i++)
+{
+if (classId.getId() == _secondClassIds[i])
+{
+changeClass(player, 88+i);
+player.setBaseClass(player.getActiveClass());
+player.sendMessage("Congratulations you have changed class");
+break;
+}
+}
+}
 			else 
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -2584,6 +2584,8 @@
                 L2PcInstance pk = (L2PcInstance) killer;
                 pk.kills.add(getName());
             }
+onDieDropItem(killer);  // Check if any item should be dropped
+
             if (!ArenaManager.getInstance().checkIfInZone(this))
             {
                 if (Config.ALT_GAME_DELEVEL)
@@ -2596,8 +2598,6 @@
                 else
                     onDieUpdateKarma(); // Update karma if delevel is not allowed
             }
-
-            onDieDropItem(killer);  // Check if any item should be dropped
         }
 
         setPvpFlag(0);              // Clear the pvp flag
@@ -6293,6 +6293,9 @@
     public void onPlayerEnter()
     {
         startWarnUserTakeBreak();
+
+        if(getInvisible() == 1) sendMessage("Entering world in Invisible mode");
+        if(getMessageRefusal()) sendMessage("Entering world in Message refusal mode");
     }
     
     public boolean isProcessingTransaction()
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/L2Skill.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/L2Skill.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/L2Skill.java	(working copy)
@@ -92,6 +92,7 @@
         TARGET_AURA,
         TARGET_CORPSE,
         TARGET_UNDEAD,
+        TARGET_AREA_UNDEAD,
         TARGET_MULTIFACE,
         TARGET_CORPSE_ALLY,
         TARGET_CORPSE_CLAN,
@@ -1301,6 +1302,41 @@
             targetList.add(target);
             return targetList.toArray(new L2Object[targetList.size()]);
         }
+
+            case TARGET_AREA_CORPSE_MOB: // around dead monster
+            {
+                if (target == null || ((!(target instanceof L2Attackable)) && !target.isDead()))
+                {
+                    activeChar.sendPacket(new SystemMessage(SystemMessage.TARGET_IS_INCORRECT));
+                    return null;
+                }
+                // Add the selected target to target list
+                targetList.add((L2Character)target);
+                
+                int radius = getSkillRadius();
+                
+                for (L2Character obj : target.getKnownList().getKnownCharactersInRadius(radius))
+                {
+                    if (!Util.checkIfInRange(radius, target, obj, true)) // Go to next obj if obj isn't in range
+                        continue;
+                    
+                    // prevent attacker to selfhit
+                    if (obj == activeChar)
+                        continue;
+                    
+                    if (!(obj instanceof L2Attackable))
+                        continue;
+                    
+                    // add all valid targets to the list
+                    targetList.add((L2Character)obj);
+                    
+                    if (targetList.size() == 0)
+                        return null;
+                }
+                targetList.add(target);
+                return targetList.toArray(new L2Character[targetList.size()]);
+            }
+            
         case TARGET_UNLOCKABLE:
         {
             if(!(target instanceof L2DoorInstance))
@@ -1333,6 +1369,38 @@
                 return targetList.toArray(new L2Object[targetList.size()]);
             }
         }
+        case TARGET_AREA_UNDEAD:
+        {
+        L2Character cha;
+        if (this.getCastRange() >= 0)
+        {
+        cha = target;
+        targetList.add((L2Character)cha); // Add target to target list
+        }
+        else
+        cha = activeChar;
+
+        int radius = getSkillRadius();
+        for (L2Object obj : cha.getKnownList().getKnownObjects())
+        {
+        if (!(obj instanceof L2Character)) continue;
+
+        target = (L2Character) obj;
+        if(!target.isAlikeDead())   // If target is not dead/fake death and not self
+        {
+        if (!((L2NpcInstance)obj).isUndead())
+        continue;
+        if (!Util.checkIfInRange(radius, cha, obj, true)) // Go to next obj if obj isn't in range
+        continue;
+
+        targetList.add((L2Character)obj);   // Add obj to target lists
+        }
+        }
+
+        if (targetList.size() == 0)
+        return null;
+        return targetList.toArray(new L2Character[targetList.size()]);
+        }        
         default:
         {
             SystemMessage sm = new SystemMessage(614);
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/L2Character.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/L2Character.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/L2Character.java	(working copy)
@@ -3639,7 +3639,17 @@
 
            // Check Raidboss attack
            if (target.isRaid() && getLevel() > target.getLevel() + 8)
-               SkillTable.getInstance().getInfo(4515, 99).getEffects(target, this);
+           {
+           L2Skill skill = SkillTable.getInstance().getInfo(4515, 99);
+           if(skill != null)
+           {
+           skill.getEffects(target, this);
+           }
+           else
+           {
+           _log.warning("Skill 4515 at level 99 is missing in DP.");
+           }
+           }
        }
    }
 
@@ -4196,9 +4206,9 @@
                            if (player instanceof L2PcInstance)
                            {
                                // Casting non offensive skill on player with pvp flag set or with karma
-                               if (
-                                       ((L2PcInstance)player).getPvpFlag() > 0 ||
-                                       ((L2PcInstance)player).getKarma() > 0) activeChar.updatePvPStatus();
+if (!player.equals(this) &&
+(((L2PcInstance)player).getPvpFlag() > 0 ||
+((L2PcInstance)player).getKarma() > 0)) activeChar.updatePvPStatus();
                            }
                            else if (player instanceof L2Attackable)
                                activeChar.updatePvPStatus();
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/entity/Siege.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/entity/Siege.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/entity/Siege.java	(working copy)
@@ -227,7 +227,6 @@
     private List<L2ControlTowerInstance> _ControlTowers            = new FastList<L2ControlTowerInstance>();;
     private int[][] _ControlTowerSpawnList;
 	private boolean _IsInProgress                                  = false;
-    private boolean _IsNormalSide                                  = true; // true = Atk is Atk, false = Atk is Def
     protected boolean _IsRegistrationOver                          = false;
 	private Calendar _SiegeDate;
 	protected Calendar _SiegeEndDate;
@@ -292,15 +291,20 @@
             }
             else if (getDefenderClans().size() > 0)     // If defender does exist (Pc vs Pc)
             {
-                if (_IsNormalSide)
-                    _IsNormalSide = false;              // Atk is now def
-                else
-                    _IsNormalSide = true;               // Atk is now atk
+            	int ownerId = getCastle().getOwnerId();
+            	
+            	getAttackerClans().addAll(_Defender_Clans);
+            	getDefenderClans().clear();
+            	getAttackerClans().remove(ownerId);
+            	addDefender(ownerId);
 
-                teleportPlayer(Siege.TeleportWhoType.Attacker, MapRegionTable.TeleportWhereType.Town);     // Teleport to the second closest town
-                teleportPlayer(Siege.TeleportWhoType.Spectator, MapRegionTable.TeleportWhereType.Town);    // Teleport to the second closest town
-
-                removeFlags();                      // Removes all flags
+            	//should be teleported to flag ?
+            	//teleportPlayer(Siege.TeleportWhoType.Attacker, MapRegionTable.TeleportWhereType.SiegeFlag);     // Teleport to the flag
+            	//teleportPlayer(Siege.TeleportWhoType.Attacker, MapRegionTable.TeleportWhereType.Town);     // Teleport to the second closest town
+                
+            	//teleportPlayer(Siege.TeleportWhoType.Spectator, MapRegionTable.TeleportWhereType.Town);     // Teleport to the second closest town
+            	//teleportPlayer(Siege.TeleportWhoType.Defender, MapRegionTable.TeleportWhereType.Castle);    // Teleport to the Castle
+            	
                 getCastle().removeUpgrade();        // Remove all castle upgrade
                 getCastle().spawnDoor(true);        // Respawn door to castle but make them weaker (50% hp)
             }
@@ -323,7 +327,6 @@
 	            return;
 		    }
 
-            _IsNormalSide = true;                       // Atk is now atk
             _IsInProgress = true;                       // Flag so that same siege instance cannot be started again 
             loadCastleSiege();                          // Load castle specific data
             loadSiegeClan();							// Load siege clan from db
@@ -1103,8 +1106,7 @@
 
     public final List<L2SiegeClan> getAttackerClans()
    	{
-        if (_IsNormalSide) return _Attacker_Clans;
-        return _Defender_Clans;
+        return _Attacker_Clans;
    	}
 
     public final int getAttackerRespawnDelay() { return (SiegeManager.getInstance().getAttackerRespawnDelay()); }
@@ -1130,8 +1132,7 @@
 
    	public final List<L2SiegeClan> getDefenderClans()
    	{
-        if (_IsNormalSide) return _Defender_Clans;
-        return _Attacker_Clans;
+         return _Defender_Clans;
    	}
 
     public final L2SiegeClan getDefenderWaitingClan(L2Clan clan)
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/lib/Rnd.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/lib/Rnd.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/lib/Rnd.java	(working copy)
@@ -55,4 +55,8 @@
 	{
 		return _rnd.nextGaussian();
 	}
+public static final boolean nextBoolean()  
+{
+return _rnd.nextBoolean();
 }
+}
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/handler/skillhandlers/Disablers.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/handler/skillhandlers/Disablers.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/handler/skillhandlers/Disablers.java	(working copy)
@@ -141,6 +141,7 @@
         	}
         	case CONFUSION:
         	case MUTE:
+        case FEAR:
         	{
         	    if (Formulas.getInstance().calcSkillSuccess(activeChar, target, skill, false, ss, bss))
         	    {
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/handler/skillhandlers/Resurrect.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/handler/skillhandlers/Resurrect.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/handler/skillhandlers/Resurrect.java	(working copy)
@@ -63,13 +63,6 @@
                 {
                     if (player.getClanId() != targetPlayer.getClanId()) continue;
                 }
-                
-                // Check to see if the current player target is in a festival.
-                if (targetPlayer.isFestivalParticipant())
-                {
-                    player.sendPacket(SystemMessage.sendString("You may not resurrect participants in a festival."));
-                    continue;
-                }
             }
             targetToRes.add(target);
         }
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminInvul.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminInvul.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminInvul.java	(working copy)
@@ -42,7 +42,7 @@
         if (!Config.ALT_PRIVILEGES_ADMIN)
             if (!(checkLevel(activeChar.getAccessLevel()) && activeChar.isGM())) return false;
 
-        GMAudit.auditGMAction(activeChar.getName(), command, (activeChar.getTarget().getName() != null?activeChar.getTarget().getName():"no-target"), "");
+        GMAudit.auditGMAction(activeChar.getName(), command, (activeChar.getTarget() != null ? activeChar.getTarget().getName() : "no-target"), "");
         
 		if (command.equals("admin_invul")) handleInvul(activeChar);
         if (command.equals("admin_setinvul")){
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/serverpackets/CharInfo.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/serverpackets/CharInfo.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/serverpackets/CharInfo.java	(working copy)
@@ -145,7 +145,11 @@
 		writeD(_z);
 		writeD(_heading);
 		writeD(_cha.getObjectId());
-		writeS(_cha.getName());
+L2PcInstance _cha2 = getClient().getActiveChar();
+if (_cha2 != null && _cha.getClan() != null && _cha2.getClan() != null && _cha.getClan().isAtWarWith(_cha2.getClanId()))
+    writeS("*"+_cha.getName());
+else
+    writeS(_cha.getName());
 		writeD(_cha.getRace().ordinal());
 		writeD(_cha.getSex());
 		        
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/ai/L2AttackableAI.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/ai/L2AttackableAI.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/ai/L2AttackableAI.java	(working copy)
@@ -134,7 +134,7 @@
 		L2Attackable me = (L2Attackable)_actor;
 		
 		// Check if the target isn't a Folk or a Door
-		if (target instanceof L2FolkInstance || target instanceof L2DoorInstance)
+if (target == null || target instanceof L2FolkInstance || target instanceof L2DoorInstance)
 			return false;
 		
 		// Check if the target isn't dead, is in the Aggro range and is at the same height
@@ -161,7 +161,7 @@
 			
 			// Check if the L2MonsterInstance target is aggressive
 			if (target instanceof L2MonsterInstance)
-				return ((L2MonsterInstance)target).isAggressive();
+return (((L2MonsterInstance)target).isAggressive() && Config.ALLOW_GUARDS);
 			
 			return false;
 		}
@@ -207,7 +207,7 @@
 		if (intention == AI_INTENTION_IDLE || intention == AI_INTENTION_ACTIVE)
 		{
 			// Check if actor is not dead
-			if (!_actor.isAlikeDead())
+if (_actor != null || !_actor.isAlikeDead())
 			{
 	            L2Attackable npc = (L2Attackable)_actor;
 				
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/ai/L2SiegeGuardAI.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/ai/L2SiegeGuardAI.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/ai/L2SiegeGuardAI.java	(working copy)
@@ -21,6 +21,7 @@
 import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
 import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
 import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
+import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
 
 import java.util.concurrent.Future;
 import java.util.logging.Logger;
@@ -40,6 +41,7 @@
 import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2SiegeGuardInstance;
+import net.sf.l2j.gameserver.model.actor.instance.L2SummonInstance;
 
 
 /**
@@ -133,6 +135,10 @@
         // Check if the target isn't dead
         if (target.isAlikeDead()) return false;
         
+        // Get the owner if the target is a summon
+        if (target instanceof L2SummonInstance)
+         target = ((L2SummonInstance)target).getOwner();
+        
         return (
                 target instanceof L2PcInstance &&
                 !((L2PcInstance)target).isInvul() &&        //   Not invul and
@@ -163,6 +169,12 @@
             {
                 L2Attackable npc = (L2Attackable)_actor;
                 
+                // remove from knownlist all dead or alikedead players
+                for(L2PcInstance in:npc.getKnownList().getKnownPlayers())
+                {
+                  if(in.isAlikeDead()) npc.getKnownList().removeKnownObject(in);
+                }
+
                 // If its _knownPlayer isn't empty set the Intention to AI_INTENTION_ACTIVE
                 if(npc.getKnownList().getKnownPlayers().size() > 0)
                     intention = AI_INTENTION_ACTIVE;
@@ -564,7 +576,16 @@
         // Check if the actor can't use skills and if a thinking action isn't already in progress
         if (thinking || _actor.isAllSkillsDisabled())
             return;
-        
+
+        if((!_actor.isVisible()) || (!_actor.hasAI()))
+            setIntention(AI_INTENTION_IDLE);
+     
+        if((getIntention() == AI_INTENTION_FOLLOW) && (_actor.getKnownList().getKnownPlayers().isEmpty()))
+            setIntention(AI_INTENTION_IDLE);
+          
+        if(getIntention() == AI_INTENTION_IDLE)
+          return;
+
         // Start thinking action
         thinking = true;
         
@@ -597,7 +618,14 @@
      */
     protected void onEvtAttacked(L2Character attacker)
     {
-        // Calculate the attack timeout
+        if(attacker == null) 
+        {
+           _log.warning("L2SiegeGuardAI.java: onEvtAttacked(L2Character attacker)   ->  attacker=null, RETURNING with setting attacktimeout");
+           _attack_timeout = GameTimeController.getGameTicks();
+           return;
+        }        
+
+    // Calculate the attack timeout
         _attack_timeout = MAX_ATTACK_TIMEOUT + GameTimeController.getGameTicks();
         
         // Set the _globalAggro to 0 to permit attack even just after spawn
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/taskmanager/tasks/TaskCleanUp.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/taskmanager/tasks/TaskCleanUp.java	(revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/taskmanager/tasks/TaskCleanUp.java	(working copy)
@@ -23,8 +23,8 @@
 
     public void onTimeElapsed(ExecutedTask task)
     {
-        System.runFinalization();
-        System.gc();
+        //System.runFinalization();
+        //System.gc();
     }
     
     public void initializate()