1
This commit is contained in:
@@ -293,24 +293,22 @@ func (s *Server) onevent(c gnet.Conn, v []byte) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// XORDecryptU 优化后的异或解密:减少内存分配,支持复用缓冲区
|
||||
func XORDecryptU(encryptedData []byte, key uint32) []byte {
|
||||
// 边界条件:待解密数据为空,直接返回空
|
||||
if len(encryptedData) == 0 {
|
||||
return []byte{}
|
||||
}
|
||||
|
||||
// 1. 将uint32密钥转换为4字节数组(关键步骤)
|
||||
// 字节序选择:BigEndian(大端)是AS3/Java等语言的默认二进制处理方式,若需小端可改为binary.LittleEndian
|
||||
keyBytes := make([]byte, 4) // uint32固定占4个字节
|
||||
binary.BigEndian.PutUint32(keyBytes, key)
|
||||
keyLen := len(keyBytes) // 固定为4,无需额外判断长度
|
||||
// 预分配密钥字节数组(可全局缓存,避免每次创建)
|
||||
var keyBytes [4]byte // 栈上分配,比make更高效
|
||||
binary.BigEndian.PutUint32(keyBytes[:], key)
|
||||
keyLen := len(keyBytes)
|
||||
|
||||
// 2. 执行异或解密(逻辑与原版本一致,仅密钥来源不同)
|
||||
// 复用输出缓冲区:如果需要极致性能,可传入外部缓冲区
|
||||
decrypted := make([]byte, len(encryptedData))
|
||||
for i, b := range encryptedData {
|
||||
// 循环复用4字节密钥(索引取模,i%4)
|
||||
keyIndex := i % keyLen
|
||||
decrypted[i] = b ^ keyBytes[keyIndex]
|
||||
decrypted[i] = b ^ keyBytes[i%keyLen]
|
||||
}
|
||||
|
||||
return decrypted
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"blazing/logic/service/fight"
|
||||
"blazing/logic/service/pet"
|
||||
"blazing/logic/service/player"
|
||||
"blazing/modules/player/model"
|
||||
)
|
||||
|
||||
// CatchPet 传送仓抓稀有宠物
|
||||
@@ -20,6 +21,9 @@ func (h Controller) HanLiuQiang(data *pet.C2S_2608, c *player.Player) (result *f
|
||||
|
||||
if cool.Config.ServerInfo.IsVip != 0 {
|
||||
c.ItemAdd(500655, 1)
|
||||
pet := model.GenPetInfo(315, 31, -1, -1, 100, nil, 0)
|
||||
pet.FixShiny()
|
||||
c.Service.Pet.PetAdd(pet)
|
||||
}
|
||||
return result, -1
|
||||
}
|
||||
|
||||
@@ -216,7 +216,36 @@ func (our *Input) CalculatePower(deftype *Input, skill *info.SkillEntity) alpaca
|
||||
default:
|
||||
return alpacadecimal.Zero
|
||||
}
|
||||
// 8. DmgBindLv: 使对方受到的伤害值等于等级; 默认: 0
|
||||
// 9. PwrBindDv: 1,威力(power)取决于潜力(个体值)*5; 2,威力(power)取决于最大体力*1/3+潜力(个体值); 默认: 0
|
||||
// 10. PwrDouble: 攻击时,若对方处于异常状态, 则威力翻倍;
|
||||
// 11. DmgBindHpDv: 造成的伤害等于自身剩余体力*1/2+潜力(个体值); 默认: 0
|
||||
if skill.DmgBindLv != 0 {
|
||||
skill.Power = int(deftype.CurrentPet.Info.Level)
|
||||
|
||||
}
|
||||
if skill.PwrBindDv != 0 {
|
||||
if skill.PwrBindDv == 1 {
|
||||
|
||||
skill.Power = int(our.CurrentPet.Info.Dv * 5)
|
||||
|
||||
}
|
||||
if skill.PwrBindDv == 2 {
|
||||
skill.Power = int(our.CurrentPet.Info.Hp/3 + our.CurrentPet.Info.Dv)
|
||||
}
|
||||
|
||||
}
|
||||
if skill.PwrDouble != 0 {
|
||||
|
||||
if deftype.StatEffect_Exist_all() {
|
||||
skill.Power = skill.Power * 2
|
||||
}
|
||||
|
||||
}
|
||||
if skill.DmgBindHpDv != 0 {
|
||||
skill.Power = int(our.CurrentPet.Info.Hp/2 + our.CurrentPet.Info.Dv)
|
||||
|
||||
}
|
||||
// 5. 基础伤害公式:等级因子 * 威力因子 * 攻击 / 防御 / 50 + 2
|
||||
baseDamage := levelFactor.
|
||||
Mul(alpacadecimal.NewFromInt(int64(skill.Power))).
|
||||
@@ -231,35 +260,7 @@ func (our *Input) CalculatePower(deftype *Input, skill *info.SkillEntity) alpaca
|
||||
our.AttackValue.Offensive = gconv.Float32(t)
|
||||
|
||||
typeRate = alpacadecimal.NewFromFloat(t)
|
||||
// 8. DmgBindLv: 使对方受到的伤害值等于等级; 默认: 0
|
||||
// 9. PwrBindDv: 1,威力(power)取决于潜力(个体值)*5; 2,威力(power)取决于最大体力*1/3+潜力(个体值); 默认: 0
|
||||
// 10. PwrDouble: 攻击时,若对方处于异常状态, 则威力翻倍;
|
||||
// 11. DmgBindHpDv: 造成的伤害等于自身剩余体力*1/2+潜力(个体值); 默认: 0
|
||||
if skill.DmgBindLv != 0 {
|
||||
baseDamage = alpacadecimal.NewFromInt(int64(deftype.CurrentPet.Info.Level))
|
||||
|
||||
}
|
||||
if skill.PwrBindDv != 0 {
|
||||
if skill.PwrBindDv == 1 {
|
||||
|
||||
baseDamage = alpacadecimal.NewFromInt(int64(our.CurrentPet.Info.Dv * 5))
|
||||
}
|
||||
if skill.PwrBindDv == 2 {
|
||||
baseDamage = alpacadecimal.NewFromInt(int64(our.CurrentPet.Info.Hp/3 + our.CurrentPet.Info.Dv))
|
||||
}
|
||||
|
||||
}
|
||||
if skill.PwrDouble != 0 {
|
||||
|
||||
if deftype.StatEffect_Exist_all() {
|
||||
baseDamage = baseDamage.Mul(alpacadecimal.NewFromInt(2))
|
||||
}
|
||||
|
||||
}
|
||||
if skill.DmgBindHpDv != 0 {
|
||||
baseDamage = alpacadecimal.NewFromInt(int64(our.CurrentPet.Info.Hp/2 + our.CurrentPet.Info.Dv))
|
||||
|
||||
}
|
||||
damage := baseDamage.
|
||||
Mul(skill.CriticalsameTypeBonus()). // 同属性加成
|
||||
Mul(typeRate). // 克制系数
|
||||
|
||||
@@ -46,12 +46,21 @@ func getUnderlyingValue(val reflect.Value) (reflect.Value, error) {
|
||||
}
|
||||
|
||||
// 遍历结构体方法并执行RECV_cmd
|
||||
func (h *ClientData) Recv(data common.TomeeHeader) {
|
||||
func (h *ClientData) OnEvent(data common.TomeeHeader) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil { // 恢复 panic,err 为 panic 错误值
|
||||
// 1. 打印错误信息
|
||||
if h.Player != nil {
|
||||
if h.Player.Info != nil {
|
||||
cool.Logger.Error(context.TODO(), "panic 错误:", h.Player.Info.UserID, err)
|
||||
} else {
|
||||
cool.Logger.Error(context.TODO(), "panic 错误:", err)
|
||||
|
||||
cool.Logger.Error(context.TODO(), "panic 错误:", err)
|
||||
}
|
||||
|
||||
} else {
|
||||
cool.Logger.Error(context.TODO(), "panic 错误:", err)
|
||||
}
|
||||
|
||||
}
|
||||
}()
|
||||
@@ -199,28 +208,7 @@ func XORDecrypt(encryptedData []byte, keyStr string) []byte {
|
||||
|
||||
return decrypted
|
||||
}
|
||||
func (h *ClientData) OnEvent(t common.TomeeHeader) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil { // 恢复 panic,err 为 panic 错误值
|
||||
// 1. 打印错误信息
|
||||
if h.Player != nil {
|
||||
if h.Player.Info != nil {
|
||||
cool.Logger.Error(context.TODO(), "panic 错误:", h.Player.Info.UserID, err)
|
||||
} else {
|
||||
cool.Logger.Error(context.TODO(), "panic 错误:", err)
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
cool.Logger.Error(context.TODO(), "panic 错误:", err)
|
||||
}
|
||||
|
||||
}
|
||||
}()
|
||||
|
||||
h.Recv(t)
|
||||
|
||||
}
|
||||
func (p *ClientData) SendPack(b []byte) error {
|
||||
cli, ok := p.Conn.Context().(*ClientData)
|
||||
if !ok {
|
||||
|
||||
Reference in New Issue
Block a user