From cf153159cb03a7388dd50f2891bc09e118d62cce Mon Sep 17 00:00:00 2001 From: ceikry Date: Mon, 16 May 2022 06:53:29 -0500 Subject: [PATCH] parse communication from account info --- .../communication/CommunicationInfo.java | 57 +++++++++++++++++-- .../kotlin/rs09/net/event/LoginReadEvent.kt | 2 + 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/Server/src/main/java/core/game/system/communication/CommunicationInfo.java b/Server/src/main/java/core/game/system/communication/CommunicationInfo.java index 2dee6f8ae..1e805317f 100644 --- a/Server/src/main/java/core/game/system/communication/CommunicationInfo.java +++ b/Server/src/main/java/core/game/system/communication/CommunicationInfo.java @@ -2,6 +2,8 @@ package core.game.system.communication; import core.cache.misc.buffer.ByteBufferUtils; import core.game.node.entity.player.Player; +import org.jetbrains.annotations.NotNull; +import rs09.auth.UserAccountInfo; import rs09.game.system.SystemLogger; import core.game.system.monitor.PlayerMonitor; import core.game.system.mysql.SQLTable; @@ -18,10 +20,7 @@ import core.net.packet.out.ContactPackets; import core.tools.StringUtils; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; /** @@ -634,4 +633,54 @@ public final class CommunicationInfo { public void setLootShare(boolean lootShare) { this.lootShare = lootShare; } + + public void parse(@NotNull UserAccountInfo accountInfo) { + blocked.addAll(Arrays.asList(accountInfo.getBlocked().split(","))); + clanName = accountInfo.getClanName(); + currentClan = accountInfo.getCurrentClan(); + + String clanReqs = accountInfo.getClanReqs(); + String[] tokens = clanReqs.split(","); + ClanRank rank = null; + int ordinal = 0; + for (int i = 0; i < tokens.length; i++) { + ordinal = Integer.parseInt(tokens[i]); + if (ordinal < 0 || ordinal > ClanRank.values().length -1) { + continue; + } + rank = ClanRank.values()[ordinal]; + switch (i) { + case 0: + joinRequirement = rank; + break; + case 1: + messageRequirement = rank; + break; + case 2: + if (ordinal < 3 || ordinal > 8) { + break; + } + kickRequirement = rank; + break; + case 3: + lootRequirement = rank; + break; + } + } + + String contacts = accountInfo.getContacts(); + if (!contacts.isEmpty()) { + String[] datas = contacts.split("~"); + Contact contact = null; + for (String d : datas) { + tokens = d.replace("{", "").replace("}", "").split(","); + if (tokens.length == 0) { + continue; + } + contact = new Contact(tokens[0]); + contact.setRank(ClanRank.values()[Integer.parseInt(tokens[1])]); + this.contacts.put(tokens[0], contact); + } + } + } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/net/event/LoginReadEvent.kt b/Server/src/main/kotlin/rs09/net/event/LoginReadEvent.kt index fca310685..bb2c29e0e 100644 --- a/Server/src/main/kotlin/rs09/net/event/LoginReadEvent.kt +++ b/Server/src/main/kotlin/rs09/net/event/LoginReadEvent.kt @@ -2,6 +2,7 @@ package rs09.net.event import core.game.node.entity.player.info.ClientInfo import core.game.node.entity.player.info.PlayerDetails +import core.game.system.communication.CommunicationInfo import core.net.IoReadEvent import core.net.IoSession import rs09.auth.AuthResponse @@ -31,6 +32,7 @@ class LoginReadEvent(session: IoSession?, buffer: ByteBuffer?) : IoReadEvent(ses val details = PlayerDetails(info.username) details.accountInfo = accountInfo + details.communication.parse(details.accountInfo) session.clientInfo = ClientInfo(info.displayMode, info.windowMode, info.screenWidth, info.screenHeight) session.isaacPair = info.isaacPair