mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-20 10:55:08 +01:00
Add embryos for all skill depots for the main characters
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.GameConstants;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.excels.AvatarSkillDepotData;
|
||||
import emu.grasscutter.data.excels.WorldAreaData;
|
||||
import emu.grasscutter.game.avatar.Avatar;
|
||||
import emu.grasscutter.game.entity.EntityAvatar;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.AvatarChangeElementTypeReqOuterClass.AvatarChangeElementTypeReq;
|
||||
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketAbilityChangeNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketAvatarChangeElementTypeRsp;
|
||||
import emu.grasscutter.server.packet.send.PacketAvatarFightPropNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketAvatarSkillDepotChangeNotify;
|
||||
|
||||
@Opcodes(PacketOpcodes.AvatarChangeElementTypeReq)
|
||||
public class HandlerAvatarChangeElementTypeReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
AvatarChangeElementTypeReq req = AvatarChangeElementTypeReq.parseFrom(payload);
|
||||
|
||||
WorldAreaData area = GameData.getWorldAreaDataMap().get(req.getAreaId());
|
||||
|
||||
if (area == null || area.getElementType() == null || area.getElementType().getDepotValue() <= 0) {
|
||||
session.send(new PacketAvatarChangeElementTypeRsp(Retcode.RET_SVR_ERROR_VALUE));
|
||||
return;
|
||||
}
|
||||
|
||||
// Get current avatar, should be one of the main characters
|
||||
EntityAvatar mainCharacterEntity = session.getPlayer().getTeamManager().getCurrentAvatarEntity();
|
||||
|
||||
int intialSkillDepotId = 0;
|
||||
if (mainCharacterEntity.getAvatar().getAvatarId() == GameConstants.MAIN_CHARACTER_MALE) {
|
||||
intialSkillDepotId = 500;
|
||||
} else if (mainCharacterEntity.getAvatar().getAvatarId() == GameConstants.MAIN_CHARACTER_FEMALE) {
|
||||
intialSkillDepotId = 700;
|
||||
} else {
|
||||
session.send(new PacketAvatarChangeElementTypeRsp(Retcode.RET_SVR_ERROR_VALUE));
|
||||
return;
|
||||
}
|
||||
intialSkillDepotId += area.getElementType().getDepotValue();
|
||||
|
||||
// Sanity checks for skill depots
|
||||
Avatar mainCharacter = mainCharacterEntity.getAvatar();
|
||||
AvatarSkillDepotData skillDepot = GameData.getAvatarSkillDepotDataMap().get(intialSkillDepotId);
|
||||
if (skillDepot == null || skillDepot.getId() == mainCharacter.getSkillDepotId()) {
|
||||
session.send(new PacketAvatarChangeElementTypeRsp(Retcode.RET_SVR_ERROR_VALUE));
|
||||
return;
|
||||
}
|
||||
|
||||
// Success
|
||||
session.send(new PacketAvatarChangeElementTypeRsp());
|
||||
|
||||
// Set skill depot
|
||||
mainCharacter.setSkillDepotData(skillDepot);
|
||||
|
||||
// Ability change packet
|
||||
session.send(new PacketAvatarSkillDepotChangeNotify(mainCharacter));
|
||||
session.send(new PacketAbilityChangeNotify(mainCharacterEntity));
|
||||
session.send(new PacketAvatarFightPropNotify(mainCharacter));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.AvatarChangeElementTypeRspOuterClass.AvatarChangeElementTypeRsp;
|
||||
|
||||
public class PacketAvatarChangeElementTypeRsp extends BasePacket {
|
||||
|
||||
public PacketAvatarChangeElementTypeRsp() {
|
||||
super(PacketOpcodes.AvatarChangeElementTypeRsp);
|
||||
}
|
||||
|
||||
public PacketAvatarChangeElementTypeRsp(int retcode) {
|
||||
super(PacketOpcodes.AvatarChangeElementTypeRsp);
|
||||
|
||||
if (retcode > 0) {
|
||||
AvatarChangeElementTypeRsp proto = AvatarChangeElementTypeRsp.newBuilder()
|
||||
.setRetcode(retcode)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.avatar.Avatar;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.AvatarSkillDepotChangeNotifyOuterClass.AvatarSkillDepotChangeNotify;
|
||||
|
||||
public class PacketAvatarSkillDepotChangeNotify extends BasePacket {
|
||||
|
||||
public PacketAvatarSkillDepotChangeNotify(Avatar avatar) {
|
||||
super(PacketOpcodes.AvatarSkillDepotChangeNotify);
|
||||
|
||||
AvatarSkillDepotChangeNotify proto = AvatarSkillDepotChangeNotify.newBuilder()
|
||||
.setAvatarGuid(avatar.getGuid())
|
||||
.setEntityId(avatar.getEntityId())
|
||||
.setSkillDepotId(avatar.getSkillDepotId())
|
||||
.setCoreProudSkillLevel(avatar.getCoreProudSkillLevel())
|
||||
.addAllTalentIdList(avatar.getTalentIdList())
|
||||
.addAllProudSkillList(avatar.getProudSkillList())
|
||||
.putAllSkillLevelMap(avatar.getSkillLevelMap())
|
||||
.putAllProudSkillExtraLevelMap(avatar.getProudSkillBonusMap())
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user