1
This commit is contained in:
@@ -37,19 +37,6 @@ func GetServerInfoList(isdebug int32) []ServerInfo {
|
|||||||
ret1 = append(ret1, *tt)
|
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 {
|
array.Sort(&ret1, func(a ServerInfo, b ServerInfo) bool {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"blazing/cool"
|
"blazing/cool"
|
||||||
"blazing/logic/service/common"
|
"blazing/logic/service/common"
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
|
"blazing/modules/base/service"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
@@ -16,24 +17,45 @@ type Broadcast struct {
|
|||||||
|
|
||||||
func (s *Server) Broadcast(t string) int {
|
func (s *Server) Broadcast(t string) int {
|
||||||
cool.Logger.Info(context.TODO(), "全服广播", t)
|
cool.Logger.Info(context.TODO(), "全服广播", t)
|
||||||
var count int
|
|
||||||
player.Mainplayer.Range(func(key uint32, value *player.Player) bool {
|
player.Mainplayer.Range(func(key uint32, value *player.Player) bool {
|
||||||
count++
|
|
||||||
value.SendPackCmd(50003, &Broadcast{
|
value.SendPackCmd(50003, &Broadcast{
|
||||||
Name: t,
|
Name: t,
|
||||||
})
|
})
|
||||||
return false
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
return count
|
return player.Mainplayer.Count()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const kickTimeout = 5 * time.Second
|
||||||
|
|
||||||
func (s *Server) KickPerson(a int) error {
|
func (s *Server) KickPerson(a int) error {
|
||||||
cool.Logger.Info(context.TODO(), "检测到踢人请求", a)
|
cool.Logger.Info(context.TODO(), "检测到踢人请求", a)
|
||||||
if a == 0 {
|
if a == 0 {
|
||||||
return nil
|
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是强制踢出
|
// 参数不为0是强制踢出
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ type ParasiticSeed struct {
|
|||||||
|
|
||||||
func (e *ParasiticSeed) SwitchOut(in *input.Input) bool {
|
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)
|
e.Alive(false)
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
@@ -118,6 +118,9 @@ func (e *ParasiticSeed) ActionStartEx(attacker, defender *action.SelectSkillActi
|
|||||||
Type: info.DamageType.True,
|
Type: info.DamageType.True,
|
||||||
Damage: damage,
|
Damage: damage,
|
||||||
})
|
})
|
||||||
|
if e.Ctx().Opp.CurrentPet.GetHP().IntPart() == 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// 给对方回血(不受回血限制影响)
|
// 给对方回血(不受回血限制影响)
|
||||||
e.Ctx().Opp.Heal(e.Ctx().Our, nil, damage)
|
e.Ctx().Opp.Heal(e.Ctx().Our, nil, damage)
|
||||||
|
|||||||
@@ -18,23 +18,42 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/alpacahq/alpacadecimal"
|
"github.com/alpacahq/alpacadecimal"
|
||||||
|
"github.com/gogf/gf/v2/os/glog"
|
||||||
"github.com/gogf/gf/v2/util/gconv"
|
"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() {
|
func (f *FightC) battleLoop() {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil { // 恢复 panic,err 为 panic 错误值
|
if err := recover(); err != nil { // 恢复 panic,err 为 panic 错误值
|
||||||
// 1. 打印错误信息
|
// 1. 打印错误信息
|
||||||
|
var ctx = context.Background()
|
||||||
cool.Logger.Error(context.TODO(), "panic 错误:", err)
|
cool.Logger.Error(context.TODO(), "panic 错误:", err)
|
||||||
|
glog.Errorf(ctx, "%+v", err)
|
||||||
f.Broadcast(func(ff *input.Input) {
|
f.Broadcast(func(ff *input.Input) {
|
||||||
if p, ok := ff.Player.(*player.Player); ok {
|
if p, ok := ff.Player.(*player.Player); ok {
|
||||||
head := common.NewTomeeHeader(1001, p.Info.UserID)
|
head := common.NewTomeeHeader(1001, p.Info.UserID)
|
||||||
|
|
||||||
head.Result = uint32(errorcode.ErrorCodes.ErrSystemBusyTryLater)
|
head.Result = uint32(errorcode.ErrorCodes.ErrSystemBusyTryLater)
|
||||||
service.NewBaseSysLogService().RecordFight(p.Info.UserID, gconv.String(err))
|
|
||||||
|
|
||||||
//实际上这里有个问题,会造成重复保存问题
|
|
||||||
|
|
||||||
p.SendPack(head.Pack(nil))
|
p.SendPack(head.Pack(nil))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,6 +128,25 @@ func (s *BaseSysLogService) RecordFight(userid uint32, desc string) {
|
|||||||
"params": baseSysLog.Params,
|
"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 清除日志
|
// Clear 清除日志
|
||||||
func (s *BaseSysLogService) Clear(isAll bool) (err error) {
|
func (s *BaseSysLogService) Clear(isAll bool) (err error) {
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"blazing/modules/dict/service"
|
"blazing/modules/dict/service"
|
||||||
|
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/util/gconv"
|
|
||||||
"github.com/gogf/gf/v2/util/grand"
|
"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")
|
fusions := service.NewDictInfoService().GetData("fusion")
|
||||||
|
|
||||||
@@ -58,23 +57,23 @@ func (s *PetFusionMaterialService) Data(Material1 [4]uint32) uint32 {
|
|||||||
//这时候有可能效果是空的,那么这时候就再次查询默认的特性,保证每次必会生成一个数据库有的特性
|
//这时候有可能效果是空的,那么这时候就再次查询默认的特性,保证每次必会生成一个数据库有的特性
|
||||||
//也许这个时候的特性配方就是随机从数据库中查找一个特性
|
//也许这个时候的特性配方就是随机从数据库中查找一个特性
|
||||||
|
|
||||||
if effect == nil {
|
// if effect == nil {
|
||||||
effect2s := service.NewDictInfoService().GetData("effect")
|
// effect2s := service.NewDictInfoService().GetData("effect")
|
||||||
for _, v := range effect2s {
|
// for _, v := range effect2s {
|
||||||
return gconv.Uint32(v.Value)
|
// return gconv.Uint32(v.Value)
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
// }
|
||||||
r := grand.Intn(4)
|
r := grand.Intn(4)
|
||||||
switch r {
|
switch r {
|
||||||
case 0:
|
case 0:
|
||||||
return effect.Trait1Idx
|
return int32(effect.Trait1Idx)
|
||||||
case 1:
|
case 1:
|
||||||
return effect.Trait2Idx
|
return int32(effect.Trait2Idx)
|
||||||
case 2:
|
case 2:
|
||||||
return effect.Trait3Idx
|
return int32(effect.Trait3Idx)
|
||||||
case 3:
|
case 3:
|
||||||
return effect.Trait4Idx
|
return int32(effect.Trait4Idx)
|
||||||
}
|
}
|
||||||
return 0
|
return -1
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user