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.PlayerWorldLocationInfoOuterClass;
|
||||||
import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture;
|
import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture;
|
||||||
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
||||||
|
import emu.grasscutter.net.proto.SocialShowAvatarInfoOuterClass;
|
||||||
import emu.grasscutter.server.game.GameServer;
|
import emu.grasscutter.server.game.GameServer;
|
||||||
import emu.grasscutter.server.game.GameSession;
|
import emu.grasscutter.server.game.GameSession;
|
||||||
import emu.grasscutter.server.packet.send.*;
|
import emu.grasscutter.server.packet.send.*;
|
||||||
@ -93,6 +94,9 @@ public class Player {
|
|||||||
private int moonCardDuration;
|
private int moonCardDuration;
|
||||||
private Set<Date> moonCardGetTimes;
|
private Set<Date> moonCardGetTimes;
|
||||||
|
|
||||||
|
private List<Integer> showAvatarList;
|
||||||
|
private boolean showAvatars;
|
||||||
|
|
||||||
@Transient private boolean paused;
|
@Transient private boolean paused;
|
||||||
@Transient private int enterSceneToken;
|
@Transient private int enterSceneToken;
|
||||||
@Transient private SceneLoadState sceneState;
|
@Transient private SceneLoadState sceneState;
|
||||||
@ -513,6 +517,22 @@ public class Player {
|
|||||||
this.regionId = regionId;
|
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() {
|
public boolean inMoonCard() {
|
||||||
return moonCard;
|
return moonCard;
|
||||||
}
|
}
|
||||||
@ -832,6 +852,38 @@ public class Player {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public SocialDetail.Builder getSocialDetail() {
|
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()
|
SocialDetail.Builder social = SocialDetail.newBuilder()
|
||||||
.setUid(this.getUid())
|
.setUid(this.getUid())
|
||||||
.setProfilePicture(ProfilePicture.newBuilder().setAvatarId(this.getHeadImage()))
|
.setProfilePicture(ProfilePicture.newBuilder().setAvatarId(this.getHeadImage()))
|
||||||
@ -841,6 +893,8 @@ public class Player {
|
|||||||
.setBirthday(this.getBirthday().getFilledProtoWhenNotEmpty())
|
.setBirthday(this.getBirthday().getFilledProtoWhenNotEmpty())
|
||||||
.setWorldLevel(this.getWorldLevel())
|
.setWorldLevel(this.getWorldLevel())
|
||||||
.setNameCardId(this.getNameCardId())
|
.setNameCardId(this.getNameCardId())
|
||||||
|
.setIsShowAvatar(this.isShowAvatars())
|
||||||
|
.addAllShowAvatarInfoList(socialShowAvatarInfoList)
|
||||||
.setFinishAchievementNum(0);
|
.setFinishAchievementNum(0);
|
||||||
return social;
|
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