MoparClassic/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/FriendHandler.java

88 lines
3.0 KiB
Java

package org.moparscape.msc.ls.packethandler.loginserver;
import java.sql.SQLException;
import org.apache.mina.common.IoSession;
import org.moparscape.msc.ls.Server;
import org.moparscape.msc.ls.model.PlayerSave;
import org.moparscape.msc.ls.model.World;
import org.moparscape.msc.ls.net.LSPacket;
import org.moparscape.msc.ls.net.Packet;
import org.moparscape.msc.ls.packethandler.PacketHandler;
public class FriendHandler implements PacketHandler {
public void handlePacket(Packet p, IoSession session) throws Exception {
World world = (World) session.getAttachment();
Server server = Server.getServer();
long user = p.readLong();
long friend = p.readLong();
World w;
PlayerSave save = server.findSave(user, world);
switch (((LSPacket) p).getID()) {
case 10: // Send PM
boolean avoidBlock = p.readByte() == 1;
byte[] message = p.getRemainingData();
w = server.findWorld(friend);
if (w != null) {
w.getActionSender().sendPM(user, friend, avoidBlock, message);
}
break;
case 11: // Add friend
try {
save.addFriend(friend);
Server.db.updateQuery("INSERT INTO `pk_friends`(`user`, `friend`) VALUES('" + user + "', '" + friend + "')");
if (Server.db.getQuery("SELECT 1 FROM `pk_players` AS p LEFT JOIN `pk_friends` AS f ON f.user=p.user WHERE (p.block_private=0 OR f.friend='" + user + "') AND p.user='" + friend + "'").next()) {
w = server.findWorld(friend);
if (w != null) {
world.getActionSender().friendLogin(user, friend, w.getID());
}
}
if (Server.db.getQuery("SELECT 1 FROM `pk_players` AS p LEFT JOIN `pk_friends` AS f ON f.friend=p.user WHERE p.block_private=1 AND f.user='" + friend + "' AND p.user='" + user + "'").next()) {
w = server.findWorld(friend);
if (w != null) {
w.getActionSender().friendLogin(friend, user, world.getID());
}
}
} catch (SQLException e) {
Server.error(e.getMessage());
}
break;
case 12: // Remove friend
try {
save.removeFriend(friend);
Server.db.updateQuery("DELETE FROM `pk_friends` WHERE `user` LIKE '" + user + "' AND `friend` LIKE '" + friend + "'");
if (Server.db.getQuery("SELECT 1 FROM `pk_players` WHERE block_private=1 AND user='" + user + "'").next()) {
w = server.findWorld(friend);
if (w != null) {
w.getActionSender().friendLogout(friend, user);
}
}
} catch (SQLException e) {
Server.error(e.getMessage());
}
break;
case 13: // Add ignore
try {
save.addIgnore(friend);
Server.db.updateQuery("INSERT INTO `pk_ignores`(`user`, `ignore`) VALUES('" + user + "', '" + friend + "')");
} catch (SQLException e) {
Server.error(e.getMessage());
}
break;
case 14: // Remove ignore
try {
save.removeIgnore(friend);
Server.db.updateQuery("DELETE FROM `pk_ignores` WHERE `user` LIKE '" + user + "' AND `ignore` LIKE '" + friend + "'");
} catch (SQLException e) {
Server.error(e.getMessage());
}
break;
}
}
}