From 13ee58cac9367de790388eb73ead3d87eb76c7e9 Mon Sep 17 00:00:00 2001 From: flswld Date: Tue, 28 Mar 2023 22:30:02 +0800 Subject: [PATCH] fix panic --- gs/game/audio_video.go | 26 ++++++++++++++++---------- gs/game/command_gm.go | 10 +++++++++- gs/game/player_scene.go | 12 ++++++------ gs/game/player_world.go | 2 +- gs/game/world_scene.go | 23 +++++++++++++++-------- 5 files changed, 47 insertions(+), 26 deletions(-) diff --git a/gs/game/audio_video.go b/gs/game/audio_video.go index fa54261b..a3bbb360 100644 --- a/gs/game/audio_video.go +++ b/gs/game/audio_video.go @@ -322,19 +322,25 @@ func UpdateFrame(rgb bool) { for h := 0; h < SCREEN_HEIGHT; h++ { // 创建像素点 if rgb { - entityId := scene.CreateEntityGadgetNormal(&model.Vector{ - X: leftTopPos.X - float64(w)*SCREEN_DPI, - Y: leftTopPos.Y - float64(h)*SCREEN_DPI, - Z: leftTopPos.Z, - }, new(model.Vector), uint32(FRAME_COLOR[w][h]), uint32(constant.GADGET_STATE_DEFAULT), nil, 0, 0) - SCREEN_ENTITY_ID_LIST = append(SCREEN_ENTITY_ID_LIST, entityId) - } else { - if !FRAME[w][h] { - entityId := scene.CreateEntityGadgetNormal(&model.Vector{ + entityId := scene.CreateEntityGadgetNormal( + &model.Vector{ X: leftTopPos.X - float64(w)*SCREEN_DPI, Y: leftTopPos.Y - float64(h)*SCREEN_DPI, Z: leftTopPos.Z, - }, new(model.Vector), uint32(GADGET_ID), uint32(constant.GADGET_STATE_DEFAULT), nil, 0, 0) + }, new(model.Vector), + uint32(FRAME_COLOR[w][h]), uint32(constant.GADGET_STATE_DEFAULT), + new(GadgetNormalEntity), 0, 0) + SCREEN_ENTITY_ID_LIST = append(SCREEN_ENTITY_ID_LIST, entityId) + } else { + if !FRAME[w][h] { + entityId := scene.CreateEntityGadgetNormal( + &model.Vector{ + X: leftTopPos.X - float64(w)*SCREEN_DPI, + Y: leftTopPos.Y - float64(h)*SCREEN_DPI, + Z: leftTopPos.Z, + }, new(model.Vector), + uint32(GADGET_ID), uint32(constant.GADGET_STATE_DEFAULT), + new(GadgetNormalEntity), 0, 0) SCREEN_ENTITY_ID_LIST = append(SCREEN_ENTITY_ID_LIST, entityId) } } diff --git a/gs/game/command_gm.go b/gs/game/command_gm.go index 7d4c5add..d9b8cf46 100644 --- a/gs/game/command_gm.go +++ b/gs/game/command_gm.go @@ -213,7 +213,7 @@ func (g *GMCmd) GMCreateGadget(userId uint32, posX, posY, posZ float64, gadgetId logger.Error("player is nil, uid: %v", userId) return } - GAME_MANAGER.CreateGadget(player, &model.Vector{ + GAME_MANAGER.CreateDropGadget(player, &model.Vector{ X: posX, Y: posY, Z: posZ, @@ -264,3 +264,11 @@ func (g *GMCmd) XLuaDebug(userId uint32, luacBase64 string) { }, }) } + +func (g *GMCmd) PlayAudio() { + PlayAudio() +} + +func (g *GMCmd) UpdateFrame(rgb bool) { + UpdateFrame(rgb) +} diff --git a/gs/game/player_scene.go b/gs/game/player_scene.go index 844442a0..a6ed0807 100644 --- a/gs/game/player_scene.go +++ b/gs/game/player_scene.go @@ -553,7 +553,7 @@ func (g *GameManager) KillEntity(player *model.Player, scene *Scene, entityId ui entity.fightProp[constant.FIGHT_PROP_CUR_HP] = 0 g.EntityFightPropUpdateNotifyBroadcast(scene.world, entity) // TODO - g.CreateGadget(player, entity.pos, 70600055, 104003, 10) + g.CreateDropGadget(player, entity.pos, 70600055, 104003, 10) } entity.lifeState = constant.LIFE_STATE_DEAD ntf := &proto.LifeStateChangeNotify{ @@ -668,7 +668,7 @@ func (g *GameManager) RemoveSceneGroup(player *model.Player, scene *Scene, group g.SendMsg(cmd.GroupUnloadNotify, player.PlayerID, player.ClientSeq, ntf) } -func (g *GameManager) CreateGadget(player *model.Player, pos *model.Vector, gadgetId, itemId, count uint32) { +func (g *GameManager) CreateDropGadget(player *model.Player, pos *model.Vector, gadgetId, itemId, count uint32) { world := WORLD_MANAGER.GetWorldByID(player.WorldId) if world == nil { logger.Error("get world is nil, worldId: %v", player.WorldId) @@ -684,6 +684,7 @@ func (g *GameManager) CreateGadget(player *model.Player, pos *model.Vector, gadg gadgetId, constant.GADGET_STATE_DEFAULT, &GadgetNormalEntity{ + isDrop: true, itemId: itemId, count: count, }, @@ -1155,9 +1156,8 @@ func (g *GameManager) PacketSceneGadgetInfoNormal(player *model.Player, entity * AuthorityPeerId: 1, } gadgetNormalEntity := gadgetEntity.GetGadgetNormalEntity() - dbItem := player.GetDbItem() - switch gadgetDataConfig.Type { - case constant.GADGET_TYPE_GADGET: + if gadgetNormalEntity.GetIsDrop() { + dbItem := player.GetDbItem() sceneGadgetInfo.Content = &proto.SceneGadgetInfo_TrifleItem{ TrifleItem: &proto.Item{ ItemId: gadgetNormalEntity.GetItemId(), @@ -1169,7 +1169,7 @@ func (g *GameManager) PacketSceneGadgetInfoNormal(player *model.Player, entity * }, }, } - case constant.GADGET_TYPE_GATHER_OBJECT: + } else if gadgetDataConfig.Type == constant.GADGET_TYPE_GATHER_OBJECT { sceneGadgetInfo.Content = &proto.SceneGadgetInfo_GatherGadget{ GatherGadget: &proto.GatherGadgetInfo{ ItemId: gadgetNormalEntity.GetItemId(), diff --git a/gs/game/player_world.go b/gs/game/player_world.go index 517a05b6..3d05a1a3 100644 --- a/gs/game/player_world.go +++ b/gs/game/player_world.go @@ -336,7 +336,7 @@ func (g *GameManager) GadgetInteractReq(player *model.Player, payloadMsg pb.Mess if req.OpType == proto.InterOpType_INTER_OP_FINISH { // 宝箱交互结束 开启宝箱 // TODO - g.CreateGadget(player, entity.pos, 70600055, 104003, 1) + g.CreateDropGadget(player, entity.pos, 70600055, 104003, 1) g.SendMsg(cmd.WorldChestOpenNotify, player.PlayerID, player.ClientSeq, &proto.WorldChestOpenNotify{ GroupId: entity.GetGroupId(), SceneId: scene.GetId(), diff --git a/gs/game/world_scene.go b/gs/game/world_scene.go index 29c4de55..de4dfba0 100644 --- a/gs/game/world_scene.go +++ b/gs/game/world_scene.go @@ -402,7 +402,9 @@ func (s *Scene) createConfigEntity(groupId uint32, entityConfig any) uint32 { uint32(gatherDataConfig.GadgetId), uint32(constant.GADGET_STATE_DEFAULT), &GadgetNormalEntity{ + isDrop: false, itemId: uint32(gatherDataConfig.ItemId), + count: 1, }, uint32(gadget.ConfigId), groupId, @@ -413,7 +415,7 @@ func (s *Scene) createConfigEntity(groupId uint32, entityConfig any) uint32 { &model.Vector{X: float64(gadget.Rot.X), Y: float64(gadget.Rot.Y), Z: float64(gadget.Rot.Z)}, uint32(gadget.GadgetId), uint32(gadget.State), - nil, + new(GadgetNormalEntity), uint32(gadget.ConfigId), groupId, ) @@ -426,21 +428,21 @@ func (s *Scene) createConfigEntity(groupId uint32, entityConfig any) uint32 { // TODO 临时写死 func getTempFightPropMap() map[uint32]float32 { fpm := map[uint32]float32{ - constant.FIGHT_PROP_CUR_HP: float32(72.91699), + constant.FIGHT_PROP_BASE_ATTACK: float32(50.0), + constant.FIGHT_PROP_CUR_ATTACK: float32(50.0), + constant.FIGHT_PROP_BASE_DEFENSE: float32(500.0), + constant.FIGHT_PROP_CUR_DEFENSE: float32(500.0), + constant.FIGHT_PROP_BASE_HP: float32(100000.0), + constant.FIGHT_PROP_CUR_HP: float32(100000.0), + constant.FIGHT_PROP_MAX_HP: float32(100000.0), constant.FIGHT_PROP_PHYSICAL_SUB_HURT: float32(0.1), - constant.FIGHT_PROP_CUR_DEFENSE: float32(505.0), - constant.FIGHT_PROP_CUR_ATTACK: float32(45.679916), constant.FIGHT_PROP_ICE_SUB_HURT: float32(0.1), - constant.FIGHT_PROP_BASE_ATTACK: float32(45.679916), - constant.FIGHT_PROP_MAX_HP: float32(72.91699), constant.FIGHT_PROP_FIRE_SUB_HURT: float32(0.1), constant.FIGHT_PROP_ELEC_SUB_HURT: float32(0.1), constant.FIGHT_PROP_WIND_SUB_HURT: float32(0.1), constant.FIGHT_PROP_ROCK_SUB_HURT: float32(0.1), constant.FIGHT_PROP_GRASS_SUB_HURT: float32(0.1), constant.FIGHT_PROP_WATER_SUB_HURT: float32(0.1), - constant.FIGHT_PROP_BASE_HP: float32(72.91699), - constant.FIGHT_PROP_BASE_DEFENSE: float32(505.0), } return fpm } @@ -674,10 +676,15 @@ func (g *GadgetEntity) GetGadgetVehicleEntity() *GadgetVehicleEntity { } type GadgetNormalEntity struct { + isDrop bool itemId uint32 count uint32 } +func (g *GadgetNormalEntity) GetIsDrop() bool { + return g.isDrop +} + func (g *GadgetNormalEntity) GetItemId() uint32 { return g.itemId }