Grasscutter/src/main/java/emu/grasscutter/server/packet/send/PacketGetMailItemRsp.java

81 lines
3.4 KiB
Java
Raw Normal View History

package emu.grasscutter.server.packet.send;
import emu.grasscutter.data.GameData;
import emu.grasscutter.game.inventory.GameItem;
2022-04-27 04:24:25 +00:00
import emu.grasscutter.game.mail.Mail;
import emu.grasscutter.game.player.Player;
2022-04-25 05:51:19 +00:00
import emu.grasscutter.game.props.ActionReason;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
2022-04-25 05:51:19 +00:00
import emu.grasscutter.net.proto.EquipParamOuterClass;
import emu.grasscutter.net.proto.GetMailItemRspOuterClass.GetMailItemRsp;
2022-04-25 05:51:19 +00:00
import java.util.ArrayList;
import java.util.List;
2022-04-25 05:51:19 +00:00
import java.util.stream.Collectors;
public class PacketGetMailItemRsp extends BasePacket {
public PacketGetMailItemRsp(Player player, List<Integer> mailList) {
super(PacketOpcodes.GetMailItemRsp);
2022-04-25 05:51:19 +00:00
List<Mail> claimedMessages = new ArrayList<>();
List<EquipParamOuterClass.EquipParam> claimedItems = new ArrayList<>();
2022-04-25 05:51:19 +00:00
GetMailItemRsp.Builder proto = GetMailItemRsp.newBuilder();
synchronized (player) {
boolean modified = false;
for (int mailId : mailList) {
Mail message = player.getMail(mailId);
if (!message.isAttachmentGot) {//No duplicated item
for (Mail.MailItem mailItem : message.itemList) {
EquipParamOuterClass.EquipParam.Builder item = EquipParamOuterClass.EquipParam.newBuilder();
int promoteLevel = 0;
if (mailItem.itemLevel > 80) { // 80/90
promoteLevel = 6;
} else if (mailItem.itemLevel > 70) { // 70/80
promoteLevel = 5;
} else if (mailItem.itemLevel > 60) { // 60/70
promoteLevel = 4;
} else if (mailItem.itemLevel > 50) { // 50/60
promoteLevel = 3;
} else if (mailItem.itemLevel > 40) { // 40/50
promoteLevel = 2;
} else if (mailItem.itemLevel > 20) { // 20/40
promoteLevel = 1;
}
item.setItemId(mailItem.itemId);
item.setItemNum(mailItem.itemCount);
item.setItemLevel(mailItem.itemLevel);
item.setPromoteLevel(promoteLevel);
claimedItems.add(item.build());
2022-04-25 05:51:19 +00:00
GameItem gameItem = new GameItem(GameData.getItemDataMap().get(mailItem.itemId));
gameItem.setCount(mailItem.itemCount);
gameItem.setLevel(mailItem.itemLevel);
gameItem.setPromoteLevel(promoteLevel);
player.getInventory().addItem(gameItem, ActionReason.MailAttachment);
}
2022-04-25 06:30:56 +00:00
message.isAttachmentGot = true;
claimedMessages.add(message);
2022-04-25 06:30:56 +00:00
player.replaceMailByIndex(mailId, message);
modified = true;
}
}
if(modified) {
player.save();
}
2022-04-25 05:51:19 +00:00
}
proto.addAllMailIdList(claimedMessages.stream().map(player::getMailId).collect(Collectors.toList()));
2022-04-25 05:51:19 +00:00
proto.addAllItemList(claimedItems);
this.setData(proto.build());
2022-04-25 06:30:56 +00:00
player.getSession().send(new PacketMailChangeNotify(player, claimedMessages)); // For some reason you have to also send the MailChangeNotify packet
}
}