Vanilla L2J Mobius CT_0 Interlude @ 9be7adbe5a (2026-08-25): java tree, build.xml, libs, and the datapack files SPP later modifies

This commit is contained in:
2026-09-03 19:04:54 +02:00
commit f520c66e85
1631 changed files with 298118 additions and 0 deletions
@@ -0,0 +1,38 @@
# ---------------------------------------------------------------------------
# Fake players
# ---------------------------------------------------------------------------
# Our fake player system uses the existing NPC system, allowing fake players
# to function seamlessly like NPCs with minimal impact on server performance.
# Enable fake players.
EnableFakePlayers = False
# Enable chatting with fake players.
FakePlayerChat = True
# Enable shots usage for fake players.
FakePlayerUseShots = True
# Reward PvP kills by killing fake players.
FakePlayerKillsRewardPvP = True
# Fake player kills apply karma rules.
FakePlayerUnflaggedKillsKarma = True
# Fake players can be attacked without PvP flagging.
FakePlayerAutoAttackable = False
# Aggressive AI fake players attack nearby monsters.
FakePlayerAggroMonsters = True
# Aggressive AI fake players attack nearby players.
FakePlayerAggroPlayers = False
# Aggressive AI fake players attack nearby fake players.
FakePlayerAggroFPC = False
# Fake players can drop items when killing monsters.
FakePlayerCanDropItems = True
# Fake players can pickup dropped items.
FakePlayerCanPickup = True
@@ -0,0 +1,666 @@
# ---------------------------------------------------------------------------
# General Server Settings
# ---------------------------------------------------------------------------
# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
# Warning:
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
# ---------------------------------------------------------------------------
# Administrator
# ---------------------------------------------------------------------------
# If this option is set to True every newly created character will have access level 127. This means that every character created will have Administrator Privileges.
# Default: False
EverybodyHasAdminRights = False
# If True, only accounts with GM access can enter the server.
# Default: False
ServerGMOnly = False
# Enable GMs to have the glowing aura of a Hero character on login.
# Notes:
# GMs can do "///hero" on themselves and get this aura voluntarily.
# It's advised to keep this off due to graphic lag.
# Default: False
GMHeroAura = False
# Whether GM logins in builder hide mode by default.
# Default: True
GMStartupBuilderHide = True
# Auto set invulnerable status to a GM on login.
# Default: False
GMStartupInvulnerable = True
# Auto set invisible status to a GM on login.
# Default: False
GMStartupInvisible = True
# Auto block private messages to a GM on login.
# Default: False
GMStartupSilence = False
# Auto list GMs in GM list (/gmlist) on login.
# Default: False
GMStartupAutoList = False
# Auto set diet mode on to a GM on login (affects your weight penalty).
# Default: False
GMStartupDietMode = False
# Item restrictions apply to GMs as well? (True = restricted usage)
# Default: True
GMItemRestriction = True
# Skill restrictions apply to GMs as well? (True = restricted usage)
# Default: True
GMSkillRestriction = True
# Allow GMs to drop/trade non-tradable and quest(drop only) items
# Default: False
GMTradeRestrictedItems = False
# Allow GMs to restart/exit while is fighting stance
# Default: True
GMRestartFighting = True
# Show the GM's name behind an announcement made by him
# example: "Announce: hi (HanWik)"
GMShowAnnouncerName = False
# Show the GM's name before an announcement made by him
# example: "Nyaran: hi"
GMShowCritAnnouncerName = False
# Give special skills for every GM
# 7029,7041-7064,7088-7096,23238-23249 (Master's Blessing)
# Default: False
GMGiveSpecialSkills = False
# Give special aura skills for every GM
# 7029,23238-23249,23253-23296 (Master's Blessing)
# Default: False
GMGiveSpecialAuraSkills = False
# Debug html paths for GM characters.
# Default: True
GMDebugHtmlPaths = True
# In case you are not satisfied with the retail-like implementation of //gmspeed",
# with this config you can rollback it to the old custom L2J version of the GM Speed.
# Default: False
UseSuperHasteAsGMSpeed = False
# ---------------------------------------------------------------------------
# Server Security
# ---------------------------------------------------------------------------
# Logging settings. Enabling these settings will significantly increase the amount of log data written to disk.
# This can lead to increased disk usage and depending on server load and player activity, may impact performance.
# Use these options carefully based on your logging needs and server capacity.
# Enable logging of player chat messages. Set to True if you need a record of all chat interactions.
# Default: False
LogChat = False
# Enable logging of item transactions (e.g., pickups, trades, sales).
# This setting can be useful for tracking item movement but may lead to extensive logging on busy servers.
# Default: False
LogItems = False
# If LogItems is enabled, set this to True to only log important items, specifically Adena (in-game currency) and equippable items.
# This helps to reduce log volume by excluding common, low-value items.
# Default: False
LogItemsSmallLog = False
# If LogItems is enabled, set this to True to log only specific item IDs rather than all items.
# This is helpful if you only need logs for certain items, such as rare or high-value items.
# Default: False
LogItemsIdsOnly = False
# Specifies the item IDs to log when LogItemsIdsOnly is enabled.
# Enter item IDs separated by commas to track specific items, for example, rare items or in-game currency.
# Default: 4356 (Gold Einhasad)
LogItemsIdsList = 4356
# Enable logging for all actions involving item enchantments, such as success or failure of upgrades.
# This can help with tracking suspicious behavior but may create large log files if enchantment is frequently used.
# Default: False
LogItemEnchants = False
# Enable logging for all actions related to skill enchantments, including upgrades and modifications.
# Useful for monitoring skill progression but can lead to extensive logging on active servers.
# Default: False
LogSkillEnchants = False
# Enable audit logging for actions performed by Game Masters (GMs).
# This helps in tracking GM activities to ensure administrative actions are recorded for accountability.
# Default: False
GMAudit = False
# Check players for non-allowed skills
# Default: False
SkillCheckEnable = True
# If true, remove invalid skills from player and database.
# Report only, if false.
# Default: False
SkillCheckRemove = True
# Check also GM characters (only if SkillCheckEnable = True)
# Default: True
SkillCheckGM = False
# ---------------------------------------------------------------------------
# Optimization
# ---------------------------------------------------------------------------
# Items on ground management.
# Allow players to drop items on the ground.
# Default: True
AllowDiscardItem = True
# Delete dropped reward items from world after a specified amount of seconds. Disabled = 0.
# Default: 600
AutoDestroyDroppedItemAfter = 600
# Time in seconds after which dropped herb will be auto-destroyed
# Default: 60
AutoDestroyHerbTime = 60
# List of item id that will not be destroyed (separated by "," like 57,5575,6673).
# Notes:
# Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
# Items on this list will be protected regardless of the following options.
# Default: 0
ListOfProtectedItems = 0
# This is the interval (in minutes), that the gameserver will update a players information such as location.
# The higher you set this number, there will be less character information saving so you will have less accessing of the database and your hard drive(s).
# The lower you set this number, there will be more frequent character information saving so you will have more access to the database and your hard drive(s).
# A value of 0 disables periodic saving.
# Independent of this setting the character is always saved after leaving the world.
# Default: 15
CharacterDataStoreInterval = 15
# This enables the server to only update items when saving the character.
# Enabling this greatly reduces DB usage and improves performance.
# WARNING: This option causes item loss during crashes.
# Default: False
LazyItemsUpdate = False
# When enabled, this forces (even if using lazy item updates) the items owned by the character to be updated into DB when saving its character.
# Default: True
UpdateItemsOnCharStore = True
# Also delete from world misc. items dropped by players (all except equip-able items).
# Notes:
# Works only if AutoDestroyDroppedItemAfter is greater than 0.
# Default: False
DestroyPlayerDroppedItem = False
# Destroy dropped equippable items (armor, weapon, jewelry).
# Notes:
# Works only if DestroyPlayerDroppedItem = True
# Default: False
DestroyEquipableItem = False
# Make all items destroyable.
# If enabled players can destroy all items!!!
DestroyAllItems = False
# Save dropped items into the database for restoring after restart.
# Default: False
SaveDroppedItem = False
# Enable/Disable the emptying of the stored dropped items table after items are loaded into memory (safety setting).
# If the server crashed before saving items, on next start old items will be restored and players may already have picked up some of them so this will prevent duplicates.
# Default: False
EmptyDroppedItemTableAfterLoad = False
# Time interval in minutes to save in DB items on ground. Disabled = 0.
# Notes:
# If SaveDroppedItemInterval is disabled, items will be saved into the database only at server shutdown.
# Default: 60
SaveDroppedItemInterval = 60
# Delete all saved items from the database on next restart?
# Notes:
# Works only if SaveDroppedItem = False.
# Default: False
ClearDroppedItemTable = False
# Delete invalid quest from players.
# Default: False
AutoDeleteInvalidQuestData = False
# Allow creating multiple non-stackable items at one time?
# Default: True
MultipleItemDrop = True
# Enable/Disable html caching.
# True = Load all html's into cache on server startup.
# False = Load html's into cache only on first time html is requested.
# Recommended for live servers: True
# Recommended for development: False
HtmCache = False
# Check if html files contain non ASCII characters.
# Default = True
CheckHtmlEncoding = True
# Minimum and maximum variables in seconds for NPC animation delay.
# You must keep MinNpcAnimation lower or equal to MaxNpcAnimation.
# Set values to 0 for disabling random animations.
# Default: 5
MinNpcAnimation = 5
# Default: 60
MaxNpcAnimation = 60
# Default: 5
MinMonsterAnimation = 5
# Default: 60
MaxMonsterAnimation = 60
# Grid options: Grids can turn themselves on and off. This also affects the loading and processing of all AI tasks and (in the future) geodata within this grid.
# Turn on for a grid with a person in it is immediate, but it then turns on the 8 neighboring grids based on the specified number of seconds.
# Turn off for a grid and neighbors occurs after the specified number of seconds have passed during which a grid has had no players in or in any of its neighbors.
# The always on option allows to ignore all this and let all grids be active at all times (not suggested).
# Default: False
GridsAlwaysOn = False
# Default: 1
GridNeighborTurnOnTime = 1
# Default: 90
GridNeighborTurnOffTime = 90
# Correct buylist and multisell prices when lower than sell price.
# Default: True
CorrectPrices = True
# Item limit on multisell transaction.
# Max client allowed 999999
MultisellAmountLimit = 10000
# ---------------------------------------------------------------------------
# Falling Damage
# ---------------------------------------------------------------------------
# Allow characters to receive damage from falling.
# Default: True
EnableFallingDamage = True
# ---------------------------------------------------------------------------
# Skills & Effects
# ---------------------------------------------------------------------------
# Affect debuff time by the character resistances.
# If the option is false, the debuff time will be the one set in the skill xml.
DebuffDurationUsesResists = False
# ---------------------------------------------------------------------------
# Features
# ---------------------------------------------------------------------------
# Peace Zone Modes:
# 0 = Peace All the Time
# 1 = PVP During Siege for siege participants
# 2 = PVP All the Time
# Default: 0
PeaceZoneMode = 0
# Global Chat.
# Available Options: ON, OFF, GM, GLOBAL
# Default: ON
GlobalChat = ON
# Trade Chat.
# Available Options: ON, OFF, GM, GLOBAL
# Default: ON
TradeChat = ON
# Minimum level for chat, 0 = disable.
MinimumChatLevel = 0
# If you are experiencing problems with Warehouse transactions, feel free to disable them here.
# Default: True
AllowWarehouse = True
# Default: True
AllowRefund = True
# If True player can try on weapon and armor in shop.
# Default: True
AllowWear = True
# Default: 5
WearDelay = 5
#Adena cost to try on an item.
# Default: 10
WearPrice = 10
# Disable additional adena rewards for starter villages repeatable quests based on turning in items
# True = additional reward for 10+ items not given on quest turn in, False = get additional reward for 10+ items on quest turn in
# ATTENTION: enabling this option greatly decrease adena income capabilities on low levels.
# Default: False
AltVillagesRepQuestReward = False
# ---------------------------------------------------------------------------
# Instances
# ---------------------------------------------------------------------------
# Restores the player to their previous instance (ie. an instanced area/dungeon) on EnterWorld.
# Default: False
RestorePlayerInstance = True
# Set whether summon skills can be used to summon players inside an instance.
# When enabled individual instances can have summoning disabled in instance xml's.
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
# Default: False
AllowSummonInInstance = False
# When a player dies, is removed from instance after a fixed period of time.
# Time in seconds.
# Default: 60
EjectDeadPlayerTime = 60
# When is instance finished, is set time to destruction currency instance.
# Time in seconds.
# Default: 300
DefaultFinishTime = 300
# ---------------------------------------------------------------------------
# Misc Settings
# ---------------------------------------------------------------------------
# Default: True
AllowRace = True
# Default: True
AllowWater = True
# Default: True
AllowFishing = True
# Default: True
AllowBoat = True
# Boat broadcast radius.
# If players getting annoyed by boat shouts then radius can be decreased.
# Default: 20000
BoatBroadcastRadius = 20000
# Default: True
AllowCursedWeapons = True
# If false, always block party on event.
# If true, allows party if both are in the same event.
AllowPartyInSameEvent = True
# Show "data/html/servnews.htm" when a character enters world.
# Default: False
ShowServerNews = False
# Enable the Community Board.
# Default: True
EnableCommunityBoard = True
# Default Community Board page.
# Default: _bbshome
BBSDefault = _bbshome
# Enable chat filter
# Default = False
UseChatFilter = False
# Replace filter words with following chars
ChatFilterChars = ^_^
# Banchat for channels, split ";"
# GENERAL (white)
# SHOUT (!)
# WHISPER (")
# PARTY (#)
# CLAN (@)
# GM (//gmchat)
# PETITION_PLAYER (*)
# PETITION_GM (*)
# TRADE (+)
# ALLIANCE ($)
# ANNOUNCEMENT
# BOAT
# FRIEND
# MSNCHAT
# PARTYMATCH_ROOM
# PARTYROOM_COMMANDER (Yellow)
# PARTYROOM_ALL (Red)
# HERO_VOICE (%)
# CRITICAL_ANNOUNCE
# SCREEN_ANNOUNCE
# BATTLEFIELD
# MPCC_ROOM
# NPC_GENERAL
# NPC_SHOUT
# Default: GENERAL;SHOUT;TRADE;HERO_VOICE;WHISPER
BanChatChannels = GENERAL;SHOUT;TRADE;HERO_VOICE;WHISPER
# ---------------------------------------------------------------------------
# Manor
# ---------------------------------------------------------------------------
# Default: True
AllowManor = True
# Manor refresh time in military hours.
# Default: 20 (8pm)
AltManorRefreshTime = 20
# Manor refresh time (minutes).
# Default: 00 (start of the hour)
AltManorRefreshMin = 00
# Manor period approve time in military hours.
# Default: 6 (6am)
AltManorApproveTime = 6
# Manor period approve time (minutes).
# Default: 0
AltManorApproveMin = 0
# Manor maintenance time (minutes).
# Default: 6
AltManorMaintenanceMin = 6
# Manor Save Type.
# True = Save data into the database after every action
# Default: False
AltManorSaveAllActions = False
# Manor Save Period (used only if AltManorSaveAllActions = False)
# Default: 2 (hour)
AltManorSavePeriodRate = 2
# ---------------------------------------------------------------------------
# Lottery
# ---------------------------------------------------------------------------
# Default: True
AllowLottery = True
# Initial Lottery prize.
# Default: 50000
AltLotteryPrize = 50000
# Lottery Ticket Price
# Default: 2000
AltLotteryTicketPrice = 2000
# What part of jackpot amount should receive characters who pick 5 wining numbers
# Default: 0.6
AltLottery5NumberRate = 0.6
# What part of jackpot amount should receive characters who pick 4 wining numbers
# Default: 0.2
AltLottery4NumberRate = 0.2
# What part of jackpot amount should receive characters who pick 3 wining numbers
# Default: 0.2
AltLottery3NumberRate = 0.2
# How much Adena receive characters who pick two or less of the winning number
# Default: 200
AltLottery2and1NumberPrize = 200
# ---------------------------------------------------------------------------
# Fishing Tournament
# ---------------------------------------------------------------------------
# Enable or disable the Fishing Tournament system
AltFishChampionshipEnabled = True
# Item Id used as reward
AltFishChampionshipRewardItemId = 57
# Item count used as reward (for the 5 first winners)
AltFishChampionshipReward1 = 800000
AltFishChampionshipReward2 = 500000
AltFishChampionshipReward3 = 300000
AltFishChampionshipReward4 = 200000
AltFishChampionshipReward5 = 100000
# ---------------------------------------------------------------------------
# Item Auction
# ---------------------------------------------------------------------------
#
AltItemAuctionEnabled = True
# Number of days before auction cleared from database with all bids.
# Default: 14
AltItemAuctionExpiredAfter = 14
# Auction extends to specified amount of seconds if one or more new bids added.
# By default auction extends only two times, by 5 and 3 minutes, this custom value used after it.
# Values higher than 60s is not recommended.
# Default: 0
AltItemAuctionTimeExtendsOnBid = 0
# ---------------------------------------------------------------------------
# Dimension Rift
# ---------------------------------------------------------------------------
# Minimum party size to enter rift. Min = 2, Max = 9.
# If while inside the rift, the party becomes smaller, all members will be teleported back.
# Default: 2
RiftMinPartySize = 2
# Number of maximum jumps between rooms allowed, after this time party will be teleported back
# Default: 4
MaxRiftJumps = 4
# Time in ms the party has to wait until the mobs spawn when entering a room. C4 retail: 10s
# Default: 10000
RiftSpawnDelay = 10000
# Time between automatic jumps in seconds
# Default: 480
AutoJumpsDelayMin = 480
# Default: 600
AutoJumpsDelayMax = 600
# Time Multiplier for stay in the boss room
# Default: 1.5
BossRoomTimeMultiply = 1.5
# Cost in dimension fragments to enter the rift, each party member must own this amount
# Default: 18
RecruitCost = 18
# Default: 21
SoldierCost = 21
# Default: 24
OfficerCost = 24
# Default: 27
CaptainCost = 27
# Default: 30
CommanderCost = 30
# Default: 33
HeroCost = 33
# ---------------------------------------------------------------------------
# Punishment
# ---------------------------------------------------------------------------
# Player punishment for illegal actions:
# BROADCAST - broadcast warning to GMs only
# KICK - kick player (default)
# KICKBAN - kick and ban player
# JAIL - jail player
DefaultPunish = KICK
# This setting typically specifies the duration of the above punishment.
# Default: 0 (automatically sets to 100 years)
DefaultPunishParam = 0
# Apply default punish if player buy items for zero Adena.
# Default: True
OnlyGMItemsFree = True
# Jail is a PvP zone.
# Default: False
JailIsPvp = False
# Disable all chat in jail (except normal one)
# Default: True
JailDisableChat = True
# Disable all transaction in jail
# Trade/Store/Drop
# Default: False
JailDisableTransaction = False
# Enchant Skill Details Settings
# Default: 1,5
NormalEnchantCostMultipiler = 1
SafeEnchantCostMultipiler = 5
# ---------------------------------------------------------------------------
# Custom Components
# ---------------------------------------------------------------------------
# Default: False
CustomNpcData = True
# Default: False
CustomTeleportTable = True
# Default: False
CustomSkillsLoad = True
# Default: False
CustomItemsLoad = True
# Default: False
CustomMultisellLoad = True
# Default: False
CustomBuyListLoad = True
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Use lowercase for searchText and answers. -->
<!-- You can use specific fpcName or ALL to use with all fpcs. -->
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/FakePlayerChatData.xsd">
<fakePlayerChat fpcName="ALL" searchMethod="EQUALS" searchText="hi" answers="hello;hi;hi there;hello there" />
<fakePlayerChat fpcName="ALL" searchMethod="EQUALS" searchText="hey" answers="hey hey;hey;hey there" />
<fakePlayerChat fpcName="ALL" searchMethod="EQUALS" searchText="hello" answers="hello;hi;hi there;hello there" />
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="here?" answers="yes;busy;i look for something" />
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="whats up?" answers="good;busy;i look for something" />
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="what?" answers="something :P;something for me" />
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="why?" answers="because;i don't know;what?" />
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="really" answers="really;yes;of course" />
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="thanks" answers=":);:D;:*" />
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="thank you" answers=":);:D;:*" />
<fakePlayerChat fpcName="Evi" searchMethod="STARTS_WITH" searchText="how are you" answers="fine;good;busy" />
<fakePlayerChat fpcName="Evi" searchMethod="STARTS_WITH" searchText="do you know" answers="nope;no sorry;nope, i don't" />
<fakePlayerChat fpcName="Evi" searchMethod="STARTS_WITH" searchText="where can i" answers="i don't know;no clue;ask someone else :P" />
<fakePlayerChat fpcName="Evi" searchMethod="STARTS_WITH" searchText="can i ask you" answers="yes;what?;tell me" />
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="server;ha;problem" answers="it's good;i don't know;i don't think so..." />
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="server;ha;bug" answers="it's good;i don't know;i don't think so..." />
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="is th;server;good" answers="it's good :D;i like it :P;yes it is :)" />
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="where;you;go;?" answers="i look for something;checking stuff;looking for curius people :P" />
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="are;you;kidding" answers="^^;:D;:P" />
</list>
@@ -0,0 +1,130 @@
/*
* 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 handlers.chat.channels;
import java.util.StringTokenizer;
import org.l2jmobius.gameserver.config.GeneralConfig;
import org.l2jmobius.gameserver.config.custom.FactionSystemConfig;
import org.l2jmobius.gameserver.entity.World;
import org.l2jmobius.gameserver.entity.actor.Player;
import org.l2jmobius.gameserver.entity.actor.holders.player.BlockList;
import org.l2jmobius.gameserver.handler.IChatHandler;
import org.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import org.l2jmobius.gameserver.handler.VoicedCommandHandler;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.enums.ChatType;
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
/**
* General Chat Handler.
* @author durgus
*/
public class ChatGeneral implements IChatHandler
{
private static final ChatType[] CHAT_TYPES =
{
ChatType.GENERAL,
};
@Override
public void onChat(ChatType type, Player activeChar, String paramsValue, String text)
{
boolean vcdUsed = false;
if (text.startsWith("."))
{
final StringTokenizer st = new StringTokenizer(text);
final IVoicedCommandHandler vch;
String command = "";
String params = paramsValue;
if (st.countTokens() > 1)
{
command = st.nextToken().substring(1);
params = text.substring(command.length() + 2);
}
else
{
command = text.substring(1);
}
vch = VoicedCommandHandler.getInstance().getHandler(command);
if (vch != null)
{
vch.onCommand(command, activeChar, params);
vcdUsed = true;
}
else
{
vcdUsed = false;
}
}
if (!vcdUsed)
{
if (activeChar.isChatBanned() && GeneralConfig.BAN_CHAT_CHANNELS.contains(type))
{
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED_IF_YOU_TRY_TO_CHAT_BEFORE_THE_PROHIBITION_IS_REMOVED_THE_PROHIBITION_TIME_WILL_BECOME_EVEN_LONGER);
return;
}
if ((activeChar.getLevel() < GeneralConfig.MINIMUM_CHAT_LEVEL) && !activeChar.isGM())
{
activeChar.sendMessage("Players can use general chat after Lv. " + GeneralConfig.MINIMUM_CHAT_LEVEL + ".");
return;
}
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getAppearance().getVisibleName(), text);
final CreatureSay csRandom = new CreatureSay(activeChar, type, activeChar.getAppearance().getVisibleName(), ChatRandomizer.randomize(text));
World.forEachVisibleObjectInRange(activeChar, Player.class, 1250, player ->
{
if ((player != null) && !BlockList.isBlocked(player, activeChar))
{
if (FactionSystemConfig.FACTION_SYSTEM_ENABLED)
{
if (FactionSystemConfig.FACTION_SPECIFIC_CHAT)
{
if ((activeChar.isGood() && player.isEvil()) || (activeChar.isEvil() && player.isGood()))
{
player.sendPacket(csRandom);
}
else
{
player.sendPacket(cs);
}
}
else
{
player.sendPacket(cs);
}
}
else
{
player.sendPacket(cs);
}
}
});
activeChar.sendPacket(cs);
}
}
@Override
public ChatType[] getChatTypeList()
{
return CHAT_TYPES;
}
}
@@ -0,0 +1,141 @@
/*
* 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 handlers.chat.channels;
import org.l2jmobius.gameserver.config.GeneralConfig;
import org.l2jmobius.gameserver.config.PlayerConfig;
import org.l2jmobius.gameserver.config.custom.FactionSystemConfig;
import org.l2jmobius.gameserver.config.custom.FakePlayersConfig;
import org.l2jmobius.gameserver.data.xml.FakePlayerData;
import org.l2jmobius.gameserver.entity.World;
import org.l2jmobius.gameserver.entity.actor.Player;
import org.l2jmobius.gameserver.entity.actor.holders.player.BlockList;
import org.l2jmobius.gameserver.handler.IChatHandler;
import org.l2jmobius.gameserver.managers.FakePlayerChatManager;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.enums.ChatType;
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
/**
* Tell Chat Handler.
* @author durgus
*/
public class ChatWhisper implements IChatHandler
{
private static final ChatType[] CHAT_TYPES =
{
ChatType.WHISPER
};
@Override
public void onChat(ChatType type, Player activeChar, String target, String text)
{
if (activeChar.isChatBanned() && GeneralConfig.BAN_CHAT_CHANNELS.contains(type))
{
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED_IF_YOU_TRY_TO_CHAT_BEFORE_THE_PROHIBITION_IS_REMOVED_THE_PROHIBITION_TIME_WILL_BECOME_EVEN_LONGER);
return;
}
if (GeneralConfig.JAIL_DISABLE_CHAT && activeChar.isJailed() && !activeChar.isGM())
{
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
return;
}
// Return if no target is set.
if (target == null)
{
return;
}
if (FakePlayersConfig.FAKE_PLAYERS_ENABLED && (FakePlayerData.getInstance().getProperName(target) != null))
{
if (FakePlayerData.getInstance().isTalkable(target))
{
if (FakePlayersConfig.FAKE_PLAYER_CHAT)
{
final String name = FakePlayerData.getInstance().getProperName(target);
activeChar.sendPacket(new CreatureSay(activeChar, type, "->" + name, text));
FakePlayerChatManager.getInstance().manageChat(activeChar, name, text);
}
else
{
activeChar.sendPacket(SystemMessageId.THAT_PERSON_IS_IN_MESSAGE_REFUSAL_MODE);
}
}
else
{
activeChar.sendPacket(SystemMessageId.THAT_PLAYER_IS_NOT_ONLINE);
}
return;
}
final Player receiver = World.getPlayer(target);
if ((receiver != null) && !receiver.isSilenceMode(activeChar.getObjectId()))
{
if (GeneralConfig.JAIL_DISABLE_CHAT && receiver.isJailed() && !activeChar.isGM())
{
activeChar.sendMessage("Player is in jail.");
return;
}
if (receiver.isChatBanned())
{
activeChar.sendPacket(SystemMessageId.THAT_PERSON_IS_IN_MESSAGE_REFUSAL_MODE);
return;
}
if ((receiver.getClient() == null) || receiver.getClient().isDetached())
{
activeChar.sendMessage("Player is in offline mode.");
return;
}
if (FactionSystemConfig.FACTION_SYSTEM_ENABLED && FactionSystemConfig.FACTION_SPECIFIC_CHAT && ((activeChar.isGood() && receiver.isEvil()) || (activeChar.isEvil() && receiver.isGood())))
{
activeChar.sendMessage("Player belongs to the opposing faction.");
return;
}
if (!BlockList.isBlocked(receiver, activeChar))
{
// Allow receiver to send PMs to this char, which is in silence mode.
if (PlayerConfig.SILENCE_MODE_EXCLUDE && activeChar.isSilenceMode())
{
activeChar.addSilenceModeExcluded(receiver.getObjectId());
}
receiver.sendPacket(new CreatureSay(activeChar, type, activeChar.getName(), text));
activeChar.sendPacket(new CreatureSay(activeChar, type, "->" + receiver.getName(), text));
}
else
{
activeChar.sendPacket(SystemMessageId.THAT_PERSON_IS_IN_MESSAGE_REFUSAL_MODE);
}
}
else
{
activeChar.sendPacket(SystemMessageId.THAT_PLAYER_IS_NOT_ONLINE);
}
}
@Override
public ChatType[] getChatTypeList()
{
return CHAT_TYPES;
}
}
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/spawns.xsd">
<spawn name="FakePlayers">
<npc id="80000" x="83485" y="147998" z="-3407" heading="23509" respawnDelay="60" /> <!-- Evi -->
</spawn>
</list>