优化场景LUA处理

This commit is contained in:
flswld
2023-03-03 11:48:42 +08:00
parent 58b98f189d
commit 353403606d
9 changed files with 201 additions and 63 deletions

View File

@@ -158,16 +158,18 @@ func (g *GameDataConfig) readCsvFileData(fileName string) []byte {
return standardCsvData return standardCsvData
} }
func RegScriptLib(fnName string, fn lua.LGFunction) { type ScriptLibFunc struct {
for _, sceneLuaConfig := range CONF.SceneLuaConfigMap { fnName string
for _, block := range sceneLuaConfig.BlockMap { fn lua.LGFunction
for _, group := range block.GroupMap { }
luaState := group.LuaState
scriptLib := luaState.NewTable() var SCRIPT_LIB_FUNC_LIST = make([]*ScriptLibFunc, 0)
luaState.SetField(scriptLib, fnName, luaState.NewFunction(fn))
} func RegScriptLibFunc(fnName string, fn lua.LGFunction) {
} SCRIPT_LIB_FUNC_LIST = append(SCRIPT_LIB_FUNC_LIST, &ScriptLibFunc{
} fnName: fnName,
fn: fn,
})
} }
func initLuaState(luaState *lua.LState) { func initLuaState(luaState *lua.LState) {
@@ -181,6 +183,9 @@ func initLuaState(luaState *lua.LState) {
luaState.SetGlobal("EntityType", entityType) luaState.SetGlobal("EntityType", entityType)
luaState.SetField(entityType, "NONE", lua.LNumber(constant.ENTITY_TYPE_NONE)) luaState.SetField(entityType, "NONE", lua.LNumber(constant.ENTITY_TYPE_NONE))
luaState.SetField(entityType, "AVATAR", lua.LNumber(constant.ENTITY_TYPE_AVATAR)) luaState.SetField(entityType, "AVATAR", lua.LNumber(constant.ENTITY_TYPE_AVATAR))
luaState.SetField(entityType, "MONSTER", lua.LNumber(constant.ENTITY_TYPE_MONSTER))
luaState.SetField(entityType, "NPC", lua.LNumber(constant.ENTITY_TYPE_NPC))
luaState.SetField(entityType, "GADGET", lua.LNumber(constant.ENTITY_TYPE_GADGET))
regionShape := luaState.NewTable() regionShape := luaState.NewTable()
luaState.SetGlobal("RegionShape", regionShape) luaState.SetGlobal("RegionShape", regionShape)
@@ -192,8 +197,11 @@ func initLuaState(luaState *lua.LState) {
questState := luaState.NewTable() questState := luaState.NewTable()
luaState.SetGlobal("QuestState", questState) luaState.SetGlobal("QuestState", questState)
luaState.SetField(questState, "NONE", lua.LNumber(0)) luaState.SetField(questState, "NONE", lua.LNumber(constant.QUEST_STATE_NONE))
luaState.SetField(questState, "UNFINISHED", lua.LNumber(1)) luaState.SetField(questState, "UNSTARTED", lua.LNumber(constant.QUEST_STATE_UNSTARTED))
luaState.SetField(questState, "UNFINISHED", lua.LNumber(constant.QUEST_STATE_UNFINISHED))
luaState.SetField(questState, "FINISHED", lua.LNumber(constant.QUEST_STATE_FINISHED))
luaState.SetField(questState, "FAILED", lua.LNumber(constant.QUEST_STATE_FAILED))
gadgetState := luaState.NewTable() gadgetState := luaState.NewTable()
luaState.SetGlobal("GadgetState", gadgetState) luaState.SetGlobal("GadgetState", gadgetState)
@@ -228,7 +236,7 @@ func newLuaState(luaStr string) *lua.LState {
return luaState return luaState
} }
func parseLuaTableToObject[T any](luaState *lua.LState, tableName string, object T) bool { func getSceneLuaConfigTable[T any](luaState *lua.LState, tableName string, object T) bool {
luaValue := luaState.GetGlobal(tableName) luaValue := luaState.GetGlobal(tableName)
table, ok := luaValue.(*lua.LTable) table, ok := luaValue.(*lua.LTable)
if !ok { if !ok {
@@ -269,6 +277,24 @@ func parseLuaTableToObject[T any](luaState *lua.LState, tableName string, object
return true return true
} }
func ParseLuaTableToObject[T any](table *lua.LTable, object T) bool {
tableObject := convLuaValueToGo(table)
jsonData, err := json.Marshal(tableObject)
if err != nil {
logger.Error("build json error: %v", err)
return false
}
if string(jsonData) == "{}" {
return true
}
err = json.Unmarshal(jsonData, object)
if err != nil {
logger.Error("parse json error: %v", err)
return false
}
return true
}
func convLuaValueToGo(lv lua.LValue) any { func convLuaValueToGo(lv lua.LValue) any {
switch v := lv.(type) { switch v := lv.(type) {
case *lua.LNilType: case *lua.LNilType:

View File

@@ -68,6 +68,18 @@ type Group struct {
LuaState *lua.LState `json:"-"` LuaState *lua.LState `json:"-"`
} }
func (g *Group) GetLuaState() *lua.LState {
if g.LuaState == nil {
g.LuaState = newLuaState(g.LuaStr)
scriptLib := g.LuaState.NewTable()
g.LuaState.SetGlobal("ScriptLib", scriptLib)
for _, scriptLibFunc := range SCRIPT_LIB_FUNC_LIST {
g.LuaState.SetField(scriptLib, scriptLibFunc.fnName, g.LuaState.NewFunction(scriptLibFunc.fn))
}
}
return g.LuaState
}
type Replaceable struct { type Replaceable struct {
Value bool `json:"value"` Value bool `json:"value"`
Version int32 `json:"version"` Version int32 `json:"version"`
@@ -137,12 +149,12 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
} }
group.LuaStr = string(groupLuaData) group.LuaStr = string(groupLuaData)
luaState := newLuaState(group.LuaStr) luaState := newLuaState(group.LuaStr)
group.LuaState = luaState
// monsters // monsters
group.MonsterList = make([]*Monster, 0) group.MonsterList = make([]*Monster, 0)
ok := parseLuaTableToObject[*[]*Monster](luaState, "monsters", &group.MonsterList) ok := getSceneLuaConfigTable[*[]*Monster](luaState, "monsters", &group.MonsterList)
if !ok { if !ok {
logger.Error("get monsters object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId) logger.Error("get monsters object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId)
luaState.Close()
return return
} }
for _, monster := range group.MonsterList { for _, monster := range group.MonsterList {
@@ -150,9 +162,10 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
} }
// npcs // npcs
group.NpcList = make([]*Npc, 0) group.NpcList = make([]*Npc, 0)
ok = parseLuaTableToObject[*[]*Npc](luaState, "npcs", &group.NpcList) ok = getSceneLuaConfigTable[*[]*Npc](luaState, "npcs", &group.NpcList)
if !ok { if !ok {
logger.Error("get npcs object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId) logger.Error("get npcs object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId)
luaState.Close()
return return
} }
for _, npc := range group.NpcList { for _, npc := range group.NpcList {
@@ -160,9 +173,10 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
} }
// gadgets // gadgets
group.GadgetList = make([]*Gadget, 0) group.GadgetList = make([]*Gadget, 0)
ok = parseLuaTableToObject[*[]*Gadget](luaState, "gadgets", &group.GadgetList) ok = getSceneLuaConfigTable[*[]*Gadget](luaState, "gadgets", &group.GadgetList)
if !ok { if !ok {
logger.Error("get gadgets object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId) logger.Error("get gadgets object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId)
luaState.Close()
return return
} }
for _, gadget := range group.GadgetList { for _, gadget := range group.GadgetList {
@@ -170,18 +184,21 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
} }
// regions // regions
group.RegionList = make([]*Region, 0) group.RegionList = make([]*Region, 0)
ok = parseLuaTableToObject[*[]*Region](luaState, "regions", &group.RegionList) ok = getSceneLuaConfigTable[*[]*Region](luaState, "regions", &group.RegionList)
if !ok { if !ok {
logger.Error("get regions object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId) logger.Error("get regions object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId)
luaState.Close()
return return
} }
// triggers // triggers
group.TriggerList = make([]*Trigger, 0) group.TriggerList = make([]*Trigger, 0)
ok = parseLuaTableToObject[*[]*Trigger](luaState, "triggers", &group.TriggerList) ok = getSceneLuaConfigTable[*[]*Trigger](luaState, "triggers", &group.TriggerList)
if !ok { if !ok {
logger.Error("get triggers object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId) logger.Error("get triggers object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId)
luaState.Close()
return return
} }
luaState.Close()
block.groupMapLoadLock.Lock() block.groupMapLoadLock.Lock()
block.GroupMap[group.Id] = group block.GroupMap[group.Id] = group
block.groupMapLoadLock.Unlock() block.groupMapLoadLock.Unlock()
@@ -204,7 +221,7 @@ func (g *GameDataConfig) loadSceneLuaConfig() {
sceneLuaConfig.Id = sceneId sceneLuaConfig.Id = sceneId
// scene_config // scene_config
sceneLuaConfig.SceneConfig = new(SceneConfig) sceneLuaConfig.SceneConfig = new(SceneConfig)
ok := parseLuaTableToObject[*SceneConfig](luaState, "scene_config", sceneLuaConfig.SceneConfig) ok := getSceneLuaConfigTable[*SceneConfig](luaState, "scene_config", sceneLuaConfig.SceneConfig)
if !ok { if !ok {
logger.Error("get scene_config object error, sceneId: %v", sceneId) logger.Error("get scene_config object error, sceneId: %v", sceneId)
luaState.Close() luaState.Close()
@@ -213,7 +230,7 @@ func (g *GameDataConfig) loadSceneLuaConfig() {
sceneLuaConfig.BlockMap = make(map[int32]*Block) sceneLuaConfig.BlockMap = make(map[int32]*Block)
// blocks // blocks
blockIdList := make([]int32, 0) blockIdList := make([]int32, 0)
ok = parseLuaTableToObject[*[]int32](luaState, "blocks", &blockIdList) ok = getSceneLuaConfigTable[*[]int32](luaState, "blocks", &blockIdList)
if !ok { if !ok {
logger.Error("get blocks object error, sceneId: %v", sceneId) logger.Error("get blocks object error, sceneId: %v", sceneId)
luaState.Close() luaState.Close()
@@ -221,7 +238,7 @@ func (g *GameDataConfig) loadSceneLuaConfig() {
} }
// block_rects // block_rects
blockRectList := make([]*BlockRange, 0) blockRectList := make([]*BlockRange, 0)
ok = parseLuaTableToObject[*[]*BlockRange](luaState, "block_rects", &blockRectList) ok = getSceneLuaConfigTable[*[]*BlockRange](luaState, "block_rects", &blockRectList)
luaState.Close() luaState.Close()
if !ok { if !ok {
logger.Error("get block_rects object error, sceneId: %v", sceneId) logger.Error("get block_rects object error, sceneId: %v", sceneId)
@@ -244,7 +261,7 @@ func (g *GameDataConfig) loadSceneLuaConfig() {
// groups // groups
block.GroupMap = make(map[int32]*Group) block.GroupMap = make(map[int32]*Group)
groupList := make([]*Group, 0) groupList := make([]*Group, 0)
ok = parseLuaTableToObject[*[]*Group](luaState, "groups", &groupList) ok = getSceneLuaConfigTable[*[]*Group](luaState, "groups", &groupList)
luaState.Close() luaState.Close()
if !ok { if !ok {
logger.Error("get groups object error, sceneId: %v, blockId: %v", sceneId, blockId) logger.Error("get groups object error, sceneId: %v, blockId: %v", sceneId, blockId)

View File

@@ -1,8 +1,12 @@
package game package game
import ( import (
"hk4e/common/constant"
"hk4e/gdconf" "hk4e/gdconf"
"hk4e/pkg/logger" "hk4e/pkg/logger"
"hk4e/pkg/object"
"hk4e/protocol/cmd"
"hk4e/protocol/proto"
lua "github.com/yuin/gopher-lua" lua "github.com/yuin/gopher-lua"
) )
@@ -50,21 +54,26 @@ func CallLuaFunc(luaState *lua.LState, luaFuncName string, luaCtx *LuaCtx, luaEv
Protect: true, Protect: true,
}, ctx, evt) }, ctx, evt)
if err != nil { if err != nil {
logger.Error("call lua error: %v", err) logger.Error("call lua error, func: %v, error: %v", luaFuncName, err)
return false return false
} }
luaRet := luaState.Get(-1) luaRet := luaState.Get(-1)
luaState.Pop(1) luaState.Pop(1)
ret, ok := luaRet.(lua.LBool) switch luaRet.(type) {
if !ok { case lua.LBool:
return bool(luaRet.(lua.LBool))
case lua.LNumber:
return object.ConvRetCodeToBool(int64(luaRet.(lua.LNumber)))
default:
return false return false
} }
return bool(ret)
} }
func RegLuaLibFunc() { func RegLuaLibFunc() {
gdconf.RegScriptLib("GetEntityType", GetEntityType) gdconf.RegScriptLibFunc("GetEntityType", GetEntityType)
gdconf.RegScriptLib("GetQuestState", GetQuestState) gdconf.RegScriptLibFunc("GetQuestState", GetQuestState)
gdconf.RegScriptLibFunc("PrintContextLog", PrintContextLog)
gdconf.RegScriptLibFunc("BeginCameraSceneLook", BeginCameraSceneLook)
} }
func GetEntityType(luaState *lua.LState) int { func GetEntityType(luaState *lua.LState) int {
@@ -76,15 +85,19 @@ func GetEntityType(luaState *lua.LState) int {
func GetQuestState(luaState *lua.LState) int { func GetQuestState(luaState *lua.LState) int {
ctx, ok := luaState.Get(1).(*lua.LTable) ctx, ok := luaState.Get(1).(*lua.LTable)
if !ok { if !ok {
luaState.Push(lua.LNumber(0)) luaState.Push(lua.LNumber(constant.QUEST_STATE_NONE))
return 1 return 1
} }
uid, ok := luaState.GetField(ctx, "uid").(lua.LNumber) uid, ok := luaState.GetField(ctx, "uid").(lua.LNumber)
if !ok { if !ok {
luaState.Push(lua.LNumber(0)) luaState.Push(lua.LNumber(constant.QUEST_STATE_NONE))
return 1 return 1
} }
player := USER_MANAGER.GetOnlineUser(uint32(uid)) player := USER_MANAGER.GetOnlineUser(uint32(uid))
if player == nil {
luaState.Push(lua.LNumber(constant.QUEST_STATE_NONE))
return 1
}
entityId := luaState.ToInt(2) entityId := luaState.ToInt(2)
_ = entityId _ = entityId
questId := luaState.ToInt(3) questId := luaState.ToInt(3)
@@ -93,3 +106,45 @@ func GetQuestState(luaState *lua.LState) int {
luaState.Push(lua.LNumber(quest.State)) luaState.Push(lua.LNumber(quest.State))
return 1 return 1
} }
func PrintContextLog(luaState *lua.LState) int {
ctx, ok := luaState.Get(1).(*lua.LTable)
if !ok {
return 0
}
uid, ok := luaState.GetField(ctx, "uid").(lua.LNumber)
if !ok {
return 0
}
logInfo := luaState.ToString(2)
logger.Info("[LUA LOG] %v [UID %v]", logInfo, uid)
return 0
}
func BeginCameraSceneLook(luaState *lua.LState) int {
ctx, ok := luaState.Get(1).(*lua.LTable)
if !ok {
luaState.Push(lua.LNumber(-1))
return 1
}
uid, ok := luaState.GetField(ctx, "uid").(lua.LNumber)
if !ok {
luaState.Push(lua.LNumber(-1))
return 1
}
player := USER_MANAGER.GetOnlineUser(uint32(uid))
if player == nil {
luaState.Push(lua.LNumber(-1))
return 1
}
cameraLockInfo, ok := luaState.Get(2).(*lua.LTable)
if !ok {
luaState.Push(lua.LNumber(-1))
return 1
}
ntf := new(proto.BeginCameraSceneLookNotify)
gdconf.ParseLuaTableToObject(cameraLockInfo, ntf)
GAME_MANAGER.SendMsg(cmd.BeginCameraSceneLookNotify, player.PlayerID, player.ClientSeq, ntf)
luaState.Push(lua.LNumber(0))
return 1
}

View File

@@ -384,6 +384,7 @@ func (g *GameManager) AoiPlayerMove(player *model.Player, oldPos *model.Vector,
g.AddSceneEntityNotify(player, proto.VisionType_VISION_MEET, addEntityIdList, false, false) g.AddSceneEntityNotify(player, proto.VisionType_VISION_MEET, addEntityIdList, false, false)
// 场景区域触发器 // 场景区域触发器
dbQuest := player.GetDbQuest() dbQuest := player.GetDbQuest()
updateQuest := false
for _, group := range newVisionGroupMap { for _, group := range newVisionGroupMap {
for _, region := range group.RegionList { for _, region := range group.RegionList {
shape := alg.NewShape() shape := alg.NewShape()
@@ -416,49 +417,79 @@ func (g *GameManager) AoiPlayerMove(player *model.Player, oldPos *model.Vector,
Z: float32(newPos.Z), Z: float32(newPos.Z),
}) })
if !oldPosInRegion && newPosInRegion { if !oldPosInRegion && newPosInRegion {
// EVENT_ENTER_REGION
logger.Debug("player enter region: %v, uid: %v", region, player.PlayerID) logger.Debug("player enter region: %v, uid: %v", region, player.PlayerID)
for _, trigger := range group.TriggerList { for _, trigger := range group.TriggerList {
if trigger.Event != constant.LUA_EVENT_ENTER_REGION { if trigger.Event != constant.LUA_EVENT_ENTER_REGION {
continue continue
} }
cond := CallLuaFunc(group.LuaState, trigger.Condition, &LuaCtx{ cond := CallLuaFunc(group.GetLuaState(), trigger.Condition,
uid: player.PlayerID, &LuaCtx{uid: player.PlayerID},
}, &LuaEvt{ &LuaEvt{param1: region.ConfigId, targetEntityId: entityId})
param1: region.ConfigId,
targetEntityId: entityId,
})
if !cond { if !cond {
continue continue
} }
// TODO 这一块写得太炸裂了需要优化 ok := CallLuaFunc(group.GetLuaState(), trigger.Action,
for _, triggerDataConfig := range gdconf.GetTriggerDataMap() { &LuaCtx{uid: player.PlayerID},
if triggerDataConfig.TriggerName == trigger.Name { &LuaEvt{})
for _, quest := range dbQuest.GetQuestMap() { if !ok {
questDataConfig := gdconf.GetQuestDataById(int32(quest.QuestId)) continue
if questDataConfig == nil {
continue
}
for _, questCond := range questDataConfig.FinishCondList {
if questCond.Type != constant.QUEST_FINISH_COND_TYPE_TRIGGER_FIRE {
continue
}
if questCond.Param[0] != triggerDataConfig.TriggerId {
continue
}
dbQuest.ForceFinishQuest(quest.QuestId)
}
}
}
} }
updateQuest = g.TriggerFire(dbQuest, trigger)
} }
} else if oldPosInRegion && !newPosInRegion { } else if oldPosInRegion && !newPosInRegion {
// EVENT_LEAVE_REGION
logger.Debug("player leave region: %v, uid: %v", region, player.PlayerID) logger.Debug("player leave region: %v, uid: %v", region, player.PlayerID)
for _, trigger := range group.TriggerList {
if trigger.Event != constant.LUA_EVENT_LEAVE_REGION {
continue
}
cond := CallLuaFunc(group.GetLuaState(), trigger.Condition,
&LuaCtx{uid: player.PlayerID},
&LuaEvt{param1: region.ConfigId, targetEntityId: entityId})
if !cond {
continue
}
ok := CallLuaFunc(group.GetLuaState(), trigger.Action,
&LuaCtx{uid: player.PlayerID},
&LuaEvt{})
if !ok {
continue
}
}
} }
} }
} }
g.AcceptQuest(player, true) if updateQuest {
g.AcceptQuest(player, true)
}
}
func (g *GameManager) TriggerFire(dbQuest *model.DbQuest, trigger *gdconf.Trigger) bool {
// TODO 这一块写得太炸裂了需要优化
updateQuest := false
for _, triggerDataConfig := range gdconf.GetTriggerDataMap() {
if triggerDataConfig.TriggerName == trigger.Name {
for _, quest := range dbQuest.GetQuestMap() {
questDataConfig := gdconf.GetQuestDataById(int32(quest.QuestId))
if questDataConfig == nil {
continue
}
for _, questCond := range questDataConfig.FinishCondList {
if questCond.Type != constant.QUEST_FINISH_COND_TYPE_TRIGGER_FIRE {
continue
}
if len(questCond.Param) != 1 {
continue
}
if questCond.Param[0] != triggerDataConfig.TriggerId {
continue
}
dbQuest.ForceFinishQuest(quest.QuestId)
updateQuest = true
}
}
}
}
return updateQuest
} }
func (g *GameManager) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Message) { func (g *GameManager) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Message) {

View File

@@ -62,7 +62,7 @@ func (g *GameManager) AddQuestProgress(player *model.Player, req *proto.AddQuest
} }
// AcceptQuest 接取当前条件下能接取到的全部任务 // AcceptQuest 接取当前条件下能接取到的全部任务
func (g *GameManager) AcceptQuest(player *model.Player, isNtfClient bool) { func (g *GameManager) AcceptQuest(player *model.Player, notifyClient bool) {
dbQuest := player.GetDbQuest() dbQuest := player.GetDbQuest()
addQuestIdList := make([]uint32, 0) addQuestIdList := make([]uint32, 0)
for _, questData := range gdconf.GetQuestDataMap() { for _, questData := range gdconf.GetQuestDataMap() {
@@ -100,7 +100,7 @@ func (g *GameManager) AcceptQuest(player *model.Player, isNtfClient bool) {
addQuestIdList = append(addQuestIdList, uint32(questData.QuestId)) addQuestIdList = append(addQuestIdList, uint32(questData.QuestId))
} }
} }
if isNtfClient { if notifyClient {
ntf := &proto.QuestListUpdateNotify{ ntf := &proto.QuestListUpdateNotify{
QuestList: make([]*proto.Quest, 0), QuestList: make([]*proto.Quest, 0),
} }

View File

@@ -19,7 +19,7 @@ import (
const ( const (
ENTITY_MAX_BATCH_SEND_NUM = 1000 // 单次同步的最大实体数量 ENTITY_MAX_BATCH_SEND_NUM = 1000 // 单次同步的最大实体数量
ENTITY_LOD = 300 // 实体加载视野距离 ENTITY_LOD = 100 // 实体加载视野距离
) )
func (g *GameManager) EnterSceneReadyReq(player *model.Player, payloadMsg pb.Message) { func (g *GameManager) EnterSceneReadyReq(player *model.Player, payloadMsg pb.Message) {

View File

@@ -15,7 +15,7 @@ import (
const ( const (
ENTITY_NUM_UNLIMIT = false // 是否不限制场景内实体数量 ENTITY_NUM_UNLIMIT = false // 是否不限制场景内实体数量
ENTITY_MAX_SEND_NUM = 300 // 场景内最大实体数量 ENTITY_MAX_SEND_NUM = 500 // 场景内最大实体数量
MAX_MULTIPLAYER_WORLD_NUM = 10 // 本服务器最大多人世界数量 MAX_MULTIPLAYER_WORLD_NUM = 10 // 本服务器最大多人世界数量
) )

View File

@@ -128,6 +128,14 @@ func ConvInt64ToBool(v int64) bool {
} }
} }
func ConvRetCodeToBool(v int64) bool {
if v == 0 {
return true
} else {
return false
}
}
func ConvListToMap[T any](l []T) map[uint64]T { func ConvListToMap[T any](l []T) map[uint64]T {
ret := make(map[uint64]T) ret := make(map[uint64]T)
for index, value := range l { for index, value := range l {

View File

@@ -108,6 +108,7 @@ func (c *CmdProtoMap) registerAllMessage() {
c.registerMessage(DungeonWayPointNotify, &proto.DungeonWayPointNotify{}) // 地牢副本相关 c.registerMessage(DungeonWayPointNotify, &proto.DungeonWayPointNotify{}) // 地牢副本相关
c.registerMessage(DungeonDataNotify, &proto.DungeonDataNotify{}) // 地牢副本相关 c.registerMessage(DungeonDataNotify, &proto.DungeonDataNotify{}) // 地牢副本相关
c.registerMessage(SceneAudioNotify, &proto.SceneAudioNotify{}) // 场景风物之琴音乐同步通知 c.registerMessage(SceneAudioNotify, &proto.SceneAudioNotify{}) // 场景风物之琴音乐同步通知
c.registerMessage(BeginCameraSceneLookNotify, &proto.BeginCameraSceneLookNotify{}) // 场景镜头注目通知
// 战斗与同步 // 战斗与同步
c.registerMessage(AvatarFightPropNotify, &proto.AvatarFightPropNotify{}) // 角色战斗属性通知 c.registerMessage(AvatarFightPropNotify, &proto.AvatarFightPropNotify{}) // 角色战斗属性通知