Сообщений: 105
Тем: 34
Зарегистрирован: Aug 2010
Репутация:
-1
Сборка la2base + исходники
Хроники Interlude
Проблема в том что на TVT можно атакавать свой теам и бафать соперников, как запретить это?
Знаю что в ядре но не знаю какой файл и какой запрет
Или подскажите какой метод проверяет состояние игрока (аттакует / собирается аттаковать)
Сообщений: 5,670
Тем: 145
Зарегистрирован: Nov 2008
Репутация:
33,771
Скрипт пересмотрите евента, возможно даже коментарий строке, в которой ставится это.
Web программист\разработчик
— Есть только один способ проделать большую работу — полюбить ее. Если вы к этому не пришли, подождите. Не беритесь за дело.
Сообщений: 105
Тем: 34
Зарегистрирован: Aug 2010
Репутация:
-1
Скрипт эвента нашол, даже понял где нада редактировать, только не могу узнать методы атаки.
Сообщений: 5,670
Тем: 145
Зарегистрирован: Nov 2008
Репутация:
33,771
Скрипт в студию.
Web программист\разработчик
— Есть только один способ проделать большую работу — полюбить ее. Если вы к этому не пришли, подождите. Не беритесь за дело.
Сообщений: 105
Тем: 34
Зарегистрирован: Aug 2010
Репутация:
-1
Код: /*
* 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 net.sf.l2j.gameserver.model.entity;
import java.util.logging.Logger;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.Olympiad;
import net.sf.l2j.gameserver.clientpackets.Say2;
import net.sf.l2j.gameserver.datatables.DoorTable;
import net.sf.l2j.gameserver.datatables.ItemTable;
import net.sf.l2j.gameserver.datatables.NpcTable;
import net.sf.l2j.gameserver.datatables.SpawnTable;
import net.sf.l2j.gameserver.model.L2Character;
import net.sf.l2j.gameserver.model.L2Spawn;
import net.sf.l2j.gameserver.model.L2Summon;
import net.sf.l2j.gameserver.model.PcInventory;
import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
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.L2PetInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2SummonInstance;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.serverpackets.CreatureSay;
import net.sf.l2j.gameserver.serverpackets.MagicSkillUser;
import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.serverpackets.StatusUpdate;
import net.sf.l2j.gameserver.serverpackets.SystemMessage;
import net.sf.l2j.gameserver.templates.L2NpcTemplate;
import net.sf.l2j.util.Rnd;
/**
* @author FBIagent
*/
public class TvTEvent {
enum EventState {
INACTIVE,
INACTIVATING,
PARTICIPATING,
STARTING,
STARTED,
REWARDING
}
protected static final Logger _log = Logger.getLogger( TvTEvent.class.getName() );
/** The teams of the TvTEvent<br> */
private static TvTEventTeam[] _teams = new TvTEventTeam[ 2 ];
/** The state of the TvTEvent<br> */
private static EventState _state = EventState.INACTIVE;
/** The spawn of the participation npc<br> */
private static L2Spawn _npcSpawn = null;
/** the npc instance of the participation npc<br> */
private static L2NpcInstance _lastNpcSpawn = null;
/**
* No instance of this class!<br>
*/
private TvTEvent() {
}
/**
* Teams initializing<br>
*/
public static void init() {
_teams[ 0 ] = new TvTEventTeam( Config.TVT_EVENT_TEAM_1_NAME, Config.TVT_EVENT_TEAM_1_COORDINATES );
_teams[ 1 ] = new TvTEventTeam( Config.TVT_EVENT_TEAM_2_NAME, Config.TVT_EVENT_TEAM_2_COORDINATES );
}
/**
* Starts the participation of the TvTEvent<br>
* 1. Get L2NpcTemplate by Config.TVT_EVENT_PARTICIPATION_NPC_ID<br>
* 2. Try to spawn a new npc of it<br><br>
*
* @return boolean: true if success, otherwise false<br>
*/
public static boolean startParticipation() {
L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate( Config.TVT_EVENT_PARTICIPATION_NPC_ID );
if ( tmpl == null ) {
_log.warning("TvTEventEngine[TvTEvent.startParticipation()]: L2NpcTemplate is a NullPointer -> Invalid npc id in configs?");
return false;
}
try {
_npcSpawn = new L2Spawn( tmpl );
_npcSpawn.setLocx( Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES[ 0 ] );
_npcSpawn.setLocy( Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES[ 1 ] );
_npcSpawn.setLocz( Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES[ 2 ] );
_npcSpawn.setAmount( 1 );
_npcSpawn.setHeading( 0 );
_npcSpawn.setRespawnDelay( 1 );
// later no need to delete spawn from db, we don't store it (false)
SpawnTable.getInstance().addNewSpawn( _npcSpawn, false );
_npcSpawn.init();
_lastNpcSpawn = _npcSpawn.getLastSpawn();
_lastNpcSpawn.setCurrentHp( _lastNpcSpawn.getMaxHp() );
_lastNpcSpawn.setTitle( "TvT Event Participation" );
_lastNpcSpawn.isAggressive();
_lastNpcSpawn.decayMe();
_lastNpcSpawn.spawnMe( _npcSpawn.getLastSpawn().getX(), _npcSpawn.getLastSpawn().getY(), _npcSpawn.getLastSpawn().getZ() );
_lastNpcSpawn.broadcastPacket( new MagicSkillUser( _lastNpcSpawn, _lastNpcSpawn, 1034, 1, 1, 1 ) );
} catch ( Exception e ) {
_log.warning( "TvTEventEngine[TvTEvent.startParticipation()]: exception: " + e );
return false;
}
setState( EventState.PARTICIPATING );
return true;
}
/**
* Starts the TvTEvent fight<br>
* 1. Set state EventState.STARTING<br>
* 2. Close doors specified in configs<br>
* 3. Abort if not enought participants(return false)<br>
* 4. Set state EventState.STARTED<br>
* 5. Teleport all participants to team spot<br><br>
*
* @return boolean: true if success, otherwise false<br>
*/
public static boolean startFight() {
// Set state to STARTING
setState( EventState.STARTING );
// Check for enought participants
if ( _teams[ 0 ].getParticipatedPlayerCount() < Config.TVT_EVENT_MIN_PLAYERS_IN_TEAMS ||
_teams[ 1 ].getParticipatedPlayerCount() < Config.TVT_EVENT_MIN_PLAYERS_IN_TEAMS ) {
// Set state INACTIVE
setState( EventState.INACTIVE );
// Cleanup of teams
_teams[ 0 ].cleanMe();
_teams[ 1 ].cleanMe();
// Unspawn the event NPC
unSpawnNpc();
return false;
}
// Opens all doors specified in configs for tvt
openDoors();
// Closes all doors specified in configs for tvt
closeDoors();
// Set state STARTED
setState( EventState.STARTED );
// Iterate over all teams
for ( TvTEventTeam team : _teams ) {
// Iterate over all participated player instances in this team
for ( L2PcInstance playerInstance : team.getParticipatedPlayers().values() ) {
if ( playerInstance != null ) {
// Teleporter implements Runnable and starts itself
new TvTEventTeleporter( playerInstance, team.getCoordinates(), false, false );
}
}
}
return true;
}
/**
* Calculates the TvTEvent reward<br>
* 1. If both teams are at a tie(points equals), send it as system message to all participants, if one of the teams have 0 participants left online abort rewarding<br>
* 2. Wait till teams are not at a tie anymore<br>
* 3. Set state EvcentState.REWARDING<br>
* 4. Reward team with more points<br>
* 5. Show win html to wining team participants<br><br>
*
* @return String: winning team name<br>
*/
public static String calculateRewards()
{
if (_teams[ 0 ].getPoints() == _teams[ 1 ].getPoints())
{
// Check if one of the teams have no more players left
if ( _teams[ 0 ].getParticipatedPlayerCount() == 0 || _teams[ 1 ].getParticipatedPlayerCount() == 0 )
{
// set state to rewarding
setState(EventState.REWARDING);
// return here, the fight can't be completed
return "TvT Event: Event has ended. No team won due to inactivity!";
}
// Both teams have equals points
sysMsgToAllParticipants("TvT Event: Event has ended, both teams have tied.");
if (Config.TVT_REWARD_TEAM_TIE)
{
rewardTeamOne();
rewardTeamTwo();
return "TvT Event: Event has ended with both teams tying.";
}
else
return "TvT Event: Event has ended with both teams tying.";
}
// Set state REWARDING so nobody can point anymore
setState( EventState.REWARDING );
// Get team which has more points
TvTEventTeam team = _teams[ _teams[ 0 ].getPoints() > _teams[ 1 ].getPoints() ? 0 : 1 ];
TvTEventTeam teamLost = _teams[ _teams[ 0 ].getPoints() < _teams[ 1 ].getPoints() ? 0 : 1 ];
if (team == _teams[0])
rewardTeamOne();
else
rewardTeamTwo();
return "TvT Event: Эвент завершен. Команда " + team.getName() + " выиграла со счетом " + team.getPoints() + " : " + teamLost.getPoints() + " очков.";
}
private static void rewardTeamOne()
{
TvTEventTeam team = _teams[0];
// Iterate over all participated player instances of the winning team
for ( L2PcInstance playerInstance : team.getParticipatedPlayers().values() ) {
// Check for nullpointer
if ( playerInstance == null )
{
continue;
}
SystemMessage systemMessage = null;
// Iterate over all tvt event rewards
for ( int[] reward : Config.TVT_EVENT_REWARDS ) {
PcInventory inv = playerInstance.getInventory();
// Check for stackable item, non stackabe items need to be added one by one
if ( ItemTable.getInstance().createDummyItem( reward[ 0 ] ).isStackable() ) {
inv.addItem( "TvT Event", reward[ 0 ], reward[ 1 ], playerInstance, playerInstance );
if ( reward[ 1 ] > 1 ) {
systemMessage = new SystemMessage( SystemMessageId.EARNED_S2_S1_S );
systemMessage.addItemName( reward[ 0 ] );
systemMessage.addNumber( reward[ 1 ] );
} else {
systemMessage = new SystemMessage( SystemMessageId.EARNED_ITEM );
systemMessage.addItemName( reward[ 0 ] );
}
playerInstance.sendPacket( systemMessage );
} else {
for ( int i = 0;i < reward[ 1 ];++ i ) {
inv.addItem( "TvT Event", reward[ 0 ], 1, playerInstance, playerInstance );
systemMessage = new SystemMessage( SystemMessageId.EARNED_ITEM );
systemMessage.addItemName( reward[ 0 ] );
playerInstance.sendPacket( systemMessage );
}
}
}
StatusUpdate statusUpdate = new StatusUpdate( playerInstance.getObjectId() );
NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage( 0 );
statusUpdate.addAttribute( StatusUpdate.CUR_LOAD, playerInstance.getCurrentLoad() );
npcHtmlMessage.setHtml( "<html><head><title>TvT Event</title></head><body>Your team won the event. Look in your inventory, there should be your reward.</body></html>" );
playerInstance.sendPacket( statusUpdate );
playerInstance.sendPacket( npcHtmlMessage );
}
}
private static void rewardTeamTwo()
{
TvTEventTeam team = _teams[1];
// Iterate over all participated player instances of the winning team
for ( L2PcInstance playerInstance : team.getParticipatedPlayers().values() ) {
// Check for nullpointer
if ( playerInstance == null ) {
continue;
}
SystemMessage systemMessage = null;
// Iterate over all tvt event rewards
for ( int[] reward : Config.TVT_EVENT_REWARDS ) {
PcInventory inv = playerInstance.getInventory();
// Check for stackable item, non stackabe items need to be added one by one
if ( ItemTable.getInstance().createDummyItem( reward[ 0 ] ).isStackable() ) {
inv.addItem( "TvT Event", reward[ 0 ], reward[ 1 ], playerInstance, playerInstance );
if ( reward[ 1 ] > 1 ) {
systemMessage = new SystemMessage( SystemMessageId.EARNED_S2_S1_S );
systemMessage.addItemName( reward[ 0 ] );
systemMessage.addNumber( reward[ 1 ] );
} else {
systemMessage = new SystemMessage( SystemMessageId.EARNED_ITEM );
systemMessage.addItemName( reward[ 0 ] );
}
playerInstance.sendPacket( systemMessage );
} else {
for ( int i = 0;i < reward[ 1 ];++ i ) {
inv.addItem( "TvT Event", reward[ 0 ], 1, playerInstance, playerInstance );
systemMessage = new SystemMessage( SystemMessageId.EARNED_ITEM );
systemMessage.addItemName( reward[ 0 ] );
playerInstance.sendPacket( systemMessage );
}
}
}
StatusUpdate statusUpdate = new StatusUpdate( playerInstance.getObjectId() );
NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage( 0 );
statusUpdate.addAttribute( StatusUpdate.CUR_LOAD, playerInstance.getCurrentLoad() );
npcHtmlMessage.setHtml( "<html><head><title>TvT Event</title></head><body>Your team won the event. Look in your inventory, there should be your reward.</body></html>" );
playerInstance.sendPacket( statusUpdate );
playerInstance.sendPacket( npcHtmlMessage );
}
}
/**
* Stops the TvTEvent fight<br>
* 1. Set state EventState.INACTIVATING<br>
* 2. Remove tvt npc from world<br>
* 3. Open doors specified in configs<br>
* 4. Teleport all participants back to participation npc location<br>
* 5. Teams cleaning<br>
* 6. Set state EventState.INACTIVE<br>
*/
public static void stopFight()
{
// Set state INACTIVATING
setState(EventState.INACTIVATING);
//Unspawn event npc
unSpawnNpc();
// Opens all doors specified in configs for tvt
openDoors();
// Closes all doors specified in Configs for tvt
closeDoors();
// Iterate over all teams
for ( TvTEventTeam team : _teams ) {
for ( L2PcInstance playerInstance : team.getParticipatedPlayers().values() ) {
// Check for nullpointer
if ( playerInstance != null ) {
new TvTEventTeleporter( playerInstance, Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES, false, false );
}
}
}
// Cleanup of teams
_teams[ 0 ].cleanMe();
_teams[ 1 ].cleanMe();
// Set state INACTIVE
setState( EventState.INACTIVE );
}
/**
* Adds a player to a TvTEvent team<br>
* 1. Calculate the id of the team in which the player should be added<br>
* 2. Add the player to the calculated team<br><br>
*
* @param playerInstance as L2PcInstance<br>
* @return boolean: true if success, otherwise false<br>
*/
public static synchronized boolean addParticipant( L2PcInstance playerInstance ) {
// Check for nullpoitner
if ( playerInstance == null ) {
return false;
}
byte teamId = 0;
// Check to which team the player should be added
if ( _teams[0].getParticipatedPlayerCount() == _teams[1].getParticipatedPlayerCount() ) {
teamId = ( byte )( Rnd.get( 2 ) );
} else {
teamId = ( byte )( _teams[ 0 ].getParticipatedPlayerCount() > _teams[ 1 ].getParticipatedPlayerCount() ? 1 : 0 );
}
return _teams[ teamId ].addPlayer( playerInstance );
}
/**
* Removes a TvTEvent player from it's team<br>
* 1. Get team id of the player<br>
* 2. Remove player from it's team<br><br>
*
* @param playerName as String<br>
* @return boolean: true if success, otherwise false<br>
*/
public static boolean removeParticipant( int playerObjectId ) {
// Get the teamId of the player
byte teamId = getParticipantTeamId( playerObjectId );
// Check if the player is participant
if ( teamId != -1 ) {
// Remove the player from team
_teams[ teamId ].removePlayer( playerObjectId );
return true;
}
return false;
}
/**
* Send a SystemMessage to all participated players<br>
* 1. Send the message to all players of team number one<br>
* 2. Send the message to all players of team number two<br><br>
*
* @param message as String<br>
*/
public static void sysMsgToAllParticipants( String message ) {
for ( L2PcInstance playerInstance : _teams[ 0 ].getParticipatedPlayers().values() ) {
if ( playerInstance != null ) {
playerInstance.sendMessage( message );
}
}
for ( L2PcInstance playerInstance : _teams[ 1 ].getParticipatedPlayers().values() ) {
if ( playerInstance != null ) {
playerInstance.sendMessage( message );
}
}
}
/**
* Close doors specified in configs
*/
private static void closeDoors() {
for ( int doorId : Config.TVT_DOORS_IDS_TO_CLOSE ) {
L2DoorInstance doorInstance = DoorTable.getInstance().getDoor( doorId );
if ( doorInstance != null ) {
doorInstance.closeMe();
}
}
}
/**
* Open doors specified in configs
*/
private static void openDoors() {
for (int doorId : Config.TVT_DOORS_IDS_TO_OPEN ) {
L2DoorInstance doorInstance = DoorTable.getInstance().getDoor( doorId );
if ( doorInstance != null ) {
doorInstance.openMe();
}
}
}
/**
* UnSpawns the TvTEvent npc
*/
private static void unSpawnNpc() {
// Delete the npc
_lastNpcSpawn.deleteMe();
// Stop respawningof the npc
_npcSpawn.stopRespawn();
_npcSpawn = null;
_lastNpcSpawn = null;
}
/**
* Called when a player logs in<br><br>
*
* @param playerInstance as L2PcInstance<br>
*/
public static void onLogin( L2PcInstance playerInstance ) {
if ( playerInstance == null ||
( !isStarting() && !isStarted() ) ) {
return;
}
byte teamId = getParticipantTeamId( playerInstance.getObjectId() );
if ( teamId == -1 ) {
return;
}
_teams[ teamId ].addPlayer( playerInstance );
new TvTEventTeleporter( playerInstance, _teams[ teamId ].getCoordinates(), true, false );
}
/**
* Called when a player logs out<br><br>
*
* @param playerInstance as L2PcInstance<br>
*/
public static void onLogout( L2PcInstance playerInstance )
{
if ( playerInstance != null &&
( isStarting() || isStarted() ) ) {
removeParticipant( playerInstance.getObjectId() );
}
}
/**
* Called on every bypass by npc of type L2TvTEventNpc<br>
* Needs synchronization cause of the max player check<br><br>
*
* @param command as String<br>
* @param playerInstance as L2PcInstance<br>
*/
public static synchronized void onBypass( String command, L2PcInstance playerInstance ) {
if ( playerInstance == null || !isParticipating() ) {
return;
}
if ( command.equals( "tvt_event_participation" ) ) {
NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage( 0 );
int playerLevel = playerInstance.getLevel();
if ( playerInstance.isCursedWeaponEquiped() ) {
npcHtmlMessage.setHtml("<html><head><title>TvT Event</title></head><body>Cursed weapon owners are not allowed to participate.</body></html>");
} else if ( playerInstance.getKarma() > 0 ) {
npcHtmlMessage.setHtml("<html><head><title>TvT Event</title></head><body>Chaotic players are not allowed to participate.</body></html>");
} else if ( playerLevel < Config.TVT_EVENT_MIN_LVL || playerLevel > Config.TVT_EVENT_MAX_LVL ) {
npcHtmlMessage.setHtml("<html><head><title>TvT Event</title></head><body>Only players from level " + Config.TVT_EVENT_MIN_LVL + " to level " + Config.TVT_EVENT_MAX_LVL + " are allowed tro participate.</body></html>");
} else if ( playerInstance.isInOlympiadMode() || Olympiad.getInstance().isRegistered(playerInstance))
npcHtmlMessage.setHtml("<html><head><title>TvT Event</title></head><body>Вы зарегистрированы на олимпиаде!</body></html>");
else if (_teams[0].getParticipatedPlayerCount() == Config.TVT_EVENT_MAX_PLAYERS_IN_TEAMS &&
_teams[1].getParticipatedPlayerCount() == Config.TVT_EVENT_MAX_PLAYERS_IN_TEAMS)
{
npcHtmlMessage.setHtml("<html><head><title>TvT Event</title></head><body>The event is full! Only " + Config.TVT_EVENT_MAX_PLAYERS_IN_TEAMS + " players are allowed per team.</body></html>");
}
else if (addParticipant(playerInstance))
{
npcHtmlMessage.setHtml("<html><head><title>TvT Event</title></head><body>You are on the registration list now.</body></html>");
}
else
{
return;
}
playerInstance.sendPacket( npcHtmlMessage );
} else if ( command.equals( "tvt_event_remove_participation" ) ) {
removeParticipant( playerInstance.getObjectId() );
NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(0);
npcHtmlMessage.setHtml( "<html><head><title>TvT Event</title></head><body>You are not longer on the registration list.</body></html>" );
playerInstance.sendPacket( npcHtmlMessage );
}
}
/**
* Called on every onAction in L2PcIstance<br><br>
*
* @param playerName as String<br>
* @param targetPlayerName as String<br>
* @return boolean: true if player is allowed to target, otherwise false<br>
*/
public static boolean onAction( L2PcInstance playerInstance, int targetedPlayerObjectId ) {
if ( playerInstance == null || !isStarted() ) {
return true;
}
if ( playerInstance.isGM() ) {
return true;
}
byte playerTeamId = getParticipantTeamId( playerInstance.getObjectId() );
byte targetedPlayerTeamId = getParticipantTeamId( targetedPlayerObjectId );
if ( ( playerTeamId != -1 && targetedPlayerTeamId == -1 ) ||
( playerTeamId == -1 && targetedPlayerTeamId != -1 ) ) {
return false;
}
if (playerTeamId != -1 && targetedPlayerTeamId != -1 && playerTeamId == targetedPlayerTeamId && playerInstance.getObjectId() != targetedPlayerObjectId && !Config.TVT_EVENT_TARGET_TEAM_MEMBERS_ALLOWED )
{
return false;
}
return true;
}
/**
* Called on every scroll use<br><br>
*
* @param playerName as String<br>
* @return boolean: true if player is allowed to use scroll, otherwise false<br>
*/
public static boolean onScrollUse(int playerObjectId)
{
if (!isStarted())
return true;
if (isPlayerParticipant(playerObjectId) && !Config.TVT_EVENT_SCROLL_ALLOWED)
return false;
return true;
}
/**
* Called on every potion use<br><br>
*
* @param playerName as String<br>
* @return boolean: true if player is allowed to use potions, otherwise false<br>
*/
public static boolean onPotionUse(int playerObjectId)
{
if (!isStarted())
return true;
if (isPlayerParticipant(playerObjectId) && !Config.TVT_EVENT_POTIONS_ALLOWED)
return false;
return true;
}
/**
* Called on every escape use(thanks to nbd)<br><br>
*
* @param playerName as String<br>
* @return boolean: true if player is not in tvt event, otherwise false<br>
*/
public static boolean onEscapeUse( int playerObjectId ) {
if ( !isStarted() ) {
return true;
}
if ( isPlayerParticipant( playerObjectId ) ) {
return false;
}
return true;
}
/**
* Called on every summon item use<br><br>
*
* @param playerName as String<br>
* @return boolean: true if player is allowed to summon by item, otherwise false<br>
*/
public static boolean onItemSummon( int playerObjectId )
{
if ( !isStarted() ) {
return true;
}
if ( isPlayerParticipant( playerObjectId ) && !Config.TVT_EVENT_SUMMON_BY_ITEM_ALLOWED ) {
return false;
}
return true;
}
/**
* Is called when a player is killed<br><br>
*
* @param killerCharacter as L2Character<br>
* @param killedPlayerInstance as L2PcInstance<br>
*/
public static void onKill( L2Character killerCharacter, L2PcInstance killedPlayerInstance )
{
if ( killedPlayerInstance == null || !isStarted() ) {
return;
}
byte killedTeamId = getParticipantTeamId( killedPlayerInstance.getObjectId() );
if ( killedTeamId == -1 ) {
return;
}
new TvTEventTeleporter( killedPlayerInstance, _teams[ killedTeamId ].getCoordinates(), false, false );
if ( killerCharacter == null ) {
return;
}
L2PcInstance killerPlayerInstance = null;
if ( killerCharacter instanceof L2PetInstance || killerCharacter instanceof L2SummonInstance ) {
killerPlayerInstance = ( ( L2Summon )killerCharacter ).getOwner();
if ( killerPlayerInstance == null ) {
return;
}
} else if ( killerCharacter instanceof L2PcInstance ) {
killerPlayerInstance = ( L2PcInstance )killerCharacter;
} else {
return;
}
byte killerTeamId = getParticipantTeamId( killerPlayerInstance.getObjectId() );
if ( killerTeamId != -1 && killedTeamId != -1 && killerTeamId != killedTeamId ) {
TvTEventTeam killerTeam = _teams[ killerTeamId ];
killerTeam.increasePoints();
CreatureSay cs = new CreatureSay( killerPlayerInstance.getObjectId(), Say2.TELL, killerPlayerInstance.getName(), "I have killed " + killedPlayerInstance.getName() + "!" );
for ( L2PcInstance playerInstance : _teams[ killerTeamId ].getParticipatedPlayers().values() ) {
if ( playerInstance != null ) {
playerInstance.sendPacket( cs );
}
}
}
}
/**
* Sets the TvTEvent state<br><br>
*
* @param state as EventState<br>
*/
private static void setState( EventState state ) {
synchronized ( _state ) {
_state = state;
}
}
/**
* Is TvTEvent inactive?<br><br>
*
* @return boolean: true if event is inactive(waiting for next event cycle), otherwise false<br>
*/
public static boolean isInactive() {
boolean isInactive;
synchronized ( _state ) {
isInactive = _state == EventState.INACTIVE;
}
return isInactive;
}
/**
* Is TvTEvent in inactivating?<br><br>
*
* @return boolean: true if event is in inactivating progress, otherwise false<br>
*/
public static boolean isInactivating() {
boolean isInactivating;
synchronized ( _state ) {
isInactivating = _state == EventState.INACTIVATING;
}
return isInactivating;
}
/**
* Is TvTEvent in participation?<br><br>
*
* @return boolean: true if event is in participation progress, otherwise false<br>
*/
public static boolean isParticipating() {
boolean isParticipating;
synchronized ( _state ) {
isParticipating = _state == EventState.PARTICIPATING;
}
return isParticipating;
}
/**
* Is TvTEvent starting?<br><br>
*
* @return boolean: true if event is starting up(setting up fighting spot, teleport players etc.), otherwise false<br>
*/
public static boolean isStarting() {
boolean isStarting;
synchronized ( _state ) {
isStarting = _state == EventState.STARTING;
}
return isStarting;
}
/**
* Is TvTEvent started?<br><br>
*
* @return boolean: true if event is started, otherwise false<br>
*/
public static boolean isStarted() {
boolean isStarted;
synchronized ( _state ) {
isStarted = _state == EventState.STARTED;
}
return isStarted;
}
/**
* Is TvTEvent rewadrding?<br><br>
*
* @return boolean: true if event is currently rewarding, otherwise false<br>
*/
public static boolean isRewarding() {
boolean isRewarding;
synchronized ( _state ) {
isRewarding = _state == EventState.REWARDING;
}
return isRewarding;
}
/**
* Returns the team id of a player, if player is not participant it returns -1<br><br>
*
* @param playerName as String<br>
* @return byte: team name of the given playerName, if not in event -1<br>
*/
public static byte getParticipantTeamId( int playerObjectId ) {
return ( byte )( _teams[ 0 ].containsPlayer( playerObjectId ) ? 0 : ( _teams[ 1 ].containsPlayer( playerObjectId ) ? 1 : -1 ) );
}
/**
* Returns the team of a player, if player is not participant it returns null <br><br>
*
* @param player objectId as Integer<br>
* @return TvTEventTeam: team of the given playerObjectId, if not in event null <br>
*/
public static TvTEventTeam getParticipantTeam( int playerObjectId ) {
return ( _teams[ 0 ].containsPlayer( playerObjectId ) ? _teams[ 0 ] : ( _teams[ 1 ].containsPlayer( playerObjectId ) ? _teams[ 1 ] : null ) );
}
/**
* Returns the enemy team of a player, if player is not participant it returns null <br><br>
*
* @param player objectId as Integer<br>
* @return TvTEventTeam: enemy team of the given playerObjectId, if not in event null <br>
*/
public static TvTEventTeam getParticipantEnemyTeam( int playerObjectId ) {
return ( _teams[ 0 ].containsPlayer( playerObjectId ) ? _teams[ 1 ] : ( _teams[ 1 ].containsPlayer( playerObjectId ) ? _teams[ 0 ] : null ) );
}
/**
* Returns the team coordinates in which the player is in, if player is not in a team return null<br><br>
*
* @param playerName as String<br>
* @return int[]: coordinates of teams, 2 elements, index 0 for team 1 and index 1 for team 2<br>
*/
public static int[] getParticipantTeamCoordinates( int playerObjectId ) {
return _teams[0].containsPlayer( playerObjectId ) ? _teams[ 0 ].getCoordinates() : ( _teams[ 1 ].containsPlayer( playerObjectId ) ? _teams[ 1 ].getCoordinates() : null);
}
/**
* Is given player participant of the event?<br><br>
*
* @param playerName as String<br>
* @return boolean: true if player is participant, ohterwise false<br>
*/
public static boolean isPlayerParticipant( int playerObjectId ) {
if ( !isParticipating() && !isStarting() && !isStarted() ) {
return false;
}
return _teams[ 0 ].containsPlayer( playerObjectId ) || _teams[ 1 ].containsPlayer( playerObjectId );
}
/**
* Returns participated player count<br><br>
*
* @return int: amount of players registered in the event<br>
*/
public static int getParticipatedPlayersCount() {
if ( !isParticipating() && !isStarting() && !isStarted() ) {
return 0;
}
return _teams[ 0 ].getParticipatedPlayerCount() + _teams[ 1 ].getParticipatedPlayerCount();
}
/**
* Returns teams names<br><br>
*
* @return String[]: names of teams, 2 elements, index 0 for team 1 and index 1 for team 2<br>
*/
public static String[] getTeamNames() {
return new String[] {
_teams[ 0 ].getName(),
_teams[ 1 ].getName()
};
}
/**
* Returns player count of both teams<br><br>
*
* @return int[]: player count of teams, 2 elements, index 0 for team 1 and index 1 for team 2<br>
*/
public static int[] getTeamsPlayerCounts() {
return new int[] {
_teams[ 0 ].getParticipatedPlayerCount(),
_teams[ 1 ].getParticipatedPlayerCount()
};
}
/**
* Returns points count of both teams
*
* @return int[]: points of teams, 2 elements, index 0 for team 1 and index 1 for team 2<br>
*/
public static int[] getTeamsPoints() {
return new int[] {
_teams[ 0 ].getPoints(),
_teams[ 1 ].getPoints()
};
}
}
TvTEvent.java
|