Addition of Shared Location action.
Contributed by nasseka.
This commit is contained in:
@@ -677,7 +677,7 @@ ResumeAutoPlay = False
|
||||
|
||||
Share loction L-Coin cost.
|
||||
# Default: 50
|
||||
ShareLocationLcoinCost = 1000
|
||||
ShareLocationLcoinCost = 50
|
||||
|
||||
# Teleport share location L-Coin cost.
|
||||
# Default: 400
|
||||
|
@@ -21,6 +21,8 @@ import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
@@ -35,7 +37,7 @@ public class ChatAlliance implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if ((activeChar.getClan() == null) || ((activeChar.getClan() != null) && (activeChar.getClan().getAllyId() == 0)))
|
||||
{
|
||||
@@ -53,7 +55,25 @@ public class ChatAlliance implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getClan().broadcastToOnlineAllyMembers(new CreatureSay(activeChar, type, activeChar.getName(), text));
|
||||
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
activeChar.getClan().broadcastToOnlineAllyMembers(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -21,6 +21,8 @@ import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
@@ -36,7 +38,7 @@ public class ChatClan implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.getClan() == null)
|
||||
{
|
||||
@@ -54,7 +56,25 @@ public class ChatClan implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getClan().broadcastCSToOnlineMembers(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
activeChar.getClan().broadcastCSToOnlineMembers(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -27,6 +27,8 @@ import org.l2jmobius.gameserver.handler.VoicedCommandHandler;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -43,7 +45,7 @@ public class ChatGeneral implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String paramsValue, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String paramsValue, String text, boolean shareLocation)
|
||||
{
|
||||
boolean vcdUsed = false;
|
||||
if (text.startsWith("."))
|
||||
@@ -87,8 +89,26 @@ public class ChatGeneral implements IChatHandler
|
||||
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));
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getAppearance().getVisibleName(), text, shareLocation);
|
||||
final CreatureSay csRandom = new CreatureSay(activeChar, type, activeChar.getAppearance().getVisibleName(), ChatRandomizer.randomize(text), shareLocation);
|
||||
|
||||
World.getInstance().forEachVisibleObjectInRange(activeChar, Player.class, 1250, player ->
|
||||
{
|
||||
if ((player != null) && !BlockList.isBlocked(player, activeChar))
|
||||
|
@@ -38,7 +38,7 @@ public class ChatHeroVoice implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (!activeChar.isHero() && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS))
|
||||
{
|
||||
@@ -62,7 +62,7 @@ public class ChatHeroVoice implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
for (Player player : World.getInstance().getPlayers())
|
||||
{
|
||||
if ((player != null) && !BlockList.isBlocked(player, activeChar))
|
||||
|
@@ -21,6 +21,8 @@ import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
@@ -36,7 +38,7 @@ public class ChatParty implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (!activeChar.isInParty())
|
||||
{
|
||||
@@ -54,7 +56,25 @@ public class ChatParty implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getParty().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
activeChar.getParty().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -37,7 +37,7 @@ public class ChatPartyMatchRoom implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
final MatchingRoom room = activeChar.getMatchingRoom();
|
||||
if (room != null)
|
||||
@@ -53,7 +53,7 @@ public class ChatPartyMatchRoom implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
for (Player _member : room.getMembers())
|
||||
{
|
||||
if (Config.FACTION_SYSTEM_ENABLED)
|
||||
|
@@ -36,7 +36,7 @@ public class ChatPartyRoomAll implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isInParty() && activeChar.getParty().isInCommandChannel() && activeChar.getParty().isLeader(activeChar))
|
||||
{
|
||||
@@ -50,7 +50,7 @@ public class ChatPartyRoomAll implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -36,7 +36,7 @@ public class ChatPartyRoomCommander implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isInParty() && activeChar.getParty().isInCommandChannel() && activeChar.getParty().getCommandChannel().getLeader().equals(activeChar))
|
||||
{
|
||||
@@ -50,7 +50,7 @@ public class ChatPartyRoomCommander implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -37,7 +37,7 @@ public class ChatPetition implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
|
@@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -40,7 +42,7 @@ public class ChatShout implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
@@ -58,7 +60,24 @@ public class ChatShout implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
if (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("gm") && activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)))
|
||||
{
|
||||
final int region = MapRegionManager.getInstance().getMapRegionLocId(activeChar);
|
||||
|
@@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -40,7 +42,7 @@ public class ChatTrade implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
@@ -58,7 +60,24 @@ public class ChatTrade implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
if (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("gm") && activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)))
|
||||
{
|
||||
final int region = MapRegionManager.getInstance().getMapRegionLocId(activeChar);
|
||||
|
@@ -41,7 +41,7 @@ public class ChatWhisper implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
|
@@ -27,6 +27,8 @@ import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExWorldChatCnt;
|
||||
@@ -46,7 +48,7 @@ public class ChatWorld implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (!Config.ENABLE_WORLD_CHAT)
|
||||
{
|
||||
@@ -77,6 +79,14 @@ public class ChatWorld implements IChatHandler
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.YOU_HAVE_SPENT_YOUR_WORLD_CHAT_QUOTA_FOR_THE_DAY_IT_IS_RESET_DAILY_AT_7_A_M);
|
||||
}
|
||||
else if (shareLocation && (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
}
|
||||
else if (shareLocation && ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE)))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Verify if player is not spaming.
|
||||
@@ -93,7 +103,12 @@ public class ChatWorld implements IChatHandler
|
||||
}
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
if (shareLocation)
|
||||
{
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
if (Config.FACTION_SYSTEM_ENABLED && Config.FACTION_SPECIFIC_CHAT)
|
||||
{
|
||||
if (activeChar.isGood())
|
||||
|
@@ -2180,8 +2180,8 @@ public class Config
|
||||
ENABLE_AUTO_ITEM = generalConfig.getBoolean("EnableAutoItem", true);
|
||||
AUTO_PLAY_ATTACK_ACTION = generalConfig.getBoolean("AutoPlayAttackAction", true);
|
||||
RESUME_AUTO_PLAY = generalConfig.getBoolean("ResumeAutoPlay", false);
|
||||
SHARING_LOCATION_COST = generalConfig.getInt("ShareLocationLcoinCost", 1);
|
||||
TELEPORT_SHARE_LOCATION_COST = generalConfig.getInt("TeleportShareLocationLcoinCost", 1);
|
||||
SHARING_LOCATION_COST = generalConfig.getInt("ShareLocationLcoinCost", 50);
|
||||
TELEPORT_SHARE_LOCATION_COST = generalConfig.getInt("TeleportShareLocationLcoinCost", 400);
|
||||
|
||||
// Load FloodProtector config file
|
||||
final PropertiesParser floodProtectorConfig = new PropertiesParser(FLOOD_PROTECTOR_CONFIG_FILE);
|
||||
|
@@ -139,7 +139,6 @@ import org.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ItemCommissionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankingPowerManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MailManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
||||
@@ -151,8 +150,10 @@ import org.l2jmobius.gameserver.instancemanager.PremiumManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankingPowerManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
|
||||
@@ -369,6 +370,7 @@ public class GameServer
|
||||
HtmCache.getInstance();
|
||||
CrestTable.getInstance();
|
||||
TeleportListData.getInstance();
|
||||
SharedTeleportManager.getInstance();
|
||||
PetTypesListData.getInstance();
|
||||
TeleporterData.getInstance();
|
||||
TimedHuntingZoneData.getInstance();
|
||||
|
@@ -31,8 +31,9 @@ public interface IChatHandler
|
||||
* @param player
|
||||
* @param target
|
||||
* @param text
|
||||
* @param shareLocation
|
||||
*/
|
||||
void handleChat(ChatType type, Player player, String target, String text);
|
||||
void handleChat(ChatType type, Player player, String target, String text, boolean shareLocation);
|
||||
|
||||
/**
|
||||
* Returns a list of all chat types registered to this handler
|
||||
|
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.instancemanager;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
|
||||
/**
|
||||
* Shared Teleport Manager
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class SharedTeleportManager
|
||||
{
|
||||
protected static final Logger LOGGER = Logger.getLogger(SharedTeleportManager.class.getName());
|
||||
|
||||
private static final int TELEPORT_COUNT = 5;
|
||||
|
||||
private final Map<Integer, SharedTeleportHolder> _sharedTeleports = new ConcurrentHashMap<>();
|
||||
private int _lastSharedTeleportId = 0;
|
||||
|
||||
protected SharedTeleportManager()
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": initialized.");
|
||||
}
|
||||
|
||||
public SharedTeleportHolder getTeleport(int id)
|
||||
{
|
||||
return _sharedTeleports.get(id);
|
||||
}
|
||||
|
||||
public synchronized int nextId(Creature creature)
|
||||
{
|
||||
final int nextId = ++_lastSharedTeleportId;
|
||||
_sharedTeleports.put(nextId, new SharedTeleportHolder(nextId, creature.getName(), TELEPORT_COUNT, creature.getX(), creature.getY(), creature.getZ()));
|
||||
return nextId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the single instance of {@code SharedTeleportManager}.
|
||||
* @return single instance of {@code SharedTeleportManager}
|
||||
*/
|
||||
public static SharedTeleportManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final SharedTeleportManager INSTANCE = new SharedTeleportManager();
|
||||
}
|
||||
}
|
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.model.holders;
|
||||
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
|
||||
/**
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class SharedTeleportHolder
|
||||
{
|
||||
private final int _id;
|
||||
private final String _name;
|
||||
private int _count;
|
||||
private final Location _location;
|
||||
|
||||
public SharedTeleportHolder(int id, String name, int count, int x, int y, int z)
|
||||
{
|
||||
_id = id;
|
||||
_name = name;
|
||||
_count = count;
|
||||
_location = new Location(x, y, z);
|
||||
}
|
||||
|
||||
public int getId()
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
public int getCount()
|
||||
{
|
||||
return Math.max(0, _count);
|
||||
}
|
||||
|
||||
public void decrementCount()
|
||||
{
|
||||
_count -= 1;
|
||||
}
|
||||
|
||||
public Location getLocation()
|
||||
{
|
||||
return _location;
|
||||
}
|
||||
}
|
@@ -139,6 +139,7 @@ import org.l2jmobius.gameserver.network.clientpackets.shuttle.RequestShuttleGetO
|
||||
import org.l2jmobius.gameserver.network.clientpackets.shuttle.RequestShuttleGetOn;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.stats.ExResetStatusBonus;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.stats.ExSetStatusBonus;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestSharedLocationTeleport;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestSharedLocationTeleportUi;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestSharingLocationUi;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestTeleport;
|
||||
@@ -577,7 +578,7 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
// 270
|
||||
EX_SHARED_POSITION_SHARING_UI(0x1A1, ExRequestSharingLocationUi::new, ConnectionState.IN_GAME),
|
||||
EX_SHARED_POSITION_TELEPORT_UI(0x1A2, ExRequestSharedLocationTeleportUi::new, ConnectionState.IN_GAME),
|
||||
EX_SHARED_POSITION_TELEPORT(0x1A3, ExRequestSharedLocationTeleportUi::new, ConnectionState.IN_GAME),
|
||||
EX_SHARED_POSITION_TELEPORT(0x1A3, ExRequestSharedLocationTeleport::new, ConnectionState.IN_GAME),
|
||||
EX_AUTH_RECONNECT(0x1A4, null, ConnectionState.IN_GAME),
|
||||
EX_PET_EQUIP_ITEM(0x1A5, ExPetEquipItem::new, ConnectionState.IN_GAME),
|
||||
EX_PET_UNEQUIP_ITEM(0x1A6, ExPetUnequipItem::new, ConnectionState.IN_GAME),
|
||||
|
@@ -88,16 +88,18 @@ public class Say2 implements IClientIncomingPacket
|
||||
private String _text;
|
||||
private int _type;
|
||||
private String _target;
|
||||
private boolean _shareLocation;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_text = packet.readS();
|
||||
_type = packet.readD();
|
||||
_shareLocation = packet.readC() == 1;
|
||||
if (_type == ChatType.WHISPER.getClientId())
|
||||
{
|
||||
packet.readC();
|
||||
_target = packet.readS();
|
||||
_shareLocation = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -215,7 +217,7 @@ public class Say2 implements IClientIncomingPacket
|
||||
final IChatHandler handler = ChatHandler.getInstance().getHandler(chatType);
|
||||
if (handler != null)
|
||||
{
|
||||
handler.handleChat(chatType, player, _target, _text);
|
||||
handler.handleChat(chatType, player, _target, _text, _shareLocation);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.teleports;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
|
||||
/**
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class ExRequestSharedLocationTeleport implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = (packet.readD() - 1) / 256;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final Player player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final SharedTeleportHolder teleport = SharedTeleportManager.getInstance().getTeleport(_id);
|
||||
if ((teleport == null) || (teleport.getCount() == 0))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.TELEPORTATION_LIMIT_FOR_THE_COORDINATES_RECEIVED_IS_REACHED);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getName().equals(teleport.getName()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CAN_T_TELEPORT_HERE_FROM_THIS_CLIENT);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.TELEPORT_SHARE_LOCATION_COST)
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((player.getMovieHolder() != null) || player.isFishing() || player.isInInstance() || player.isOnEvent() || player.isInOlympiadMode() || player.inObserverMode() || player.isInTraingCamp() || player.isInTimedHuntingZone() || player.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_TELEPORT_RIGHT_NOW);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.TELEPORT_SHARE_LOCATION_COST, player, true))
|
||||
{
|
||||
teleport.decrementCount();
|
||||
player.abortCast();
|
||||
player.stopMove(null);
|
||||
player.teleToLocation(teleport.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
@@ -17,19 +17,24 @@
|
||||
package org.l2jmobius.gameserver.network.clientpackets.teleports;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.teleports.ExShowSharedLocationTeleportUi;
|
||||
|
||||
/**
|
||||
* @author GustavoFonseca
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class ExRequestSharedLocationTeleportUi implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = (packet.readD() - 1) / 256;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -42,6 +47,12 @@ public class ExRequestSharedLocationTeleportUi implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExShowSharedLocationTeleportUi());
|
||||
final SharedTeleportHolder teleport = SharedTeleportManager.getInstance().getTeleport(_id);
|
||||
if (teleport == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.sendPacket(new ExShowSharedLocationTeleportUi(teleport));
|
||||
}
|
||||
}
|
||||
|
@@ -42,6 +42,6 @@ public class ExRequestSharingLocationUi implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExShowSharingLocationUi());
|
||||
player.sendPacket(new ExShowSharingLocationUi());
|
||||
}
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.clan.Clan;
|
||||
@@ -40,6 +41,7 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
private int _messageId = -1;
|
||||
private int _mask;
|
||||
private List<String> _parameters;
|
||||
private boolean _shareLocation;
|
||||
|
||||
/**
|
||||
* @param sender
|
||||
@@ -49,11 +51,25 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
* @param text
|
||||
*/
|
||||
public CreatureSay(Player sender, Player receiver, String name, ChatType chatType, String text)
|
||||
{
|
||||
this(sender, receiver, name, chatType, text, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sender
|
||||
* @param receiver
|
||||
* @param name
|
||||
* @param chatType
|
||||
* @param text
|
||||
* @param shareLocation
|
||||
*/
|
||||
public CreatureSay(Player sender, Player receiver, String name, ChatType chatType, String text, boolean shareLocation)
|
||||
{
|
||||
_sender = sender;
|
||||
_senderName = name;
|
||||
_chatType = chatType;
|
||||
_text = text;
|
||||
_shareLocation = shareLocation;
|
||||
if (receiver != null)
|
||||
{
|
||||
if (receiver.getFriendList().contains(sender.getObjectId()))
|
||||
@@ -81,11 +97,17 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
}
|
||||
|
||||
public CreatureSay(Creature sender, ChatType chatType, String senderName, String text)
|
||||
{
|
||||
this(sender, chatType, senderName, text, false);
|
||||
}
|
||||
|
||||
public CreatureSay(Creature sender, ChatType chatType, String senderName, String text, boolean shareLocation)
|
||||
{
|
||||
_sender = sender;
|
||||
_chatType = chatType;
|
||||
_senderName = senderName;
|
||||
_text = text;
|
||||
_shareLocation = shareLocation;
|
||||
}
|
||||
|
||||
public CreatureSay(Creature sender, ChatType chatType, NpcStringId npcStringId)
|
||||
@@ -162,6 +184,7 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeC(0); // unknown clan byte
|
||||
}
|
||||
|
||||
final int rank = RankManager.getInstance().getPlayerGlobalRank(_sender.getActingPlayer());
|
||||
if ((rank == 0) || (rank > 100))
|
||||
{
|
||||
@@ -187,6 +210,12 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeC(0);
|
||||
}
|
||||
|
||||
if (_shareLocation)
|
||||
{
|
||||
packet.writeC(1);
|
||||
packet.writeH(SharedTeleportManager.getInstance().nextId(_sender));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -100,7 +100,7 @@ public class ExBasicActionList implements IClientOutgoingPacket
|
||||
81, 82, 83, 84,
|
||||
85, 86, 87, 88,
|
||||
89, 90, 92, 93,
|
||||
94, 96, 97,
|
||||
94, 96, 97, 99,
|
||||
1000, 1001,
|
||||
1002, 1003, 1004, 1005,
|
||||
1006, 1007, 1008, 1009,
|
||||
|
@@ -17,24 +17,33 @@
|
||||
package org.l2jmobius.gameserver.network.serverpackets.teleports;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Gustavo Fonseca
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class ExShowSharedLocationTeleportUi implements IClientOutgoingPacket
|
||||
{
|
||||
public static final ExShowSharedLocationTeleportUi STATIC_PACKET = new ExShowSharedLocationTeleportUi();
|
||||
private final SharedTeleportHolder _teleport;
|
||||
|
||||
public ExShowSharedLocationTeleportUi()
|
||||
public ExShowSharedLocationTeleportUi(SharedTeleportHolder teleport)
|
||||
{
|
||||
_teleport = teleport;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_SHARED_POSITION_TELEPORT_UI.writeId(packet);
|
||||
packet.writeString(_teleport.getName());
|
||||
packet.writeD(_teleport.getId());
|
||||
packet.writeD(_teleport.getCount());
|
||||
packet.writeH(150);
|
||||
packet.writeD(_teleport.getLocation().getX());
|
||||
packet.writeD(_teleport.getLocation().getY());
|
||||
packet.writeD(_teleport.getLocation().getZ());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -685,7 +685,7 @@ SubjugationTopicBody = Reward for being in the top of the best players in cleari
|
||||
|
||||
Share loction L-Coin cost.
|
||||
# Default: 50
|
||||
ShareLocationLcoinCost = 1000
|
||||
ShareLocationLcoinCost = 50
|
||||
|
||||
# Teleport share location L-Coin cost.
|
||||
# Default: 400
|
||||
|
@@ -21,6 +21,8 @@ import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
@@ -35,7 +37,7 @@ public class ChatAlliance implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if ((activeChar.getClan() == null) || ((activeChar.getClan() != null) && (activeChar.getClan().getAllyId() == 0)))
|
||||
{
|
||||
@@ -53,7 +55,25 @@ public class ChatAlliance implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getClan().broadcastToOnlineAllyMembers(new CreatureSay(activeChar, type, activeChar.getName(), text));
|
||||
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
activeChar.getClan().broadcastToOnlineAllyMembers(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -21,6 +21,8 @@ import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
@@ -36,7 +38,7 @@ public class ChatClan implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.getClan() == null)
|
||||
{
|
||||
@@ -54,7 +56,25 @@ public class ChatClan implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getClan().broadcastCSToOnlineMembers(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
activeChar.getClan().broadcastCSToOnlineMembers(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -27,6 +27,8 @@ import org.l2jmobius.gameserver.handler.VoicedCommandHandler;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -43,7 +45,7 @@ public class ChatGeneral implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String paramsValue, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String paramsValue, String text, boolean shareLocation)
|
||||
{
|
||||
boolean vcdUsed = false;
|
||||
if (text.startsWith("."))
|
||||
@@ -87,8 +89,26 @@ public class ChatGeneral implements IChatHandler
|
||||
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));
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getAppearance().getVisibleName(), text, shareLocation);
|
||||
final CreatureSay csRandom = new CreatureSay(activeChar, type, activeChar.getAppearance().getVisibleName(), ChatRandomizer.randomize(text), shareLocation);
|
||||
|
||||
World.getInstance().forEachVisibleObjectInRange(activeChar, Player.class, 1250, player ->
|
||||
{
|
||||
if ((player != null) && !BlockList.isBlocked(player, activeChar))
|
||||
|
@@ -38,7 +38,7 @@ public class ChatHeroVoice implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (!activeChar.isHero() && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS))
|
||||
{
|
||||
@@ -62,7 +62,7 @@ public class ChatHeroVoice implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
for (Player player : World.getInstance().getPlayers())
|
||||
{
|
||||
if ((player != null) && !BlockList.isBlocked(player, activeChar))
|
||||
|
@@ -21,6 +21,8 @@ import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
@@ -36,7 +38,7 @@ public class ChatParty implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (!activeChar.isInParty())
|
||||
{
|
||||
@@ -54,7 +56,25 @@ public class ChatParty implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getParty().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
activeChar.getParty().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -37,7 +37,7 @@ public class ChatPartyMatchRoom implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
final MatchingRoom room = activeChar.getMatchingRoom();
|
||||
if (room != null)
|
||||
@@ -53,7 +53,7 @@ public class ChatPartyMatchRoom implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
for (Player _member : room.getMembers())
|
||||
{
|
||||
if (Config.FACTION_SYSTEM_ENABLED)
|
||||
|
@@ -36,7 +36,7 @@ public class ChatPartyRoomAll implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isInParty() && activeChar.getParty().isInCommandChannel() && activeChar.getParty().isLeader(activeChar))
|
||||
{
|
||||
@@ -50,7 +50,7 @@ public class ChatPartyRoomAll implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -36,7 +36,7 @@ public class ChatPartyRoomCommander implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isInParty() && activeChar.getParty().isInCommandChannel() && activeChar.getParty().getCommandChannel().getLeader().equals(activeChar))
|
||||
{
|
||||
@@ -50,7 +50,7 @@ public class ChatPartyRoomCommander implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -37,7 +37,7 @@ public class ChatPetition implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
|
@@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -40,7 +42,7 @@ public class ChatShout implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
@@ -58,7 +60,24 @@ public class ChatShout implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
if (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("gm") && activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)))
|
||||
{
|
||||
final int region = MapRegionManager.getInstance().getMapRegionLocId(activeChar);
|
||||
|
@@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -40,7 +42,7 @@ public class ChatTrade implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
@@ -58,7 +60,24 @@ public class ChatTrade implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
if (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("gm") && activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)))
|
||||
{
|
||||
final int region = MapRegionManager.getInstance().getMapRegionLocId(activeChar);
|
||||
|
@@ -41,7 +41,7 @@ public class ChatWhisper implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
|
@@ -27,6 +27,8 @@ import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExWorldChatCnt;
|
||||
@@ -46,7 +48,7 @@ public class ChatWorld implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (!Config.ENABLE_WORLD_CHAT)
|
||||
{
|
||||
@@ -77,6 +79,14 @@ public class ChatWorld implements IChatHandler
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.YOU_HAVE_SPENT_YOUR_WORLD_CHAT_QUOTA_FOR_THE_DAY_IT_IS_RESET_DAILY_AT_7_A_M);
|
||||
}
|
||||
else if (shareLocation && (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
}
|
||||
else if (shareLocation && ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE)))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Verify if player is not spaming.
|
||||
@@ -93,7 +103,12 @@ public class ChatWorld implements IChatHandler
|
||||
}
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
if (shareLocation)
|
||||
{
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
if (Config.FACTION_SYSTEM_ENABLED && Config.FACTION_SPECIFIC_CHAT)
|
||||
{
|
||||
if (activeChar.isGood())
|
||||
|
@@ -2281,8 +2281,8 @@ public class Config
|
||||
RESUME_AUTO_PLAY = generalConfig.getBoolean("ResumeAutoPlay", false);
|
||||
SUBJUGATION_TOPIC_BODY = generalConfig.getString("SubjugationTopicBody", "Reward for being in the top of the best players in clearing the lands of Aden");
|
||||
SUBJUGATION_TOPIC_HEADER = generalConfig.getString("SubjugationTopicHeader", "Purge reward");
|
||||
SHARING_LOCATION_COST = generalConfig.getInt("ShareLocationLcoinCost", 1);
|
||||
TELEPORT_SHARE_LOCATION_COST = generalConfig.getInt("TeleportShareLocationLcoinCost", 1);
|
||||
SHARING_LOCATION_COST = generalConfig.getInt("ShareLocationLcoinCost", 50);
|
||||
TELEPORT_SHARE_LOCATION_COST = generalConfig.getInt("TeleportShareLocationLcoinCost", 400);
|
||||
|
||||
// Load FloodProtector config file
|
||||
final PropertiesParser floodProtectorConfig = new PropertiesParser(FLOOD_PROTECTOR_CONFIG_FILE);
|
||||
|
@@ -143,7 +143,6 @@ import org.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ItemCommissionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankingPowerManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MailManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
||||
@@ -156,8 +155,10 @@ import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.PurgeRankingManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankingPowerManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
|
||||
@@ -379,6 +380,7 @@ public class GameServer
|
||||
HtmCache.getInstance();
|
||||
CrestTable.getInstance();
|
||||
TeleportListData.getInstance();
|
||||
SharedTeleportManager.getInstance();
|
||||
PetTypesListData.getInstance();
|
||||
TeleporterData.getInstance();
|
||||
TimedHuntingZoneData.getInstance();
|
||||
|
@@ -31,8 +31,9 @@ public interface IChatHandler
|
||||
* @param player
|
||||
* @param target
|
||||
* @param text
|
||||
* @param shareLocation
|
||||
*/
|
||||
void handleChat(ChatType type, Player player, String target, String text);
|
||||
void handleChat(ChatType type, Player player, String target, String text, boolean shareLocation);
|
||||
|
||||
/**
|
||||
* Returns a list of all chat types registered to this handler
|
||||
|
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.instancemanager;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
|
||||
/**
|
||||
* Shared Teleport Manager
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class SharedTeleportManager
|
||||
{
|
||||
protected static final Logger LOGGER = Logger.getLogger(SharedTeleportManager.class.getName());
|
||||
|
||||
private static final int TELEPORT_COUNT = 5;
|
||||
|
||||
private final Map<Integer, SharedTeleportHolder> _sharedTeleports = new ConcurrentHashMap<>();
|
||||
private int _lastSharedTeleportId = 0;
|
||||
|
||||
protected SharedTeleportManager()
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": initialized.");
|
||||
}
|
||||
|
||||
public SharedTeleportHolder getTeleport(int id)
|
||||
{
|
||||
return _sharedTeleports.get(id);
|
||||
}
|
||||
|
||||
public synchronized int nextId(Creature creature)
|
||||
{
|
||||
final int nextId = ++_lastSharedTeleportId;
|
||||
_sharedTeleports.put(nextId, new SharedTeleportHolder(nextId, creature.getName(), TELEPORT_COUNT, creature.getX(), creature.getY(), creature.getZ()));
|
||||
return nextId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the single instance of {@code SharedTeleportManager}.
|
||||
* @return single instance of {@code SharedTeleportManager}
|
||||
*/
|
||||
public static SharedTeleportManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final SharedTeleportManager INSTANCE = new SharedTeleportManager();
|
||||
}
|
||||
}
|
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.model.holders;
|
||||
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
|
||||
/**
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class SharedTeleportHolder
|
||||
{
|
||||
private final int _id;
|
||||
private final String _name;
|
||||
private int _count;
|
||||
private final Location _location;
|
||||
|
||||
public SharedTeleportHolder(int id, String name, int count, int x, int y, int z)
|
||||
{
|
||||
_id = id;
|
||||
_name = name;
|
||||
_count = count;
|
||||
_location = new Location(x, y, z);
|
||||
}
|
||||
|
||||
public int getId()
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
public int getCount()
|
||||
{
|
||||
return Math.max(0, _count);
|
||||
}
|
||||
|
||||
public void decrementCount()
|
||||
{
|
||||
_count -= 1;
|
||||
}
|
||||
|
||||
public Location getLocation()
|
||||
{
|
||||
return _location;
|
||||
}
|
||||
}
|
@@ -157,6 +157,7 @@ import org.l2jmobius.gameserver.network.clientpackets.subjugation.RequestSubjuga
|
||||
import org.l2jmobius.gameserver.network.clientpackets.subjugation.RequestSubjugationGachaUI;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.subjugation.RequestSubjugationList;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.subjugation.RequestSubjugationRanking;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestSharedLocationTeleport;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestSharedLocationTeleportUi;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestSharingLocationUi;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestTeleport;
|
||||
@@ -595,7 +596,7 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
// 270
|
||||
EX_SHARED_POSITION_SHARING_UI(0x1A1, ExRequestSharingLocationUi::new, ConnectionState.IN_GAME),
|
||||
EX_SHARED_POSITION_TELEPORT_UI(0x1A2, ExRequestSharedLocationTeleportUi::new, ConnectionState.IN_GAME),
|
||||
EX_SHARED_POSITION_TELEPORT(0x1A3, ExRequestSharedLocationTeleportUi::new, ConnectionState.IN_GAME),
|
||||
EX_SHARED_POSITION_TELEPORT(0x1A3, ExRequestSharedLocationTeleport::new, ConnectionState.IN_GAME),
|
||||
EX_AUTH_RECONNECT(0x1A4, null, ConnectionState.IN_GAME),
|
||||
EX_PET_EQUIP_ITEM(0x1A5, ExPetEquipItem::new, ConnectionState.IN_GAME),
|
||||
EX_PET_UNEQUIP_ITEM(0x1A6, ExPetUnequipItem::new, ConnectionState.IN_GAME),
|
||||
|
@@ -88,16 +88,18 @@ public class Say2 implements IClientIncomingPacket
|
||||
private String _text;
|
||||
private int _type;
|
||||
private String _target;
|
||||
private boolean _shareLocation;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_text = packet.readS();
|
||||
_type = packet.readD();
|
||||
_shareLocation = packet.readC() == 1;
|
||||
if (_type == ChatType.WHISPER.getClientId())
|
||||
{
|
||||
packet.readC();
|
||||
_target = packet.readS();
|
||||
_shareLocation = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -215,7 +217,7 @@ public class Say2 implements IClientIncomingPacket
|
||||
final IChatHandler handler = ChatHandler.getInstance().getHandler(chatType);
|
||||
if (handler != null)
|
||||
{
|
||||
handler.handleChat(chatType, player, _target, _text);
|
||||
handler.handleChat(chatType, player, _target, _text, _shareLocation);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.teleports;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
|
||||
/**
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class ExRequestSharedLocationTeleport implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = (packet.readD() - 1) / 256;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final Player player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final SharedTeleportHolder teleport = SharedTeleportManager.getInstance().getTeleport(_id);
|
||||
if ((teleport == null) || (teleport.getCount() == 0))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.TELEPORTATION_LIMIT_FOR_THE_COORDINATES_RECEIVED_IS_REACHED);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getName().equals(teleport.getName()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_TELEPORT_TO_YOURSELF);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.TELEPORT_SHARE_LOCATION_COST)
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((player.getMovieHolder() != null) || player.isFishing() || player.isInInstance() || player.isOnEvent() || player.isInOlympiadMode() || player.inObserverMode() || player.isInTraingCamp() || player.isInTimedHuntingZone() || player.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_TELEPORT_RIGHT_NOW);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.TELEPORT_SHARE_LOCATION_COST, player, true))
|
||||
{
|
||||
teleport.decrementCount();
|
||||
player.abortCast();
|
||||
player.stopMove(null);
|
||||
player.teleToLocation(teleport.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
@@ -17,19 +17,24 @@
|
||||
package org.l2jmobius.gameserver.network.clientpackets.teleports;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.teleports.ExShowSharedLocationTeleportUi;
|
||||
|
||||
/**
|
||||
* @author GustavoFonseca
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class ExRequestSharedLocationTeleportUi implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = (packet.readD() - 1) / 256;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -42,6 +47,12 @@ public class ExRequestSharedLocationTeleportUi implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExShowSharedLocationTeleportUi());
|
||||
final SharedTeleportHolder teleport = SharedTeleportManager.getInstance().getTeleport(_id);
|
||||
if (teleport == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.sendPacket(new ExShowSharedLocationTeleportUi(teleport));
|
||||
}
|
||||
}
|
||||
|
@@ -42,6 +42,6 @@ public class ExRequestSharingLocationUi implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExShowSharingLocationUi());
|
||||
player.sendPacket(new ExShowSharingLocationUi());
|
||||
}
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.clan.Clan;
|
||||
@@ -40,6 +41,7 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
private int _messageId = -1;
|
||||
private int _mask;
|
||||
private List<String> _parameters;
|
||||
private boolean _shareLocation;
|
||||
|
||||
/**
|
||||
* @param sender
|
||||
@@ -49,11 +51,25 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
* @param text
|
||||
*/
|
||||
public CreatureSay(Player sender, Player receiver, String name, ChatType chatType, String text)
|
||||
{
|
||||
this(sender, receiver, name, chatType, text, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sender
|
||||
* @param receiver
|
||||
* @param name
|
||||
* @param chatType
|
||||
* @param text
|
||||
* @param shareLocation
|
||||
*/
|
||||
public CreatureSay(Player sender, Player receiver, String name, ChatType chatType, String text, boolean shareLocation)
|
||||
{
|
||||
_sender = sender;
|
||||
_senderName = name;
|
||||
_chatType = chatType;
|
||||
_text = text;
|
||||
_shareLocation = shareLocation;
|
||||
if (receiver != null)
|
||||
{
|
||||
if (receiver.getFriendList().contains(sender.getObjectId()))
|
||||
@@ -81,11 +97,17 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
}
|
||||
|
||||
public CreatureSay(Creature sender, ChatType chatType, String senderName, String text)
|
||||
{
|
||||
this(sender, chatType, senderName, text, false);
|
||||
}
|
||||
|
||||
public CreatureSay(Creature sender, ChatType chatType, String senderName, String text, boolean shareLocation)
|
||||
{
|
||||
_sender = sender;
|
||||
_chatType = chatType;
|
||||
_senderName = senderName;
|
||||
_text = text;
|
||||
_shareLocation = shareLocation;
|
||||
}
|
||||
|
||||
public CreatureSay(Creature sender, ChatType chatType, NpcStringId npcStringId)
|
||||
@@ -162,6 +184,7 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeC(0); // unknown clan byte
|
||||
}
|
||||
|
||||
final int rank = RankManager.getInstance().getPlayerGlobalRank(_sender.getActingPlayer());
|
||||
if ((rank == 0) || (rank > 100))
|
||||
{
|
||||
@@ -187,6 +210,12 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeC(0);
|
||||
}
|
||||
|
||||
if (_shareLocation)
|
||||
{
|
||||
packet.writeC(1);
|
||||
packet.writeH(SharedTeleportManager.getInstance().nextId(_sender));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -100,7 +100,7 @@ public class ExBasicActionList implements IClientOutgoingPacket
|
||||
81, 82, 83, 84,
|
||||
85, 86, 87, 88,
|
||||
89, 90, 92, 93,
|
||||
94, 96, 97,
|
||||
94, 96, 97, 99,
|
||||
1000, 1001,
|
||||
1002, 1003, 1004, 1005,
|
||||
1006, 1007, 1008, 1009,
|
||||
|
@@ -17,24 +17,33 @@
|
||||
package org.l2jmobius.gameserver.network.serverpackets.teleports;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Gustavo Fonseca
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class ExShowSharedLocationTeleportUi implements IClientOutgoingPacket
|
||||
{
|
||||
public static final ExShowSharedLocationTeleportUi STATIC_PACKET = new ExShowSharedLocationTeleportUi();
|
||||
private final SharedTeleportHolder _teleport;
|
||||
|
||||
public ExShowSharedLocationTeleportUi()
|
||||
public ExShowSharedLocationTeleportUi(SharedTeleportHolder teleport)
|
||||
{
|
||||
_teleport = teleport;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_SHARED_POSITION_TELEPORT_UI.writeId(packet);
|
||||
packet.writeString(_teleport.getName());
|
||||
packet.writeD(_teleport.getId());
|
||||
packet.writeD(_teleport.getCount());
|
||||
packet.writeH(150);
|
||||
packet.writeD(_teleport.getLocation().getX());
|
||||
packet.writeD(_teleport.getLocation().getY());
|
||||
packet.writeD(_teleport.getLocation().getZ());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -685,7 +685,7 @@ SubjugationTopicBody = Reward for being in the top of the best players in cleari
|
||||
|
||||
Share loction L-Coin cost.
|
||||
# Default: 50
|
||||
ShareLocationLcoinCost = 1000
|
||||
ShareLocationLcoinCost = 50
|
||||
|
||||
# Teleport share location L-Coin cost.
|
||||
# Default: 400
|
||||
|
@@ -21,6 +21,8 @@ import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
@@ -35,7 +37,7 @@ public class ChatAlliance implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if ((activeChar.getClan() == null) || ((activeChar.getClan() != null) && (activeChar.getClan().getAllyId() == 0)))
|
||||
{
|
||||
@@ -53,7 +55,25 @@ public class ChatAlliance implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getClan().broadcastToOnlineAllyMembers(new CreatureSay(activeChar, type, activeChar.getName(), text));
|
||||
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
activeChar.getClan().broadcastToOnlineAllyMembers(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -21,6 +21,8 @@ import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
@@ -36,7 +38,7 @@ public class ChatClan implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.getClan() == null)
|
||||
{
|
||||
@@ -54,7 +56,25 @@ public class ChatClan implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getClan().broadcastCSToOnlineMembers(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
activeChar.getClan().broadcastCSToOnlineMembers(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -27,6 +27,8 @@ import org.l2jmobius.gameserver.handler.VoicedCommandHandler;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -43,7 +45,7 @@ public class ChatGeneral implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String paramsValue, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String paramsValue, String text, boolean shareLocation)
|
||||
{
|
||||
boolean vcdUsed = false;
|
||||
if (text.startsWith("."))
|
||||
@@ -87,8 +89,26 @@ public class ChatGeneral implements IChatHandler
|
||||
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));
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getAppearance().getVisibleName(), text, shareLocation);
|
||||
final CreatureSay csRandom = new CreatureSay(activeChar, type, activeChar.getAppearance().getVisibleName(), ChatRandomizer.randomize(text), shareLocation);
|
||||
|
||||
World.getInstance().forEachVisibleObjectInRange(activeChar, Player.class, 1250, player ->
|
||||
{
|
||||
if ((player != null) && !BlockList.isBlocked(player, activeChar))
|
||||
|
@@ -38,7 +38,7 @@ public class ChatHeroVoice implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (!activeChar.isHero() && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS))
|
||||
{
|
||||
@@ -62,7 +62,7 @@ public class ChatHeroVoice implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
for (Player player : World.getInstance().getPlayers())
|
||||
{
|
||||
if ((player != null) && !BlockList.isBlocked(player, activeChar))
|
||||
|
@@ -21,6 +21,8 @@ import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
@@ -36,7 +38,7 @@ public class ChatParty implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (!activeChar.isInParty())
|
||||
{
|
||||
@@ -54,7 +56,25 @@ public class ChatParty implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getParty().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
activeChar.getParty().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -37,7 +37,7 @@ public class ChatPartyMatchRoom implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
final MatchingRoom room = activeChar.getMatchingRoom();
|
||||
if (room != null)
|
||||
@@ -53,7 +53,7 @@ public class ChatPartyMatchRoom implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
for (Player _member : room.getMembers())
|
||||
{
|
||||
if (Config.FACTION_SYSTEM_ENABLED)
|
||||
|
@@ -36,7 +36,7 @@ public class ChatPartyRoomAll implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isInParty() && activeChar.getParty().isInCommandChannel() && activeChar.getParty().isLeader(activeChar))
|
||||
{
|
||||
@@ -50,7 +50,7 @@ public class ChatPartyRoomAll implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -36,7 +36,7 @@ public class ChatPartyRoomCommander implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isInParty() && activeChar.getParty().isInCommandChannel() && activeChar.getParty().getCommandChannel().getLeader().equals(activeChar))
|
||||
{
|
||||
@@ -50,7 +50,7 @@ public class ChatPartyRoomCommander implements IChatHandler
|
||||
activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
|
||||
return;
|
||||
}
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text), activeChar);
|
||||
activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation), activeChar);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -37,7 +37,7 @@ public class ChatPetition implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
|
@@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -40,7 +42,7 @@ public class ChatShout implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
@@ -58,7 +60,24 @@ public class ChatShout implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
if (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("gm") && activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)))
|
||||
{
|
||||
final int region = MapRegionManager.getInstance().getMapRegionLocId(activeChar);
|
||||
|
@@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -40,7 +42,7 @@ public class ChatTrade implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
@@ -58,7 +60,24 @@ public class ChatTrade implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
if (shareLocation)
|
||||
{
|
||||
if (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST)
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
return;
|
||||
}
|
||||
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
if (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("gm") && activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)))
|
||||
{
|
||||
final int region = MapRegionManager.getInstance().getMapRegionLocId(activeChar);
|
||||
|
@@ -41,7 +41,7 @@ public class ChatWhisper implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type))
|
||||
{
|
||||
|
@@ -27,6 +27,8 @@ import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExWorldChatCnt;
|
||||
@@ -46,7 +48,7 @@ public class ChatWorld implements IChatHandler
|
||||
};
|
||||
|
||||
@Override
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text)
|
||||
public void handleChat(ChatType type, Player activeChar, String target, String text, boolean shareLocation)
|
||||
{
|
||||
if (!Config.ENABLE_WORLD_CHAT)
|
||||
{
|
||||
@@ -77,6 +79,14 @@ public class ChatWorld implements IChatHandler
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.YOU_HAVE_SPENT_YOUR_WORLD_CHAT_QUOTA_FOR_THE_DAY_IT_IS_RESET_DAILY_AT_7_A_M);
|
||||
}
|
||||
else if (shareLocation && (activeChar.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.SHARING_LOCATION_COST))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
}
|
||||
else if (shareLocation && ((activeChar.getMovieHolder() != null) || activeChar.isFishing() || activeChar.isInInstance() || activeChar.isOnEvent() || activeChar.isInOlympiadMode() || activeChar.inObserverMode() || activeChar.isInTraingCamp() || activeChar.isInTimedHuntingZone() || activeChar.isInsideZone(ZoneId.SIEGE)))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.LOCATION_CANNOT_BE_SHARED_SINCE_THE_CONDITIONS_ARE_NOT_MET);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Verify if player is not spaming.
|
||||
@@ -93,7 +103,12 @@ public class ChatWorld implements IChatHandler
|
||||
}
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text);
|
||||
if (shareLocation)
|
||||
{
|
||||
activeChar.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.SHARING_LOCATION_COST, activeChar, true);
|
||||
}
|
||||
|
||||
final CreatureSay cs = new CreatureSay(activeChar, type, activeChar.getName(), text, shareLocation);
|
||||
if (Config.FACTION_SYSTEM_ENABLED && Config.FACTION_SPECIFIC_CHAT)
|
||||
{
|
||||
if (activeChar.isGood())
|
||||
|
@@ -2316,8 +2316,8 @@ public class Config
|
||||
RESUME_AUTO_PLAY = generalConfig.getBoolean("ResumeAutoPlay", false);
|
||||
SUBJUGATION_TOPIC_BODY = generalConfig.getString("SubjugationTopicBody", "Reward for being in the top of the best players in clearing the lands of Aden");
|
||||
SUBJUGATION_TOPIC_HEADER = generalConfig.getString("SubjugationTopicHeader", "Purge reward");
|
||||
SHARING_LOCATION_COST = generalConfig.getInt("ShareLocationLcoinCost", 1);
|
||||
TELEPORT_SHARE_LOCATION_COST = generalConfig.getInt("TeleportShareLocationLcoinCost", 1);
|
||||
SHARING_LOCATION_COST = generalConfig.getInt("ShareLocationLcoinCost", 50);
|
||||
TELEPORT_SHARE_LOCATION_COST = generalConfig.getInt("TeleportShareLocationLcoinCost", 400);
|
||||
|
||||
// Load FloodProtector config file
|
||||
final PropertiesParser floodProtectorConfig = new PropertiesParser(FLOOD_PROTECTOR_CONFIG_FILE);
|
||||
|
@@ -146,7 +146,6 @@ import org.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ItemCommissionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankingPowerManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MailManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
||||
@@ -159,8 +158,10 @@ import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.PurgeRankingManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankingPowerManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
|
||||
@@ -387,6 +388,7 @@ public class GameServer
|
||||
HtmCache.getInstance();
|
||||
CrestTable.getInstance();
|
||||
TeleportListData.getInstance();
|
||||
SharedTeleportManager.getInstance();
|
||||
PetTypesListData.getInstance();
|
||||
TeleporterData.getInstance();
|
||||
TimedHuntingZoneData.getInstance();
|
||||
|
@@ -31,8 +31,9 @@ public interface IChatHandler
|
||||
* @param player
|
||||
* @param target
|
||||
* @param text
|
||||
* @param shareLocation
|
||||
*/
|
||||
void handleChat(ChatType type, Player player, String target, String text);
|
||||
void handleChat(ChatType type, Player player, String target, String text, boolean shareLocation);
|
||||
|
||||
/**
|
||||
* Returns a list of all chat types registered to this handler
|
||||
|
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.instancemanager;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
|
||||
/**
|
||||
* Shared Teleport Manager
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class SharedTeleportManager
|
||||
{
|
||||
protected static final Logger LOGGER = Logger.getLogger(SharedTeleportManager.class.getName());
|
||||
|
||||
private static final int TELEPORT_COUNT = 5;
|
||||
|
||||
private final Map<Integer, SharedTeleportHolder> _sharedTeleports = new ConcurrentHashMap<>();
|
||||
private int _lastSharedTeleportId = 0;
|
||||
|
||||
protected SharedTeleportManager()
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": initialized.");
|
||||
}
|
||||
|
||||
public SharedTeleportHolder getTeleport(int id)
|
||||
{
|
||||
return _sharedTeleports.get(id);
|
||||
}
|
||||
|
||||
public synchronized int nextId(Creature creature)
|
||||
{
|
||||
final int nextId = ++_lastSharedTeleportId;
|
||||
_sharedTeleports.put(nextId, new SharedTeleportHolder(nextId, creature.getName(), TELEPORT_COUNT, creature.getX(), creature.getY(), creature.getZ()));
|
||||
return nextId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the single instance of {@code SharedTeleportManager}.
|
||||
* @return single instance of {@code SharedTeleportManager}
|
||||
*/
|
||||
public static SharedTeleportManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final SharedTeleportManager INSTANCE = new SharedTeleportManager();
|
||||
}
|
||||
}
|
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.model.holders;
|
||||
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
|
||||
/**
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class SharedTeleportHolder
|
||||
{
|
||||
private final int _id;
|
||||
private final String _name;
|
||||
private int _count;
|
||||
private final Location _location;
|
||||
|
||||
public SharedTeleportHolder(int id, String name, int count, int x, int y, int z)
|
||||
{
|
||||
_id = id;
|
||||
_name = name;
|
||||
_count = count;
|
||||
_location = new Location(x, y, z);
|
||||
}
|
||||
|
||||
public int getId()
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
public int getCount()
|
||||
{
|
||||
return Math.max(0, _count);
|
||||
}
|
||||
|
||||
public void decrementCount()
|
||||
{
|
||||
_count -= 1;
|
||||
}
|
||||
|
||||
public Location getLocation()
|
||||
{
|
||||
return _location;
|
||||
}
|
||||
}
|
@@ -182,6 +182,7 @@ import org.l2jmobius.gameserver.network.clientpackets.subjugation.RequestSubjuga
|
||||
import org.l2jmobius.gameserver.network.clientpackets.subjugation.RequestSubjugationGachaUI;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.subjugation.RequestSubjugationList;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.subjugation.RequestSubjugationRanking;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestSharedLocationTeleport;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestSharedLocationTeleportUi;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestSharingLocationUi;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestTeleport;
|
||||
@@ -631,7 +632,7 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
// 270
|
||||
EX_SHARED_POSITION_SHARING_UI(0x1A1, ExRequestSharingLocationUi::new, ConnectionState.IN_GAME),
|
||||
EX_SHARED_POSITION_TELEPORT_UI(0x1A2, ExRequestSharedLocationTeleportUi::new, ConnectionState.IN_GAME),
|
||||
EX_SHARED_POSITION_TELEPORT(0x1A3, ExRequestSharedLocationTeleportUi::new, ConnectionState.IN_GAME),
|
||||
EX_SHARED_POSITION_TELEPORT(0x1A3, ExRequestSharedLocationTeleport::new, ConnectionState.IN_GAME),
|
||||
EX_AUTH_RECONNECT(0x1A4, null, ConnectionState.IN_GAME),
|
||||
EX_PET_EQUIP_ITEM(0x1A5, ExPetEquipItem::new, ConnectionState.IN_GAME),
|
||||
EX_PET_UNEQUIP_ITEM(0x1A6, ExPetUnequipItem::new, ConnectionState.IN_GAME),
|
||||
|
@@ -88,16 +88,18 @@ public class Say2 implements IClientIncomingPacket
|
||||
private String _text;
|
||||
private int _type;
|
||||
private String _target;
|
||||
private boolean _shareLocation;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_text = packet.readS();
|
||||
_type = packet.readD();
|
||||
_shareLocation = packet.readC() == 1;
|
||||
if (_type == ChatType.WHISPER.getClientId())
|
||||
{
|
||||
packet.readC();
|
||||
_target = packet.readS();
|
||||
_shareLocation = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -215,7 +217,7 @@ public class Say2 implements IClientIncomingPacket
|
||||
final IChatHandler handler = ChatHandler.getInstance().getHandler(chatType);
|
||||
if (handler != null)
|
||||
{
|
||||
handler.handleChat(chatType, player, _target, _text);
|
||||
handler.handleChat(chatType, player, _target, _text, _shareLocation);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.teleports;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
|
||||
/**
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class ExRequestSharedLocationTeleport implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = (packet.readD() - 1) / 256;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final Player player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final SharedTeleportHolder teleport = SharedTeleportManager.getInstance().getTeleport(_id);
|
||||
if ((teleport == null) || (teleport.getCount() == 0))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.TELEPORTATION_LIMIT_FOR_THE_COORDINATES_RECEIVED_IS_REACHED);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getName().equals(teleport.getName()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_TELEPORT_TO_YOURSELF);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < Config.TELEPORT_SHARE_LOCATION_COST)
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((player.getMovieHolder() != null) || player.isFishing() || player.isInInstance() || player.isOnEvent() || player.isInOlympiadMode() || player.inObserverMode() || player.isInTraingCamp() || player.isInTimedHuntingZone() || player.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_TELEPORT_RIGHT_NOW);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.destroyItemByItemId("Shared Location", Inventory.LCOIN_ID, Config.TELEPORT_SHARE_LOCATION_COST, player, true))
|
||||
{
|
||||
teleport.decrementCount();
|
||||
player.abortCast();
|
||||
player.stopMove(null);
|
||||
player.teleToLocation(teleport.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
@@ -17,19 +17,24 @@
|
||||
package org.l2jmobius.gameserver.network.clientpackets.teleports;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.teleports.ExShowSharedLocationTeleportUi;
|
||||
|
||||
/**
|
||||
* @author GustavoFonseca
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class ExRequestSharedLocationTeleportUi implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = (packet.readD() - 1) / 256;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -42,6 +47,12 @@ public class ExRequestSharedLocationTeleportUi implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExShowSharedLocationTeleportUi());
|
||||
final SharedTeleportHolder teleport = SharedTeleportManager.getInstance().getTeleport(_id);
|
||||
if (teleport == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.sendPacket(new ExShowSharedLocationTeleportUi(teleport));
|
||||
}
|
||||
}
|
||||
|
@@ -42,6 +42,6 @@ public class ExRequestSharingLocationUi implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExShowSharingLocationUi());
|
||||
player.sendPacket(new ExShowSharingLocationUi());
|
||||
}
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.instancemanager.MentorManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RankManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SharedTeleportManager;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.clan.Clan;
|
||||
@@ -40,6 +41,7 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
private int _messageId = -1;
|
||||
private int _mask;
|
||||
private List<String> _parameters;
|
||||
private boolean _shareLocation;
|
||||
|
||||
/**
|
||||
* @param sender
|
||||
@@ -49,11 +51,25 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
* @param text
|
||||
*/
|
||||
public CreatureSay(Player sender, Player receiver, String name, ChatType chatType, String text)
|
||||
{
|
||||
this(sender, receiver, name, chatType, text, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sender
|
||||
* @param receiver
|
||||
* @param name
|
||||
* @param chatType
|
||||
* @param text
|
||||
* @param shareLocation
|
||||
*/
|
||||
public CreatureSay(Player sender, Player receiver, String name, ChatType chatType, String text, boolean shareLocation)
|
||||
{
|
||||
_sender = sender;
|
||||
_senderName = name;
|
||||
_chatType = chatType;
|
||||
_text = text;
|
||||
_shareLocation = shareLocation;
|
||||
if (receiver != null)
|
||||
{
|
||||
if (receiver.getFriendList().contains(sender.getObjectId()))
|
||||
@@ -81,11 +97,17 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
}
|
||||
|
||||
public CreatureSay(Creature sender, ChatType chatType, String senderName, String text)
|
||||
{
|
||||
this(sender, chatType, senderName, text, false);
|
||||
}
|
||||
|
||||
public CreatureSay(Creature sender, ChatType chatType, String senderName, String text, boolean shareLocation)
|
||||
{
|
||||
_sender = sender;
|
||||
_chatType = chatType;
|
||||
_senderName = senderName;
|
||||
_text = text;
|
||||
_shareLocation = shareLocation;
|
||||
}
|
||||
|
||||
public CreatureSay(Creature sender, ChatType chatType, NpcStringId npcStringId)
|
||||
@@ -162,6 +184,7 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeC(0); // unknown clan byte
|
||||
}
|
||||
|
||||
final int rank = RankManager.getInstance().getPlayerGlobalRank(_sender.getActingPlayer());
|
||||
if ((rank == 0) || (rank > 100))
|
||||
{
|
||||
@@ -187,6 +210,12 @@ public class CreatureSay implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeC(0);
|
||||
}
|
||||
|
||||
if (_shareLocation)
|
||||
{
|
||||
packet.writeC(1);
|
||||
packet.writeH(SharedTeleportManager.getInstance().nextId(_sender));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -100,7 +100,7 @@ public class ExBasicActionList implements IClientOutgoingPacket
|
||||
81, 82, 83, 84,
|
||||
85, 86, 87, 88,
|
||||
89, 90, 92, 93,
|
||||
94, 96, 97,
|
||||
94, 96, 97, 99,
|
||||
1000, 1001,
|
||||
1002, 1003, 1004, 1005,
|
||||
1006, 1007, 1008, 1009,
|
||||
|
@@ -17,24 +17,33 @@
|
||||
package org.l2jmobius.gameserver.network.serverpackets.teleports;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.holders.SharedTeleportHolder;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Gustavo Fonseca
|
||||
* @author NasSeKa
|
||||
*/
|
||||
public class ExShowSharedLocationTeleportUi implements IClientOutgoingPacket
|
||||
{
|
||||
public static final ExShowSharedLocationTeleportUi STATIC_PACKET = new ExShowSharedLocationTeleportUi();
|
||||
private final SharedTeleportHolder _teleport;
|
||||
|
||||
public ExShowSharedLocationTeleportUi()
|
||||
public ExShowSharedLocationTeleportUi(SharedTeleportHolder teleport)
|
||||
{
|
||||
_teleport = teleport;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_SHARED_POSITION_TELEPORT_UI.writeId(packet);
|
||||
packet.writeString(_teleport.getName());
|
||||
packet.writeD(_teleport.getId());
|
||||
packet.writeD(_teleport.getCount());
|
||||
packet.writeH(150);
|
||||
packet.writeD(_teleport.getLocation().getX());
|
||||
packet.writeD(_teleport.getLocation().getY());
|
||||
packet.writeD(_teleport.getLocation().getZ());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user