Fixed castle functions.

This commit is contained in:
MobiusDev
2018-11-24 21:51:53 +00:00
parent 3ece182d91
commit 4c2171eb5f
60 changed files with 628 additions and 388 deletions

View File

@ -241,7 +241,7 @@ public final class Castle extends AbstractResidence
super(castleId);
load();
initResidenceZone();
initFunctions();
// initFunctions();
spawnSideNpcs();
if (_ownerId != 0)
{

View File

@ -243,7 +243,7 @@ public final class Fort extends AbstractResidence
loadFunctions();
}
initResidenceZone();
initFunctions();
// initFunctions();
initNpcs(); // load and spawn npcs (Always spawned)
initSiegeNpcs(); // load suspicious merchants (Despawned 10mins before siege)
// spawnSuspiciousMerchant(); // spawn suspicious merchants

View File

@ -28,6 +28,10 @@ import com.l2jmobius.gameserver.model.L2SiegeClan;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PetInstance;
import com.l2jmobius.gameserver.model.entity.Castle;
import com.l2jmobius.gameserver.model.entity.Castle.CastleFunction;
import com.l2jmobius.gameserver.model.entity.Fort;
import com.l2jmobius.gameserver.model.entity.Fort.FortFunction;
import com.l2jmobius.gameserver.model.entity.Siege;
import com.l2jmobius.gameserver.model.residences.AbstractResidence;
import com.l2jmobius.gameserver.model.residences.ResidenceFunction;
@ -96,13 +100,13 @@ public class RegenHPFinalizer implements IStatsFunction
final int castleIndex = player.getClan().getCastleId();
if ((castleIndex > 0) && (castleIndex == posCastleIndex))
{
final AbstractResidence residense = CastleManager.getInstance().getCastleById(player.getClan().getCastleId());
if (residense != null)
final Castle castle = CastleManager.getInstance().getCastleById(player.getClan().getCastleId());
if (castle != null)
{
final ResidenceFunction func = residense.getFunction(ResidenceFunctionType.HP_REGEN);
final CastleFunction func = castle.getCastleFunction(Castle.FUNC_RESTORE_HP);
if (func != null)
{
baseValue *= func.getValue();
baseValue *= func.getLvl();
}
}
}
@ -115,13 +119,13 @@ public class RegenHPFinalizer implements IStatsFunction
final int fortIndex = player.getClan().getFortId();
if ((fortIndex > 0) && (fortIndex == posFortIndex))
{
final AbstractResidence residense = FortManager.getInstance().getFortById(player.getClan().getCastleId());
if (residense != null)
final Fort fort = FortManager.getInstance().getFortById(player.getClan().getCastleId());
if (fort != null)
{
final ResidenceFunction func = residense.getFunction(ResidenceFunctionType.HP_REGEN);
final FortFunction func = fort.getFortFunction(Fort.FUNC_RESTORE_HP);
if (func != null)
{
baseValue *= func.getValue();
baseValue *= func.getLvl();
}
}
}

View File

@ -26,6 +26,10 @@ import com.l2jmobius.gameserver.instancemanager.ZoneManager;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PetInstance;
import com.l2jmobius.gameserver.model.entity.Castle;
import com.l2jmobius.gameserver.model.entity.Castle.CastleFunction;
import com.l2jmobius.gameserver.model.entity.Fort;
import com.l2jmobius.gameserver.model.entity.Fort.FortFunction;
import com.l2jmobius.gameserver.model.residences.AbstractResidence;
import com.l2jmobius.gameserver.model.residences.ResidenceFunction;
import com.l2jmobius.gameserver.model.residences.ResidenceFunctionType;
@ -81,13 +85,13 @@ public class RegenMPFinalizer implements IStatsFunction
final int castleIndex = player.getClan().getCastleId();
if ((castleIndex > 0) && (castleIndex == posCastleIndex))
{
final AbstractResidence residense = CastleManager.getInstance().getCastleById(player.getClan().getCastleId());
if (residense != null)
final Castle castle = CastleManager.getInstance().getCastleById(player.getClan().getCastleId());
if (castle != null)
{
final ResidenceFunction func = residense.getFunction(ResidenceFunctionType.MP_REGEN);
final CastleFunction func = castle.getCastleFunction(Castle.FUNC_RESTORE_MP);
if (func != null)
{
baseValue *= func.getValue();
baseValue *= func.getLvl();
}
}
}
@ -100,13 +104,13 @@ public class RegenMPFinalizer implements IStatsFunction
final int fortIndex = player.getClan().getFortId();
if ((fortIndex > 0) && (fortIndex == posFortIndex))
{
final AbstractResidence residense = FortManager.getInstance().getFortById(player.getClan().getCastleId());
if (residense != null)
final Fort fort = FortManager.getInstance().getFortById(player.getClan().getCastleId());
if (fort != null)
{
final ResidenceFunction func = residense.getFunction(ResidenceFunctionType.MP_REGEN);
final FortFunction func = fort.getFortFunction(Fort.FUNC_RESTORE_MP);
if (func != null)
{
baseValue *= func.getValue();
baseValue *= func.getLvl();
}
}
}

View File

@ -22,18 +22,20 @@ import com.l2jmobius.gameserver.data.xml.impl.ClanHallData;
import com.l2jmobius.gameserver.instancemanager.CastleManager;
import com.l2jmobius.gameserver.instancemanager.FortManager;
import com.l2jmobius.gameserver.instancemanager.MapRegionManager;
import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2SiegeClan;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.TeleportWhereType;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Castle;
import com.l2jmobius.gameserver.model.entity.Castle.CastleFunction;
import com.l2jmobius.gameserver.model.entity.ClanHall;
import com.l2jmobius.gameserver.model.entity.Fort;
import com.l2jmobius.gameserver.model.entity.Fort.FortFunction;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.model.quest.Event;
import com.l2jmobius.gameserver.model.residences.AbstractResidence;
import com.l2jmobius.gameserver.model.residences.ResidenceFunctionType;
import com.l2jmobius.gameserver.network.L2GameClient;
@ -157,15 +159,16 @@ public final class RequestRestartPoint implements IClientIncomingPacket
}
case 2: // to castle
{
final Castle castle = CastleManager.getInstance().getCastle(activeChar);
final L2Clan clan = activeChar.getClan();
Castle castle = CastleManager.getInstance().getCastle(activeChar);
if ((castle != null) && castle.getSiege().isInProgress())
{
// Siege in progress
if (castle.getSiege().checkIsDefender(activeChar.getClan()))
if (castle.getSiege().checkIsDefender(clan))
{
loc = MapRegionManager.getInstance().getTeleToLocation(activeChar, TeleportWhereType.CASTLE);
}
else if (castle.getSiege().checkIsAttacker(activeChar.getClan()))
else if (castle.getSiege().checkIsAttacker(clan))
{
loc = MapRegionManager.getInstance().getTeleToLocation(activeChar, TeleportWhereType.TOWN);
}
@ -177,32 +180,45 @@ public final class RequestRestartPoint implements IClientIncomingPacket
}
else
{
if ((activeChar.getClan() == null) || (activeChar.getClan().getCastleId() == 0))
if ((clan == null) || (clan.getCastleId() == 0))
{
return;
}
loc = MapRegionManager.getInstance().getTeleToLocation(activeChar, TeleportWhereType.CASTLE);
}
if ((castle != null) && (castle.hasFunction(ResidenceFunctionType.EXP_RESTORE)))
if (clan != null)
{
activeChar.restoreExp(castle.getFunction(ResidenceFunctionType.EXP_RESTORE).getValue());
castle = CastleManager.getInstance().getCastleByOwner(clan);
if (castle != null)
{
final CastleFunction castleFunction = castle.getCastleFunction(Castle.FUNC_RESTORE_EXP);
if (castleFunction != null)
{
activeChar.getStat().addExp(Math.round(((activeChar.getExpBeforeDeath() - activeChar.getExp()) * castleFunction.getLvl()) / 100));
}
}
}
break;
}
case 3: // to fortress
{
if ((activeChar.getClan() == null) || (activeChar.getClan().getFortId() == 0))
final L2Clan clan = activeChar.getClan();
if ((clan == null) || (clan.getFortId() == 0))
{
LOGGER.warning("Player [" + activeChar.getName() + "] called RestartPointPacket - To Fortress and he doesn't have Fortress!");
return;
}
loc = MapRegionManager.getInstance().getTeleToLocation(activeChar, TeleportWhereType.FORTRESS);
final AbstractResidence residense = FortManager.getInstance().getFortByOwner(activeChar.getClan());
if ((residense != null) && (residense.hasFunction(ResidenceFunctionType.EXP_RESTORE)))
final Fort fort = FortManager.getInstance().getFortByOwner(clan);
if (fort != null)
{
activeChar.restoreExp(residense.getFunction(ResidenceFunctionType.EXP_RESTORE).getValue());
final FortFunction fortFunction = fort.getFortFunction(Fort.FUNC_RESTORE_EXP);
if (fortFunction != null)
{
activeChar.getStat().addExp(Math.round(((activeChar.getExpBeforeDeath() - activeChar.getExp()) * fortFunction.getLvl()) / 100));
}
}
break;
}