mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-27 21:10:54 +00:00
Merge pull request #318 from Yazawazi/development
Implementing the `Player Show Avatars`
This commit is contained in:
commit
be15193bb4
17
proto/UpdatePlayerShowAvatarListReq.proto
Normal file
17
proto/UpdatePlayerShowAvatarListReq.proto
Normal file
@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
message UpdatePlayerShowAvatarListReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4093;
|
||||
}
|
||||
|
||||
repeated uint32 show_avatar_id_list = 1;
|
||||
bool is_show_avatar = 2;
|
||||
}
|
17
proto/UpdatePlayerShowAvatarListRsp.proto
Normal file
17
proto/UpdatePlayerShowAvatarListRsp.proto
Normal file
@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
message UpdatePlayerShowAvatarListRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4053;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
repeated uint32 show_avatar_id_list = 2;
|
||||
bool is_show_avatar = 3;
|
||||
}
|
@ -35,6 +35,7 @@ import emu.grasscutter.net.proto.PlayerLocationInfoOuterClass.PlayerLocationInfo
|
||||
import emu.grasscutter.net.proto.PlayerWorldLocationInfoOuterClass;
|
||||
import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture;
|
||||
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
||||
import emu.grasscutter.net.proto.SocialShowAvatarInfoOuterClass;
|
||||
import emu.grasscutter.server.game.GameServer;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.*;
|
||||
@ -93,6 +94,9 @@ public class Player {
|
||||
private int moonCardDuration;
|
||||
private Set<Date> moonCardGetTimes;
|
||||
|
||||
private List<Integer> showAvatarList;
|
||||
private boolean showAvatars;
|
||||
|
||||
@Transient private boolean paused;
|
||||
@Transient private int enterSceneToken;
|
||||
@Transient private SceneLoadState sceneState;
|
||||
@ -513,6 +517,22 @@ public class Player {
|
||||
this.regionId = regionId;
|
||||
}
|
||||
|
||||
public void setShowAvatars(boolean showAvatars) {
|
||||
this.showAvatars = showAvatars;
|
||||
}
|
||||
|
||||
public boolean isShowAvatars() {
|
||||
return showAvatars;
|
||||
}
|
||||
|
||||
public void setShowAvatarList(List<Integer> showAvatarList) {
|
||||
this.showAvatarList = showAvatarList;
|
||||
}
|
||||
|
||||
public List<Integer> getShowAvatarList() {
|
||||
return showAvatarList;
|
||||
}
|
||||
|
||||
public boolean inMoonCard() {
|
||||
return moonCard;
|
||||
}
|
||||
@ -832,6 +852,38 @@ public class Player {
|
||||
}
|
||||
|
||||
public SocialDetail.Builder getSocialDetail() {
|
||||
List<SocialShowAvatarInfoOuterClass.SocialShowAvatarInfo> socialShowAvatarInfoList = new ArrayList<>();
|
||||
if (this.isOnline()) {
|
||||
if (this.getShowAvatarList() != null) {
|
||||
for (int avatarId : this.getShowAvatarList()) {
|
||||
socialShowAvatarInfoList.add(
|
||||
socialShowAvatarInfoList.size(),
|
||||
SocialShowAvatarInfoOuterClass.SocialShowAvatarInfo.newBuilder()
|
||||
.setAvatarId(avatarId)
|
||||
.setLevel(getAvatars().getAvatarById(avatarId).getLevel())
|
||||
.setCostumeId(getAvatars().getAvatarById(avatarId).getCostume())
|
||||
.build()
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
List<Integer> showAvatarList = DatabaseHelper.getPlayerById(id).getShowAvatarList();
|
||||
AvatarStorage avatars = DatabaseHelper.getPlayerById(id).getAvatars();
|
||||
avatars.loadFromDatabase();
|
||||
if (showAvatarList != null) {
|
||||
for (int avatarId : showAvatarList) {
|
||||
socialShowAvatarInfoList.add(
|
||||
socialShowAvatarInfoList.size(),
|
||||
SocialShowAvatarInfoOuterClass.SocialShowAvatarInfo.newBuilder()
|
||||
.setAvatarId(avatarId)
|
||||
.setLevel(avatars.getAvatarById(avatarId).getLevel())
|
||||
.setCostumeId(avatars.getAvatarById(avatarId).getCostume())
|
||||
.build()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SocialDetail.Builder social = SocialDetail.newBuilder()
|
||||
.setUid(this.getUid())
|
||||
.setProfilePicture(ProfilePicture.newBuilder().setAvatarId(this.getHeadImage()))
|
||||
@ -841,6 +893,8 @@ public class Player {
|
||||
.setBirthday(this.getBirthday().getFilledProtoWhenNotEmpty())
|
||||
.setWorldLevel(this.getWorldLevel())
|
||||
.setNameCardId(this.getNameCardId())
|
||||
.setIsShowAvatar(this.isShowAvatars())
|
||||
.addAllShowAvatarInfoList(socialShowAvatarInfoList)
|
||||
.setFinishAchievementNum(0);
|
||||
return social;
|
||||
}
|
||||
|
@ -0,0 +1,22 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.UpdatePlayerShowAvatarListReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketUpdatePlayerShowAvatarListRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.UpdatePlayerShowAvatarListReq)
|
||||
public class HandlerUpdatePlayerShowAvatarListReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
UpdatePlayerShowAvatarListReqOuterClass.UpdatePlayerShowAvatarListReq req = UpdatePlayerShowAvatarListReqOuterClass.UpdatePlayerShowAvatarListReq.parseFrom(payload);
|
||||
|
||||
session.getPlayer().setShowAvatars(req.getIsShowAvatar());
|
||||
session.getPlayer().setShowAvatarList(req.getShowAvatarIdListList());
|
||||
|
||||
session.send(new PacketUpdatePlayerShowAvatarListRsp(req.getIsShowAvatar(), req.getShowAvatarIdListList()));
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.UpdatePlayerShowAvatarListRspOuterClass.UpdatePlayerShowAvatarListRsp;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PacketUpdatePlayerShowAvatarListRsp extends BasePacket {
|
||||
|
||||
public PacketUpdatePlayerShowAvatarListRsp(boolean isShowAvatar, List<Integer> avatarIds) {
|
||||
super(PacketOpcodes.UpdatePlayerShowAvatarListRsp);
|
||||
|
||||
UpdatePlayerShowAvatarListRsp proto = UpdatePlayerShowAvatarListRsp.newBuilder()
|
||||
.setIsShowAvatar(isShowAvatar)
|
||||
.addAllShowAvatarIdList(avatarIds)
|
||||
.setRetcode(0)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user