From c7af125afc7a4440bc5a7a7bcb253f7da4367b3f Mon Sep 17 00:00:00 2001 From: P0nk Date: Thu, 11 Aug 2022 11:32:15 +0200 Subject: [PATCH] Remove FaceExpressionService Face expressions are automatically defaulted back after 5 seconds by the client, anyway --- src/main/java/client/Character.java | 9 +- src/main/java/net/server/channel/Channel.java | 7 - .../task/channel/FaceExpressionService.java | 122 ------------------ .../server/services/type/ChannelServices.java | 1 - src/main/java/server/maps/MapleMap.java | 4 - 5 files changed, 3 insertions(+), 140 deletions(-) delete mode 100644 src/main/java/net/server/services/task/channel/FaceExpressionService.java diff --git a/src/main/java/client/Character.java b/src/main/java/client/Character.java index ec324f9927..6b72085e54 100644 --- a/src/main/java/client/Character.java +++ b/src/main/java/client/Character.java @@ -52,9 +52,7 @@ import net.server.guild.Alliance; import net.server.guild.Guild; import net.server.guild.GuildCharacter; import net.server.guild.GuildPackets; -import net.server.services.task.channel.FaceExpressionService; import net.server.services.task.world.CharacterSaveService; -import net.server.services.type.ChannelServices; import net.server.services.type.WorldServices; import net.server.world.*; import org.slf4j.Logger; @@ -2754,11 +2752,10 @@ public class Character extends AbstractCharacterObject { public void changeFaceExpression(int emote) { long timeNow = Server.getInstance().getCurrentTime(); - if (timeNow - lastExpression > 2000) { + // Client allows changing every 2 seconds. Give it a little bit of overhead for packet delays. + if (timeNow - lastExpression > 1500) { lastExpression = timeNow; - - FaceExpressionService service = (FaceExpressionService) client.getChannelServer().getServiceAccess(ChannelServices.FACE_EXPRESSION); - service.registerFaceExpression(map, this, emote); + getMap().broadcastMessage(this, PacketCreator.facialExpression(this, emote), false); } } diff --git a/src/main/java/net/server/channel/Channel.java b/src/main/java/net/server/channel/Channel.java index feb22becb8..e1c4daf9aa 100644 --- a/src/main/java/net/server/channel/Channel.java +++ b/src/main/java/net/server/channel/Channel.java @@ -109,9 +109,6 @@ public final class Channel { private final MonitoredReentrantReadWriteLock merchantLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.MERCHANT, true); private final MonitoredReadLock merchRlock = MonitoredReadLockFactory.createLock(merchantLock); private final MonitoredWriteLock merchWlock = MonitoredWriteLockFactory.createLock(merchantLock); - - private final MonitoredReentrantLock[] faceLock = new MonitoredReentrantLock[YamlConfig.config.server.CHANNEL_LOCKS]; - private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHANNEL, true); public Channel(final int world, final int channel, long startTime) { @@ -224,10 +221,6 @@ public final class Channel { } private void emptyLocks() { - for (int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { - faceLock[i] = faceLock[i].dispose(); - } - lock = lock.dispose(); } diff --git a/src/main/java/net/server/services/task/channel/FaceExpressionService.java b/src/main/java/net/server/services/task/channel/FaceExpressionService.java deleted file mode 100644 index 98ea9c8261..0000000000 --- a/src/main/java/net/server/services/task/channel/FaceExpressionService.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - This file is part of the HeavenMS MapleStory Server - Copyleft (L) 2016 - 2019 RonanLana - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation version 3 as published by - the Free Software Foundation. You may not use, modify or distribute - this program under any other version of the GNU Affero General Public - License. - - 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ -package net.server.services.task.channel; - -import client.Character; -import config.YamlConfig; -import net.server.audit.LockCollector; -import net.server.audit.locks.MonitoredLockType; -import net.server.audit.locks.MonitoredReentrantLock; -import net.server.audit.locks.factory.MonitoredReentrantLockFactory; -import net.server.services.BaseScheduler; -import net.server.services.BaseService; -import server.maps.MapleMap; -import tools.PacketCreator; - -import java.util.Collections; - -/** - * @author Ronan - */ -public class FaceExpressionService extends BaseService { - - private final FaceExpressionScheduler[] faceExpressionSchedulers = new FaceExpressionScheduler[YamlConfig.config.server.CHANNEL_LOCKS]; - private final MonitoredReentrantLock[] faceLock = new MonitoredReentrantLock[YamlConfig.config.server.CHANNEL_LOCKS]; - - public FaceExpressionService() { - for (int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { - faceLock[i] = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHANNEL_FACEEXPRS, true); - faceExpressionSchedulers[i] = new FaceExpressionScheduler(faceLock[i]); - } - } - - private void emptyLocks() { - for (int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { - faceLock[i] = faceLock[i].dispose(); - } - } - - private void disposeLocks() { - LockCollector.getInstance().registerDisposeAction(() -> emptyLocks()); - } - - @Override - public void dispose() { - for (int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { - if (faceExpressionSchedulers[i] != null) { - faceExpressionSchedulers[i].dispose(); - faceExpressionSchedulers[i] = null; - } - } - - disposeLocks(); - } - - public void registerFaceExpression(final MapleMap map, final Character chr, int emote) { - int lockid = getChannelSchedulerIndex(map.getId()); - - Runnable cancelAction = () -> { - if (chr.isLoggedinWorld()) { - map.broadcastMessage(chr, PacketCreator.facialExpression(chr, 0), false); - } - }; - - faceLock[lockid].lock(); - try { - if (!chr.isLoggedinWorld()) { - return; - } - - faceExpressionSchedulers[lockid].registerFaceExpression(chr.getId(), cancelAction); - } finally { - faceLock[lockid].unlock(); - } - - map.broadcastMessage(chr, PacketCreator.facialExpression(chr, emote), false); - } - - public void unregisterFaceExpression(int mapid, Character chr) { - int lockid = getChannelSchedulerIndex(mapid); - - faceLock[lockid].lock(); - try { - faceExpressionSchedulers[lockid].unregisterFaceExpression(chr.getId()); - } finally { - faceLock[lockid].unlock(); - } - } - - private class FaceExpressionScheduler extends BaseScheduler { - - public FaceExpressionScheduler(final MonitoredReentrantLock channelFaceLock) { - super(MonitoredLockType.CHANNEL_FACESCHDL, Collections.singletonList(channelFaceLock)); - } - - public void registerFaceExpression(Integer characterId, Runnable runAction) { - registerEntry(characterId, runAction, 5000); - } - - public void unregisterFaceExpression(Integer characterId) { - interruptEntry(characterId); - } - - } - -} diff --git a/src/main/java/net/server/services/type/ChannelServices.java b/src/main/java/net/server/services/type/ChannelServices.java index aedebeb1ce..bd3cadf9b2 100644 --- a/src/main/java/net/server/services/type/ChannelServices.java +++ b/src/main/java/net/server/services/type/ChannelServices.java @@ -33,7 +33,6 @@ public enum ChannelServices implements ServiceType { MOB_ANIMATION(MobAnimationService.class), MOB_CLEAR_SKILL(MobClearSkillService.class), MOB_MIST(MobMistService.class), - FACE_EXPRESSION(FaceExpressionService.class), EVENT(EventService.class), OVERALL(OverallService.class); diff --git a/src/main/java/server/maps/MapleMap.java b/src/main/java/server/maps/MapleMap.java index 0b7064fd47..d0db25fd6b 100644 --- a/src/main/java/server/maps/MapleMap.java +++ b/src/main/java/server/maps/MapleMap.java @@ -47,7 +47,6 @@ import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.audit.locks.factory.MonitoredWriteLockFactory; import net.server.channel.Channel; import net.server.coordinator.world.MonsterAggroCoordinator; -import net.server.services.task.channel.FaceExpressionService; import net.server.services.task.channel.MobMistService; import net.server.services.task.channel.OverallService; import net.server.services.type.ChannelServices; @@ -2677,9 +2676,6 @@ public class MapleMap { public void removePlayer(Character chr) { Channel cserv = chr.getClient().getChannelServer(); - - FaceExpressionService service = (FaceExpressionService) this.getChannelServer().getServiceAccess(ChannelServices.FACE_EXPRESSION); - service.unregisterFaceExpression(mapid, chr); chr.unregisterChairBuff(); Party party = chr.getParty();