From 58b98f189d08bc7f5483b035308f7b551cf9d8f9 Mon Sep 17 00:00:00 2001 From: flswld Date: Thu, 2 Mar 2023 19:32:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=BA=E6=99=AFLUA=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant/action_reason.go | 177 --------------------- common/constant/climate_type.go | 14 +- common/constant/enter_reason.go | 36 ----- common/constant/entity_id_type.go | 11 -- common/constant/entity_type.go | 70 ++------- common/constant/equip_type.go | 14 +- common/constant/fetter_state.go | 8 +- common/constant/fight_property.go | 192 +++++++++++------------ common/constant/gcg_token_type.go | 8 +- common/constant/grow_curve.go | 120 +++++++------- common/constant/item_type.go | 14 +- common/constant/life_state.go | 8 +- common/constant/lua_type.go | 132 ++++++++++++++++ common/constant/material_type.go | 58 +++---- common/constant/quest_type.go | 161 ++++++++++++++++++- common/constant/reliquary_type.go | 12 +- common/constant/scene_type.go | 14 +- common/constant/weapon_type.go | 28 ++-- fight/engine/fight_engine.go | 10 +- gdconf/avatar_data.go | 22 +-- gdconf/game_data_config.go | 17 +- gdconf/item_data.go | 2 +- gdconf/scene_lua_config.go | 35 ++++- gs/game/command_gm.go | 4 +- gs/game/local_event_manager.go | 2 + gs/game/player_avatar.go | 4 +- gs/game/player_equip.go | 2 +- gs/game/player_fight_sync.go | 250 ++++++++++++++++++++++-------- gs/game/player_gcg.go | 2 +- gs/game/player_item.go | 6 +- gs/game/player_login.go | 6 +- gs/game/player_map.go | 9 +- gs/game/player_multiplayer.go | 2 +- gs/game/player_quest.go | 6 +- gs/game/player_reliquary.go | 2 +- gs/game/player_scene.go | 86 +++++----- gs/game/player_shop.go | 3 +- gs/game/player_stamina.go | 2 +- gs/game/player_weapon.go | 6 +- gs/game/tick_manager.go | 6 +- gs/game/video_player.go | 5 +- gs/game/world_manager.go | 194 +++++++++++------------ gs/game/world_scene.go | 120 +++++++------- gs/model/db_avatar.go | 30 ++-- gs/model/db_quest.go | 12 +- 45 files changed, 1044 insertions(+), 878 deletions(-) delete mode 100644 common/constant/action_reason.go delete mode 100644 common/constant/enter_reason.go delete mode 100644 common/constant/entity_id_type.go create mode 100644 common/constant/lua_type.go diff --git a/common/constant/action_reason.go b/common/constant/action_reason.go deleted file mode 100644 index b751d530..00000000 --- a/common/constant/action_reason.go +++ /dev/null @@ -1,177 +0,0 @@ -package constant - -const ( - ActionReasonNone uint16 = 0 - ActionReasonQuestItem uint16 = 1 - ActionReasonQuestReward uint16 = 2 - ActionReasonTrifle uint16 = 3 - ActionReasonShop uint16 = 4 - ActionReasonPlayerUpgradeReward uint16 = 5 - ActionReasonAddAvatar uint16 = 6 - ActionReasonGadgetEnvAnimal uint16 = 7 - ActionReasonMonsterEnvAnimal uint16 = 8 - ActionReasonCompound uint16 = 9 - ActionReasonCook uint16 = 10 - ActionReasonGather uint16 = 11 - ActionReasonMailAttachment uint16 = 12 - ActionReasonCityLevelupReturn uint16 = 15 - ActionReasonCityLevelupReward uint16 = 17 - ActionReasonAreaExploreReward uint16 = 18 - ActionReasonUnlockPointReward uint16 = 19 - ActionReasonDungeonFirstPass uint16 = 20 - ActionReasonDungeonPass uint16 = 21 - ActionReasonChangeElemType uint16 = 23 - ActionReasonFetterOpen uint16 = 25 - ActionReasonDailyTaskScore uint16 = 26 - ActionReasonDailyTaskHost uint16 = 27 - ActionReasonRandTaskHost uint16 = 28 - ActionReasonExpedition uint16 = 29 - ActionReasonGacha uint16 = 30 - ActionReasonCombine uint16 = 31 - ActionReasonRandTaskGuest uint16 = 32 - ActionReasonDailyTaskGuest uint16 = 33 - ActionReasonForgeOutput uint16 = 34 - ActionReasonForgeReturn uint16 = 35 - ActionReasonInitAvatar uint16 = 36 - ActionReasonMonsterDie uint16 = 37 - ActionReasonGm uint16 = 38 - ActionReasonOpenChest uint16 = 39 - ActionReasonGadgetDie uint16 = 40 - ActionReasonMonsterChangeHp uint16 = 41 - ActionReasonSubfieldDrop uint16 = 42 - ActionReasonPushTipsReward uint16 = 43 - ActionReasonActivityMonsterDrop uint16 = 44 - ActionReasonActivityGather uint16 = 45 - ActionReasonActivitySubfieldDrop uint16 = 46 - ActionReasonTowerScheduleReward uint16 = 47 - ActionReasonTowerFloorStarReward uint16 = 48 - ActionReasonTowerFirstPassReward uint16 = 49 - ActionReasonTowerDailyReward uint16 = 50 - ActionReasonHitClientTrivialEntity uint16 = 51 - ActionReasonOpenWorldBossChest uint16 = 52 - ActionReasonMaterialDeleteReturn uint16 = 53 - ActionReasonSignInReward uint16 = 54 - ActionReasonOpenBlossomChest uint16 = 55 - ActionReasonRecharge uint16 = 56 - ActionReasonBonusActivityReward uint16 = 57 - ActionReasonTowerCommemorativeReward uint16 = 58 - ActionReasonTowerSkipFloorReward uint16 = 59 - ActionReasonRechargeBonus uint16 = 60 - ActionReasonRechargeCard uint16 = 61 - ActionReasonRechargeCardDaily uint16 = 62 - ActionReasonRechargeCardReplace uint16 = 63 - ActionReasonRechargeCardReplaceFree uint16 = 64 - ActionReasonRechargePlayReplace uint16 = 65 - ActionReasonMpPlayTakeReward uint16 = 66 - ActionReasonActivityWatcher uint16 = 67 - ActionReasonSalesmanDeliverItem uint16 = 68 - ActionReasonSalesmanReward uint16 = 69 - ActionReasonRebate uint16 = 70 - ActionReasonMcoinExchangeHcoin uint16 = 71 - ActionReasonDailyTaskExchangeLegendaryKey uint16 = 72 - ActionReasonUnlockPersonLine uint16 = 73 - ActionReasonFetterLevelReward uint16 = 74 - ActionReasonBuyResin uint16 = 75 - ActionReasonRechargePackage uint16 = 76 - ActionReasonDeliveryDailyReward uint16 = 77 - ActionReasonCityReputationLevel uint16 = 78 - ActionReasonCityReputationQuest uint16 = 79 - ActionReasonCityReputationRequest uint16 = 80 - ActionReasonCityReputationExplore uint16 = 81 - ActionReasonOffergingLevel uint16 = 82 - ActionReasonRoutineHost uint16 = 83 - ActionReasonRoutineGuest uint16 = 84 - ActionReasonTreasureMapSpotToken uint16 = 89 - ActionReasonTreasureMapBonusLevelReward uint16 = 90 - ActionReasonTreasureMapMpReward uint16 = 91 - ActionReasonConvert uint16 = 92 - ActionReasonOverflowTransform uint16 = 93 - ActionReasonActivityAvatarSelectionReward uint16 = 96 - ActionReasonActivityWatcherBatch uint16 = 97 - ActionReasonHitTreeDrop uint16 = 98 - ActionReasonGetHomeLevelupReward uint16 = 99 - ActionReasonHomeDefaultFurniture uint16 = 100 - ActionReasonActivityCond uint16 = 101 - ActionReasonBattlePassNotify uint16 = 102 - ActionReasonPlayerUseItem uint16 = 1001 - ActionReasonDropItem uint16 = 1002 - ActionReasonWeaponUpgrade uint16 = 1011 - ActionReasonWeaponPromote uint16 = 1012 - ActionReasonWeaponAwaken uint16 = 1013 - ActionReasonRelicUpgrade uint16 = 1014 - ActionReasonAbility uint16 = 1015 - ActionReasonDungeonStatueDrop uint16 = 1016 - ActionReasonOfflineMsg uint16 = 1017 - ActionReasonAvatarUpgrade uint16 = 1018 - ActionReasonAvatarPromote uint16 = 1019 - ActionReasonQuestAction uint16 = 1021 - ActionReasonCityLevelup uint16 = 1022 - ActionReasonUpgradeSkill uint16 = 1024 - ActionReasonUnlockTalent uint16 = 1025 - ActionReasonUpgradeProudSkill uint16 = 1026 - ActionReasonPlayerLevelLimitUp uint16 = 1027 - ActionReasonDungeonDaily uint16 = 1028 - ActionReasonItemGiving uint16 = 1030 - ActionReasonForgeCost uint16 = 1031 - ActionReasonInvestigationReward uint16 = 1032 - ActionReasonInvestigationTargetReward uint16 = 1033 - ActionReasonGadgetInteract uint16 = 1034 - ActionReasonSeaLampCiMaterial uint16 = 1036 - ActionReasonSeaLampContributionReward uint16 = 1037 - ActionReasonSeaLampPhaseReward uint16 = 1038 - ActionReasonSeaLampFlyLamp uint16 = 1039 - ActionReasonAutoRecover uint16 = 1040 - ActionReasonActivityExpireItem uint16 = 1041 - ActionReasonSubCoinNegative uint16 = 1042 - ActionReasonBargainDeduct uint16 = 1043 - ActionReasonBattlePassPaidReward uint16 = 1044 - ActionReasonBattlePassLevelReward uint16 = 1045 - ActionReasonTrialAvatarActivityFirstPassReward uint16 = 1046 - ActionReasonBuyBattlePassLevel uint16 = 1047 - ActionReasonGrantBirthdayBenefit uint16 = 1048 - ActionReasonAchievementReward uint16 = 1049 - ActionReasonAchievementGoalReward uint16 = 1050 - ActionReasonFirstShareToSocialNetwork uint16 = 1051 - ActionReasonDestroyMaterial uint16 = 1052 - ActionReasonCodexLevelupReward uint16 = 1053 - ActionReasonHuntingOfferReward uint16 = 1054 - ActionReasonUseWidgetAnchorPoint uint16 = 1055 - ActionReasonUseWidgetBonfire uint16 = 1056 - ActionReasonUngradeWeaponReturnMaterial uint16 = 1057 - ActionReasonUseWidgetOneoffGatherPointDetector uint16 = 1058 - ActionReasonUseWidgetClientCollector uint16 = 1059 - ActionReasonUseWidgetClientDetector uint16 = 1060 - ActionReasonTakeGeneralReward uint16 = 1061 - ActionReasonAsterTakeSpecialReward uint16 = 1062 - ActionReasonRemoveCodexBook uint16 = 1063 - ActionReasonOfferingItem uint16 = 1064 - ActionReasonUseWidgetGadgetBuilder uint16 = 1065 - ActionReasonEffigyFirstPassReward uint16 = 1066 - ActionReasonEffigyReward uint16 = 1067 - ActionReasonReunionFirstGiftReward uint16 = 1068 - ActionReasonReunionSignInReward uint16 = 1069 - ActionReasonReunionWatcherReward uint16 = 1070 - ActionReasonSalesmanMpReward uint16 = 1071 - ActionReasonActionReasionAvatarPromoteReward uint16 = 1072 - ActionReasonBlessingRedeemReward uint16 = 1073 - ActionReasonActionMiracleRingReward uint16 = 1074 - ActionReasonExpeditionReward uint16 = 1075 - ActionReasonTreasureMapRemoveDetector uint16 = 1076 - ActionReasonMechanicusDungeonTicket uint16 = 1077 - ActionReasonMechanicusLevelupGear uint16 = 1078 - ActionReasonMechanicusBattleSettle uint16 = 1079 - ActionReasonRegionSearchReward uint16 = 1080 - ActionReasonUnlockCoopChapter uint16 = 1081 - ActionReasonTakeCoopReward uint16 = 1082 - ActionReasonFleurFairDungeonReward uint16 = 1083 - ActionReasonActivityScore uint16 = 1084 - ActionReasonChannellerSlabOneoffDungeonReward uint16 = 1085 - ActionReasonFurnitureMakeStart uint16 = 1086 - ActionReasonFurnitureMakeTake uint16 = 1087 - ActionReasonFurnitureMakeCancel uint16 = 1088 - ActionReasonFurnitureMakeFastFinish uint16 = 1089 - ActionReasonChannellerSlabLoopDungeonFirstPassReward uint16 = 1090 - ActionReasonChannellerSlabLoopDungeonScoreReward uint16 = 1091 - ActionReasonHomeLimitedShopBuy uint16 = 1092 - ActionReasonHomeCoinCollect uint16 = 1093 -) diff --git a/common/constant/climate_type.go b/common/constant/climate_type.go index 439bae0d..0e702f3b 100644 --- a/common/constant/climate_type.go +++ b/common/constant/climate_type.go @@ -1,11 +1,11 @@ package constant const ( - CLIMATE_TYPE_NONE uint16 = 0 - CLIMATE_TYPE_SUNNY uint16 = 1 - CLIMATE_TYPE_CLOUDY uint16 = 2 - CLIMATE_TYPE_RAIN uint16 = 3 - CLIMATE_TYPE_THUNDERSTORM uint16 = 4 - CLIMATE_TYPE_SNOW uint16 = 5 - CLIMATE_TYPE_MIST uint16 = 6 + CLIMATE_TYPE_NONE = 0 + CLIMATE_TYPE_SUNNY = 1 + CLIMATE_TYPE_CLOUDY = 2 + CLIMATE_TYPE_RAIN = 3 + CLIMATE_TYPE_THUNDERSTORM = 4 + CLIMATE_TYPE_SNOW = 5 + CLIMATE_TYPE_MIST = 6 ) diff --git a/common/constant/enter_reason.go b/common/constant/enter_reason.go deleted file mode 100644 index 45466b5e..00000000 --- a/common/constant/enter_reason.go +++ /dev/null @@ -1,36 +0,0 @@ -package constant - -const ( - EnterReasonNone uint16 = 0 - EnterReasonLogin uint16 = 1 // 登录 - EnterReasonDungeonReplay uint16 = 11 // 秘境重新挑战 - EnterReasonDungeonReviveOnWaypoint uint16 = 12 // 秘境重生 - EnterReasonDungeonEnter uint16 = 13 // 秘境进入 - EnterReasonDungeonQuit uint16 = 14 // 秘境离开 - EnterReasonGm uint16 = 21 // 管理员 - EnterReasonQuestRollback uint16 = 31 // 任务回滚 - EnterReasonRevival uint16 = 32 // 重生 - EnterReasonPersonalScene uint16 = 41 // 个人场景 - EnterReasonTransPoint uint16 = 42 // 传送点 - EnterReasonClientTransmit uint16 = 43 // 客户端传送 - EnterReasonForceDragBack uint16 = 44 // 强制后退 - EnterReasonTeamKick uint16 = 51 // 队伍踢出 - EnterReasonTeamJoin uint16 = 52 // 队伍加入 - EnterReasonTeamBack uint16 = 53 // 队伍返回 - EnterReasonMuip uint16 = 54 // 与原神项目组的某个服务器组件相关 - EnterReasonDungeonInviteAccept uint16 = 55 // 秘境邀请接受 - EnterReasonLua uint16 = 56 // 脚本 - EnterReasonActivityLoadTerrain uint16 = 57 // 活动加载地形 - EnterReasonHostFromSingleToMp uint16 = 58 // 房主从单人到多人 - EnterReasonMpPlay uint16 = 59 // 多人游戏 - EnterReasonAnchorPoint uint16 = 60 // 迷你锚点 - EnterReasonLuaSkipUi uint16 = 61 // 脚本跳过UI - EnterReasonReloadTerrain uint16 = 62 // 重载地形 - EnterReasonDraftTransfer uint16 = 63 // 某个东西传送 ?? - EnterReasonEnterHome uint16 = 64 // 进入尘歌壶 - EnterReasonExitHome uint16 = 65 // 离开尘歌壶 - EnterReasonChangeHomeModule uint16 = 66 // 更改尘歌壶模块 - EnterReasonGallery uint16 = 67 // ?? - EnterReasonHomeSceneJump uint16 = 68 // 尘歌壶场景跳转 - EnterReasonHideAndSeek uint16 = 69 // 捉迷藏也就是风行迷宗 -) diff --git a/common/constant/entity_id_type.go b/common/constant/entity_id_type.go deleted file mode 100644 index 846e8814..00000000 --- a/common/constant/entity_id_type.go +++ /dev/null @@ -1,11 +0,0 @@ -package constant - -const ( - ENTITY_ID_TYPE_AVATAR uint16 = 0x01 - ENTITY_ID_TYPE_MONSTER uint16 = 0x02 - ENTITY_ID_TYPE_NPC uint16 = 0x03 - ENTITY_ID_TYPE_GADGET uint16 = 0x04 - ENTITY_ID_TYPE_WEAPON uint16 = 0x06 - ENTITY_ID_TYPE_TEAM uint16 = 0x09 - ENTITY_ID_TYPE_MPLEVEL uint16 = 0x0b -) diff --git a/common/constant/entity_type.go b/common/constant/entity_type.go index 7dd0db2b..6b71f630 100644 --- a/common/constant/entity_type.go +++ b/common/constant/entity_type.go @@ -1,59 +1,19 @@ package constant const ( - EntityTypeNone uint16 = 0 - EntityTypeAvatar uint16 = 1 - EntityTypeMonster uint16 = 2 - EntityTypeBullet uint16 = 3 - EntityTypeAttackPhyisicalUnit uint16 = 4 - EntityTypeAOE uint16 = 5 - EntityTypeCamera uint16 = 6 - EntityTypeEnviroArea uint16 = 7 - EntityTypeEquip uint16 = 8 - EntityTypeMonsterEquip uint16 = 9 - EntityTypeGrass uint16 = 10 - EntityTypeLevel uint16 = 11 - EntityTypeNPC uint16 = 12 - EntityTypeTransPointFirst uint16 = 13 - EntityTypeTransPointFirstGadget uint16 = 14 - EntityTypeTransPointSecond uint16 = 15 - EntityTypeTransPointSecondGadget uint16 = 16 - EntityTypeDropItem uint16 = 17 - EntityTypeField uint16 = 18 - EntityTypeGadget uint16 = 19 - EntityTypeWater uint16 = 20 - EntityTypeGatherPoint uint16 = 21 - EntityTypeGatherObject uint16 = 22 - EntityTypeAirflowField uint16 = 23 - EntityTypeSpeedupField uint16 = 24 - EntityTypeGear uint16 = 25 - EntityTypeChest uint16 = 26 - EntityTypeEnergyBall uint16 = 27 - EntityTypeElemCrystal uint16 = 28 - EntityTypeTimeline uint16 = 29 - EntityTypeWorktop uint16 = 30 - EntityTypeTeam uint16 = 31 - EntityTypePlatform uint16 = 32 - EntityTypeAmberWind uint16 = 33 - EntityTypeEnvAnimal uint16 = 34 - EntityTypeSealGadget uint16 = 35 - EntityTypeTree uint16 = 36 - EntityTypeBush uint16 = 37 - EntityTypeQuestGadget uint16 = 38 - EntityTypeLightning uint16 = 39 - EntityTypeRewardPoint uint16 = 40 - EntityTypeRewardStatue uint16 = 41 - EntityTypeMPLevel uint16 = 42 - EntityTypeWindSeed uint16 = 43 - EntityTypeMpPlayRewardPoint uint16 = 44 - EntityTypeViewPoint uint16 = 45 - EntityTypeRemoteAvatar uint16 = 46 - EntityTypeGeneralRewardPoint uint16 = 47 - EntityTypePlayTeam uint16 = 48 - EntityTypeOfferingGadget uint16 = 49 - EntityTypeEyePoint uint16 = 50 - EntityTypeMiracleRing uint16 = 51 - EntityTypeFoundation uint16 = 52 - EntityTypeWidgetGadget uint16 = 53 - EntityTypePlaceHolder uint16 = 99 + ENTITY_TYPE_NONE = 0 + ENTITY_TYPE_AVATAR = 1 + ENTITY_TYPE_MONSTER = 2 + ENTITY_TYPE_NPC = 3 + ENTITY_TYPE_GADGET = 4 + ENTITY_TYPE_REGION = 5 + ENTITY_TYPE_WEAPON = 6 + ENTITY_TYPE_WEATHER = 7 + ENTITY_TYPE_SCENE = 8 + ENTITY_TYPE_TEAM = 9 + ENTITY_TYPE_MASSIVE_ENTITY = 10 + ENTITY_TYPE_MP_LEVEL = 11 + ENTITY_TYPE_PLAY_TEAM_ENTITY = 12 + ENTITY_TYPE_EYE_POINT = 13 + ENTITY_TYPE_MAX = 14 ) diff --git a/common/constant/equip_type.go b/common/constant/equip_type.go index a1034401..4b39cee1 100644 --- a/common/constant/equip_type.go +++ b/common/constant/equip_type.go @@ -1,11 +1,11 @@ package constant const ( - EQUIP_TYPE_NONE uint16 = 0 - EQUIP_TYPE_BRACER uint16 = 1 - EQUIP_TYPE_NECKLACE uint16 = 2 - EQUIP_TYPE_SHOES uint16 = 3 - EQUIP_TYPE_RING uint16 = 4 - EQUIP_TYPE_DRESS uint16 = 5 - EQUIP_TYPE_WEAPON uint16 = 6 + EQUIP_TYPE_NONE = 0 + EQUIP_TYPE_BRACER = 1 + EQUIP_TYPE_NECKLACE = 2 + EQUIP_TYPE_SHOES = 3 + EQUIP_TYPE_RING = 4 + EQUIP_TYPE_DRESS = 5 + EQUIP_TYPE_WEAPON = 6 ) diff --git a/common/constant/fetter_state.go b/common/constant/fetter_state.go index 6c52d62b..7606b4e9 100644 --- a/common/constant/fetter_state.go +++ b/common/constant/fetter_state.go @@ -1,8 +1,8 @@ package constant const ( - FETTER_STATE_NONE uint16 = 0 - FETTER_STATE_NOT_OPEN uint16 = 1 - FETTER_STATE_OPEN uint16 = 1 - FETTER_STATE_FINISH uint16 = 3 + FETTER_STATE_NONE = 0 + FETTER_STATE_NOT_OPEN = 1 + FETTER_STATE_OPEN = 1 + FETTER_STATE_FINISH = 3 ) diff --git a/common/constant/fight_property.go b/common/constant/fight_property.go index 9a35a435..69b83991 100644 --- a/common/constant/fight_property.go +++ b/common/constant/fight_property.go @@ -1,100 +1,100 @@ package constant const ( - FIGHT_PROP_NONE uint16 = 0 - FIGHT_PROP_BASE_HP uint16 = 1 - FIGHT_PROP_HP uint16 = 2 - FIGHT_PROP_HP_PERCENT uint16 = 3 - FIGHT_PROP_BASE_ATTACK uint16 = 4 - FIGHT_PROP_ATTACK uint16 = 5 - FIGHT_PROP_ATTACK_PERCENT uint16 = 6 - FIGHT_PROP_BASE_DEFENSE uint16 = 7 - FIGHT_PROP_DEFENSE uint16 = 8 - FIGHT_PROP_DEFENSE_PERCENT uint16 = 9 - FIGHT_PROP_BASE_SPEED uint16 = 10 - FIGHT_PROP_SPEED_PERCENT uint16 = 11 - FIGHT_PROP_HP_MP_PERCENT uint16 = 12 - FIGHT_PROP_ATTACK_MP_PERCENT uint16 = 13 - FIGHT_PROP_CRITICAL uint16 = 20 - FIGHT_PROP_ANTI_CRITICAL uint16 = 21 - FIGHT_PROP_CRITICAL_HURT uint16 = 22 - FIGHT_PROP_CHARGE_EFFICIENCY uint16 = 23 - FIGHT_PROP_ADD_HURT uint16 = 24 - FIGHT_PROP_SUB_HURT uint16 = 25 - FIGHT_PROP_HEAL_ADD uint16 = 26 - FIGHT_PROP_HEALED_ADD uint16 = 27 - FIGHT_PROP_ELEMENT_MASTERY uint16 = 28 - FIGHT_PROP_PHYSICAL_SUB_HURT uint16 = 29 - FIGHT_PROP_PHYSICAL_ADD_HURT uint16 = 30 - FIGHT_PROP_DEFENCE_IGNORE_RATIO uint16 = 31 - FIGHT_PROP_DEFENCE_IGNORE_DELTA uint16 = 32 - FIGHT_PROP_FIRE_ADD_HURT uint16 = 40 - FIGHT_PROP_ELEC_ADD_HURT uint16 = 41 - FIGHT_PROP_WATER_ADD_HURT uint16 = 42 - FIGHT_PROP_GRASS_ADD_HURT uint16 = 43 - FIGHT_PROP_WIND_ADD_HURT uint16 = 44 - FIGHT_PROP_ROCK_ADD_HURT uint16 = 45 - FIGHT_PROP_ICE_ADD_HURT uint16 = 46 - FIGHT_PROP_HIT_HEAD_ADD_HURT uint16 = 47 - FIGHT_PROP_FIRE_SUB_HURT uint16 = 50 - FIGHT_PROP_ELEC_SUB_HURT uint16 = 51 - FIGHT_PROP_WATER_SUB_HURT uint16 = 52 - FIGHT_PROP_GRASS_SUB_HURT uint16 = 53 - FIGHT_PROP_WIND_SUB_HURT uint16 = 54 - FIGHT_PROP_ROCK_SUB_HURT uint16 = 55 - FIGHT_PROP_ICE_SUB_HURT uint16 = 56 - FIGHT_PROP_EFFECT_HIT uint16 = 60 - FIGHT_PROP_EFFECT_RESIST uint16 = 61 - FIGHT_PROP_FREEZE_RESIST uint16 = 62 - FIGHT_PROP_TORPOR_RESIST uint16 = 63 - FIGHT_PROP_DIZZY_RESIST uint16 = 64 - FIGHT_PROP_FREEZE_SHORTEN uint16 = 65 - FIGHT_PROP_TORPOR_SHORTEN uint16 = 66 - FIGHT_PROP_DIZZY_SHORTEN uint16 = 67 - FIGHT_PROP_MAX_FIRE_ENERGY uint16 = 70 - FIGHT_PROP_MAX_ELEC_ENERGY uint16 = 71 - FIGHT_PROP_MAX_WATER_ENERGY uint16 = 72 - FIGHT_PROP_MAX_GRASS_ENERGY uint16 = 73 - FIGHT_PROP_MAX_WIND_ENERGY uint16 = 74 - FIGHT_PROP_MAX_ICE_ENERGY uint16 = 75 - FIGHT_PROP_MAX_ROCK_ENERGY uint16 = 76 - FIGHT_PROP_SKILL_CD_MINUS_RATIO uint16 = 80 - FIGHT_PROP_SHIELD_COST_MINUS_RATIO uint16 = 81 - FIGHT_PROP_CUR_FIRE_ENERGY uint16 = 1000 - FIGHT_PROP_CUR_ELEC_ENERGY uint16 = 1001 - FIGHT_PROP_CUR_WATER_ENERGY uint16 = 1002 - FIGHT_PROP_CUR_GRASS_ENERGY uint16 = 1003 - FIGHT_PROP_CUR_WIND_ENERGY uint16 = 1004 - FIGHT_PROP_CUR_ICE_ENERGY uint16 = 1005 - FIGHT_PROP_CUR_ROCK_ENERGY uint16 = 1006 - FIGHT_PROP_CUR_HP uint16 = 1010 - FIGHT_PROP_MAX_HP uint16 = 2000 - FIGHT_PROP_CUR_ATTACK uint16 = 2001 - FIGHT_PROP_CUR_DEFENSE uint16 = 2002 - FIGHT_PROP_CUR_SPEED uint16 = 2003 - FIGHT_PROP_NONEXTRA_ATTACK uint16 = 3000 - FIGHT_PROP_NONEXTRA_DEFENSE uint16 = 3001 - FIGHT_PROP_NONEXTRA_CRITICAL uint16 = 3002 - FIGHT_PROP_NONEXTRA_ANTI_CRITICAL uint16 = 3003 - FIGHT_PROP_NONEXTRA_CRITICAL_HURT uint16 = 3004 - FIGHT_PROP_NONEXTRA_CHARGE_EFFICIENCY uint16 = 3005 - FIGHT_PROP_NONEXTRA_ELEMENT_MASTERY uint16 = 3006 - FIGHT_PROP_NONEXTRA_PHYSICAL_SUB_HURT uint16 = 3007 - FIGHT_PROP_NONEXTRA_FIRE_ADD_HURT uint16 = 3008 - FIGHT_PROP_NONEXTRA_ELEC_ADD_HURT uint16 = 3009 - FIGHT_PROP_NONEXTRA_WATER_ADD_HURT uint16 = 3010 - FIGHT_PROP_NONEXTRA_GRASS_ADD_HURT uint16 = 3011 - FIGHT_PROP_NONEXTRA_WIND_ADD_HURT uint16 = 3012 - FIGHT_PROP_NONEXTRA_ROCK_ADD_HURT uint16 = 3013 - FIGHT_PROP_NONEXTRA_ICE_ADD_HURT uint16 = 3014 - FIGHT_PROP_NONEXTRA_FIRE_SUB_HURT uint16 = 3015 - FIGHT_PROP_NONEXTRA_ELEC_SUB_HURT uint16 = 3016 - FIGHT_PROP_NONEXTRA_WATER_SUB_HURT uint16 = 3017 - FIGHT_PROP_NONEXTRA_GRASS_SUB_HURT uint16 = 3018 - FIGHT_PROP_NONEXTRA_WIND_SUB_HURT uint16 = 3019 - FIGHT_PROP_NONEXTRA_ROCK_SUB_HURT uint16 = 3020 - FIGHT_PROP_NONEXTRA_ICE_SUB_HURT uint16 = 3021 - FIGHT_PROP_NONEXTRA_SKILL_CD_MINUS_RATIO uint16 = 3022 - FIGHT_PROP_NONEXTRA_SHIELD_COST_MINUS_RATIO uint16 = 3023 - FIGHT_PROP_NONEXTRA_PHYSICAL_ADD_HURT uint16 = 3024 + FIGHT_PROP_NONE = 0 + FIGHT_PROP_BASE_HP = 1 + FIGHT_PROP_HP = 2 + FIGHT_PROP_HP_PERCENT = 3 + FIGHT_PROP_BASE_ATTACK = 4 + FIGHT_PROP_ATTACK = 5 + FIGHT_PROP_ATTACK_PERCENT = 6 + FIGHT_PROP_BASE_DEFENSE = 7 + FIGHT_PROP_DEFENSE = 8 + FIGHT_PROP_DEFENSE_PERCENT = 9 + FIGHT_PROP_BASE_SPEED = 10 + FIGHT_PROP_SPEED_PERCENT = 11 + FIGHT_PROP_HP_MP_PERCENT = 12 + FIGHT_PROP_ATTACK_MP_PERCENT = 13 + FIGHT_PROP_CRITICAL = 20 + FIGHT_PROP_ANTI_CRITICAL = 21 + FIGHT_PROP_CRITICAL_HURT = 22 + FIGHT_PROP_CHARGE_EFFICIENCY = 23 + FIGHT_PROP_ADD_HURT = 24 + FIGHT_PROP_SUB_HURT = 25 + FIGHT_PROP_HEAL_ADD = 26 + FIGHT_PROP_HEALED_ADD = 27 + FIGHT_PROP_ELEMENT_MASTERY = 28 + FIGHT_PROP_PHYSICAL_SUB_HURT = 29 + FIGHT_PROP_PHYSICAL_ADD_HURT = 30 + FIGHT_PROP_DEFENCE_IGNORE_RATIO = 31 + FIGHT_PROP_DEFENCE_IGNORE_DELTA = 32 + FIGHT_PROP_FIRE_ADD_HURT = 40 + FIGHT_PROP_ELEC_ADD_HURT = 41 + FIGHT_PROP_WATER_ADD_HURT = 42 + FIGHT_PROP_GRASS_ADD_HURT = 43 + FIGHT_PROP_WIND_ADD_HURT = 44 + FIGHT_PROP_ROCK_ADD_HURT = 45 + FIGHT_PROP_ICE_ADD_HURT = 46 + FIGHT_PROP_HIT_HEAD_ADD_HURT = 47 + FIGHT_PROP_FIRE_SUB_HURT = 50 + FIGHT_PROP_ELEC_SUB_HURT = 51 + FIGHT_PROP_WATER_SUB_HURT = 52 + FIGHT_PROP_GRASS_SUB_HURT = 53 + FIGHT_PROP_WIND_SUB_HURT = 54 + FIGHT_PROP_ROCK_SUB_HURT = 55 + FIGHT_PROP_ICE_SUB_HURT = 56 + FIGHT_PROP_EFFECT_HIT = 60 + FIGHT_PROP_EFFECT_RESIST = 61 + FIGHT_PROP_FREEZE_RESIST = 62 + FIGHT_PROP_TORPOR_RESIST = 63 + FIGHT_PROP_DIZZY_RESIST = 64 + FIGHT_PROP_FREEZE_SHORTEN = 65 + FIGHT_PROP_TORPOR_SHORTEN = 66 + FIGHT_PROP_DIZZY_SHORTEN = 67 + FIGHT_PROP_MAX_FIRE_ENERGY = 70 + FIGHT_PROP_MAX_ELEC_ENERGY = 71 + FIGHT_PROP_MAX_WATER_ENERGY = 72 + FIGHT_PROP_MAX_GRASS_ENERGY = 73 + FIGHT_PROP_MAX_WIND_ENERGY = 74 + FIGHT_PROP_MAX_ICE_ENERGY = 75 + FIGHT_PROP_MAX_ROCK_ENERGY = 76 + FIGHT_PROP_SKILL_CD_MINUS_RATIO = 80 + FIGHT_PROP_SHIELD_COST_MINUS_RATIO = 81 + FIGHT_PROP_CUR_FIRE_ENERGY = 1000 + FIGHT_PROP_CUR_ELEC_ENERGY = 1001 + FIGHT_PROP_CUR_WATER_ENERGY = 1002 + FIGHT_PROP_CUR_GRASS_ENERGY = 1003 + FIGHT_PROP_CUR_WIND_ENERGY = 1004 + FIGHT_PROP_CUR_ICE_ENERGY = 1005 + FIGHT_PROP_CUR_ROCK_ENERGY = 1006 + FIGHT_PROP_CUR_HP = 1010 + FIGHT_PROP_MAX_HP = 2000 + FIGHT_PROP_CUR_ATTACK = 2001 + FIGHT_PROP_CUR_DEFENSE = 2002 + FIGHT_PROP_CUR_SPEED = 2003 + FIGHT_PROP_NONEXTRA_ATTACK = 3000 + FIGHT_PROP_NONEXTRA_DEFENSE = 3001 + FIGHT_PROP_NONEXTRA_CRITICAL = 3002 + FIGHT_PROP_NONEXTRA_ANTI_CRITICAL = 3003 + FIGHT_PROP_NONEXTRA_CRITICAL_HURT = 3004 + FIGHT_PROP_NONEXTRA_CHARGE_EFFICIENCY = 3005 + FIGHT_PROP_NONEXTRA_ELEMENT_MASTERY = 3006 + FIGHT_PROP_NONEXTRA_PHYSICAL_SUB_HURT = 3007 + FIGHT_PROP_NONEXTRA_FIRE_ADD_HURT = 3008 + FIGHT_PROP_NONEXTRA_ELEC_ADD_HURT = 3009 + FIGHT_PROP_NONEXTRA_WATER_ADD_HURT = 3010 + FIGHT_PROP_NONEXTRA_GRASS_ADD_HURT = 3011 + FIGHT_PROP_NONEXTRA_WIND_ADD_HURT = 3012 + FIGHT_PROP_NONEXTRA_ROCK_ADD_HURT = 3013 + FIGHT_PROP_NONEXTRA_ICE_ADD_HURT = 3014 + FIGHT_PROP_NONEXTRA_FIRE_SUB_HURT = 3015 + FIGHT_PROP_NONEXTRA_ELEC_SUB_HURT = 3016 + FIGHT_PROP_NONEXTRA_WATER_SUB_HURT = 3017 + FIGHT_PROP_NONEXTRA_GRASS_SUB_HURT = 3018 + FIGHT_PROP_NONEXTRA_WIND_SUB_HURT = 3019 + FIGHT_PROP_NONEXTRA_ROCK_SUB_HURT = 3020 + FIGHT_PROP_NONEXTRA_ICE_SUB_HURT = 3021 + FIGHT_PROP_NONEXTRA_SKILL_CD_MINUS_RATIO = 3022 + FIGHT_PROP_NONEXTRA_SHIELD_COST_MINUS_RATIO = 3023 + FIGHT_PROP_NONEXTRA_PHYSICAL_ADD_HURT = 3024 ) diff --git a/common/constant/gcg_token_type.go b/common/constant/gcg_token_type.go index 7ecac8ef..7a8e3a79 100644 --- a/common/constant/gcg_token_type.go +++ b/common/constant/gcg_token_type.go @@ -1,8 +1,8 @@ package constant const ( - GCG_TOKEN_TYPE_CUR_HEALTH uint32 = 1 // 现行血量 - GCG_TOKEN_TYPE_MAX_HEALTH uint32 = 2 // 最大血量(不确定) - GCG_TOKEN_TYPE_CUR_ELEM uint32 = 4 // 现行充能 - GCG_TOKEN_TYPE_MAX_ELEM uint32 = 5 // 最大充能(充能条长度) + GCG_TOKEN_TYPE_CUR_HEALTH = 1 // 现行血量 + GCG_TOKEN_TYPE_MAX_HEALTH = 2 // 最大血量(不确定) + GCG_TOKEN_TYPE_CUR_ELEM = 4 // 现行充能 + GCG_TOKEN_TYPE_MAX_ELEM = 5 // 最大充能(充能条长度) ) diff --git a/common/constant/grow_curve.go b/common/constant/grow_curve.go index 10e97a0c..8b160b1d 100644 --- a/common/constant/grow_curve.go +++ b/common/constant/grow_curve.go @@ -1,64 +1,64 @@ package constant const ( - GROW_CURVE_NONE uint16 = 0 - GROW_CURVE_HP uint16 = 1 - GROW_CURVE_ATTACK uint16 = 2 - GROW_CURVE_STAMINA uint16 = 3 - GROW_CURVE_STRIKE uint16 = 4 - GROW_CURVE_ANTI_STRIKE uint16 = 5 - GROW_CURVE_ANTI_STRIKE1 uint16 = 6 - GROW_CURVE_ANTI_STRIKE2 uint16 = 7 - GROW_CURVE_ANTI_STRIKE3 uint16 = 8 - GROW_CURVE_STRIKE_HURT uint16 = 9 - GROW_CURVE_ELEMENT uint16 = 10 - GROW_CURVE_KILL_EXP uint16 = 11 - GROW_CURVE_DEFENSE uint16 = 12 - GROW_CURVE_ATTACK_BOMB uint16 = 13 - GROW_CURVE_HP_LITTLEMONSTER uint16 = 14 - GROW_CURVE_ELEMENT_MASTERY uint16 = 15 - GROW_CURVE_PROGRESSION uint16 = 16 - GROW_CURVE_DEFENDING uint16 = 17 - GROW_CURVE_MHP uint16 = 18 - GROW_CURVE_MATK uint16 = 19 - GROW_CURVE_TOWERATK uint16 = 20 - GROW_CURVE_HP_S5 uint16 = 21 - GROW_CURVE_HP_S4 uint16 = 22 - GROW_CURVE_HP_2 uint16 = 23 - GROW_CURVE_ATTACK_S5 uint16 = 31 - GROW_CURVE_ATTACK_S4 uint16 = 32 - GROW_CURVE_ATTACK_S3 uint16 = 33 - GROW_CURVE_STRIKE_S5 uint16 = 34 - GROW_CURVE_DEFENSE_S5 uint16 = 41 - GROW_CURVE_DEFENSE_S4 uint16 = 42 - GROW_CURVE_ATTACK_101 uint16 = 1101 - GROW_CURVE_ATTACK_102 uint16 = 1102 - GROW_CURVE_ATTACK_103 uint16 = 1103 - GROW_CURVE_ATTACK_104 uint16 = 1104 - GROW_CURVE_ATTACK_105 uint16 = 1105 - GROW_CURVE_ATTACK_201 uint16 = 1201 - GROW_CURVE_ATTACK_202 uint16 = 1202 - GROW_CURVE_ATTACK_203 uint16 = 1203 - GROW_CURVE_ATTACK_204 uint16 = 1204 - GROW_CURVE_ATTACK_205 uint16 = 1205 - GROW_CURVE_ATTACK_301 uint16 = 1301 - GROW_CURVE_ATTACK_302 uint16 = 1302 - GROW_CURVE_ATTACK_303 uint16 = 1303 - GROW_CURVE_ATTACK_304 uint16 = 1304 - GROW_CURVE_ATTACK_305 uint16 = 1305 - GROW_CURVE_CRITICAL_101 uint16 = 2101 - GROW_CURVE_CRITICAL_102 uint16 = 2102 - GROW_CURVE_CRITICAL_103 uint16 = 2103 - GROW_CURVE_CRITICAL_104 uint16 = 2104 - GROW_CURVE_CRITICAL_105 uint16 = 2105 - GROW_CURVE_CRITICAL_201 uint16 = 2201 - GROW_CURVE_CRITICAL_202 uint16 = 2202 - GROW_CURVE_CRITICAL_203 uint16 = 2203 - GROW_CURVE_CRITICAL_204 uint16 = 2204 - GROW_CURVE_CRITICAL_205 uint16 = 2205 - GROW_CURVE_CRITICAL_301 uint16 = 2301 - GROW_CURVE_CRITICAL_302 uint16 = 2302 - GROW_CURVE_CRITICAL_303 uint16 = 2303 - GROW_CURVE_CRITICAL_304 uint16 = 2304 - GROW_CURVE_CRITICAL_305 uint16 = 2305 + GROW_CURVE_NONE = 0 + GROW_CURVE_HP = 1 + GROW_CURVE_ATTACK = 2 + GROW_CURVE_STAMINA = 3 + GROW_CURVE_STRIKE = 4 + GROW_CURVE_ANTI_STRIKE = 5 + GROW_CURVE_ANTI_STRIKE1 = 6 + GROW_CURVE_ANTI_STRIKE2 = 7 + GROW_CURVE_ANTI_STRIKE3 = 8 + GROW_CURVE_STRIKE_HURT = 9 + GROW_CURVE_ELEMENT = 10 + GROW_CURVE_KILL_EXP = 11 + GROW_CURVE_DEFENSE = 12 + GROW_CURVE_ATTACK_BOMB = 13 + GROW_CURVE_HP_LITTLEMONSTER = 14 + GROW_CURVE_ELEMENT_MASTERY = 15 + GROW_CURVE_PROGRESSION = 16 + GROW_CURVE_DEFENDING = 17 + GROW_CURVE_MHP = 18 + GROW_CURVE_MATK = 19 + GROW_CURVE_TOWERATK = 20 + GROW_CURVE_HP_S5 = 21 + GROW_CURVE_HP_S4 = 22 + GROW_CURVE_HP_2 = 23 + GROW_CURVE_ATTACK_S5 = 31 + GROW_CURVE_ATTACK_S4 = 32 + GROW_CURVE_ATTACK_S3 = 33 + GROW_CURVE_STRIKE_S5 = 34 + GROW_CURVE_DEFENSE_S5 = 41 + GROW_CURVE_DEFENSE_S4 = 42 + GROW_CURVE_ATTACK_101 = 1101 + GROW_CURVE_ATTACK_102 = 1102 + GROW_CURVE_ATTACK_103 = 1103 + GROW_CURVE_ATTACK_104 = 1104 + GROW_CURVE_ATTACK_105 = 1105 + GROW_CURVE_ATTACK_201 = 1201 + GROW_CURVE_ATTACK_202 = 1202 + GROW_CURVE_ATTACK_203 = 1203 + GROW_CURVE_ATTACK_204 = 1204 + GROW_CURVE_ATTACK_205 = 1205 + GROW_CURVE_ATTACK_301 = 1301 + GROW_CURVE_ATTACK_302 = 1302 + GROW_CURVE_ATTACK_303 = 1303 + GROW_CURVE_ATTACK_304 = 1304 + GROW_CURVE_ATTACK_305 = 1305 + GROW_CURVE_CRITICAL_101 = 2101 + GROW_CURVE_CRITICAL_102 = 2102 + GROW_CURVE_CRITICAL_103 = 2103 + GROW_CURVE_CRITICAL_104 = 2104 + GROW_CURVE_CRITICAL_105 = 2105 + GROW_CURVE_CRITICAL_201 = 2201 + GROW_CURVE_CRITICAL_202 = 2202 + GROW_CURVE_CRITICAL_203 = 2203 + GROW_CURVE_CRITICAL_204 = 2204 + GROW_CURVE_CRITICAL_205 = 2205 + GROW_CURVE_CRITICAL_301 = 2301 + GROW_CURVE_CRITICAL_302 = 2302 + GROW_CURVE_CRITICAL_303 = 2303 + GROW_CURVE_CRITICAL_304 = 2304 + GROW_CURVE_CRITICAL_305 = 2305 ) diff --git a/common/constant/item_type.go b/common/constant/item_type.go index ee0116db..b47d4fe4 100644 --- a/common/constant/item_type.go +++ b/common/constant/item_type.go @@ -1,11 +1,11 @@ package constant const ( - ITEM_TYPE_NONE uint16 = 0 - ITEM_TYPE_VIRTUAL uint16 = 1 - ITEM_TYPE_MATERIAL uint16 = 2 - ITEM_TYPE_RELIQUARY uint16 = 3 - ITEM_TYPE_WEAPON uint16 = 4 - ITEM_TYPE_DISPLAY uint16 = 5 - ITEM_TYPE_FURNITURE uint16 = 6 + ITEM_TYPE_NONE = 0 + ITEM_TYPE_VIRTUAL = 1 + ITEM_TYPE_MATERIAL = 2 + ITEM_TYPE_RELIQUARY = 3 + ITEM_TYPE_WEAPON = 4 + ITEM_TYPE_DISPLAY = 5 + ITEM_TYPE_FURNITURE = 6 ) diff --git a/common/constant/life_state.go b/common/constant/life_state.go index 7998d50f..b5d30fad 100644 --- a/common/constant/life_state.go +++ b/common/constant/life_state.go @@ -1,8 +1,8 @@ package constant const ( - LIFE_STATE_NONE uint16 = 0 - LIFE_STATE_ALIVE uint16 = 1 - LIFE_STATE_DEAD uint16 = 2 - LIFE_STATE_REVIVE uint16 = 3 + LIFE_STATE_NONE = 0 + LIFE_STATE_ALIVE = 1 + LIFE_STATE_DEAD = 2 + LIFE_STATE_REVIVE = 3 ) diff --git a/common/constant/lua_type.go b/common/constant/lua_type.go new file mode 100644 index 00000000..dde6a1cb --- /dev/null +++ b/common/constant/lua_type.go @@ -0,0 +1,132 @@ +package constant + +const ( + LUA_EVENT_NONE = 0 + LUA_EVENT_ANY_MONSTER_DIE = 1 + LUA_EVENT_ANY_GADGET_DIE = 2 + LUA_EVENT_VARIABLE_CHANGE = 3 + LUA_EVENT_ENTER_REGION = 4 + LUA_EVENT_LEAVE_REGION = 5 + LUA_EVENT_GADGET_CREATE = 6 + LUA_EVENT_GADGET_STATE_CHANGE = 7 + LUA_EVENT_DUNGEON_SETTLE = 8 + LUA_EVENT_SELECT_OPTION = 9 + LUA_EVENT_CLIENT_EXECUTE = 10 + LUA_EVENT_ANY_MONSTER_LIVE = 11 + LUA_EVENT_SPECIFIC_MONSTER_HP_CHANGE = 12 + LUA_EVENT_CITY_LEVELUP_UNLOCK_DUNGEON_ENTRY = 13 + LUA_EVENT_DUNGEON_BROADCAST_ONTIMER = 14 + LUA_EVENT_TIMER_EVENT = 15 + LUA_EVENT_CHALLENGE_SUCCESS = 16 + LUA_EVENT_CHALLENGE_FAIL = 17 + LUA_EVENT_SEAL_BATTLE_BEGIN = 18 + LUA_EVENT_SEAL_BATTLE_END = 19 + LUA_EVENT_GATHER = 20 + LUA_EVENT_QUEST_FINISH = 21 + LUA_EVENT_MONSTER_BATTLE = 22 + LUA_EVENT_CITY_LEVELUP = 23 + LUA_EVENT_CUTSCENE_END = 24 + LUA_EVENT_AVATAR_NEAR_PLATFORM = 25 + LUA_EVENT_PLATFORM_REACH_POINT = 26 + LUA_EVENT_UNLOCK_TRANS_POINT = 27 + LUA_EVENT_QUEST_START = 28 + LUA_EVENT_GROUP_LOAD = 29 + LUA_EVENT_GROUP_WILL_UNLOAD = 30 + LUA_EVENT_GROUP_WILL_REFRESH = 31 + LUA_EVENT_GROUP_REFRESH = 32 + LUA_EVENT_DUNGEON_REWARD_GET = 33 + LUA_EVENT_SPECIFIC_GADGET_HP_CHANGE = 34 + LUA_EVENT_MONSTER_TIDE_OVER = 35 + LUA_EVENT_MONSTER_TIDE_CREATE = 36 + LUA_EVENT_MONSTER_TIDE_DIE = 37 + LUA_EVENT_SEALAMP_PHASE_CHANGE = 38 + LUA_EVENT_BLOSSOM_PROGRESS_FINISH = 39 + LUA_EVENT_BLOSSOM_CHEST_DIE = 40 + LUA_EVENT_GADGET_PLAY_START = 41 + LUA_EVENT_GADGET_PLAY_START_CD = 42 + LUA_EVENT_GADGET_PLAY_STOP = 43 + LUA_EVENT_GADGET_LUA_NOTIFY = 44 + LUA_EVENT_MP_PLAY_PREPARE = 45 + LUA_EVENT_MP_PLAY_BATTLE = 46 + LUA_EVENT_MP_PLAY_PREPARE_INTERRUPT = 47 + LUA_EVENT_SELECT_DIFFICULTY = 48 + LUA_EVENT_SCENE_MP_PLAY_BATTLE_STATE = 49 + LUA_EVENT_SCENE_MP_PLAY_BATTLE_STAGE_CHANGE = 50 + LUA_EVENT_SCENE_MP_PLAY_BATTLE_RESULT = 51 + LUA_EVENT_SEAL_BATTLE_PROGRESS_DECREASE = 52 + LUA_EVENT_GENERAL_REWARD_DIE = 53 + LUA_EVENT_SCENE_MP_PLAY_BATTLE_INTERRUPT = 54 + LUA_EVENT_MONSTER_DIE_BEFORE_LEAVE_SCENE = 55 + LUA_EVENT_SCENE_MP_PLAY_OPEN = 56 + LUA_EVENT_OFFERING_LEVELUP = 57 + LUA_EVENT_DUNGEON_REVIVE = 58 + LUA_EVENT_SCENE_MP_PLAY_ALL_AVATAR_DIE = 59 + LUA_EVENT_DUNGEON_ALL_AVATAR_DIE = 60 + LUA_EVENT_GENERAL_REWARD_TAKEN = 61 + LUA_EVENT_PLATFORM_REACH_ARRAYPOINT = 62 + LUA_EVENT_SCENE_MULTISTAGE_PLAY_STAGE_END = 63 + LUA_EVENT_SCENE_MULTISTAGE_PLAY_END_STAGE_REQ = 64 + LUA_EVENT_MECHANICUS_PICKED_CARD = 65 + LUA_EVENT_POOL_MONSTER_TIDE_OVER = 66 + LUA_EVENT_POOL_MONSTER_TIDE_CREATE = 67 + LUA_EVENT_POOL_MONSTER_TIDE_DIE = 68 + LUA_EVENT_DUNGEON_AVATAR_SLIP_DIE = 69 + LUA_EVENT_GALLERY_START = 70 + LUA_EVENT_GALLERY_STOP = 71 + LUA_EVENT_TIME_AXIS_PASS = 72 + LUA_EVENT_FLEUR_FAIR_DUNGEON_ALL_PLAYER_ENTER = 73 + LUA_EVENT_GADGETTALK_DONE = 74 + LUA_EVENT_SET_GAME_TIME = 75 + LUA_EVENT_HIDE_AND_SEEK_PLAYER_QUIT = 76 + LUA_EVENT_AVATAR_DIE = 77 + LUA_EVENT_SCENE_MULTISTAGE_PLAY_STAGE_START = 78 + LUA_EVENT_GALLERY_PROGRESS_PASS = 79 + LUA_EVENT_GALLERY_PROGRESS_EMPTY = 80 + LUA_EVENT_GALLERY_PROGRESS_FULL = 81 + LUA_EVENT_HUNTING_FINISH_FINAL = 82 + LUA_EVENT_USE_WIDGET_TOY_FOX_CAMERA = 83 + LUA_EVENT_LUNA_RITE_SACRIFICE = 84 + LUA_EVENT_SUMO_SWITCH_TEAM_EVENT = 85 + LUA_EVENT_FISHING_START = 86 + LUA_EVENT_FISHING_STOP = 87 + LUA_EVENT_FISHING_QTE_FINISH = 88 + LUA_EVENT_FISHING_TIMEOUT_FLEE = 89 + LUA_EVENT_ROGUE_CELL_STATE_CHANGE = 90 + LUA_EVENT_ROGUE_CELL_CONSTRUCT = 91 + LUA_EVENT_ROGUE_CELL_FINISH_SELECT_CARD = 92 + LUA_EVENT_ANY_MONSTER_CAPTURE = 93 + LUA_EVENT_ACTIVITY_INTERACT_GADGET = 94 + LUA_EVENT_CHALLENGE_PAUSE = 95 + LUA_EVENT_LEVEL_TAG_CHANGE = 96 + LUA_EVENT_CUSTOM_DUNGEON_START = 97 + LUA_EVENT_CUSTOM_DUNGEON_RESTART = 98 + LUA_EVENT_CUSTOM_DUNGEON_REACTIVE = 99 + LUA_EVENT_CUSTOM_DUNGEON_OUT_STUCK = 100 + LUA_EVENT_CUSTOM_DUNGEON_EXIT_TRY = 101 + LUA_EVENT_CUSTOM_DUNGEON_OFFICIAL_RESTART = 102 + LUA_EVENT_ANY_MONSTER_CAPTURE_AND_DISAPPEAR = 103 + LUA_EVENT_MICHIAE_INTERACT = 104 + LUA_EVENT_SELECT_UIINTERACT = 105 + LUA_EVENT_LUA_NOTIFY = 106 + LUA_EVENT_PHOTO_FINISH = 107 + LUA_EVENT_IRODORI_MASTER_READY = 108 + LUA_EVENT_ROGUE_START_FIGHT = 109 + LUA_EVENT_ROGUE_CREAGE_FIGHT_GADGET = 110 + LUA_EVENT_ROGUE_CREAGE_REPAIR_GADGET = 111 + LUA_EVENT_ROGUE_OPEN_ACCESS = 112 + LUA_EVENT_GADGET_GIVING_FINISHED = 113 + LUA_EVENT_OBSERVATION_POINT_NOTIFY = 114 + LUA_EVENT_GADGET_GIVING_TAKEBACK = 115 + LUA_EVENT_ECHO_SHELL_INTERACT = 116 + LUA_EVENT_PLATFORM_ARRIVAL = 2701 + LUA_EVENT_PLAYER_BACK_GALLERY_REVIVE_POINT = 2800 + LUA_EVENT_GALLERY_CANNOT_START_AFTER_COUNTDOWN = 2801 +) + +const ( + REGION_SHAPE_NONE = 0 + REGION_SHAPE_SPHERE = 1 + REGION_SHAPE_CUBIC = 2 + REGION_SHAPE_CYLINDER = 3 + REGION_SHAPE_POLYGON = 4 +) diff --git a/common/constant/material_type.go b/common/constant/material_type.go index c3cbbde2..81f55b31 100644 --- a/common/constant/material_type.go +++ b/common/constant/material_type.go @@ -1,33 +1,33 @@ package constant const ( - MATERIAL_TYPE_NONE uint16 = 0 - MATERIAL_TYPE_FOOD uint16 = 1 - MATERIAL_TYPE_QUEST uint16 = 2 - MATERIAL_TYPE_EXCHANGE uint16 = 4 - MATERIAL_TYPE_CONSUME uint16 = 5 - MATERIAL_TYPE_EXP_FRUIT uint16 = 6 - MATERIAL_TYPE_AVATAR uint16 = 7 - MATERIAL_TYPE_ADSORBATE uint16 = 8 - MATERIAL_TYPE_CRICKET uint16 = 9 - MATERIAL_TYPE_ELEM_CRYSTAL uint16 = 10 - MATERIAL_TYPE_WEAPON_EXP_STONE uint16 = 11 - MATERIAL_TYPE_CHEST uint16 = 12 - MATERIAL_TYPE_RELIQUARY_MATERIAL uint16 = 13 - MATERIAL_TYPE_AVATAR_MATERIAL uint16 = 14 - MATERIAL_TYPE_NOTICE_ADD_HP uint16 = 15 - MATERIAL_TYPE_SEA_LAMP uint16 = 16 - MATERIAL_TYPE_SELECTABLE_CHEST uint16 = 17 - MATERIAL_TYPE_FLYCLOAK uint16 = 18 - MATERIAL_TYPE_NAMECARD uint16 = 19 - MATERIAL_TYPE_TALENT uint16 = 20 - MATERIAL_TYPE_WIDGET uint16 = 21 - MATERIAL_TYPE_CHEST_BATCH_USE uint16 = 22 - MATERIAL_TYPE_FAKE_ABSORBATE uint16 = 23 - MATERIAL_TYPE_CONSUME_BATCH_USE uint16 = 24 - MATERIAL_TYPE_WOOD uint16 = 25 - MATERIAL_TYPE_FURNITURE_FORMULA uint16 = 27 - MATERIAL_TYPE_CHANNELLER_SLAB_BUFF uint16 = 28 - MATERIAL_TYPE_FURNITURE_SUITE_FORMULA uint16 = 29 - MATERIAL_TYPE_COSTUME uint16 = 30 + MATERIAL_TYPE_NONE = 0 + MATERIAL_TYPE_FOOD = 1 + MATERIAL_TYPE_QUEST = 2 + MATERIAL_TYPE_EXCHANGE = 4 + MATERIAL_TYPE_CONSUME = 5 + MATERIAL_TYPE_EXP_FRUIT = 6 + MATERIAL_TYPE_AVATAR = 7 + MATERIAL_TYPE_ADSORBATE = 8 + MATERIAL_TYPE_CRICKET = 9 + MATERIAL_TYPE_ELEM_CRYSTAL = 10 + MATERIAL_TYPE_WEAPON_EXP_STONE = 11 + MATERIAL_TYPE_CHEST = 12 + MATERIAL_TYPE_RELIQUARY_MATERIAL = 13 + MATERIAL_TYPE_AVATAR_MATERIAL = 14 + MATERIAL_TYPE_NOTICE_ADD_HP = 15 + MATERIAL_TYPE_SEA_LAMP = 16 + MATERIAL_TYPE_SELECTABLE_CHEST = 17 + MATERIAL_TYPE_FLYCLOAK = 18 + MATERIAL_TYPE_NAMECARD = 19 + MATERIAL_TYPE_TALENT = 20 + MATERIAL_TYPE_WIDGET = 21 + MATERIAL_TYPE_CHEST_BATCH_USE = 22 + MATERIAL_TYPE_FAKE_ABSORBATE = 23 + MATERIAL_TYPE_CONSUME_BATCH_USE = 24 + MATERIAL_TYPE_WOOD = 25 + MATERIAL_TYPE_FURNITURE_FORMULA = 27 + MATERIAL_TYPE_CHANNELLER_SLAB_BUFF = 28 + MATERIAL_TYPE_FURNITURE_SUITE_FORMULA = 29 + MATERIAL_TYPE_COSTUME = 30 ) diff --git a/common/constant/quest_type.go b/common/constant/quest_type.go index a08c24b2..887c7dc0 100644 --- a/common/constant/quest_type.go +++ b/common/constant/quest_type.go @@ -1,15 +1,166 @@ package constant const ( - QUEST_STATE_TYPE_ACCEPT uint32 = 1 - QUEST_STATE_TYPE_EXEC uint32 = 2 - QUEST_STATE_TYPE_FINISH uint32 = 3 + QUEST_STATE_NONE = 0 + QUEST_STATE_UNSTARTED = 1 + QUEST_STATE_UNFINISHED = 2 + QUEST_STATE_FINISHED = 3 + QUEST_STATE_FAILED = 4 ) const ( - QUEST_ACCEPT_COND_TYPE_QUEST_STATE_EQ int32 = 1 + QUEST_ACCEPT_COND_TYPE_NONE = 0 + QUEST_ACCEPT_COND_TYPE_STATE_EQUAL = 1 + QUEST_ACCEPT_COND_TYPE_STATE_NOT_EQUAL = 2 + QUEST_ACCEPT_COND_TYPE_PACK_HAVE_ITEM = 3 + QUEST_ACCEPT_COND_TYPE_AVATAR_ELEMENT_EQUAL = 4 + QUEST_ACCEPT_COND_TYPE_AVATAR_ELEMENT_NOT_EQUAL = 5 + QUEST_ACCEPT_COND_TYPE_AVATAR_CAN_CHANGE_ELEMENT = 6 + QUEST_ACCEPT_COND_TYPE_CITY_LEVEL_EQUAL_GREATER = 7 + QUEST_ACCEPT_COND_TYPE_ITEM_NUM_LESS_THAN = 8 + QUEST_ACCEPT_COND_TYPE_DAILY_TASK_START = 9 + QUEST_ACCEPT_COND_TYPE_OPEN_STATE_EQUAL = 10 + QUEST_ACCEPT_COND_TYPE_DAILY_TASK_OPEN = 11 + QUEST_ACCEPT_COND_TYPE_DAILY_TASK_REWARD_CAN_GET = 12 + QUEST_ACCEPT_COND_TYPE_DAILY_TASK_REWARD_RECEIVED = 13 + QUEST_ACCEPT_COND_TYPE_PLAYER_LEVEL_REWARD_CAN_GET = 14 + QUEST_ACCEPT_COND_TYPE_EXPLORATION_REWARD_CAN_GET = 15 + QUEST_ACCEPT_COND_TYPE_IS_WORLD_OWNER = 16 + QUEST_ACCEPT_COND_TYPE_PLAYER_LEVEL_EQUAL_GREATER = 17 + QUEST_ACCEPT_COND_TYPE_SCENE_AREA_UNLOCKED = 18 + QUEST_ACCEPT_COND_TYPE_ITEM_GIVING_ACTIVED = 19 + QUEST_ACCEPT_COND_TYPE_ITEM_GIVING_FINISHED = 20 + QUEST_ACCEPT_COND_TYPE_IS_DAYTIME = 21 + QUEST_ACCEPT_COND_TYPE_CURRENT_AVATAR = 22 + QUEST_ACCEPT_COND_TYPE_CURRENT_AREA = 23 + QUEST_ACCEPT_COND_TYPE_QUEST_VAR_EQUAL = 24 + QUEST_ACCEPT_COND_TYPE_QUEST_VAR_GREATER = 25 + QUEST_ACCEPT_COND_TYPE_QUEST_VAR_LESS = 26 + QUEST_ACCEPT_COND_TYPE_FORGE_HAVE_FINISH = 27 + QUEST_ACCEPT_COND_TYPE_DAILY_TASK_IN_PROGRESS = 28 + QUEST_ACCEPT_COND_TYPE_DAILY_TASK_FINISHED = 29 + QUEST_ACCEPT_COND_TYPE_ACTIVITY_COND = 30 + QUEST_ACCEPT_COND_TYPE_ACTIVITY_OPEN = 31 + QUEST_ACCEPT_COND_TYPE_DAILY_TASK_VAR_GT = 32 + QUEST_ACCEPT_COND_TYPE_DAILY_TASK_VAR_EQ = 33 + QUEST_ACCEPT_COND_TYPE_DAILY_TASK_VAR_LT = 34 + QUEST_ACCEPT_COND_TYPE_BARGAIN_ITEM_GT = 35 + QUEST_ACCEPT_COND_TYPE_BARGAIN_ITEM_EQ = 36 + QUEST_ACCEPT_COND_TYPE_BARGAIN_ITEM_LT = 37 + QUEST_ACCEPT_COND_TYPE_COMPLETE_TALK = 38 + QUEST_ACCEPT_COND_TYPE_NOT_HAVE_BLOSSOM_TALK = 39 + QUEST_ACCEPT_COND_TYPE_IS_CUR_BLOSSOM_TALK = 40 + QUEST_ACCEPT_COND_TYPE_QUEST_NOT_RECEIVE = 41 + QUEST_ACCEPT_COND_TYPE_QUEST_SERVER_COND_VALID = 42 + QUEST_ACCEPT_COND_TYPE_ACTIVITY_CLIENT_COND = 43 + QUEST_ACCEPT_COND_TYPE_QUEST_GLOBAL_VAR_EQUAL = 44 + QUEST_ACCEPT_COND_TYPE_QUEST_GLOBAL_VAR_GREATER = 45 + QUEST_ACCEPT_COND_TYPE_QUEST_GLOBAL_VAR_LESS = 46 + QUEST_ACCEPT_COND_TYPE_PERSONAL_LINE_UNLOCK = 47 + QUEST_ACCEPT_COND_TYPE_CITY_REPUTATION_REQUEST = 48 + QUEST_ACCEPT_COND_TYPE_MAIN_COOP_START = 49 + QUEST_ACCEPT_COND_TYPE_MAIN_COOP_ENTER_SAVE_POINT = 50 + QUEST_ACCEPT_COND_TYPE_CITY_REPUTATION_LEVEL = 51 + QUEST_ACCEPT_COND_TYPE_CITY_REPUTATION_UNLOCK = 52 + QUEST_ACCEPT_COND_TYPE_LUA_NOTIFY = 53 + QUEST_ACCEPT_COND_TYPE_CUR_CLIMATE = 54 + QUEST_ACCEPT_COND_TYPE_ACTIVITY_END = 55 + QUEST_ACCEPT_COND_TYPE_COOP_POINT_RUNNING = 56 + QUEST_ACCEPT_COND_TYPE_GADGET_TALK_STATE_EQUAL = 57 + QUEST_ACCEPT_COND_TYPE_AVATAR_FETTER_GT = 58 + QUEST_ACCEPT_COND_TYPE_AVATAR_FETTER_EQ = 59 + QUEST_ACCEPT_COND_TYPE_AVATAR_FETTER_LT = 60 + QUEST_ACCEPT_COND_TYPE_NEW_HOMEWORLD_MOUDLE_UNLOCK = 61 + QUEST_ACCEPT_COND_TYPE_NEW_HOMEWORLD_LEVEL_REWARD = 62 + QUEST_ACCEPT_COND_TYPE_NEW_HOMEWORLD_MAKE_FINISH = 63 + QUEST_ACCEPT_COND_TYPE_HOMEWORLD_NPC_EVENT = 64 + QUEST_ACCEPT_COND_TYPE_TIME_VAR_GT_EQ = 65 + QUEST_ACCEPT_COND_TYPE_TIME_VAR_PASS_DAY = 66 + QUEST_ACCEPT_COND_TYPE_HOMEWORLD_NPC_NEW_TALK = 67 + QUEST_ACCEPT_COND_TYPE_PLAYER_CHOOSE_MALE = 68 + QUEST_ACCEPT_COND_TYPE_HISTORY_GOT_ANY_ITEM = 69 + QUEST_ACCEPT_COND_TYPE_LEARNED_RECIPE = 70 + QUEST_ACCEPT_COND_TYPE_LUNARITE_REGION_UNLOCKED = 71 + QUEST_ACCEPT_COND_TYPE_LUNARITE_HAS_REGION_HINT_COUNT = 72 + QUEST_ACCEPT_COND_TYPE_LUNARITE_COLLECT_FINISH = 73 + QUEST_ACCEPT_COND_TYPE_LUNARITE_MARK_ALL_FINISH = 74 + QUEST_ACCEPT_COND_TYPE_NEW_HOMEWORLD_SHOP_ITEM = 75 + QUEST_ACCEPT_COND_TYPE_SCENE_POINT_UNLOCK = 76 + QUEST_ACCEPT_COND_TYPE_SCENE_LEVEL_TAG_EQ = 77 ) const ( - QUEST_FINISH_COND_TYPE_SCENE_TRIGGER = 6 + QUEST_FINISH_COND_TYPE_NONE = 0 + QUEST_FINISH_COND_TYPE_KILL_MONSTER = 1 + QUEST_FINISH_COND_TYPE_COMPLETE_TALK = 2 + QUEST_FINISH_COND_TYPE_MONSTER_DIE = 3 + QUEST_FINISH_COND_TYPE_FINISH_PLOT = 4 + QUEST_FINISH_COND_TYPE_OBTAIN_ITEM = 5 + QUEST_FINISH_COND_TYPE_TRIGGER_FIRE = 6 + QUEST_FINISH_COND_TYPE_CLEAR_GROUP_MONSTER = 7 + QUEST_FINISH_COND_TYPE_NOT_FINISH_PLOT = 8 + QUEST_FINISH_COND_TYPE_ENTER_DUNGEON = 9 + QUEST_FINISH_COND_TYPE_ENTER_MY_WORLD = 10 + QUEST_FINISH_COND_TYPE_FINISH_DUNGEON = 11 + QUEST_FINISH_COND_TYPE_DESTROY_GADGET = 12 + QUEST_FINISH_COND_TYPE_OBTAIN_MATERIAL_WITH_SUBTYPE = 13 + QUEST_FINISH_COND_TYPE_NICK_NAME = 14 + QUEST_FINISH_COND_TYPE_WORKTOP_SELECT = 15 + QUEST_FINISH_COND_TYPE_SEAL_BATTLE_RESULT = 16 + QUEST_FINISH_COND_TYPE_ENTER_ROOM = 17 + QUEST_FINISH_COND_TYPE_GAME_TIME_TICK = 18 + QUEST_FINISH_COND_TYPE_FAIL_DUNGEON = 19 + QUEST_FINISH_COND_TYPE_LUA_NOTIFY = 20 + QUEST_FINISH_COND_TYPE_TEAM_DEAD = 21 + QUEST_FINISH_COND_TYPE_COMPLETE_ANY_TALK = 22 + QUEST_FINISH_COND_TYPE_UNLOCK_TRANS_POINT = 23 + QUEST_FINISH_COND_TYPE_ADD_QUEST_PROGRESS = 24 + QUEST_FINISH_COND_TYPE_INTERACT_GADGET = 25 + QUEST_FINISH_COND_TYPE_DAILY_TASK_COMP_FINISH = 26 + QUEST_FINISH_COND_TYPE_FINISH_ITEM_GIVING = 27 + QUEST_FINISH_COND_TYPE_SKILL = 107 + QUEST_FINISH_COND_TYPE_CITY_LEVEL_UP = 109 + QUEST_FINISH_COND_TYPE_PATTERN_GROUP_CLEAR_MONSTER = 110 + QUEST_FINISH_COND_TYPE_ITEM_LESS_THAN = 111 + QUEST_FINISH_COND_TYPE_PLAYER_LEVEL_UP = 112 + QUEST_FINISH_COND_TYPE_DUNGEON_OPEN_STATUE = 113 + QUEST_FINISH_COND_TYPE_UNLOCK_AREA = 114 + QUEST_FINISH_COND_TYPE_OPEN_CHEST_WITH_GADGET_ID = 115 + QUEST_FINISH_COND_TYPE_UNLOCK_TRANS_POINT_WITH_TYPE = 116 + QUEST_FINISH_COND_TYPE_FINISH_DAILY_DUNGEON = 117 + QUEST_FINISH_COND_TYPE_FINISH_WEEKLY_DUNGEON = 118 + QUEST_FINISH_COND_TYPE_QUEST_VAR_EQUAL = 119 + QUEST_FINISH_COND_TYPE_QUEST_VAR_GREATER = 120 + QUEST_FINISH_COND_TYPE_QUEST_VAR_LESS = 121 + QUEST_FINISH_COND_TYPE_OBTAIN_VARIOUS_ITEM = 122 + QUEST_FINISH_COND_TYPE_FINISH_TOWER_LEVEL = 123 + QUEST_FINISH_COND_TYPE_BARGAIN_SUCC = 124 + QUEST_FINISH_COND_TYPE_BARGAIN_FAIL = 125 + QUEST_FINISH_COND_TYPE_ITEM_LESS_THAN_BARGAIN = 126 + QUEST_FINISH_COND_TYPE_ACTIVITY_TRIGGER_FAILED = 127 + QUEST_FINISH_COND_TYPE_MAIN_COOP_ENTER_SAVE_POINT = 128 + QUEST_FINISH_COND_TYPE_ANY_MANUAL_TRANSPORT = 129 + QUEST_FINISH_COND_TYPE_USE_ITEM = 130 + QUEST_FINISH_COND_TYPE_MAIN_COOP_ENTER_ANY_SAVE_POINT = 131 + QUEST_FINISH_COND_TYPE_ENTER_MY_HOME_WORLD = 132 + QUEST_FINISH_COND_TYPE_ENTER_MY_WORLD_SCENE = 133 + QUEST_FINISH_COND_TYPE_TIME_VAR_GT_EQ = 134 + QUEST_FINISH_COND_TYPE_TIME_VAR_PASS_DAY = 135 + QUEST_FINISH_COND_TYPE_QUEST_STATE_EQUAL = 136 + QUEST_FINISH_COND_TYPE_QUEST_STATE_NOT_EQUAL = 137 + QUEST_FINISH_COND_TYPE_UNLOCKED_RECIPE = 138 + QUEST_FINISH_COND_TYPE_NOT_UNLOCKED_RECIPE = 139 + QUEST_FINISH_COND_TYPE_FISHING_SUCC = 140 + QUEST_FINISH_COND_TYPE_ENTER_ROGUE_DUNGEON = 141 + QUEST_FINISH_COND_TYPE_USE_WIDGET = 142 + QUEST_FINISH_COND_TYPE_CAPTURE_SUCC = 143 + QUEST_FINISH_COND_TYPE_CAPTURE_USE_CAPTURETAG_LIST = 144 + QUEST_FINISH_COND_TYPE_CAPTURE_USE_MATERIAL_LIST = 145 + QUEST_FINISH_COND_TYPE_ENTER_VEHICLE = 147 + QUEST_FINISH_COND_TYPE_SCENE_LEVEL_TAG_EQ = 148 + QUEST_FINISH_COND_TYPE_LEAVE_SCENE = 149 + QUEST_FINISH_COND_TYPE_LEAVE_SCENE_RANGE = 150 + QUEST_FINISH_COND_TYPE_IRODORI_FINISH_FLOWER_COMBINATION = 151 + QUEST_FINISH_COND_TYPE_IRODORI_POETRY_REACH_MIN_PROGRESS = 152 + QUEST_FINISH_COND_TYPE_IRODORI_POETRY_FINISH_FILL_POETRY = 153 ) diff --git a/common/constant/reliquary_type.go b/common/constant/reliquary_type.go index d0e3cab3..b24790d9 100644 --- a/common/constant/reliquary_type.go +++ b/common/constant/reliquary_type.go @@ -1,10 +1,10 @@ package constant const ( - RELIQUARY_TYPE_NONE int32 = 0 - RELIQUARY_TYPE_FLOWER int32 = 1 // 生之花 - RELIQUARY_TYPE_FEATHER int32 = 2 // 死之羽 - RELIQUARY_TYPE_SAND int32 = 3 // 时之沙 - RELIQUARY_TYPE_CUP int32 = 4 // 空之杯 - RELIQUARY_TYPE_CROWN int32 = 5 // 理之冠 + RELIQUARY_TYPE_NONE = 0 + RELIQUARY_TYPE_FLOWER = 1 // 生之花 + RELIQUARY_TYPE_FEATHER = 2 // 死之羽 + RELIQUARY_TYPE_SAND = 3 // 时之沙 + RELIQUARY_TYPE_CUP = 4 // 空之杯 + RELIQUARY_TYPE_CROWN = 5 // 理之冠 ) diff --git a/common/constant/scene_type.go b/common/constant/scene_type.go index 9f766cd0..e4dce60e 100644 --- a/common/constant/scene_type.go +++ b/common/constant/scene_type.go @@ -1,11 +1,11 @@ package constant const ( - SCENE_TYPE_NONE uint16 = 0 - SCENE_TYPE_WORLD uint16 = 1 - SCENE_TYPE_DUNGEON uint16 = 2 - SCENE_TYPE_ROOM uint16 = 3 - SCENE_TYPE_HOME_WORLD uint16 = 4 - SCENE_TYPE_HOME_ROOM uint16 = 5 - SCENE_TYPE_ACTIVITY uint16 = 6 + SCENE_TYPE_NONE = 0 + SCENE_TYPE_WORLD = 1 + SCENE_TYPE_DUNGEON = 2 + SCENE_TYPE_ROOM = 3 + SCENE_TYPE_HOME_WORLD = 4 + SCENE_TYPE_HOME_ROOM = 5 + SCENE_TYPE_ACTIVITY = 6 ) diff --git a/common/constant/weapon_type.go b/common/constant/weapon_type.go index dee3e002..b5f477b6 100644 --- a/common/constant/weapon_type.go +++ b/common/constant/weapon_type.go @@ -1,18 +1,18 @@ package constant const ( - WEAPON_TYPE_NONE int32 = 0 - WEAPON_TYPE_SWORD_ONE_HAND int32 = 1 // 单手剑 - WEAPON_TYPE_CROSSBOW int32 = 2 // 弩 - WEAPON_TYPE_STAFF int32 = 3 // 权杖 - WEAPON_TYPE_DOUBLE_DAGGER int32 = 4 // 双刀 - WEAPON_TYPE_KATANA int32 = 5 // 武士刀 - WEAPON_TYPE_SHURIKEN int32 = 6 // 手里剑 - WEAPON_TYPE_STICK int32 = 7 // 棍 - WEAPON_TYPE_SPEAR int32 = 8 // 矛 - WEAPON_TYPE_SHIELD_SMALL int32 = 9 // 小盾牌 - WEAPON_TYPE_CATALYST int32 = 10 // 法器 - WEAPON_TYPE_CLAYMORE int32 = 11 // 双手剑 - WEAPON_TYPE_BOW int32 = 12 // 弓 - WEAPON_TYPE_POLE int32 = 13 // 长枪 + WEAPON_TYPE_NONE = 0 + WEAPON_TYPE_SWORD_ONE_HAND = 1 // 单手剑 + WEAPON_TYPE_CROSSBOW = 2 // 弩 + WEAPON_TYPE_STAFF = 3 // 权杖 + WEAPON_TYPE_DOUBLE_DAGGER = 4 // 双刀 + WEAPON_TYPE_KATANA = 5 // 武士刀 + WEAPON_TYPE_SHURIKEN = 6 // 手里剑 + WEAPON_TYPE_STICK = 7 // 棍 + WEAPON_TYPE_SPEAR = 8 // 矛 + WEAPON_TYPE_SHIELD_SMALL = 9 // 小盾牌 + WEAPON_TYPE_CATALYST = 10 // 法器 + WEAPON_TYPE_CLAYMORE = 11 // 双手剑 + WEAPON_TYPE_BOW = 12 // 弓 + WEAPON_TYPE_POLE = 13 // 长枪 ) diff --git a/fight/engine/fight_engine.go b/fight/engine/fight_engine.go index 2f40c78b..15d5a44f 100644 --- a/fight/engine/fight_engine.go +++ b/fight/engine/fight_engine.go @@ -201,8 +201,8 @@ func (f *FightRoutine) onTickSecond(now int64) { if entity.uid == 0 { continue } - entity.fightPropMap[uint32(constant.FIGHT_PROP_CUR_ATTACK)] = 1000000 - entity.fightPropMap[uint32(constant.FIGHT_PROP_CRITICAL)] = 1.0 + entity.fightPropMap[constant.FIGHT_PROP_CUR_ATTACK] = 1000000 + entity.fightPropMap[constant.FIGHT_PROP_CRITICAL] = 1.0 avatarFightPropNotify := &proto.AvatarFightPropNotify{ AvatarGuid: entity.avatarGuid, FightPropMap: entity.fightPropMap, @@ -262,17 +262,17 @@ func (f *FightRoutine) attackHandle(gameMsg *mq.GameMsg) { _ = attackerId currHp := float32(0) if target.fightPropMap != nil { - currHp = target.fightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)] + currHp = target.fightPropMap[constant.FIGHT_PROP_CUR_HP] currHp -= damage if currHp < 0 { currHp = 0 } - target.fightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)] = currHp + target.fightPropMap[constant.FIGHT_PROP_CUR_HP] = currHp } entityFightPropUpdateNotify := new(proto.EntityFightPropUpdateNotify) entityFightPropUpdateNotify.EntityId = target.entityId entityFightPropUpdateNotify.FightPropMap = make(map[uint32]float32) - entityFightPropUpdateNotify.FightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)] = currHp + entityFightPropUpdateNotify.FightPropMap[constant.FIGHT_PROP_CUR_HP] = currHp for _, uid := range f.getAllPlayer(f.entityMap) { SendMsg(f.messageQueue, cmd.EntityFightPropUpdateNotify, uid, f.gateAppId, entityFightPropUpdateNotify) } diff --git a/gdconf/avatar_data.go b/gdconf/avatar_data.go index ad40d729..3deb2f04 100644 --- a/gdconf/avatar_data.go +++ b/gdconf/avatar_data.go @@ -16,11 +16,11 @@ import ( // AvatarData 角色配置表 type AvatarData struct { AvatarId int32 `csv:"AvatarId"` // ID - HpBase float64 `csv:"HpBase,omitempty"` // 基础生命值 - AttackBase float64 `csv:"AttackBase,omitempty"` // 基础攻击力 - DefenseBase float64 `csv:"DefenseBase,omitempty"` // 基础防御力 - Critical float64 `csv:"Critical,omitempty"` // 暴击率 - CriticalHurt float64 `csv:"CriticalHurt,omitempty"` // 暴击伤害 + HpBase float32 `csv:"HpBase,omitempty"` // 基础生命值 + AttackBase float32 `csv:"AttackBase,omitempty"` // 基础攻击力 + DefenseBase float32 `csv:"DefenseBase,omitempty"` // 基础防御力 + Critical float32 `csv:"Critical,omitempty"` // 暴击率 + CriticalHurt float32 `csv:"CriticalHurt,omitempty"` // 暴击伤害 QualityType int32 `csv:"QualityType,omitempty"` // 角色品质 ConfigJson string `csv:"ConfigJson,omitempty"` // 战斗config InitialWeapon int32 `csv:"InitialWeapon,omitempty"` // 初始武器 @@ -107,14 +107,14 @@ func GetAvatarDataMap() map[int32]*AvatarData { // TODO 成长属性要读表 -func (a *AvatarData) GetBaseHpByLevel(level uint8) float64 { - return a.HpBase * float64(level) +func (a *AvatarData) GetBaseHpByLevel(level uint8) float32 { + return a.HpBase * float32(level) } -func (a *AvatarData) GetBaseAttackByLevel(level uint8) float64 { - return a.AttackBase * float64(level) +func (a *AvatarData) GetBaseAttackByLevel(level uint8) float32 { + return a.AttackBase * float32(level) } -func (a *AvatarData) GetBaseDefenseByLevel(level uint8) float64 { - return a.DefenseBase * float64(level) +func (a *AvatarData) GetBaseDefenseByLevel(level uint8) float32 { + return a.DefenseBase * float32(level) } diff --git a/gdconf/game_data_config.go b/gdconf/game_data_config.go index 5d1d64dc..d8b22e5a 100644 --- a/gdconf/game_data_config.go +++ b/gdconf/game_data_config.go @@ -8,6 +8,7 @@ import ( "time" "hk4e/common/config" + "hk4e/common/constant" "hk4e/pkg/logger" lua "github.com/yuin/gopher-lua" @@ -172,18 +173,22 @@ func RegScriptLib(fnName string, fn lua.LGFunction) { func initLuaState(luaState *lua.LState) { eventType := luaState.NewTable() luaState.SetGlobal("EventType", eventType) - luaState.SetField(eventType, "NONE", lua.LNumber(0)) - luaState.SetField(eventType, "EVENT_ENTER_REGION", lua.LNumber(1)) + luaState.SetField(eventType, "EVENT_NONE", lua.LNumber(constant.LUA_EVENT_NONE)) + luaState.SetField(eventType, "EVENT_ENTER_REGION", lua.LNumber(constant.LUA_EVENT_ENTER_REGION)) + luaState.SetField(eventType, "EVENT_LEAVE_REGION", lua.LNumber(constant.LUA_EVENT_LEAVE_REGION)) entityType := luaState.NewTable() luaState.SetGlobal("EntityType", entityType) - luaState.SetField(entityType, "NONE", lua.LNumber(0)) - luaState.SetField(entityType, "AVATAR", lua.LNumber(1)) + luaState.SetField(entityType, "NONE", lua.LNumber(constant.ENTITY_TYPE_NONE)) + luaState.SetField(entityType, "AVATAR", lua.LNumber(constant.ENTITY_TYPE_AVATAR)) regionShape := luaState.NewTable() luaState.SetGlobal("RegionShape", regionShape) - luaState.SetField(regionShape, "NONE", lua.LNumber(0)) - luaState.SetField(regionShape, "SPHERE", lua.LNumber(1)) + luaState.SetField(regionShape, "NONE", lua.LNumber(constant.REGION_SHAPE_NONE)) + luaState.SetField(regionShape, "SPHERE", lua.LNumber(constant.REGION_SHAPE_SPHERE)) + luaState.SetField(regionShape, "CUBIC", lua.LNumber(constant.REGION_SHAPE_CUBIC)) + luaState.SetField(regionShape, "CYLINDER", lua.LNumber(constant.REGION_SHAPE_CYLINDER)) + luaState.SetField(regionShape, "POLYGON", lua.LNumber(constant.REGION_SHAPE_POLYGON)) questState := luaState.NewTable() luaState.SetGlobal("QuestState", questState) diff --git a/gdconf/item_data.go b/gdconf/item_data.go index a1079e0e..276c6994 100644 --- a/gdconf/item_data.go +++ b/gdconf/item_data.go @@ -62,7 +62,7 @@ func (g *GameDataConfig) loadItemData() { itemData.SkillAffix = append(itemData.SkillAffix, itemData.SkillAffix2) } // 武器精炼摩拉消耗列表读取转换 - if itemData.Type == int32(constant.ITEM_TYPE_WEAPON) && itemData.AwakenCoinCostStr != "" { + if itemData.Type == constant.ITEM_TYPE_WEAPON && itemData.AwakenCoinCostStr != "" { tempCostList := strings.Split(strings.ReplaceAll(itemData.AwakenCoinCostStr, " ", ""), "#") itemData.AwakenCoinCostList = make([]uint32, 0, len(tempCostList)) for _, s := range tempCostList { diff --git a/gdconf/scene_lua_config.go b/gdconf/scene_lua_config.go index 5a8bda24..438a1ca5 100644 --- a/gdconf/scene_lua_config.go +++ b/gdconf/scene_lua_config.go @@ -4,6 +4,7 @@ import ( "os" "strconv" "sync" + "sync/atomic" "hk4e/pkg/logger" @@ -16,6 +17,8 @@ const ( SceneGroupLoaderLimit = 4 // 加载文件的并发数 此操作很耗内存 调大之前请确保你的机器内存足够 ) +var OBJECT_ID_COUNTER uint64 + type SceneLuaConfig struct { Id int32 SceneConfig *SceneConfig // 地图配置 @@ -54,14 +57,15 @@ type Group struct { RefreshId int32 `json:"refresh_id"` Area int32 `json:"area"` Pos *Vector `json:"pos"` + DynamicLoad bool `json:"dynamic_load"` IsReplaceable *Replaceable `json:"is_replaceable"` MonsterList []*Monster `json:"monsters"` // 怪物 NpcList []*Npc `json:"npcs"` // NPC GadgetList []*Gadget `json:"gadgets"` // 物件 RegionList []*Region `json:"regions"` TriggerList []*Trigger `json:"triggers"` - LuaStr string - LuaState *lua.LState + LuaStr string `json:"-"` + LuaState *lua.LState `json:"-"` } type Replaceable struct { @@ -77,6 +81,7 @@ type Monster struct { Rot *Vector `json:"rot"` Level int32 `json:"level"` AreaId int32 `json:"area_id"` + ObjectId uint64 `json:"-"` } type Npc struct { @@ -85,6 +90,7 @@ type Npc struct { Pos *Vector `json:"pos"` Rot *Vector `json:"rot"` AreaId int32 `json:"area_id"` + ObjectId uint64 `json:"-"` } type Gadget struct { @@ -95,15 +101,18 @@ type Gadget struct { Level int32 `json:"level"` AreaId int32 `json:"area_id"` PointType int32 `json:"point_type"` // 关联GatherData表 + ObjectId uint64 `json:"-"` } type Region struct { - ConfigId int32 `json:"config_id"` - Shape int32 `json:"shape"` - Radius float32 `json:"radius"` - Size *Vector `json:"size"` - Pos *Vector `json:"pos"` - AreaId int32 `json:"area_id"` + ConfigId int32 `json:"config_id"` + Shape int32 `json:"shape"` + Radius float32 `json:"radius"` + Size *Vector `json:"size"` + Pos *Vector `json:"pos"` + Height float32 `json:"height"` + PointArray []*Vector `json:"point_array"` + AreaId int32 `json:"area_id"` } type Trigger struct { @@ -136,6 +145,9 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl logger.Error("get monsters object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId) return } + for _, monster := range group.MonsterList { + monster.ObjectId = atomic.AddUint64(&OBJECT_ID_COUNTER, 1) + } // npcs group.NpcList = make([]*Npc, 0) ok = parseLuaTableToObject[*[]*Npc](luaState, "npcs", &group.NpcList) @@ -143,6 +155,9 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl logger.Error("get npcs object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId) return } + for _, npc := range group.NpcList { + npc.ObjectId = atomic.AddUint64(&OBJECT_ID_COUNTER, 1) + } // gadgets group.GadgetList = make([]*Gadget, 0) ok = parseLuaTableToObject[*[]*Gadget](luaState, "gadgets", &group.GadgetList) @@ -150,6 +165,9 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl logger.Error("get gadgets object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId) return } + for _, gadget := range group.GadgetList { + gadget.ObjectId = atomic.AddUint64(&OBJECT_ID_COUNTER, 1) + } // regions group.RegionList = make([]*Region, 0) ok = parseLuaTableToObject[*[]*Region](luaState, "regions", &group.RegionList) @@ -170,6 +188,7 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl } func (g *GameDataConfig) loadSceneLuaConfig() { + OBJECT_ID_COUNTER = 0 g.SceneLuaConfigMap = make(map[int32]*SceneLuaConfig) sceneLuaPrefix := g.luaPrefix + "scene/" for _, sceneData := range g.SceneDataMap { diff --git a/gs/game/command_gm.go b/gs/game/command_gm.go index 28c693fe..f193046f 100644 --- a/gs/game/command_gm.go +++ b/gs/game/command_gm.go @@ -1,10 +1,10 @@ package game import ( - "hk4e/common/constant" "hk4e/gdconf" "hk4e/gs/model" "hk4e/pkg/logger" + "hk4e/protocol/proto" ) // GMTeleportPlayer 传送玩家 @@ -14,7 +14,7 @@ func (c *CommandManager) GMTeleportPlayer(userId, sceneId uint32, posX, posY, po logger.Error("player is nil, uid: %v", userId) return } - GAME_MANAGER.TeleportPlayer(player, constant.EnterReasonGm, sceneId, &model.Vector{ + GAME_MANAGER.TeleportPlayer(player, uint16(proto.EnterReason_ENTER_REASON_GM), sceneId, &model.Vector{ X: posX, Y: posY, Z: posZ, diff --git a/gs/game/local_event_manager.go b/gs/game/local_event_manager.go index 3e1f75a2..9e6d83a8 100644 --- a/gs/game/local_event_manager.go +++ b/gs/game/local_event_manager.go @@ -167,5 +167,7 @@ func (l *LocalEventManager) LocalEventHandle(localEvent *LocalEvent) { }() case ReloadGameDataConfigFinish: gdconf.ReplaceGameDataConfig() + // TODO 参考更表一样改成异步加载 + WORLD_MANAGER.LoadSceneBlockAoiMap() } } diff --git a/gs/game/player_avatar.go b/gs/game/player_avatar.go index 35d4a14a..6fb6c25c 100644 --- a/gs/game/player_avatar.go +++ b/gs/game/player_avatar.go @@ -440,14 +440,14 @@ func (g *GameManager) PacketAvatarInfo(avatar *model.Avatar) *proto.AvatarInfo { for _, v := range avatar.FetterList { pbAvatar.FetterInfo.FetterList = append(pbAvatar.FetterInfo.FetterList, &proto.FetterData{ FetterId: v, - FetterState: uint32(constant.FETTER_STATE_FINISH), + FetterState: constant.FETTER_STATE_FINISH, }) } // 解锁全部资料 for _, v := range gdconf.GetFetterIdListByAvatarId(int32(avatar.AvatarId)) { pbAvatar.FetterInfo.FetterList = append(pbAvatar.FetterInfo.FetterList, &proto.FetterData{ FetterId: uint32(v), - FetterState: uint32(constant.FETTER_STATE_FINISH), + FetterState: constant.FETTER_STATE_FINISH, }) } // 突破等级奖励 diff --git a/gs/game/player_equip.go b/gs/game/player_equip.go index d24c6c5c..bee32dba 100644 --- a/gs/game/player_equip.go +++ b/gs/game/player_equip.go @@ -314,7 +314,7 @@ func (g *GameManager) PacketAvatarEquipChangeNotifyByWeapon(avatar *model.Avatar AvatarGuid: avatar.Guid, ItemId: weapon.ItemId, EquipGuid: weapon.Guid, - EquipType: uint32(constant.EQUIP_TYPE_WEAPON), + EquipType: constant.EQUIP_TYPE_WEAPON, Weapon: &proto.SceneWeaponInfo{ EntityId: entityId, GadgetId: uint32(weaponConfig.GadgetId), diff --git a/gs/game/player_fight_sync.go b/gs/game/player_fight_sync.go index 646c9a65..5ce0925b 100644 --- a/gs/game/player_fight_sync.go +++ b/gs/game/player_fight_sync.go @@ -1,10 +1,14 @@ package game import ( + "math" + "hk4e/common/config" "hk4e/common/constant" "hk4e/common/utils" + "hk4e/gdconf" "hk4e/gs/model" + "hk4e/pkg/alg" "hk4e/pkg/logger" "hk4e/pkg/reflection" "hk4e/protocol/cmd" @@ -147,19 +151,19 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p currHp := float32(0) fightProp := target.GetFightProp() if fightProp != nil { - currHp = fightProp[uint32(constant.FIGHT_PROP_CUR_HP)] + currHp = fightProp[constant.FIGHT_PROP_CUR_HP] currHp -= damage if currHp < 0 { currHp = 0 } - fightProp[uint32(constant.FIGHT_PROP_CUR_HP)] = currHp + fightProp[constant.FIGHT_PROP_CUR_HP] = currHp } entityFightPropUpdateNotify := &proto.EntityFightPropUpdateNotify{ FightPropMap: fightProp, EntityId: target.GetId(), } g.SendToWorldA(world, cmd.EntityFightPropUpdateNotify, player.ClientSeq, entityFightPropUpdateNotify) - if currHp == 0 && target.GetAvatarEntity() == nil { + if currHp == 0 && target.GetEntityType() != constant.ENTITY_TYPE_AVATAR { scene.SetEntityLifeState(target, constant.LIFE_STATE_DEAD, proto.PlayerDieType_PLAYER_DIE_GM) } combatData, err := pb.Marshal(hitInfo) @@ -195,13 +199,13 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p if sceneEntity == nil { continue } - if sceneEntity.GetAvatarEntity() != nil { + if sceneEntity.GetEntityType() == constant.ENTITY_TYPE_AVATAR { // 玩家实体在移动 g.AoiPlayerMove(player, player.Pos, &model.Vector{ X: float64(motionInfo.Pos.X), Y: float64(motionInfo.Pos.Y), Z: float64(motionInfo.Pos.Z), - }) + }, sceneEntity.GetId()) // 更新玩家的位置信息 player.Pos.X = float64(motionInfo.Pos.X) player.Pos.Y = float64(motionInfo.Pos.Y) @@ -223,13 +227,15 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p rot.X = float64(motionInfo.Rot.X) rot.Y = float64(motionInfo.Rot.Y) rot.Z = float64(motionInfo.Rot.Z) - // 载具耐力消耗 - gadgetEntity := sceneEntity.GetGadgetEntity() - if gadgetEntity != nil && gadgetEntity.GetGadgetVehicleEntity() != nil { - // 处理耐力消耗 - g.ImmediateStamina(player, motionInfo.State) - // 处理载具销毁请求 - g.VehicleDestroyMotion(player, sceneEntity, motionInfo.State) + if sceneEntity.GetEntityType() == constant.ENTITY_TYPE_GADGET { + // 载具耐力消耗 + gadgetEntity := sceneEntity.GetGadgetEntity() + if gadgetEntity.GetGadgetVehicleEntity() != nil { + // 处理耐力消耗 + g.ImmediateStamina(player, motionInfo.State) + // 处理载具销毁请求 + g.VehicleDestroyMotion(player, sceneEntity, motionInfo.State) + } } } sceneEntity.SetMoveState(uint16(motionInfo.State)) @@ -278,67 +284,181 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p } } -func (g *GameManager) AoiPlayerMove(player *model.Player, oldPos *model.Vector, newPos *model.Vector) { - sceneBlockAoiMap := WORLD_MANAGER.GetSceneBlockAoiMap() - aoiManager, exist := sceneBlockAoiMap[player.SceneId] +func (g *GameManager) AoiPlayerMove(player *model.Player, oldPos *model.Vector, newPos *model.Vector, entityId uint32) { world := WORLD_MANAGER.GetWorldByID(player.WorldId) - scene := world.GetSceneById(player.SceneId) - if scene == nil { - logger.Error("scene is nil, sceneId: %v", player.SceneId) + if world == nil { + logger.Error("get player world is nil, uid: %v", player.PlayerID) return } - if exist { - oldGid := aoiManager.GetGidByPos(float32(oldPos.X), 0.0, float32(oldPos.Z)) - newGid := aoiManager.GetGidByPos(float32(newPos.X), 0.0, float32(newPos.Z)) - if oldGid != newGid { - // 跨越了格子 - oldGridList := aoiManager.GetSurrGridListByGid(oldGid) - oldObjectMap := make(map[int64]any) - for _, grid := range oldGridList { - tmp := grid.GetObjectList() - for k, v := range tmp { - oldObjectMap[k] = v - } + scene := world.GetSceneById(player.SceneId) + sceneBlockAoiMap := WORLD_MANAGER.GetSceneBlockAoiMap() + aoiManager, exist := sceneBlockAoiMap[player.SceneId] + if !exist { + logger.Error("get scene block aoi is nil, sceneId: %v, uid: %v", player.SceneId, player.PlayerID) + return + } + oldGid := aoiManager.GetGidByPos(float32(oldPos.X), 0.0, float32(oldPos.Z)) + newGid := aoiManager.GetGidByPos(float32(newPos.X), 0.0, float32(newPos.Z)) + if oldGid != newGid { + // 跨越了block格子 + logger.Debug("player cross grid, oldGid: %v, newGid: %v, uid: %v", oldGid, newGid, player.PlayerID) + } + // 旧位置视野范围内的group + oldVisionGroupMap := make(map[uint32]*gdconf.Group) + oldGroupList := aoiManager.GetObjectListByPos(float32(oldPos.X), 0.0, float32(oldPos.Z)) + for groupId, groupAny := range oldGroupList { + group := groupAny.(*gdconf.Group) + distance2D := math.Sqrt(math.Pow(oldPos.X-float64(group.Pos.X), 2.0) + math.Pow(oldPos.Z-float64(group.Pos.Z), 2.0)) + if distance2D > ENTITY_LOD { + continue + } + oldVisionGroupMap[uint32(groupId)] = group + } + // 新位置视野范围内的group + newVisionGroupMap := make(map[uint32]*gdconf.Group) + newGroupList := aoiManager.GetObjectListByPos(float32(newPos.X), 0.0, float32(newPos.Z)) + for groupId, groupAny := range newGroupList { + group := groupAny.(*gdconf.Group) + distance2D := math.Sqrt(math.Pow(newPos.X-float64(group.Pos.X), 2.0) + math.Pow(newPos.Z-float64(group.Pos.Z), 2.0)) + if distance2D > ENTITY_LOD { + continue + } + newVisionGroupMap[uint32(groupId)] = group + } + // 消失的场景实体 + delEntityIdList := make([]uint32, 0) + for groupId, group := range oldVisionGroupMap { + _, exist := newVisionGroupMap[groupId] + if exist { + continue + } + // 旧有新没有的group即为消失的 + for _, monster := range group.MonsterList { + entity := scene.GetEntityByObjectId(monster.ObjectId) + if entity == nil { + continue } - newGridList := aoiManager.GetSurrGridListByGid(newGid) - newObjectMap := make(map[int64]any) - for _, grid := range newGridList { - tmp := grid.GetObjectList() - for k, v := range tmp { - newObjectMap[k] = v - } + scene.DestroyEntity(entity.GetId()) + delEntityIdList = append(delEntityIdList, entity.GetId()) + } + for _, npc := range group.NpcList { + entity := scene.GetEntityByObjectId(npc.ObjectId) + if entity == nil { + continue } - delEntityIdList := make([]uint32, 0) - for oldObjectId := range oldObjectMap { - _, exist := newObjectMap[oldObjectId] - if exist { - continue - } - entity := scene.GetEntityByObjectId(oldObjectId) - if entity == nil { - continue - } - scene.DestroyEntity(entity.GetId()) - delEntityIdList = append(delEntityIdList, entity.GetId()) + scene.DestroyEntity(entity.GetId()) + delEntityIdList = append(delEntityIdList, entity.GetId()) + } + for _, gadget := range group.GadgetList { + entity := scene.GetEntityByObjectId(gadget.ObjectId) + if entity == nil { + continue } - addEntityIdList := make([]uint32, 0) - for newObjectId, newObject := range newObjectMap { - _, exist := oldObjectMap[newObjectId] - if exist { - continue - } - entityId := g.CreateConfigEntity(scene, newObjectId, newObject) - if entityId == 0 { - continue - } - addEntityIdList = append(addEntityIdList, entityId) - } - // 发送已消失格子里的实体消失通知 - g.RemoveSceneEntityNotifyToPlayer(player, proto.VisionType_VISION_MISS, delEntityIdList) - // 发送新出现格子里的实体出现通知 - g.AddSceneEntityNotify(player, proto.VisionType_VISION_MEET, addEntityIdList, false, false) + scene.DestroyEntity(entity.GetId()) + delEntityIdList = append(delEntityIdList, entity.GetId()) } } + // 出现的场景实体 + addEntityIdList := make([]uint32, 0) + for groupId, group := range newVisionGroupMap { + _, exist := oldVisionGroupMap[groupId] + if exist { + continue + } + // 新有旧没有的group即为出现的 + for _, monster := range group.MonsterList { + entityId := g.CreateConfigEntity(scene, monster.ObjectId, monster) + addEntityIdList = append(addEntityIdList, entityId) + } + for _, npc := range group.NpcList { + entityId := g.CreateConfigEntity(scene, npc.ObjectId, npc) + addEntityIdList = append(addEntityIdList, entityId) + } + for _, gadget := range group.GadgetList { + entityId := g.CreateConfigEntity(scene, gadget.ObjectId, gadget) + addEntityIdList = append(addEntityIdList, entityId) + } + } + // 同步客户端消失和出现的场景实体 + g.RemoveSceneEntityNotifyToPlayer(player, proto.VisionType_VISION_MISS, delEntityIdList) + g.AddSceneEntityNotify(player, proto.VisionType_VISION_MEET, addEntityIdList, false, false) + // 场景区域触发器 + dbQuest := player.GetDbQuest() + for _, group := range newVisionGroupMap { + for _, region := range group.RegionList { + shape := alg.NewShape() + switch uint8(region.Shape) { + case constant.REGION_SHAPE_SPHERE: + shape.NewSphere(&alg.Vector3{X: region.Pos.X, Y: region.Pos.Y, Z: region.Pos.Z}, region.Radius) + case constant.REGION_SHAPE_CUBIC: + shape.NewCubic(&alg.Vector3{X: region.Pos.X, Y: region.Pos.Y, Z: region.Pos.Z}, + &alg.Vector3{X: region.Size.X, Y: region.Size.Y, Z: region.Size.Z}) + case constant.REGION_SHAPE_CYLINDER: + shape.NewCylinder(&alg.Vector3{X: region.Pos.X, Y: region.Pos.Y, Z: region.Pos.Z}, + region.Radius, region.Height) + case constant.REGION_SHAPE_POLYGON: + vector2PointArray := make([]*alg.Vector2, 0) + for _, vector := range region.PointArray { + // z就是y + vector2PointArray = append(vector2PointArray, &alg.Vector2{X: vector.X, Z: vector.Y}) + } + shape.NewPolygon(&alg.Vector3{X: region.Pos.X, Y: region.Pos.Y, Z: region.Pos.Z}, + vector2PointArray, region.Height) + } + oldPosInRegion := shape.Contain(&alg.Vector3{ + X: float32(oldPos.X), + Y: float32(oldPos.Y), + Z: float32(oldPos.Z), + }) + newPosInRegion := shape.Contain(&alg.Vector3{ + X: float32(newPos.X), + Y: float32(newPos.Y), + Z: float32(newPos.Z), + }) + if !oldPosInRegion && newPosInRegion { + // EVENT_ENTER_REGION + logger.Debug("player enter region: %v, uid: %v", region, player.PlayerID) + for _, trigger := range group.TriggerList { + if trigger.Event != constant.LUA_EVENT_ENTER_REGION { + continue + } + cond := CallLuaFunc(group.LuaState, trigger.Condition, &LuaCtx{ + uid: player.PlayerID, + }, &LuaEvt{ + param1: region.ConfigId, + targetEntityId: entityId, + }) + if !cond { + continue + } + // TODO 这一块写得太炸裂了需要优化 + 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 questCond.Param[0] != triggerDataConfig.TriggerId { + continue + } + dbQuest.ForceFinishQuest(quest.QuestId) + } + } + } + } + } + } else if oldPosInRegion && !newPosInRegion { + // EVENT_LEAVE_REGION + logger.Debug("player leave region: %v, uid: %v", region, player.PlayerID) + } + } + } + g.AcceptQuest(player, true) } func (g *GameManager) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Message) { diff --git a/gs/game/player_gcg.go b/gs/game/player_gcg.go index 2ef244d4..1351981a 100644 --- a/gs/game/player_gcg.go +++ b/gs/game/player_gcg.go @@ -63,7 +63,7 @@ func (g *GameManager) GCGStartChallenge(player *model.Player) { g.PacketGCGGameBriefDataNotify(player, proto.GCGGameBusinessType_GCG_GAME_GUIDE_GROUP, game)) // 玩家进入GCG界面 - g.TeleportPlayer(player, constant.EnterReasonDungeonEnter, 79999, new(model.Vector), new(model.Vector), 2162) + g.TeleportPlayer(player, uint16(proto.EnterReason_ENTER_REASON_DUNGEON_ENTER), 79999, new(model.Vector), new(model.Vector), 2162) } // GCGAskDuelReq GCG决斗请求 diff --git a/gs/game/player_item.go b/gs/game/player_item.go index 207b94a0..f8c422d6 100644 --- a/gs/game/player_item.go +++ b/gs/game/player_item.go @@ -16,11 +16,11 @@ type ChangeItem struct { func (g *GameManager) GetAllItemDataConfig() map[int32]*gdconf.ItemData { allItemDataConfig := make(map[int32]*gdconf.ItemData) for itemId, itemData := range gdconf.GetItemDataMap() { - if uint16(itemData.Type) == constant.ITEM_TYPE_WEAPON { + if itemData.Type == constant.ITEM_TYPE_WEAPON { // 排除武器 continue } - if uint16(itemData.Type) == constant.ITEM_TYPE_RELIQUARY { + if itemData.Type == constant.ITEM_TYPE_RELIQUARY { // 排除圣遗物 continue } @@ -111,7 +111,7 @@ func (g *GameManager) AddUserItem(userId uint32, itemList []*ChangeItem, isHint if isHint { if hintReason == 0 { - hintReason = constant.ActionReasonSubfieldDrop + hintReason = uint16(proto.ActionReasonType_ACTION_REASON_SUBFIELD_DROP) } itemAddHintNotify := &proto.ItemAddHintNotify{ Reason: uint32(hintReason), diff --git a/gs/game/player_login.go b/gs/game/player_login.go index a3401b2d..aad757ce 100644 --- a/gs/game/player_login.go +++ b/gs/game/player_login.go @@ -215,7 +215,7 @@ func (g *GameManager) PacketPlayerStoreNotify(player *model.Player) *proto.Playe logger.Error("get item data config is nil, itemId: %v", weapon.ItemId) continue } - if uint16(itemDataConfig.Type) != constant.ITEM_TYPE_WEAPON { + if itemDataConfig.Type != constant.ITEM_TYPE_WEAPON { continue } affixMap := make(map[uint32]uint32) @@ -247,7 +247,7 @@ func (g *GameManager) PacketPlayerStoreNotify(player *model.Player) *proto.Playe logger.Error("get item data config is nil, itemId: %v", reliquary.ItemId) continue } - if uint16(itemDataConfig.Type) != constant.ITEM_TYPE_RELIQUARY { + if itemDataConfig.Type != constant.ITEM_TYPE_RELIQUARY { continue } pbItem := &proto.Item{ @@ -281,7 +281,7 @@ func (g *GameManager) PacketPlayerStoreNotify(player *model.Player) *proto.Playe Guid: item.Guid, Detail: nil, } - if itemDataConfig != nil && uint16(itemDataConfig.Type) == constant.ITEM_TYPE_FURNITURE { + if itemDataConfig != nil && itemDataConfig.Type == constant.ITEM_TYPE_FURNITURE { pbItem.Detail = &proto.Item_Furniture{ Furniture: &proto.Furniture{ Count: item.Count, diff --git a/gs/game/player_map.go b/gs/game/player_map.go index 50950b56..de0362be 100644 --- a/gs/game/player_map.go +++ b/gs/game/player_map.go @@ -3,7 +3,6 @@ package game import ( "strconv" - "hk4e/common/constant" "hk4e/gdconf" "hk4e/gs/model" "hk4e/pkg/logger" @@ -25,7 +24,7 @@ func (g *GameManager) SceneTransToPointReq(player *model.Player, payloadMsg pb.M // 传送玩家 sceneId := req.SceneId - g.TeleportPlayer(player, constant.EnterReasonTransPoint, sceneId, &model.Vector{ + g.TeleportPlayer(player, uint16(proto.EnterReason_ENTER_REASON_TRANS_POINT), sceneId, &model.Vector{ X: pointDataConfig.TranPos.X, Y: pointDataConfig.TranPos.Y, Z: pointDataConfig.TranPos.Z, @@ -55,7 +54,7 @@ func (g *GameManager) MarkMapReq(player *model.Player, payloadMsg pb.Message) { posYInt = 300 } // 传送玩家 - g.TeleportPlayer(player, constant.EnterReasonGm, req.Mark.SceneId, &model.Vector{ + g.TeleportPlayer(player, uint16(proto.EnterReason_ENTER_REASON_GM), req.Mark.SceneId, &model.Vector{ X: float64(req.Mark.Pos.X), Y: float64(posYInt), Z: float64(req.Mark.Pos.Z), @@ -110,8 +109,8 @@ func (g *GameManager) TeleportPlayer(player *model.Player, enterReason uint16, s var enterType proto.EnterType switch enterReason { - case constant.EnterReasonDungeonEnter: - logger.Debug("player dungeon scene, scene: %v, pos: %v", player.SceneId, player.Pos) + case uint16(proto.EnterReason_ENTER_REASON_DUNGEON_ENTER): + logger.Debug("player tp to dungeon scene, sceneId: %v, pos: %v", player.SceneId, player.Pos) enterType = proto.EnterType_ENTER_DUNGEON default: if jumpScene { diff --git a/gs/game/player_multiplayer.go b/gs/game/player_multiplayer.go index aa1d1184..bc88d247 100644 --- a/gs/game/player_multiplayer.go +++ b/gs/game/player_multiplayer.go @@ -340,7 +340,7 @@ func (g *GameManager) HostEnterMpWorld(hostPlayer *model.Player, otherUid uint32 hostPlayer, hostPlayer, proto.EnterType_ENTER_GOTO, - uint32(constant.EnterReasonHostFromSingleToMp), + uint32(proto.EnterReason_ENTER_REASON_HOST_FROM_SINGLE_TO_MP), hostPlayer.SceneId, hostPlayer.Pos, 0, diff --git a/gs/game/player_quest.go b/gs/game/player_quest.go index f33279cb..956f0205 100644 --- a/gs/game/player_quest.go +++ b/gs/game/player_quest.go @@ -72,7 +72,7 @@ func (g *GameManager) AcceptQuest(player *model.Player, isNtfClient bool) { canAccept := true for _, acceptCond := range questData.AcceptCondList { switch acceptCond.Type { - case constant.QUEST_ACCEPT_COND_TYPE_QUEST_STATE_EQ: + case constant.QUEST_ACCEPT_COND_TYPE_STATE_EQUAL: // 某个任务状态等于 参数1:任务id 参数2:任务状态 if len(acceptCond.Param) != 2 { logger.Error("quest accept cond config format error, questId: %v", questData.QuestId) @@ -84,7 +84,7 @@ func (g *GameManager) AcceptQuest(player *model.Player, isNtfClient bool) { canAccept = false break } - if quest.State != uint32(acceptCond.Param[1]) { + if quest.State != uint8(acceptCond.Param[1]) { canAccept = false break } @@ -130,7 +130,7 @@ func (g *GameManager) PacketQuest(player *model.Player, questId uint32) *proto.Q } pbQuest := &proto.Quest{ QuestId: quest.QuestId, - State: quest.State, + State: uint32(quest.State), StartTime: quest.StartTime, ParentQuestId: uint32(questDataConfig.ParentQuestId), StartGameTime: 0, diff --git a/gs/game/player_reliquary.go b/gs/game/player_reliquary.go index f2a5c2b1..3a1ec419 100644 --- a/gs/game/player_reliquary.go +++ b/gs/game/player_reliquary.go @@ -12,7 +12,7 @@ import ( func (g *GameManager) GetAllReliquaryDataConfig() map[int32]*gdconf.ItemData { allReliquaryDataConfig := make(map[int32]*gdconf.ItemData) for itemId, itemData := range gdconf.GetItemDataMap() { - if uint16(itemData.Type) != constant.ITEM_TYPE_RELIQUARY { + if itemData.Type != constant.ITEM_TYPE_RELIQUARY { continue } if (itemId >= 20002 && itemId <= 20004) || diff --git a/gs/game/player_scene.go b/gs/game/player_scene.go index b6b213b7..13368bf7 100644 --- a/gs/game/player_scene.go +++ b/gs/game/player_scene.go @@ -19,6 +19,7 @@ import ( const ( ENTITY_MAX_BATCH_SEND_NUM = 1000 // 单次同步的最大实体数量 + ENTITY_LOD = 300 // 实体加载视野距离 ) func (g *GameManager) EnterSceneReadyReq(player *model.Player, payloadMsg pb.Message) { @@ -172,7 +173,7 @@ func (g *GameManager) SceneInitFinishReq(player *model.Player, payloadMsg pb.Mes sceneAreaWeatherNotify := &proto.SceneAreaWeatherNotify{ WeatherAreaId: 0, - ClimateType: uint32(constant.CLIMATE_TYPE_SUNNY), + ClimateType: constant.CLIMATE_TYPE_SUNNY, } g.SendMsg(cmd.SceneAreaWeatherNotify, player.PlayerID, player.ClientSeq, sceneAreaWeatherNotify) } @@ -272,8 +273,21 @@ func (g *GameManager) EnterSceneDoneReq(player *model.Player, payloadMsg pb.Mess aoiManager, exist := WORLD_MANAGER.GetSceneBlockAoiMap()[scene.GetId()] if exist { objectList := aoiManager.GetObjectListByPos(float32(player.Pos.X), 0.0, float32(player.Pos.Z)) - for objectId, entityConfig := range objectList { - g.CreateConfigEntity(scene, objectId, entityConfig) + for _, groupAny := range objectList { + group := groupAny.(*gdconf.Group) + distance2D := math.Sqrt(math.Pow(player.Pos.X-float64(group.Pos.X), 2.0) + math.Pow(player.Pos.Z-float64(group.Pos.Z), 2.0)) + if distance2D > ENTITY_LOD { + continue + } + for _, monster := range group.MonsterList { + g.CreateConfigEntity(scene, monster.ObjectId, monster) + } + for _, npc := range group.NpcList { + g.CreateConfigEntity(scene, npc.ObjectId, npc) + } + for _, gadget := range group.GadgetList { + g.CreateConfigEntity(scene, gadget.ObjectId, gadget) + } } } if player.SceneJump { @@ -293,7 +307,7 @@ func (g *GameManager) EnterSceneDoneReq(player *model.Player, payloadMsg pb.Mess sceneAreaWeatherNotify := &proto.SceneAreaWeatherNotify{ WeatherAreaId: 0, - ClimateType: uint32(constant.CLIMATE_TYPE_SUNNY), + ClimateType: constant.CLIMATE_TYPE_SUNNY, } g.SendMsg(cmd.SceneAreaWeatherNotify, player.PlayerID, player.ClientSeq, sceneAreaWeatherNotify) @@ -365,7 +379,7 @@ func (g *GameManager) SceneEntityDrownReq(player *model.Player, payloadMsg pb.Me } // CreateConfigEntity 创建配置表里的实体 -func (g *GameManager) CreateConfigEntity(scene *Scene, objectId int64, entityConfig any) uint32 { +func (g *GameManager) CreateConfigEntity(scene *Scene, objectId uint64, entityConfig any) uint32 { switch entityConfig.(type) { case *gdconf.Monster: monster := entityConfig.(*gdconf.Monster) @@ -438,7 +452,7 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyLogin(player *model.Player, en TargetUid: player.PlayerID, EnterSceneToken: player.EnterSceneToken, WorldLevel: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL], - EnterReason: uint32(constant.EnterReasonLogin), + EnterReason: uint32(proto.EnterReason_ENTER_REASON_LOGIN), IsFirstLoginEnterScene: true, WorldType: 1, SceneTagIdList: make([]uint32, 0), @@ -580,7 +594,7 @@ func (g *GameManager) AddSceneEntityNotify(player *model.Player, visionType prot continue } switch entity.GetEntityType() { - case uint32(proto.ProtEntityType_PROT_ENTITY_AVATAR): + case constant.ENTITY_TYPE_AVATAR: if visionType == proto.VisionType_VISION_MEET && entity.GetAvatarEntity().GetUid() == player.PlayerID { continue } @@ -594,14 +608,14 @@ func (g *GameManager) AddSceneEntityNotify(player *model.Player, visionType prot } sceneEntityInfoAvatar := g.PacketSceneEntityInfoAvatar(scene, scenePlayer, world.GetPlayerActiveAvatarId(scenePlayer)) entityList = append(entityList, sceneEntityInfoAvatar) - case uint32(proto.ProtEntityType_PROT_ENTITY_WEAPON): - case uint32(proto.ProtEntityType_PROT_ENTITY_MONSTER): + case constant.ENTITY_TYPE_WEAPON: + case constant.ENTITY_TYPE_MONSTER: sceneEntityInfoMonster := g.PacketSceneEntityInfoMonster(scene, entity.GetId()) entityList = append(entityList, sceneEntityInfoMonster) - case uint32(proto.ProtEntityType_PROT_ENTITY_NPC): + case constant.ENTITY_TYPE_NPC: sceneEntityInfoNpc := g.PacketSceneEntityInfoNpc(scene, entity.GetId()) entityList = append(entityList, sceneEntityInfoNpc) - case uint32(proto.ProtEntityType_PROT_ENTITY_GADGET): + case constant.ENTITY_TYPE_GADGET: sceneEntityInfoGadget := g.PacketSceneEntityInfoGadget(scene, entity.GetId()) entityList = append(entityList, sceneEntityInfoGadget) } @@ -628,16 +642,16 @@ func (g *GameManager) EntityFightPropUpdateNotifyBroadcast(scene *Scene, entity func (g *GameManager) PacketFightPropMapToPbFightPropList(fightPropMap map[uint32]float32) []*proto.FightPropPair { fightPropList := []*proto.FightPropPair{ - {PropType: uint32(constant.FIGHT_PROP_BASE_HP), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_BASE_HP)]}, - {PropType: uint32(constant.FIGHT_PROP_BASE_ATTACK), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_BASE_ATTACK)]}, - {PropType: uint32(constant.FIGHT_PROP_BASE_DEFENSE), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_BASE_DEFENSE)]}, - {PropType: uint32(constant.FIGHT_PROP_CRITICAL), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CRITICAL)]}, - {PropType: uint32(constant.FIGHT_PROP_CRITICAL_HURT), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CRITICAL_HURT)]}, - {PropType: uint32(constant.FIGHT_PROP_CHARGE_EFFICIENCY), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CHARGE_EFFICIENCY)]}, - {PropType: uint32(constant.FIGHT_PROP_CUR_HP), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)]}, - {PropType: uint32(constant.FIGHT_PROP_MAX_HP), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_MAX_HP)]}, - {PropType: uint32(constant.FIGHT_PROP_CUR_ATTACK), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CUR_ATTACK)]}, - {PropType: uint32(constant.FIGHT_PROP_CUR_DEFENSE), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CUR_DEFENSE)]}, + {PropType: constant.FIGHT_PROP_BASE_HP, PropValue: fightPropMap[constant.FIGHT_PROP_BASE_HP]}, + {PropType: constant.FIGHT_PROP_BASE_ATTACK, PropValue: fightPropMap[constant.FIGHT_PROP_BASE_ATTACK]}, + {PropType: constant.FIGHT_PROP_BASE_DEFENSE, PropValue: fightPropMap[constant.FIGHT_PROP_BASE_DEFENSE]}, + {PropType: constant.FIGHT_PROP_CRITICAL, PropValue: fightPropMap[constant.FIGHT_PROP_CRITICAL]}, + {PropType: constant.FIGHT_PROP_CRITICAL_HURT, PropValue: fightPropMap[constant.FIGHT_PROP_CRITICAL_HURT]}, + {PropType: constant.FIGHT_PROP_CHARGE_EFFICIENCY, PropValue: fightPropMap[constant.FIGHT_PROP_CHARGE_EFFICIENCY]}, + {PropType: constant.FIGHT_PROP_CUR_HP, PropValue: fightPropMap[constant.FIGHT_PROP_CUR_HP]}, + {PropType: constant.FIGHT_PROP_MAX_HP, PropValue: fightPropMap[constant.FIGHT_PROP_MAX_HP]}, + {PropType: constant.FIGHT_PROP_CUR_ATTACK, PropValue: fightPropMap[constant.FIGHT_PROP_CUR_ATTACK]}, + {PropType: constant.FIGHT_PROP_CUR_DEFENSE, PropValue: fightPropMap[constant.FIGHT_PROP_CUR_DEFENSE]}, } return fightPropList } @@ -1053,21 +1067,21 @@ func (g *GameManager) PacketDelTeamEntityNotify(scene *Scene, player *model.Play func (g *GameManager) GetTempFightPropMap() map[uint32]float32 { fpm := map[uint32]float32{ - uint32(constant.FIGHT_PROP_CUR_HP): float32(72.91699), - uint32(constant.FIGHT_PROP_PHYSICAL_SUB_HURT): float32(0.1), - uint32(constant.FIGHT_PROP_CUR_DEFENSE): float32(505.0), - uint32(constant.FIGHT_PROP_CUR_ATTACK): float32(45.679916), - uint32(constant.FIGHT_PROP_ICE_SUB_HURT): float32(0.1), - uint32(constant.FIGHT_PROP_BASE_ATTACK): float32(45.679916), - uint32(constant.FIGHT_PROP_MAX_HP): float32(72.91699), - uint32(constant.FIGHT_PROP_FIRE_SUB_HURT): float32(0.1), - uint32(constant.FIGHT_PROP_ELEC_SUB_HURT): float32(0.1), - uint32(constant.FIGHT_PROP_WIND_SUB_HURT): float32(0.1), - uint32(constant.FIGHT_PROP_ROCK_SUB_HURT): float32(0.1), - uint32(constant.FIGHT_PROP_GRASS_SUB_HURT): float32(0.1), - uint32(constant.FIGHT_PROP_WATER_SUB_HURT): float32(0.1), - uint32(constant.FIGHT_PROP_BASE_HP): float32(72.91699), - uint32(constant.FIGHT_PROP_BASE_DEFENSE): float32(505.0), + constant.FIGHT_PROP_CUR_HP: float32(72.91699), + 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 } diff --git a/gs/game/player_shop.go b/gs/game/player_shop.go index 794e00c2..0eb6d15b 100644 --- a/gs/game/player_shop.go +++ b/gs/game/player_shop.go @@ -3,7 +3,6 @@ package game import ( "time" - "hk4e/common/constant" "hk4e/gs/model" "hk4e/pkg/logger" "hk4e/protocol/cmd" @@ -92,7 +91,7 @@ func (g *GameManager) BuyGoodsReq(player *model.Player, payloadMsg pb.Message) { g.AddUserItem(player.PlayerID, []*ChangeItem{{ ItemId: buyItemId, ChangeCount: buyItemCount, - }}, true, constant.ActionReasonShop) + }}, true, uint16(proto.ActionReasonType_ACTION_REASON_SHOP)) req.Goods.BoughtNum = dbItem.GetItemCount(player, buyItemId) buyGoodsRsp := &proto.BuyGoodsRsp{ diff --git a/gs/game/player_stamina.go b/gs/game/player_stamina.go index 4c93a4d7..23effdc0 100644 --- a/gs/game/player_stamina.go +++ b/gs/game/player_stamina.go @@ -520,7 +520,7 @@ func (g *GameManager) DrownBackHandler(player *model.Player) { // } // } // 传送玩家至安全位置 - g.TeleportPlayer(player, constant.EnterReasonRevival, player.SceneId, pos, new(model.Vector), 0) + g.TeleportPlayer(player, uint16(proto.EnterReason_ENTER_REASON_REVIVAL), player.SceneId, pos, new(model.Vector), 0) } // 防止重置后又被修改 if player.StaminaInfo.DrownBackDelay != 0 { diff --git a/gs/game/player_weapon.go b/gs/game/player_weapon.go index 453d1054..8c545644 100644 --- a/gs/game/player_weapon.go +++ b/gs/game/player_weapon.go @@ -17,7 +17,7 @@ import ( func (g *GameManager) GetAllWeaponDataConfig() map[int32]*gdconf.ItemData { allWeaponDataConfig := make(map[int32]*gdconf.ItemData) for itemId, itemData := range gdconf.GetItemDataMap() { - if uint16(itemData.Type) != constant.ITEM_TYPE_WEAPON { + if itemData.Type != constant.ITEM_TYPE_WEAPON { continue } if (itemId >= 10000 && itemId <= 10008) || @@ -188,7 +188,7 @@ func (g *GameManager) WeaponAwakenReq(player *model.Player, payloadMsg pb.Messag } // 根据精炼材料的类型做不同操作 switch itemDataConfig.Type { - case int32(constant.ITEM_TYPE_WEAPON): + case constant.ITEM_TYPE_WEAPON: // 精炼材料为武器 // 是否拥有将被用于精炼的武器 foodWeapon, ok := player.GameObjectGuidMap[req.ItemGuid].(*model.Weapon) @@ -211,7 +211,7 @@ func (g *GameManager) WeaponAwakenReq(player *model.Player, payloadMsg pb.Messag } // 消耗作为精炼材料的武器 g.CostUserWeapon(player.PlayerID, []uint64{foodWeapon.WeaponId}) - case int32(constant.ITEM_TYPE_MATERIAL): + case constant.ITEM_TYPE_MATERIAL: // 精炼材料为道具 // 是否拥有将被用于精炼的道具 item, ok := player.GameObjectGuidMap[req.ItemGuid].(*model.Item) diff --git a/gs/game/tick_manager.go b/gs/game/tick_manager.go index 0270b8de..025acf1d 100644 --- a/gs/game/tick_manager.go +++ b/gs/game/tick_manager.go @@ -292,7 +292,7 @@ func (t *TickManager) onTick5Second(now int64) { for _, entityId := range scenePlayer.VehicleInfo.LastCreateEntityIdMap { entity := scene.GetEntity(entityId) // 确保实体类型是否为载具 - if entity != nil && entity.gadgetEntity != nil && entity.gadgetEntity.gadgetVehicleEntity != nil { + if entity != nil && entity.GetEntityType() == constant.ENTITY_TYPE_GADGET && entity.gadgetEntity.gadgetVehicleEntity != nil { vehicleLocationInfo := &proto.VehicleLocationInfo{ Rot: &proto.Vector{ X: float32(entity.rot.X), @@ -300,7 +300,7 @@ func (t *TickManager) onTick5Second(now int64) { Z: float32(entity.rot.Z), }, EntityId: entity.id, - CurHp: entity.fightProp[uint32(constant.FIGHT_PROP_CUR_HP)], + CurHp: entity.fightProp[constant.FIGHT_PROP_CUR_HP], OwnerUid: entity.gadgetEntity.gadgetVehicleEntity.owner.PlayerID, Pos: &proto.Vector{ X: float32(entity.pos.X), @@ -309,7 +309,7 @@ func (t *TickManager) onTick5Second(now int64) { }, UidList: make([]uint32, 0, len(entity.gadgetEntity.gadgetVehicleEntity.memberMap)), GadgetId: entity.gadgetEntity.gadgetVehicleEntity.vehicleId, - MaxHp: entity.fightProp[uint32(constant.FIGHT_PROP_MAX_HP)], + MaxHp: entity.fightProp[constant.FIGHT_PROP_MAX_HP], } for _, p := range entity.gadgetEntity.gadgetVehicleEntity.memberMap { vehicleLocationInfo.UidList = append(vehicleLocationInfo.UidList, p.PlayerID) diff --git a/gs/game/video_player.go b/gs/game/video_player.go index 26db3e9c..2918ef56 100644 --- a/gs/game/video_player.go +++ b/gs/game/video_player.go @@ -1,7 +1,6 @@ package game import ( - "hk4e/pkg/logger" "image" "image/color" "image/jpeg" @@ -10,6 +9,8 @@ import ( "sort" "strconv" + "hk4e/pkg/logger" + "hk4e/gs/model" "hk4e/protocol/proto" @@ -215,7 +216,7 @@ func LoadVideoPlayerFile() error { return nil } -var OBJECT_ID_COUNTER int64 = math.MaxUint32 +var OBJECT_ID_COUNTER uint64 = math.MaxUint64 func (g *GameManager) VideoPlayerUpdate(rgb bool) { err := LoadVideoPlayerFile() diff --git a/gs/game/world_manager.go b/gs/game/world_manager.go index c90a2d70..02ce2dec 100644 --- a/gs/game/world_manager.go +++ b/gs/game/world_manager.go @@ -31,8 +31,85 @@ func NewWorldManager(snowflake *alg.SnowflakeWorker) (r *WorldManager) { r = new(WorldManager) r.worldMap = make(map[uint32]*World) r.snowflake = snowflake - r.sceneBlockAoiMap = make(map[uint32]*alg.AoiManager) + r.LoadSceneBlockAoiMap() + r.multiplayerWorldNum = 0 + return r +} + +func (w *WorldManager) GetWorldByID(worldId uint32) *World { + return w.worldMap[worldId] +} + +func (w *WorldManager) GetAllWorld() map[uint32]*World { + return w.worldMap +} + +func (w *WorldManager) CreateWorld(owner *model.Player) *World { + worldId := uint32(w.snowflake.GenId()) + world := &World{ + id: worldId, + owner: owner, + playerMap: make(map[uint32]*model.Player), + sceneMap: make(map[uint32]*Scene), + entityIdCounter: 0, + worldLevel: 0, + multiplayer: false, + mpLevelEntityId: 0, + chatMsgList: make([]*proto.ChatInfo, 0), + playerFirstEnterMap: make(map[uint32]int64), + waitEnterPlayerMap: make(map[uint32]int64), + multiplayerTeam: CreateMultiplayerTeam(), + peerList: make([]*model.Player, 0), + } + world.mpLevelEntityId = world.GetNextWorldEntityId(constant.ENTITY_TYPE_MP_LEVEL) + w.worldMap[worldId] = world + return world +} + +func (w *WorldManager) DestroyWorld(worldId uint32) { + world := w.GetWorldByID(worldId) + for _, player := range world.playerMap { + world.RemovePlayer(player) + player.WorldId = 0 + } + delete(w.worldMap, worldId) + if world.multiplayer { + w.multiplayerWorldNum-- + } +} + +// GetAiWorld 获取本服务器的Ai世界 +func (w *WorldManager) GetAiWorld() *World { + return w.aiWorld +} + +// InitAiWorld 初始化Ai世界 +func (w *WorldManager) InitAiWorld(owner *model.Player) { + w.aiWorld = w.GetWorldByID(owner.WorldId) + w.aiWorld.ChangeToMultiplayer() + go RunPlayAudio() +} + +func (w *WorldManager) IsAiWorld(world *World) bool { + return world.id == w.aiWorld.id +} + +func (w *WorldManager) IsRobotWorld(world *World) bool { + return world.owner.PlayerID < PlayerBaseUid +} + +func (w *WorldManager) IsBigWorld(world *World) bool { + return (world.id == w.aiWorld.id) && (w.aiWorld.owner.PlayerID == BigWorldAiUid) +} + +func (w *WorldManager) GetSceneBlockAoiMap() map[uint32]*alg.AoiManager { + return w.sceneBlockAoiMap +} + +func (w *WorldManager) LoadSceneBlockAoiMap() { + w.sceneBlockAoiMap = make(map[uint32]*alg.AoiManager) for _, sceneLuaConfig := range gdconf.GetSceneLuaConfigMap() { + // 检查各block大小是否相同 并提取出block大小 minX := int16(0) maxX := int16(0) minZ := int16(0) @@ -83,13 +160,11 @@ func NewWorldManager(snowflake *alg.SnowflakeWorker) (r *WorldManager) { } } if !ok { + logger.Error("config scene block size not same, scene id: %v", sceneLuaConfig.Id) continue } numX := int16(0) if blockXLen != 0 { - if blockXLen > 32 { - blockXLen = 32 - } numX = (maxX - minX) / blockXLen } else { numX = 1 @@ -99,9 +174,6 @@ func NewWorldManager(snowflake *alg.SnowflakeWorker) (r *WorldManager) { } numZ := int16(0) if blockZLen != 0 { - if blockZLen > 32 { - blockZLen = 32 - } numZ = (maxZ - minZ) / blockZLen } else { numZ = 1 @@ -109,105 +181,20 @@ func NewWorldManager(snowflake *alg.SnowflakeWorker) (r *WorldManager) { if numZ == 0 { numZ = 1 } + // 将每个block作为aoi格子 并在格子中放入block拥有的所有group aoiManager := alg.NewAoiManager() aoiManager.SetAoiRange(minX, maxX, -1.0, 1.0, minZ, maxZ) aoiManager.Init3DRectAoiManager(numX, 1, numZ) - for _, blockConfig := range sceneLuaConfig.BlockMap { - for _, groupConfig := range blockConfig.GroupMap { - for _, monsterConfig := range groupConfig.MonsterList { - aoiManager.AddObjectToGridByPos(r.snowflake.GenId(), monsterConfig, - float32(monsterConfig.Pos.X), - float32(0.0), - float32(monsterConfig.Pos.Z)) - } - for _, npcConfig := range groupConfig.NpcList { - aoiManager.AddObjectToGridByPos(r.snowflake.GenId(), npcConfig, - float32(npcConfig.Pos.X), - float32(0.0), - float32(npcConfig.Pos.Z)) - } - for _, gadgetConfig := range groupConfig.GadgetList { - aoiManager.AddObjectToGridByPos(r.snowflake.GenId(), gadgetConfig, - float32(gadgetConfig.Pos.X), - float32(0.0), - float32(gadgetConfig.Pos.Z)) - } + for _, block := range sceneLuaConfig.BlockMap { + for _, group := range block.GroupMap { + aoiManager.AddObjectToGridByPos(int64(group.Id), group, + group.Pos.X, + 0.0, + group.Pos.Z) } } - r.sceneBlockAoiMap[uint32(sceneLuaConfig.Id)] = aoiManager + w.sceneBlockAoiMap[uint32(sceneLuaConfig.Id)] = aoiManager } - r.multiplayerWorldNum = 0 - return r -} - -func (w *WorldManager) GetWorldByID(worldId uint32) *World { - return w.worldMap[worldId] -} - -func (w *WorldManager) GetAllWorld() map[uint32]*World { - return w.worldMap -} - -func (w *WorldManager) CreateWorld(owner *model.Player) *World { - worldId := uint32(w.snowflake.GenId()) - world := &World{ - id: worldId, - owner: owner, - playerMap: make(map[uint32]*model.Player), - sceneMap: make(map[uint32]*Scene), - entityIdCounter: 0, - worldLevel: 0, - multiplayer: false, - mpLevelEntityId: 0, - chatMsgList: make([]*proto.ChatInfo, 0), - playerFirstEnterMap: make(map[uint32]int64), - waitEnterPlayerMap: make(map[uint32]int64), - multiplayerTeam: CreateMultiplayerTeam(), - peerList: make([]*model.Player, 0), - } - world.mpLevelEntityId = world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_MPLEVEL) - w.worldMap[worldId] = world - return world -} - -func (w *WorldManager) DestroyWorld(worldId uint32) { - world := w.GetWorldByID(worldId) - for _, player := range world.playerMap { - world.RemovePlayer(player) - player.WorldId = 0 - } - delete(w.worldMap, worldId) - if world.multiplayer { - w.multiplayerWorldNum-- - } -} - -// GetAiWorld 获取本服务器的Ai世界 -func (w *WorldManager) GetAiWorld() *World { - return w.aiWorld -} - -// InitAiWorld 初始化Ai世界 -func (w *WorldManager) InitAiWorld(owner *model.Player) { - w.aiWorld = w.GetWorldByID(owner.WorldId) - w.aiWorld.ChangeToMultiplayer() - go RunPlayAudio() -} - -func (w *WorldManager) IsAiWorld(world *World) bool { - return world.id == w.aiWorld.id -} - -func (w *WorldManager) IsRobotWorld(world *World) bool { - return world.owner.PlayerID < PlayerBaseUid -} - -func (w *WorldManager) IsBigWorld(world *World) bool { - return (world.id == w.aiWorld.id) && (w.aiWorld.owner.PlayerID == BigWorldAiUid) -} - -func (w *WorldManager) GetSceneBlockAoiMap() map[uint32]*alg.AoiManager { - return w.sceneBlockAoiMap } func (w *WorldManager) GetMultiplayerWorldNum() uint32 { @@ -259,7 +246,7 @@ func (w *World) GetMpLevelEntityId() uint32 { return w.mpLevelEntityId } -func (w *World) GetNextWorldEntityId(entityType uint16) uint32 { +func (w *World) GetNextWorldEntityId(entityType uint8) uint32 { for { w.entityIdCounter++ ret := (uint32(entityType) << 24) + w.entityIdCounter @@ -484,7 +471,7 @@ func (w *World) GetPlayerTeamEntityId(player *model.Player) uint32 { // InitPlayerTeamEntityId 初始化某玩家的本地队伍实体id func (w *World) InitPlayerTeamEntityId(player *model.Player) { - w.multiplayerTeam.localTeamEntityMap[player.PlayerID] = w.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_TEAM) + w.multiplayerTeam.localTeamEntityMap[player.PlayerID] = w.GetNextWorldEntityId(constant.ENTITY_TYPE_TEAM) } // GetPlayerWorldAvatarEntityId 获取某玩家在世界队伍中的某角色的实体id @@ -735,7 +722,7 @@ func (w *World) CreateScene(sceneId uint32) *Scene { world: w, playerMap: make(map[uint32]*model.Player), entityMap: make(map[uint32]*Entity), - objectIdEntityMap: make(map[int64]*Entity), + objectIdEntityMap: make(map[uint64]*Entity), gameTime: 18 * 60, createTime: time.Now().UnixMilli(), meeoIndex: 0, @@ -745,6 +732,7 @@ func (w *World) CreateScene(sceneId uint32) *Scene { } func (w *World) GetSceneById(sceneId uint32) *Scene { + // 场景是取时创建 可以简化代码不判空 scene, exist := w.sceneMap[sceneId] if !exist { scene = w.CreateScene(sceneId) diff --git a/gs/game/world_scene.go b/gs/game/world_scene.go index d7f3bde6..43bea84f 100644 --- a/gs/game/world_scene.go +++ b/gs/game/world_scene.go @@ -18,10 +18,10 @@ type Scene struct { world *World playerMap map[uint32]*model.Player entityMap map[uint32]*Entity - objectIdEntityMap map[int64]*Entity // 用于标识配置档里的唯一实体是否已被创建 - gameTime uint32 // 游戏内提瓦特大陆的时间 - createTime int64 // 场景创建时间 - meeoIndex uint32 // 客户端风元素染色同步协议的计数器 + objectIdEntityMap map[uint64]*Entity // 用于标识配置档里的唯一实体是否已被创建 + gameTime uint32 // 游戏内提瓦特大陆的时间 + createTime int64 // 场景创建时间 + meeoIndex uint32 // 客户端风元素染色同步协议的计数器 } func (s *Scene) GetId() uint32 { @@ -80,7 +80,7 @@ func (s *Scene) RemovePlayer(player *model.Player) { } func (s *Scene) SetEntityLifeState(entity *Entity, lifeState uint16, dieType proto.PlayerDieType) { - if entity.avatarEntity != nil { + if entity.GetEntityType() == constant.ENTITY_TYPE_AVATAR { // 获取玩家对象 player := USER_MANAGER.GetOnlineUser(entity.avatarEntity.uid) if player == nil { @@ -98,8 +98,8 @@ func (s *Scene) SetEntityLifeState(entity *Entity, lifeState uint16, dieType pro if lifeState == constant.LIFE_STATE_REVIVE { avatar.LifeState = constant.LIFE_STATE_ALIVE // 设置血量 - entity.fightProp[uint32(constant.FIGHT_PROP_CUR_HP)] = 110 - GAME_MANAGER.EntityFightPropUpdateNotifyBroadcast(s, entity, uint32(constant.FIGHT_PROP_CUR_HP)) + entity.fightProp[constant.FIGHT_PROP_CUR_HP] = 110 + GAME_MANAGER.EntityFightPropUpdateNotifyBroadcast(s, entity, constant.FIGHT_PROP_CUR_HP) } avatarLifeStateChangeNotify := &proto.AvatarLifeStateChangeNotify{ @@ -118,8 +118,8 @@ func (s *Scene) SetEntityLifeState(entity *Entity, lifeState uint16, dieType pro if lifeState == constant.LIFE_STATE_DEAD { // 设置血量 - entity.fightProp[uint32(constant.FIGHT_PROP_CUR_HP)] = 0 - GAME_MANAGER.EntityFightPropUpdateNotifyBroadcast(s, entity, uint32(constant.FIGHT_PROP_CUR_HP)) + entity.fightProp[constant.FIGHT_PROP_CUR_HP] = 0 + GAME_MANAGER.EntityFightPropUpdateNotifyBroadcast(s, entity, constant.FIGHT_PROP_CUR_HP) } lifeStateChangeNotify := &proto.LifeStateChangeNotify{ @@ -139,7 +139,7 @@ func (s *Scene) SetEntityLifeState(entity *Entity, lifeState uint16, dieType pro } func (s *Scene) CreateEntityAvatar(player *model.Player, avatarId uint32) uint32 { - entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_AVATAR) + entityId := s.world.GetNextWorldEntityId(constant.ENTITY_TYPE_AVATAR) dbAvatar := player.GetDbAvatar() avatar, ok := dbAvatar.AvatarMap[avatarId] if !ok { @@ -156,7 +156,7 @@ func (s *Scene) CreateEntityAvatar(player *model.Player, avatarId uint32) uint32 lastMoveSceneTimeMs: 0, lastMoveReliableSeq: 0, fightProp: dbAvatar.AvatarMap[avatarId].FightPropMap, // 使用角色结构的数据 - entityType: uint32(proto.ProtEntityType_PROT_ENTITY_AVATAR), + entityType: constant.ENTITY_TYPE_AVATAR, avatarEntity: &AvatarEntity{ uid: player.PlayerID, avatarId: avatarId, @@ -178,7 +178,7 @@ func (s *Scene) CreateEntityAvatar(player *model.Player, avatarId uint32) uint32 } func (s *Scene) CreateEntityWeapon() uint32 { - entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_WEAPON) + entityId := s.world.GetNextWorldEntityId(constant.ENTITY_TYPE_WEAPON) entity := &Entity{ id: entityId, scene: s, @@ -189,18 +189,18 @@ func (s *Scene) CreateEntityWeapon() uint32 { lastMoveSceneTimeMs: 0, lastMoveReliableSeq: 0, fightProp: nil, - entityType: uint32(proto.ProtEntityType_PROT_ENTITY_WEAPON), + entityType: constant.ENTITY_TYPE_WEAPON, } s.CreateEntity(entity, 0) return entity.id } -func (s *Scene) CreateEntityMonster(pos, rot *model.Vector, monsterId uint32, level uint8, fightProp map[uint32]float32, configId uint32, objectId int64) uint32 { +func (s *Scene) CreateEntityMonster(pos, rot *model.Vector, monsterId uint32, level uint8, fightProp map[uint32]float32, configId uint32, objectId uint64) uint32 { _, exist := s.objectIdEntityMap[objectId] if exist { return 0 } - entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_MONSTER) + entityId := s.world.GetNextWorldEntityId(constant.ENTITY_TYPE_MONSTER) entity := &Entity{ id: entityId, scene: s, @@ -211,7 +211,7 @@ func (s *Scene) CreateEntityMonster(pos, rot *model.Vector, monsterId uint32, le lastMoveSceneTimeMs: 0, lastMoveReliableSeq: 0, fightProp: fightProp, - entityType: uint32(proto.ProtEntityType_PROT_ENTITY_MONSTER), + entityType: constant.ENTITY_TYPE_MONSTER, level: level, monsterEntity: &MonsterEntity{ monsterId: monsterId, @@ -232,12 +232,12 @@ func (s *Scene) CreateEntityMonster(pos, rot *model.Vector, monsterId uint32, le return entity.id } -func (s *Scene) CreateEntityNpc(pos, rot *model.Vector, npcId, roomId, parentQuestId, blockId, configId uint32, objectId int64) uint32 { +func (s *Scene) CreateEntityNpc(pos, rot *model.Vector, npcId, roomId, parentQuestId, blockId, configId uint32, objectId uint64) uint32 { _, exist := s.objectIdEntityMap[objectId] if exist { return 0 } - entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_NPC) + entityId := s.world.GetNextWorldEntityId(constant.ENTITY_TYPE_NPC) entity := &Entity{ id: entityId, scene: s, @@ -248,11 +248,11 @@ func (s *Scene) CreateEntityNpc(pos, rot *model.Vector, npcId, roomId, parentQue lastMoveSceneTimeMs: 0, lastMoveReliableSeq: 0, fightProp: map[uint32]float32{ - uint32(constant.FIGHT_PROP_CUR_HP): math.MaxFloat32, - uint32(constant.FIGHT_PROP_MAX_HP): math.MaxFloat32, - uint32(constant.FIGHT_PROP_BASE_HP): float32(1), + constant.FIGHT_PROP_CUR_HP: math.MaxFloat32, + constant.FIGHT_PROP_MAX_HP: math.MaxFloat32, + constant.FIGHT_PROP_BASE_HP: float32(1), }, - entityType: uint32(proto.ProtEntityType_PROT_ENTITY_NPC), + entityType: constant.ENTITY_TYPE_NPC, npcEntity: &NpcEntity{ NpcId: npcId, RoomId: roomId, @@ -266,12 +266,12 @@ func (s *Scene) CreateEntityNpc(pos, rot *model.Vector, npcId, roomId, parentQue return entity.id } -func (s *Scene) CreateEntityGadgetNormal(pos, rot *model.Vector, gadgetId uint32, configId uint32, objectId int64) uint32 { +func (s *Scene) CreateEntityGadgetNormal(pos, rot *model.Vector, gadgetId uint32, configId uint32, objectId uint64) uint32 { _, exist := s.objectIdEntityMap[objectId] if exist { return 0 } - entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_GADGET) + entityId := s.world.GetNextWorldEntityId(constant.ENTITY_TYPE_GADGET) entity := &Entity{ id: entityId, scene: s, @@ -282,11 +282,11 @@ func (s *Scene) CreateEntityGadgetNormal(pos, rot *model.Vector, gadgetId uint32 lastMoveSceneTimeMs: 0, lastMoveReliableSeq: 0, fightProp: map[uint32]float32{ - uint32(constant.FIGHT_PROP_CUR_HP): math.MaxFloat32, - uint32(constant.FIGHT_PROP_MAX_HP): math.MaxFloat32, - uint32(constant.FIGHT_PROP_BASE_HP): float32(1), + constant.FIGHT_PROP_CUR_HP: math.MaxFloat32, + constant.FIGHT_PROP_MAX_HP: math.MaxFloat32, + constant.FIGHT_PROP_BASE_HP: float32(1), }, - entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET), + entityType: constant.ENTITY_TYPE_GADGET, gadgetEntity: &GadgetEntity{ gadgetId: gadgetId, gadgetType: GADGET_TYPE_NORMAL, @@ -298,12 +298,12 @@ func (s *Scene) CreateEntityGadgetNormal(pos, rot *model.Vector, gadgetId uint32 return entity.id } -func (s *Scene) CreateEntityGadgetGather(pos, rot *model.Vector, gadgetId uint32, gatherId uint32, configId uint32, objectId int64) uint32 { +func (s *Scene) CreateEntityGadgetGather(pos, rot *model.Vector, gadgetId uint32, gatherId uint32, configId uint32, objectId uint64) uint32 { _, exist := s.objectIdEntityMap[objectId] if exist { return 0 } - entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_GADGET) + entityId := s.world.GetNextWorldEntityId(constant.ENTITY_TYPE_GADGET) entity := &Entity{ id: entityId, scene: s, @@ -314,11 +314,11 @@ func (s *Scene) CreateEntityGadgetGather(pos, rot *model.Vector, gadgetId uint32 lastMoveSceneTimeMs: 0, lastMoveReliableSeq: 0, fightProp: map[uint32]float32{ - uint32(constant.FIGHT_PROP_CUR_HP): math.MaxFloat32, - uint32(constant.FIGHT_PROP_MAX_HP): math.MaxFloat32, - uint32(constant.FIGHT_PROP_BASE_HP): float32(1), + constant.FIGHT_PROP_CUR_HP: math.MaxFloat32, + constant.FIGHT_PROP_MAX_HP: math.MaxFloat32, + constant.FIGHT_PROP_BASE_HP: float32(1), }, - entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET), + entityType: constant.ENTITY_TYPE_GADGET, gadgetEntity: &GadgetEntity{ gadgetId: gadgetId, gadgetType: GADGET_TYPE_GATHER, @@ -344,11 +344,11 @@ func (s *Scene) CreateEntityGadgetClient(pos, rot *model.Vector, entityId uint32 lastMoveSceneTimeMs: 0, lastMoveReliableSeq: 0, fightProp: map[uint32]float32{ - uint32(constant.FIGHT_PROP_CUR_HP): math.MaxFloat32, - uint32(constant.FIGHT_PROP_MAX_HP): math.MaxFloat32, - uint32(constant.FIGHT_PROP_BASE_HP): float32(1), + constant.FIGHT_PROP_CUR_HP: math.MaxFloat32, + constant.FIGHT_PROP_MAX_HP: math.MaxFloat32, + constant.FIGHT_PROP_BASE_HP: float32(1), }, - entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET), + entityType: constant.ENTITY_TYPE_GADGET, gadgetEntity: &GadgetEntity{ gadgetType: GADGET_TYPE_CLIENT, gadgetClientEntity: &GadgetClientEntity{ @@ -370,7 +370,7 @@ func (s *Scene) CreateEntityGadgetVehicle(uid uint32, pos, rot *model.Vector, ve logger.Error("player is nil, uid: %v", uid) return 0 } - entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_GADGET) + entityId := s.world.GetNextWorldEntityId(constant.ENTITY_TYPE_GADGET) entity := &Entity{ id: entityId, scene: s, @@ -382,11 +382,11 @@ func (s *Scene) CreateEntityGadgetVehicle(uid uint32, pos, rot *model.Vector, ve lastMoveReliableSeq: 0, fightProp: map[uint32]float32{ // TODO 以后使用配置表 - uint32(constant.FIGHT_PROP_CUR_HP): 114514, - uint32(constant.FIGHT_PROP_MAX_HP): 114514, - uint32(constant.FIGHT_PROP_BASE_HP): float32(1), + constant.FIGHT_PROP_CUR_HP: 114514, + constant.FIGHT_PROP_MAX_HP: 114514, + constant.FIGHT_PROP_BASE_HP: float32(1), }, - entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET), + entityType: constant.ENTITY_TYPE_GADGET, gadgetEntity: &GadgetEntity{ gadgetType: GADGET_TYPE_VEHICLE, gadgetVehicleEntity: &GadgetVehicleEntity{ @@ -402,7 +402,7 @@ func (s *Scene) CreateEntityGadgetVehicle(uid uint32, pos, rot *model.Vector, ve return entity.id } -func (s *Scene) CreateEntity(entity *Entity, objectId int64) { +func (s *Scene) CreateEntity(entity *Entity, objectId uint64) { if len(s.entityMap) >= ENTITY_MAX_SEND_NUM && !ENTITY_NUM_UNLIMIT { logger.Error("above max scene entity num limit: %v, id: %v, pos: %v", ENTITY_MAX_SEND_NUM, entity.id, entity.pos) return @@ -434,29 +434,29 @@ func (s *Scene) GetEntity(entityId uint32) *Entity { return s.entityMap[entityId] } -func (s *Scene) GetEntityByObjectId(objectId int64) *Entity { +func (s *Scene) GetEntityByObjectId(objectId uint64) *Entity { return s.objectIdEntityMap[objectId] } // Entity 场景实体数据结构 type Entity struct { - id uint32 - scene *Scene - lifeState uint16 - pos *model.Vector - rot *model.Vector - moveState uint16 + id uint32 // 实体id + scene *Scene // 实体归属上级场景的访问指针 + lifeState uint16 // 存活状态 + pos *model.Vector // 位置 + rot *model.Vector // 朝向 + moveState uint16 // 运动状态 lastMoveSceneTimeMs uint32 lastMoveReliableSeq uint32 - fightProp map[uint32]float32 - entityType uint32 - level uint8 + fightProp map[uint32]float32 // 战斗属性 + level uint8 // 等级 + entityType uint8 // 实体类型 avatarEntity *AvatarEntity monsterEntity *MonsterEntity npcEntity *NpcEntity gadgetEntity *GadgetEntity - configId uint32 - objectId int64 + configId uint32 // 配置表相关 + objectId uint64 } func (e *Entity) GetId() uint32 { @@ -503,14 +503,14 @@ func (e *Entity) GetFightProp() map[uint32]float32 { return e.fightProp } -func (e *Entity) GetEntityType() uint32 { - return e.entityType -} - func (e *Entity) GetLevel() uint8 { return e.level } +func (e *Entity) GetEntityType() uint8 { + return e.entityType +} + func (e *Entity) GetAvatarEntity() *AvatarEntity { return e.avatarEntity } diff --git a/gs/model/db_avatar.go b/gs/model/db_avatar.go index c47db2cb..58c95f96 100644 --- a/gs/model/db_avatar.go +++ b/gs/model/db_avatar.go @@ -30,8 +30,8 @@ type Avatar struct { Promote uint8 // 突破等阶 Satiation uint32 // 饱食度 SatiationPenalty uint32 // 饱食度溢出 - CurrHP float64 // 当前生命值 - CurrEnergy float64 // 当前元素能量值 + CurrHP float32 // 当前生命值 + CurrEnergy float32 // 当前元素能量值 FetterList []uint32 // 资料解锁条目 SkillLevelMap map[uint32]uint32 // 技能等级数据 SkillDepotId uint32 // 技能库id @@ -75,22 +75,22 @@ func (a *DbAvatar) InitAvatarFightProp(avatar *Avatar) { return } avatar.FightPropMap = make(map[uint32]float32) - avatar.FightPropMap[uint32(constant.FIGHT_PROP_NONE)] = 0.0 + avatar.FightPropMap[constant.FIGHT_PROP_NONE] = 0.0 // 白字攻防血 - avatar.FightPropMap[uint32(constant.FIGHT_PROP_BASE_ATTACK)] = float32(avatarDataConfig.GetBaseAttackByLevel(avatar.Level)) - avatar.FightPropMap[uint32(constant.FIGHT_PROP_BASE_DEFENSE)] = float32(avatarDataConfig.GetBaseDefenseByLevel(avatar.Level)) - avatar.FightPropMap[uint32(constant.FIGHT_PROP_BASE_HP)] = float32(avatarDataConfig.GetBaseHpByLevel(avatar.Level)) + avatar.FightPropMap[constant.FIGHT_PROP_BASE_ATTACK] = avatarDataConfig.GetBaseAttackByLevel(avatar.Level) + avatar.FightPropMap[constant.FIGHT_PROP_BASE_DEFENSE] = avatarDataConfig.GetBaseDefenseByLevel(avatar.Level) + avatar.FightPropMap[constant.FIGHT_PROP_BASE_HP] = avatarDataConfig.GetBaseHpByLevel(avatar.Level) // 白字+绿字攻防血 - avatar.FightPropMap[uint32(constant.FIGHT_PROP_CUR_ATTACK)] = float32(avatarDataConfig.GetBaseAttackByLevel(avatar.Level)) - avatar.FightPropMap[uint32(constant.FIGHT_PROP_CUR_DEFENSE)] = float32(avatarDataConfig.GetBaseDefenseByLevel(avatar.Level)) - avatar.FightPropMap[uint32(constant.FIGHT_PROP_MAX_HP)] = float32(avatarDataConfig.GetBaseHpByLevel(avatar.Level)) + avatar.FightPropMap[constant.FIGHT_PROP_CUR_ATTACK] = avatarDataConfig.GetBaseAttackByLevel(avatar.Level) + avatar.FightPropMap[constant.FIGHT_PROP_CUR_DEFENSE] = avatarDataConfig.GetBaseDefenseByLevel(avatar.Level) + avatar.FightPropMap[constant.FIGHT_PROP_MAX_HP] = avatarDataConfig.GetBaseHpByLevel(avatar.Level) // 当前血量 - avatar.FightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)] = float32(avatar.CurrHP) + avatar.FightPropMap[constant.FIGHT_PROP_CUR_HP] = avatar.CurrHP // 双暴 - avatar.FightPropMap[uint32(constant.FIGHT_PROP_CRITICAL)] = float32(avatarDataConfig.Critical) - avatar.FightPropMap[uint32(constant.FIGHT_PROP_CRITICAL_HURT)] = float32(avatarDataConfig.CriticalHurt) + avatar.FightPropMap[constant.FIGHT_PROP_CRITICAL] = avatarDataConfig.Critical + avatar.FightPropMap[constant.FIGHT_PROP_CRITICAL_HURT] = avatarDataConfig.CriticalHurt // 元素充能 - avatar.FightPropMap[uint32(constant.FIGHT_PROP_CHARGE_EFFICIENCY)] = 1.0 + avatar.FightPropMap[constant.FIGHT_PROP_CHARGE_EFFICIENCY] = 1.0 a.SetCurrEnergy(avatar, avatar.CurrEnergy, true) } @@ -158,7 +158,7 @@ func (a *DbAvatar) AddAvatar(player *Player, avatarId uint32) { a.AvatarMap[avatarId] = avatar } -func (a *DbAvatar) SetCurrEnergy(avatar *Avatar, value float64, max bool) { +func (a *DbAvatar) SetCurrEnergy(avatar *Avatar, value float32, max bool) { var avatarSkillDataConfig *gdconf.AvatarSkillData = nil if avatar.AvatarId == 10000005 || avatar.AvatarId == 10000007 { avatarSkillDepotDataConfig := gdconf.GetAvatarSkillDepotDataById(int32(avatar.SkillDepotId)) @@ -185,7 +185,7 @@ func (a *DbAvatar) SetCurrEnergy(avatar *Avatar, value float64, max bool) { if max { avatar.FightPropMap[uint32(elementType.CurrEnergyProp)] = float32(avatarSkillDataConfig.CostElemVal) } else { - avatar.FightPropMap[uint32(elementType.CurrEnergyProp)] = float32(value) + avatar.FightPropMap[uint32(elementType.CurrEnergyProp)] = value } } diff --git a/gs/model/db_quest.go b/gs/model/db_quest.go index 7d509354..e0bbb8d5 100644 --- a/gs/model/db_quest.go +++ b/gs/model/db_quest.go @@ -16,7 +16,7 @@ type DbQuest struct { // Quest 任务 type Quest struct { QuestId uint32 // 任务id - State uint32 // 任务状态 + State uint8 // 任务状态 AcceptTime uint32 // 接取时间 StartTime uint32 // 开始执行时间 FinishProgressList []uint32 // 任务进度 @@ -55,7 +55,7 @@ func (q *DbQuest) AddQuest(questId uint32) { } q.QuestMap[questId] = &Quest{ QuestId: uint32(questDataConfig.QuestId), - State: constant.QUEST_STATE_TYPE_ACCEPT, + State: constant.QUEST_STATE_UNSTARTED, AcceptTime: uint32(time.Now().Unix()), StartTime: 0, FinishProgressList: nil, @@ -69,7 +69,7 @@ func (q *DbQuest) ExecQuest(questId uint32) { logger.Error("get quest is nil, questId: %v", questId) return } - if quest.State != constant.QUEST_STATE_TYPE_ACCEPT { + if quest.State != constant.QUEST_STATE_UNSTARTED { logger.Error("invalid quest state, questId: %v, state: %v", questId, quest.State) return } @@ -78,7 +78,7 @@ func (q *DbQuest) ExecQuest(questId uint32) { logger.Error("get quest data config is nil, questId: %v", questId) return } - quest.State = constant.QUEST_STATE_TYPE_EXEC + quest.State = constant.QUEST_STATE_UNFINISHED quest.StartTime = uint32(time.Now().Unix()) quest.FinishProgressList = make([]uint32, len(questDataConfig.FinishCondList)) } @@ -100,7 +100,7 @@ func (q *DbQuest) AddQuestProgress(questId uint32, index int, progress uint32) { logger.Error("get quest is nil, questId: %v", questId) return } - if quest.State != constant.QUEST_STATE_TYPE_EXEC { + if quest.State != constant.QUEST_STATE_UNFINISHED { logger.Error("invalid quest state, questId: %v, state: %v", questId, quest.State) return } @@ -115,7 +115,7 @@ func (q *DbQuest) AddQuestProgress(questId uint32, index int, progress uint32) { } quest.FinishProgressList[index] += progress if quest.FinishProgressList[index] >= uint32(questDataConfig.FinishCondList[index].Count) { - quest.State = constant.QUEST_STATE_TYPE_FINISH + quest.State = constant.QUEST_STATE_FINISHED } }