From 4c4c16efd01b5670c48e275982df0927063c1286 Mon Sep 17 00:00:00 2001 From: flswld Date: Wed, 29 Mar 2023 15:52:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- anticheat/handle/handle.go | 14 ++++- gdconf/drop_data.go | 102 +++++++++++++++++++++++-------------- gs/game/player_world.go | 2 + 3 files changed, 77 insertions(+), 41 deletions(-) diff --git a/anticheat/handle/handle.go b/anticheat/handle/handle.go index c0824907..0daf6a79 100644 --- a/anticheat/handle/handle.go +++ b/anticheat/handle/handle.go @@ -17,7 +17,7 @@ import ( const ( MoveVectorCacheNum = 100 - MaxMoveSpeed = 10000.0 + MaxMoveSpeed = 50.0 ) type MoveVector struct { @@ -30,9 +30,16 @@ type AnticheatContext struct { } func (a *AnticheatContext) Move(pos *proto.Vector) { + now := time.Now().UnixMilli() + if len(a.moveVectorList) > 0 { + lastMoveVector := a.moveVectorList[len(a.moveVectorList)-1] + if now-lastMoveVector.time < 1000 { + return + } + } a.moveVectorList = append(a.moveVectorList, &MoveVector{ pos: pos, - time: time.Now().UnixMilli(), + time: now, }) if len(a.moveVectorList) > MoveVectorCacheNum { a.moveVectorList = a.moveVectorList[len(a.moveVectorList)-MoveVectorCacheNum:] @@ -41,6 +48,9 @@ func (a *AnticheatContext) Move(pos *proto.Vector) { func (a *AnticheatContext) GetMoveSpeed() float32 { avgMoveSpeed := float32(0.0) + if len(a.moveVectorList) < MoveVectorCacheNum { + return avgMoveSpeed + } for index := range a.moveVectorList { if index+1 >= len(a.moveVectorList) { break diff --git a/gdconf/drop_data.go b/gdconf/drop_data.go index d5fe823f..c91b53ef 100644 --- a/gdconf/drop_data.go +++ b/gdconf/drop_data.go @@ -7,9 +7,9 @@ import ( ) type SubDrop struct { - Id int32 // 子掉落ID - CountRange []int32 // 子掉落数量区间 - Weight int32 // 子掉落权重 + Id int32 // 子掉落ID + CountRange [2]int32 // 子掉落数量区间 + Weight int32 // 子掉落权重 } const ( @@ -74,9 +74,11 @@ func (g *GameDataConfig) loadDropData() { // 子掉落列合并 dropData.SubDropList = make([]*SubDrop, 0) if dropData.SubDrop1Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop1CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop1CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop1CountRange[0]), int32(dropData.SubDrop1CountRange[0])} + } else if len(dropData.SubDrop1CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop1CountRange[0]), int32(dropData.SubDrop1CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop1Id, @@ -85,9 +87,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop2Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop2CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop2CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop2CountRange[0]), int32(dropData.SubDrop2CountRange[0])} + } else if len(dropData.SubDrop2CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop2CountRange[0]), int32(dropData.SubDrop2CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop2Id, @@ -96,9 +100,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop3Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop3CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop3CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop3CountRange[0]), int32(dropData.SubDrop3CountRange[0])} + } else if len(dropData.SubDrop3CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop3CountRange[0]), int32(dropData.SubDrop3CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop3Id, @@ -107,9 +113,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop4Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop4CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop4CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop4CountRange[0]), int32(dropData.SubDrop4CountRange[0])} + } else if len(dropData.SubDrop4CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop4CountRange[0]), int32(dropData.SubDrop4CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop4Id, @@ -118,9 +126,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop5Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop5CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop5CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop5CountRange[0]), int32(dropData.SubDrop5CountRange[0])} + } else if len(dropData.SubDrop5CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop5CountRange[0]), int32(dropData.SubDrop5CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop5Id, @@ -129,9 +139,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop6Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop6CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop6CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop6CountRange[0]), int32(dropData.SubDrop6CountRange[0])} + } else if len(dropData.SubDrop6CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop6CountRange[0]), int32(dropData.SubDrop6CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop6Id, @@ -140,9 +152,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop7Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop7CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop7CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop7CountRange[0]), int32(dropData.SubDrop7CountRange[0])} + } else if len(dropData.SubDrop7CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop7CountRange[0]), int32(dropData.SubDrop7CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop7Id, @@ -151,9 +165,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop8Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop8CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop8CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop8CountRange[0]), int32(dropData.SubDrop8CountRange[0])} + } else if len(dropData.SubDrop8CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop8CountRange[0]), int32(dropData.SubDrop8CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop8Id, @@ -162,9 +178,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop9Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop9CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop9CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop9CountRange[0]), int32(dropData.SubDrop9CountRange[0])} + } else if len(dropData.SubDrop9CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop9CountRange[0]), int32(dropData.SubDrop9CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop9Id, @@ -173,9 +191,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop10Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop10CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop10CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop10CountRange[0]), int32(dropData.SubDrop10CountRange[0])} + } else if len(dropData.SubDrop10CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop10CountRange[0]), int32(dropData.SubDrop10CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop10Id, @@ -184,9 +204,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop11Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop11CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop11CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop11CountRange[0]), int32(dropData.SubDrop11CountRange[0])} + } else if len(dropData.SubDrop11CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop11CountRange[0]), int32(dropData.SubDrop11CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop11Id, @@ -195,9 +217,11 @@ func (g *GameDataConfig) loadDropData() { }) } if dropData.SubDrop12Id != 0 { - countRange := make([]int32, 0) - for _, v := range dropData.SubDrop12CountRange { - countRange = append(countRange, int32(v)) + countRange := [2]int32{0, 0} + if len(dropData.SubDrop12CountRange) == 1 { + countRange = [2]int32{int32(dropData.SubDrop12CountRange[0]), int32(dropData.SubDrop12CountRange[0])} + } else if len(dropData.SubDrop12CountRange) == 2 { + countRange = [2]int32{int32(dropData.SubDrop12CountRange[0]), int32(dropData.SubDrop12CountRange[1])} } dropData.SubDropList = append(dropData.SubDropList, &SubDrop{ Id: dropData.SubDrop12Id, diff --git a/gs/game/player_world.go b/gs/game/player_world.go index b3459c98..5c2c290b 100644 --- a/gs/game/player_world.go +++ b/gs/game/player_world.go @@ -404,11 +404,13 @@ func (g *Game) doRandDropFull(dropDataConfig *gdconf.DropData) map[uint32]uint32 dropMap := g.doRandDropOnce(dropList[0]) dropList = dropList[1:] for dropId, count := range dropMap { + // 掉落id优先在掉落表里找 找不到就去道具表里找 subDropDataConfig := gdconf.GetDropDataById(dropId) if subDropDataConfig != nil { // 添加子掉落 dropList = append(dropList, subDropDataConfig) } else { + // 添加道具 itemMap[uint32(dropId)] += uint32(count) } }