From 9652cd9dd2c5908b5fd9dc04fb93425d79c451fa Mon Sep 17 00:00:00 2001 From: Zoey76 <zoey_76@msn.com> Date: Mon, 1 Apr 2013 12:17:49 +0000 Subject: [PATCH] BETA: Dynamic translation system. * Adds server real-time translation system for player chats. * See this feature in action and upcoming full community board: http://youtu.be/EDti9WKPBC0 * Recommended quality HD/Full screen. --- .../handlers/chathandlers/ChatAll.java | 2 +- .../handlers/chathandlers/ChatAlliance.java | 2 +- .../chathandlers/ChatBattlefield.java | 2 +- .../handlers/chathandlers/ChatClan.java | 2 +- .../handlers/chathandlers/ChatHeroVoice.java | 2 +- .../handlers/chathandlers/ChatParty.java | 2 +- .../chathandlers/ChatPartyMatchRoom.java | 2 +- .../chathandlers/ChatPartyRoomAll.java | 2 +- .../chathandlers/ChatPartyRoomCommander.java | 2 +- .../handlers/chathandlers/ChatPetition.java | 2 +- .../handlers/chathandlers/ChatShout.java | 2 +- .../handlers/chathandlers/ChatTell.java | 2 +- .../handlers/chathandlers/ChatTrade.java | 2 +- .../chathandlers/ChatTranslationTool.java | 63 +++++++++++++++++++ 14 files changed, 76 insertions(+), 13 deletions(-) create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTranslationTool.java diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAll.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAll.java index 4d52ef79ab..75519e52ad 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAll.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAll.java @@ -104,7 +104,7 @@ public class ChatAll implements IChatHandler } else { - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getAppearance().getVisibleName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getAppearance().getVisibleName(), ChatTranslationTool.traslate(text)); Collection<L2PcInstance> plrs = activeChar.getKnownList().getKnownPlayers().values(); for (L2PcInstance player : plrs) { diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAlliance.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAlliance.java index 02199326af..c6acf9e27c 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAlliance.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAlliance.java @@ -46,7 +46,7 @@ public class ChatAlliance implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); activeChar.getClan().broadcastToOnlineAllyMembers(cs); } } diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatBattlefield.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatBattlefield.java index 2f99e8db07..bc89861e4d 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatBattlefield.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatBattlefield.java @@ -52,7 +52,7 @@ public class ChatBattlefield implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); for (L2PcInstance player : L2World.getInstance().getAllPlayersArray()) { if (player.getSiegeSide() == activeChar.getSiegeSide()) diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatClan.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatClan.java index 21b01fd52f..5bfebecb25 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatClan.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatClan.java @@ -50,7 +50,7 @@ public class ChatClan implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); activeChar.getClan().broadcastCSToOnlineMembers(cs, activeChar); } } diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatHeroVoice.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatHeroVoice.java index 625f5ca099..e6b7c9c63f 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatHeroVoice.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatHeroVoice.java @@ -58,8 +58,8 @@ public class ChatHeroVoice implements IChatHandler activeChar.sendMessage("Action failed. Heroes are only able to speak in the global channel once every 10 seconds."); return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); for (L2PcInstance player : L2World.getInstance().getAllPlayersArray()) { if ((player != null) && !BlockList.isBlocked(player, activeChar)) diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatParty.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatParty.java index 269f67eae6..210df190dd 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatParty.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatParty.java @@ -50,7 +50,7 @@ public class ChatParty implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); activeChar.getParty().broadcastCreatureSay(cs, activeChar); } } diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyMatchRoom.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyMatchRoom.java index 272da61c22..fd810dc8fd 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyMatchRoom.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyMatchRoom.java @@ -55,7 +55,7 @@ public class ChatPartyMatchRoom implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); for (L2PcInstance _member : _room.getPartyMembers()) { _member.sendPacket(cs); diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomAll.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomAll.java index d8dcf5eb9d..e0b891b274 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomAll.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomAll.java @@ -52,7 +52,7 @@ public class ChatPartyRoomAll implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); activeChar.getParty().getCommandChannel().broadcastCreatureSay(cs, activeChar); } } diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomCommander.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomCommander.java index 955bf826e0..87477370d7 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomCommander.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomCommander.java @@ -52,7 +52,7 @@ public class ChatPartyRoomCommander implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); activeChar.getParty().getCommandChannel().broadcastCreatureSay(cs, activeChar); } } diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPetition.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPetition.java index 7e3d0f1166..3dd64c0ef8 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPetition.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPetition.java @@ -55,7 +55,7 @@ public class ChatPetition implements IChatHandler return; } - PetitionManager.getInstance().sendActivePetitionMessage(activeChar, text); + PetitionManager.getInstance().sendActivePetitionMessage(activeChar, ChatTranslationTool.traslate(text)); } /** diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatShout.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatShout.java index 62c0aeb6a3..7a3746c405 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatShout.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatShout.java @@ -52,7 +52,7 @@ public class ChatShout implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); L2PcInstance[] pls = L2World.getInstance().getAllPlayersArray(); diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTell.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTell.java index 023442f6e6..7c5d8d678a 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTell.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTell.java @@ -63,7 +63,7 @@ public class ChatTell implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); L2PcInstance receiver = null; receiver = L2World.getInstance().getPlayer(target); diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTrade.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTrade.java index 1a30ca11d7..59dbc2f7e8 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTrade.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTrade.java @@ -52,7 +52,7 @@ public class ChatTrade implements IChatHandler return; } - CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); + CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text)); L2PcInstance[] pls = L2World.getInstance().getAllPlayersArray(); diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTranslationTool.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTranslationTool.java new file mode 100644 index 0000000000..96fde80d50 --- /dev/null +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTranslationTool.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2004-2013 L2J DataPack + * + * This file is part of L2J DataPack. + * + * L2J DataPack 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. + * + * L2J DataPack is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package handlers.chathandlers; + +import java.util.Arrays; +import java.util.List; + +import com.l2jserver.util.Rnd; + +/** + * Translation tool. + * @author Zoey76 + */ +public class ChatTranslationTool +{ + private static final List<Character> TRANSLATION_TABLE = Arrays.asList('@', '8', '(', '9', '3', 'F', '6', 'h', '|', 'j', 'k', 'L', 'm', 'n', '0', 'p', 'q', 'R', '$', '7', 'u', 'v', 'W', '%', 'y', 'z'); + + protected static String traslate(String text) + { + final StringBuilder result = new StringBuilder(text.length() + 10); + Character x; + for (char c : text.toCharArray()) + { + x = getChar(c); + if (Character.isLetter(x) && Rnd.nextBoolean()) + { + x = Character.isUpperCase(x) ? Character.toLowerCase(x) : Character.toUpperCase(x); + } + result.append(x); + } + return result.toString(); + } + + private static final Character getChar(char c) + { + int index = -1; + if ((c > 96) && (c < 123)) + { + index = c - 97; + } + else if ((c > 64) && (c < 91)) + { + index = c - 65; + } + return index < 0 ? c : TRANSLATION_TABLE.get(index); + } +} \ No newline at end of file -- GitLab