Merge pull request #1 from Akka0/development

Updated
This commit is contained in:
Akka
2022-05-06 14:16:44 +08:00
committed by GitHub
20 changed files with 353 additions and 151 deletions

View File

@@ -1,8 +1,9 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.entity.GameEntity;
import emu.grasscutter.game.props.PlayerProperty;
import emu.grasscutter.game.managers.MotionManager.MotionManager;
import emu.grasscutter.game.props.FightProperty;
import emu.grasscutter.game.props.LifeState;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.CombatInvocationsNotifyOuterClass.CombatInvocationsNotify;
@@ -11,13 +12,9 @@ import emu.grasscutter.net.proto.EntityMoveInfoOuterClass.EntityMoveInfo;
import emu.grasscutter.net.proto.EvtBeingHitInfoOuterClass.EvtBeingHitInfo;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.proto.MotionStateOuterClass.MotionState;
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.*;
import java.util.Arrays;
import java.util.Collection;
@Opcodes(PacketOpcodes.CombatInvocationsNotify)
public class HandlerCombatInvocationsNotify extends PacketHandler {
@@ -35,7 +32,6 @@ public class HandlerCombatInvocationsNotify extends PacketHandler {
// Handle movement
EntityMoveInfo moveInfo = EntityMoveInfo.parseFrom(entry.getCombatData());
GameEntity entity = session.getPlayer().getScene().getEntityById(moveInfo.getEntityId());
MotionState state = moveInfo.getMotionInfo().getState();
if (entity != null) {
//move
entity.getPosition().set(moveInfo.getMotionInfo().getPos());
@@ -43,56 +39,7 @@ public class HandlerCombatInvocationsNotify extends PacketHandler {
entity.setLastMoveSceneTimeMs(moveInfo.getSceneTime());
entity.setLastMoveReliableSeq(moveInfo.getReliableSeq());
entity.setMotionState(moveInfo.getMotionInfo().getState());
if(Grasscutter.getConfig().OpenStamina){
//consume stamina
int curStamina = session.getPlayer().getProperty(PlayerProperty.PROP_CUR_PERSIST_STAMINA);
int maxStamina = session.getPlayer().getProperty(PlayerProperty.PROP_MAX_STAMINA);
if (CONSUME_STAMINA_LIST.contains(state)) {
//In the water exhausted stamina
//Climbing the wall stays in place
//Sprint in the water
if (state == MotionState.MOTION_SWIM_DASH) {
curStamina -= 700;
}
//wall jump
else if (state == MotionState.MOTION_CLIMB_JUMP) {
curStamina -= 2000;
}
//climb the wall slowly
else if (state == MotionState.MOTION_CLIMB) {
curStamina -= 800;
}
else if (state == MotionState.MOTION_DASH_BEFORE_SHAKE) {
curStamina -= 2500;
}
else {
curStamina -= 500;
}
session.getPlayer().setProperty(PlayerProperty.PROP_CUR_PERSIST_STAMINA, curStamina);
session.send(new PacketPlayerPropNotify(session.getPlayer(), PlayerProperty.PROP_CUR_PERSIST_STAMINA));
break;
}
//restore stamina
if (RESTORE_STAMINA_LIST.contains(state)) {
if(state == MotionState.MOTION_STANDBY) {
Vector speed = moveInfo.getMotionInfo().getSpeed();
if(speed.getX() != 0 && speed.getZ() != 0 && speed.getY() != 0) {
break;
}
}
curStamina += 1000;
if (curStamina >= maxStamina) {
curStamina = maxStamina;
}
session.getPlayer().setProperty(PlayerProperty.PROP_CUR_PERSIST_STAMINA, curStamina);
session.send(new PacketPlayerPropNotify(session.getPlayer(), PlayerProperty.PROP_CUR_PERSIST_STAMINA));
}
}
session.getPlayer().getMotionManager().handle(session, entity, moveInfo);
}
break;
default:
@@ -111,17 +58,5 @@ public class HandlerCombatInvocationsNotify extends PacketHandler {
}
}
private static MotionState[] consumeStaminaTypes = new MotionState[]{
MotionState.MOTION_CLIMB, MotionState.MOTION_CLIMB_JUMP, MotionState.MOTION_SWIM_DASH,
MotionState.MOTION_SWIM_MOVE, MotionState.MOTION_FLY, MotionState.MOTION_DASH,
MotionState.MOTION_DASH_BEFORE_SHAKE, MotionState.MOTION_FIGHT, MotionState.MOTION_JUMP_UP_WALL_FOR_STANDBY,
MotionState.MOTION_FLY_SLOW
};
private static MotionState[] restoreStaminaTypes = new MotionState[]{
MotionState.MOTION_STANDBY, MotionState.MOTION_RUN, MotionState.MOTION_WALK,
MotionState.MOTION_STANDBY_MOVE
};
private static final Collection<MotionState> CONSUME_STAMINA_LIST = Arrays.asList(consumeStaminaTypes);
private static final Collection<MotionState> RESTORE_STAMINA_LIST = Arrays.asList(restoreStaminaTypes);
}

View File

@@ -0,0 +1,26 @@
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.EvtDoSkillSuccNotifyOuterClass.EvtDoSkillSuccNotify;
import emu.grasscutter.server.game.GameSession;
@Opcodes(PacketOpcodes.EvtDoSkillSuccNotify)
public class HandlerEvtDoSkillSuccNotify extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
EvtDoSkillSuccNotify notify = EvtDoSkillSuccNotify.parseFrom(payload);
// TODO: Will be used for deducting stamina for charged skills.
int caster = notify.getCasterId();
int skill = notify.getSkillId();
// Grasscutter.getLogger().warn(caster + "\t" + skill);
// session.getPlayer().getScene().broadcastPacket(new PacketEvtAvatarStandUpNotify(notify));
}
}

View File

@@ -37,6 +37,13 @@ public class HandlerSetPlayerBornDataReq extends PacketHandler {
return;
}
// Make sure resources folder is set
if (!GameData.getAvatarDataMap().containsKey(avatarId)) {
Grasscutter.getLogger().error("No avatar data found! Please check your ExcelBinOutput folder.");
session.close();
return;
}
String nickname = req.getNickName();
if (nickname == null) {
nickname = "Traveler";
@@ -78,15 +85,11 @@ public class HandlerSetPlayerBornDataReq extends PacketHandler {
session.send(new BasePacket(PacketOpcodes.SetPlayerBornDataRsp));
// Default mail
char d = 'G';
char e = 'r';
char z = 'a';
char u = 'c';
char s = 't';
MailBuilder mailBuilder = new MailBuilder(player.getUid(), new Mail());
mailBuilder.mail.mailContent.title = String.format("W%sl%som%s to %s%s%s%s%s%s%s%s%s%s%s!", DatabaseHelper.AWJVN, u, DatabaseHelper.AWJVN, d, e, z, GameData.EJWOA, GameData.EJWOA, u, PacketOpcodes.ONLWE, s, s, DatabaseHelper.AWJVN, e);
mailBuilder.mail.mailContent.sender = String.format("L%swnmow%s%s @ Gi%sH%sb", z, DatabaseHelper.AWJVN, e, s, PacketOpcodes.ONLWE);
mailBuilder.mail.mailContent.content = Grasscutter.getConfig().GameServer.WelcomeMailContent;
mailBuilder.mail.mailContent.title = Grasscutter.getConfig().GameServer.WelcomeMailTitle;
mailBuilder.mail.mailContent.sender = Grasscutter.getConfig().GameServer.WelcomeMailSender;
// Please credit Grasscutter if changing something here. We don't condone commercial use of the project.
mailBuilder.mail.mailContent.content = Grasscutter.getConfig().GameServer.WelcomeMailContent + "\n<type=\"browser\" text=\"GitHub\" href=\"https://github.com/Melledy/Grasscutter\"/>";
mailBuilder.mail.itemList.addAll(Arrays.asList(Grasscutter.getConfig().GameServer.WelcomeMailItems));
mailBuilder.mail.importance = 1;
player.sendMail(mailBuilder.mail);