1
This commit is contained in:
@@ -37,19 +37,6 @@ func GetServerInfoList(isdebug int32) []ServerInfo {
|
||||
ret1 = append(ret1, *tt)
|
||||
}
|
||||
|
||||
//t, ok := cool.GetClient(v.Port)
|
||||
|
||||
// if ok {
|
||||
// cool.Logger.Info(context.TODO(), "服务器假踢人")
|
||||
// err := t.KickPerson(0) //实现指定服务器踢人
|
||||
|
||||
// if err == nil {
|
||||
// // tt.Friends = v.Friends
|
||||
// ret1 = append(ret1, *tt)
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
array.Sort(&ret1, func(a ServerInfo, b ServerInfo) bool {
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"blazing/cool"
|
||||
"blazing/logic/service/common"
|
||||
"blazing/logic/service/player"
|
||||
"blazing/modules/base/service"
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
@@ -16,24 +17,45 @@ type Broadcast struct {
|
||||
|
||||
func (s *Server) Broadcast(t string) int {
|
||||
cool.Logger.Info(context.TODO(), "全服广播", t)
|
||||
var count int
|
||||
|
||||
player.Mainplayer.Range(func(key uint32, value *player.Player) bool {
|
||||
count++
|
||||
|
||||
value.SendPackCmd(50003, &Broadcast{
|
||||
Name: t,
|
||||
})
|
||||
return false
|
||||
return true
|
||||
})
|
||||
|
||||
return count
|
||||
return player.Mainplayer.Count()
|
||||
}
|
||||
|
||||
const kickTimeout = 5 * time.Second
|
||||
|
||||
func (s *Server) KickPerson(a int) error {
|
||||
cool.Logger.Info(context.TODO(), "检测到踢人请求", a)
|
||||
if a == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return player.KickPlayer(uint32(a))
|
||||
// 1. 创建结果通道
|
||||
resultChan := make(chan error, 1)
|
||||
|
||||
// 2. 启动 goroutine 执行踢人操作
|
||||
go func() {
|
||||
err := player.KickPlayer(uint32(a))
|
||||
resultChan <- err
|
||||
}()
|
||||
|
||||
// 3. 用 select 监听结果和超时信号
|
||||
select {
|
||||
case err := <-resultChan:
|
||||
// 正常完成
|
||||
return err
|
||||
case <-time.After(kickTimeout):
|
||||
service.NewBaseSysLogService().RecordKick(uint32(a), fmt.Errorf("踢人操作超时(超时时间:%v)", kickTimeout).Error())
|
||||
// 超时触发,返回自定义或内置超时错误
|
||||
return fmt.Errorf("踢人操作超时(超时时间:%v)", kickTimeout)
|
||||
}
|
||||
}
|
||||
|
||||
// 参数不为0是强制踢出
|
||||
|
||||
@@ -100,7 +100,7 @@ type ParasiticSeed struct {
|
||||
|
||||
func (e *ParasiticSeed) SwitchOut(in *input.Input) bool {
|
||||
//如果我放切换
|
||||
if in == e.Ctx().Our && e.Ctx().Our.CurrentPet.GetHP().IntPart() != 0 {
|
||||
if in == e.Ctx().Our {
|
||||
e.Alive(false)
|
||||
}
|
||||
return true
|
||||
@@ -118,6 +118,9 @@ func (e *ParasiticSeed) ActionStartEx(attacker, defender *action.SelectSkillActi
|
||||
Type: info.DamageType.True,
|
||||
Damage: damage,
|
||||
})
|
||||
if e.Ctx().Opp.CurrentPet.GetHP().IntPart() == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
// 给对方回血(不受回血限制影响)
|
||||
e.Ctx().Opp.Heal(e.Ctx().Our, nil, damage)
|
||||
|
||||
@@ -18,23 +18,42 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/alpacahq/alpacadecimal"
|
||||
"github.com/gogf/gf/v2/os/glog"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
type MyWriter struct {
|
||||
logger *glog.Logger
|
||||
user uint32
|
||||
}
|
||||
|
||||
func (w *MyWriter) Write(p []byte) (n int, err error) {
|
||||
var (
|
||||
s = string(p)
|
||||
//ctx = context.Background()
|
||||
)
|
||||
|
||||
service.NewBaseSysLogService().RecordFight(w.user, s)
|
||||
return w.logger.Write(p)
|
||||
}
|
||||
func init() {
|
||||
//var ctx = context.Background()
|
||||
glog.SetWriter(&MyWriter{
|
||||
logger: glog.New(),
|
||||
})
|
||||
}
|
||||
func (f *FightC) battleLoop() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil { // 恢复 panic,err 为 panic 错误值
|
||||
// 1. 打印错误信息
|
||||
|
||||
var ctx = context.Background()
|
||||
cool.Logger.Error(context.TODO(), "panic 错误:", err)
|
||||
glog.Errorf(ctx, "%+v", err)
|
||||
f.Broadcast(func(ff *input.Input) {
|
||||
if p, ok := ff.Player.(*player.Player); ok {
|
||||
head := common.NewTomeeHeader(1001, p.Info.UserID)
|
||||
|
||||
head.Result = uint32(errorcode.ErrorCodes.ErrSystemBusyTryLater)
|
||||
service.NewBaseSysLogService().RecordFight(p.Info.UserID, gconv.String(err))
|
||||
|
||||
//实际上这里有个问题,会造成重复保存问题
|
||||
|
||||
p.SendPack(head.Pack(nil))
|
||||
}
|
||||
|
||||
@@ -128,6 +128,25 @@ func (s *BaseSysLogService) RecordFight(userid uint32, desc string) {
|
||||
"params": baseSysLog.Params,
|
||||
})
|
||||
}
|
||||
func (s *BaseSysLogService) RecordKick(userid uint32, desc string) {
|
||||
|
||||
baseSysLog := model.NewBaseSysLog()
|
||||
baseSysLog.UserID = uint(userid)
|
||||
baseSysLog.Action = "kick"
|
||||
|
||||
baseSysLog.Params = desc
|
||||
m := cool.DBM(s.Model)
|
||||
if baseSysLog.UserID == 10001 {
|
||||
return
|
||||
}
|
||||
m.Insert(g.Map{
|
||||
"userId": baseSysLog.UserID,
|
||||
"action": baseSysLog.Action,
|
||||
"ip": baseSysLog.IP,
|
||||
//"ipAddr": baseSysLog.IPAddr,
|
||||
"params": baseSysLog.Params,
|
||||
})
|
||||
}
|
||||
|
||||
// Clear 清除日志
|
||||
func (s *BaseSysLogService) Clear(isAll bool) (err error) {
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"blazing/modules/dict/service"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/gogf/gf/v2/util/grand"
|
||||
)
|
||||
|
||||
@@ -28,7 +27,7 @@ func NewPetFusionMaterialService() *PetFusionMaterialService {
|
||||
}
|
||||
|
||||
// 获取融合材料的特性,返回两个值,一个是指定的特性,另一个是如果配方没找到的情况下,默认的配置
|
||||
func (s *PetFusionMaterialService) Data(Material1 [4]uint32) uint32 {
|
||||
func (s *PetFusionMaterialService) Data(Material1 [4]uint32) int32 {
|
||||
|
||||
fusions := service.NewDictInfoService().GetData("fusion")
|
||||
|
||||
@@ -58,23 +57,23 @@ func (s *PetFusionMaterialService) Data(Material1 [4]uint32) uint32 {
|
||||
//这时候有可能效果是空的,那么这时候就再次查询默认的特性,保证每次必会生成一个数据库有的特性
|
||||
//也许这个时候的特性配方就是随机从数据库中查找一个特性
|
||||
|
||||
if effect == nil {
|
||||
effect2s := service.NewDictInfoService().GetData("effect")
|
||||
for _, v := range effect2s {
|
||||
return gconv.Uint32(v.Value)
|
||||
}
|
||||
// if effect == nil {
|
||||
// effect2s := service.NewDictInfoService().GetData("effect")
|
||||
// for _, v := range effect2s {
|
||||
// return gconv.Uint32(v.Value)
|
||||
// }
|
||||
|
||||
}
|
||||
// }
|
||||
r := grand.Intn(4)
|
||||
switch r {
|
||||
case 0:
|
||||
return effect.Trait1Idx
|
||||
return int32(effect.Trait1Idx)
|
||||
case 1:
|
||||
return effect.Trait2Idx
|
||||
return int32(effect.Trait2Idx)
|
||||
case 2:
|
||||
return effect.Trait3Idx
|
||||
return int32(effect.Trait3Idx)
|
||||
case 3:
|
||||
return effect.Trait4Idx
|
||||
return int32(effect.Trait4Idx)
|
||||
}
|
||||
return 0
|
||||
return -1
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user