配置表访问接口化,简化常量访问

This commit is contained in:
flswld
2023-02-09 19:20:47 +08:00
parent 867448b80d
commit ae4c505e48
74 changed files with 2313 additions and 3189 deletions

View File

@@ -1,357 +1,177 @@
package constant package constant
var ActionReasonConst *ActionReason const (
ActionReasonNone uint16 = 0
type ActionReason struct { ActionReasonQuestItem uint16 = 1
None uint16 ActionReasonQuestReward uint16 = 2
QuestItem uint16 ActionReasonTrifle uint16 = 3
QuestReward uint16 ActionReasonShop uint16 = 4
Trifle uint16 ActionReasonPlayerUpgradeReward uint16 = 5
Shop uint16 ActionReasonAddAvatar uint16 = 6
PlayerUpgradeReward uint16 ActionReasonGadgetEnvAnimal uint16 = 7
AddAvatar uint16 ActionReasonMonsterEnvAnimal uint16 = 8
GadgetEnvAnimal uint16 ActionReasonCompound uint16 = 9
MonsterEnvAnimal uint16 ActionReasonCook uint16 = 10
Compound uint16 ActionReasonGather uint16 = 11
Cook uint16 ActionReasonMailAttachment uint16 = 12
Gather uint16 ActionReasonCityLevelupReturn uint16 = 15
MailAttachment uint16 ActionReasonCityLevelupReward uint16 = 17
CityLevelupReturn uint16 ActionReasonAreaExploreReward uint16 = 18
CityLevelupReward uint16 ActionReasonUnlockPointReward uint16 = 19
AreaExploreReward uint16 ActionReasonDungeonFirstPass uint16 = 20
UnlockPointReward uint16 ActionReasonDungeonPass uint16 = 21
DungeonFirstPass uint16 ActionReasonChangeElemType uint16 = 23
DungeonPass uint16 ActionReasonFetterOpen uint16 = 25
ChangeElemType uint16 ActionReasonDailyTaskScore uint16 = 26
FetterOpen uint16 ActionReasonDailyTaskHost uint16 = 27
DailyTaskScore uint16 ActionReasonRandTaskHost uint16 = 28
DailyTaskHost uint16 ActionReasonExpedition uint16 = 29
RandTaskHost uint16 ActionReasonGacha uint16 = 30
Expedition uint16 ActionReasonCombine uint16 = 31
Gacha uint16 ActionReasonRandTaskGuest uint16 = 32
Combine uint16 ActionReasonDailyTaskGuest uint16 = 33
RandTaskGuest uint16 ActionReasonForgeOutput uint16 = 34
DailyTaskGuest uint16 ActionReasonForgeReturn uint16 = 35
ForgeOutput uint16 ActionReasonInitAvatar uint16 = 36
ForgeReturn uint16 ActionReasonMonsterDie uint16 = 37
InitAvatar uint16 ActionReasonGm uint16 = 38
MonsterDie uint16 ActionReasonOpenChest uint16 = 39
Gm uint16 ActionReasonGadgetDie uint16 = 40
OpenChest uint16 ActionReasonMonsterChangeHp uint16 = 41
GadgetDie uint16 ActionReasonSubfieldDrop uint16 = 42
MonsterChangeHp uint16 ActionReasonPushTipsReward uint16 = 43
SubfieldDrop uint16 ActionReasonActivityMonsterDrop uint16 = 44
PushTipsReward uint16 ActionReasonActivityGather uint16 = 45
ActivityMonsterDrop uint16 ActionReasonActivitySubfieldDrop uint16 = 46
ActivityGather uint16 ActionReasonTowerScheduleReward uint16 = 47
ActivitySubfieldDrop uint16 ActionReasonTowerFloorStarReward uint16 = 48
TowerScheduleReward uint16 ActionReasonTowerFirstPassReward uint16 = 49
TowerFloorStarReward uint16 ActionReasonTowerDailyReward uint16 = 50
TowerFirstPassReward uint16 ActionReasonHitClientTrivialEntity uint16 = 51
TowerDailyReward uint16 ActionReasonOpenWorldBossChest uint16 = 52
HitClientTrivialEntity uint16 ActionReasonMaterialDeleteReturn uint16 = 53
OpenWorldBossChest uint16 ActionReasonSignInReward uint16 = 54
MaterialDeleteReturn uint16 ActionReasonOpenBlossomChest uint16 = 55
SignInReward uint16 ActionReasonRecharge uint16 = 56
OpenBlossomChest uint16 ActionReasonBonusActivityReward uint16 = 57
Recharge uint16 ActionReasonTowerCommemorativeReward uint16 = 58
BonusActivityReward uint16 ActionReasonTowerSkipFloorReward uint16 = 59
TowerCommemorativeReward uint16 ActionReasonRechargeBonus uint16 = 60
TowerSkipFloorReward uint16 ActionReasonRechargeCard uint16 = 61
RechargeBonus uint16 ActionReasonRechargeCardDaily uint16 = 62
RechargeCard uint16 ActionReasonRechargeCardReplace uint16 = 63
RechargeCardDaily uint16 ActionReasonRechargeCardReplaceFree uint16 = 64
RechargeCardReplace uint16 ActionReasonRechargePlayReplace uint16 = 65
RechargeCardReplaceFree uint16 ActionReasonMpPlayTakeReward uint16 = 66
RechargePlayReplace uint16 ActionReasonActivityWatcher uint16 = 67
MpPlayTakeReward uint16 ActionReasonSalesmanDeliverItem uint16 = 68
ActivityWatcher uint16 ActionReasonSalesmanReward uint16 = 69
SalesmanDeliverItem uint16 ActionReasonRebate uint16 = 70
SalesmanReward uint16 ActionReasonMcoinExchangeHcoin uint16 = 71
Rebate uint16 ActionReasonDailyTaskExchangeLegendaryKey uint16 = 72
McoinExchangeHcoin uint16 ActionReasonUnlockPersonLine uint16 = 73
DailyTaskExchangeLegendaryKey uint16 ActionReasonFetterLevelReward uint16 = 74
UnlockPersonLine uint16 ActionReasonBuyResin uint16 = 75
FetterLevelReward uint16 ActionReasonRechargePackage uint16 = 76
BuyResin uint16 ActionReasonDeliveryDailyReward uint16 = 77
RechargePackage uint16 ActionReasonCityReputationLevel uint16 = 78
DeliveryDailyReward uint16 ActionReasonCityReputationQuest uint16 = 79
CityReputationLevel uint16 ActionReasonCityReputationRequest uint16 = 80
CityReputationQuest uint16 ActionReasonCityReputationExplore uint16 = 81
CityReputationRequest uint16 ActionReasonOffergingLevel uint16 = 82
CityReputationExplore uint16 ActionReasonRoutineHost uint16 = 83
OffergingLevel uint16 ActionReasonRoutineGuest uint16 = 84
RoutineHost uint16 ActionReasonTreasureMapSpotToken uint16 = 89
RoutineGuest uint16 ActionReasonTreasureMapBonusLevelReward uint16 = 90
TreasureMapSpotToken uint16 ActionReasonTreasureMapMpReward uint16 = 91
TreasureMapBonusLevelReward uint16 ActionReasonConvert uint16 = 92
TreasureMapMpReward uint16 ActionReasonOverflowTransform uint16 = 93
Convert uint16 ActionReasonActivityAvatarSelectionReward uint16 = 96
OverflowTransform uint16 ActionReasonActivityWatcherBatch uint16 = 97
ActivityAvatarSelectionReward uint16 ActionReasonHitTreeDrop uint16 = 98
ActivityWatcherBatch uint16 ActionReasonGetHomeLevelupReward uint16 = 99
HitTreeDrop uint16 ActionReasonHomeDefaultFurniture uint16 = 100
GetHomeLevelupReward uint16 ActionReasonActivityCond uint16 = 101
HomeDefaultFurniture uint16 ActionReasonBattlePassNotify uint16 = 102
ActivityCond uint16 ActionReasonPlayerUseItem uint16 = 1001
BattlePassNotify uint16 ActionReasonDropItem uint16 = 1002
PlayerUseItem uint16 ActionReasonWeaponUpgrade uint16 = 1011
DropItem uint16 ActionReasonWeaponPromote uint16 = 1012
WeaponUpgrade uint16 ActionReasonWeaponAwaken uint16 = 1013
WeaponPromote uint16 ActionReasonRelicUpgrade uint16 = 1014
WeaponAwaken uint16 ActionReasonAbility uint16 = 1015
RelicUpgrade uint16 ActionReasonDungeonStatueDrop uint16 = 1016
Ability uint16 ActionReasonOfflineMsg uint16 = 1017
DungeonStatueDrop uint16 ActionReasonAvatarUpgrade uint16 = 1018
OfflineMsg uint16 ActionReasonAvatarPromote uint16 = 1019
AvatarUpgrade uint16 ActionReasonQuestAction uint16 = 1021
AvatarPromote uint16 ActionReasonCityLevelup uint16 = 1022
QuestAction uint16 ActionReasonUpgradeSkill uint16 = 1024
CityLevelup uint16 ActionReasonUnlockTalent uint16 = 1025
UpgradeSkill uint16 ActionReasonUpgradeProudSkill uint16 = 1026
UnlockTalent uint16 ActionReasonPlayerLevelLimitUp uint16 = 1027
UpgradeProudSkill uint16 ActionReasonDungeonDaily uint16 = 1028
PlayerLevelLimitUp uint16 ActionReasonItemGiving uint16 = 1030
DungeonDaily uint16 ActionReasonForgeCost uint16 = 1031
ItemGiving uint16 ActionReasonInvestigationReward uint16 = 1032
ForgeCost uint16 ActionReasonInvestigationTargetReward uint16 = 1033
InvestigationReward uint16 ActionReasonGadgetInteract uint16 = 1034
InvestigationTargetReward uint16 ActionReasonSeaLampCiMaterial uint16 = 1036
GadgetInteract uint16 ActionReasonSeaLampContributionReward uint16 = 1037
SeaLampCiMaterial uint16 ActionReasonSeaLampPhaseReward uint16 = 1038
SeaLampContributionReward uint16 ActionReasonSeaLampFlyLamp uint16 = 1039
SeaLampPhaseReward uint16 ActionReasonAutoRecover uint16 = 1040
SeaLampFlyLamp uint16 ActionReasonActivityExpireItem uint16 = 1041
AutoRecover uint16 ActionReasonSubCoinNegative uint16 = 1042
ActivityExpireItem uint16 ActionReasonBargainDeduct uint16 = 1043
SubCoinNegative uint16 ActionReasonBattlePassPaidReward uint16 = 1044
BargainDeduct uint16 ActionReasonBattlePassLevelReward uint16 = 1045
BattlePassPaidReward uint16 ActionReasonTrialAvatarActivityFirstPassReward uint16 = 1046
BattlePassLevelReward uint16 ActionReasonBuyBattlePassLevel uint16 = 1047
TrialAvatarActivityFirstPassReward uint16 ActionReasonGrantBirthdayBenefit uint16 = 1048
BuyBattlePassLevel uint16 ActionReasonAchievementReward uint16 = 1049
GrantBirthdayBenefit uint16 ActionReasonAchievementGoalReward uint16 = 1050
AchievementReward uint16 ActionReasonFirstShareToSocialNetwork uint16 = 1051
AchievementGoalReward uint16 ActionReasonDestroyMaterial uint16 = 1052
FirstShareToSocialNetwork uint16 ActionReasonCodexLevelupReward uint16 = 1053
DestroyMaterial uint16 ActionReasonHuntingOfferReward uint16 = 1054
CodexLevelupReward uint16 ActionReasonUseWidgetAnchorPoint uint16 = 1055
HuntingOfferReward uint16 ActionReasonUseWidgetBonfire uint16 = 1056
UseWidgetAnchorPoint uint16 ActionReasonUngradeWeaponReturnMaterial uint16 = 1057
UseWidgetBonfire uint16 ActionReasonUseWidgetOneoffGatherPointDetector uint16 = 1058
UngradeWeaponReturnMaterial uint16 ActionReasonUseWidgetClientCollector uint16 = 1059
UseWidgetOneoffGatherPointDetector uint16 ActionReasonUseWidgetClientDetector uint16 = 1060
UseWidgetClientCollector uint16 ActionReasonTakeGeneralReward uint16 = 1061
UseWidgetClientDetector uint16 ActionReasonAsterTakeSpecialReward uint16 = 1062
TakeGeneralReward uint16 ActionReasonRemoveCodexBook uint16 = 1063
AsterTakeSpecialReward uint16 ActionReasonOfferingItem uint16 = 1064
RemoveCodexBook uint16 ActionReasonUseWidgetGadgetBuilder uint16 = 1065
OfferingItem uint16 ActionReasonEffigyFirstPassReward uint16 = 1066
UseWidgetGadgetBuilder uint16 ActionReasonEffigyReward uint16 = 1067
EffigyFirstPassReward uint16 ActionReasonReunionFirstGiftReward uint16 = 1068
EffigyReward uint16 ActionReasonReunionSignInReward uint16 = 1069
ReunionFirstGiftReward uint16 ActionReasonReunionWatcherReward uint16 = 1070
ReunionSignInReward uint16 ActionReasonSalesmanMpReward uint16 = 1071
ReunionWatcherReward uint16 ActionReasonActionReasionAvatarPromoteReward uint16 = 1072
SalesmanMpReward uint16 ActionReasonBlessingRedeemReward uint16 = 1073
ActionReasionAvatarPromoteReward uint16 ActionReasonActionMiracleRingReward uint16 = 1074
BlessingRedeemReward uint16 ActionReasonExpeditionReward uint16 = 1075
ActionMiracleRingReward uint16 ActionReasonTreasureMapRemoveDetector uint16 = 1076
ExpeditionReward uint16 ActionReasonMechanicusDungeonTicket uint16 = 1077
TreasureMapRemoveDetector uint16 ActionReasonMechanicusLevelupGear uint16 = 1078
MechanicusDungeonTicket uint16 ActionReasonMechanicusBattleSettle uint16 = 1079
MechanicusLevelupGear uint16 ActionReasonRegionSearchReward uint16 = 1080
MechanicusBattleSettle uint16 ActionReasonUnlockCoopChapter uint16 = 1081
RegionSearchReward uint16 ActionReasonTakeCoopReward uint16 = 1082
UnlockCoopChapter uint16 ActionReasonFleurFairDungeonReward uint16 = 1083
TakeCoopReward uint16 ActionReasonActivityScore uint16 = 1084
FleurFairDungeonReward uint16 ActionReasonChannellerSlabOneoffDungeonReward uint16 = 1085
ActivityScore uint16 ActionReasonFurnitureMakeStart uint16 = 1086
ChannellerSlabOneoffDungeonReward uint16 ActionReasonFurnitureMakeTake uint16 = 1087
FurnitureMakeStart uint16 ActionReasonFurnitureMakeCancel uint16 = 1088
FurnitureMakeTake uint16 ActionReasonFurnitureMakeFastFinish uint16 = 1089
FurnitureMakeCancel uint16 ActionReasonChannellerSlabLoopDungeonFirstPassReward uint16 = 1090
FurnitureMakeFastFinish uint16 ActionReasonChannellerSlabLoopDungeonScoreReward uint16 = 1091
ChannellerSlabLoopDungeonFirstPassReward uint16 ActionReasonHomeLimitedShopBuy uint16 = 1092
ChannellerSlabLoopDungeonScoreReward uint16 ActionReasonHomeCoinCollect uint16 = 1093
HomeLimitedShopBuy uint16 )
HomeCoinCollect uint16
}
func InitActionReasonConst() {
ActionReasonConst = new(ActionReason)
ActionReasonConst.None = 0
ActionReasonConst.QuestItem = 1
ActionReasonConst.QuestReward = 2
ActionReasonConst.Trifle = 3
ActionReasonConst.Shop = 4
ActionReasonConst.PlayerUpgradeReward = 5
ActionReasonConst.AddAvatar = 6
ActionReasonConst.GadgetEnvAnimal = 7
ActionReasonConst.MonsterEnvAnimal = 8
ActionReasonConst.Compound = 9
ActionReasonConst.Cook = 10
ActionReasonConst.Gather = 11
ActionReasonConst.MailAttachment = 12
ActionReasonConst.CityLevelupReturn = 15
ActionReasonConst.CityLevelupReward = 17
ActionReasonConst.AreaExploreReward = 18
ActionReasonConst.UnlockPointReward = 19
ActionReasonConst.DungeonFirstPass = 20
ActionReasonConst.DungeonPass = 21
ActionReasonConst.ChangeElemType = 23
ActionReasonConst.FetterOpen = 25
ActionReasonConst.DailyTaskScore = 26
ActionReasonConst.DailyTaskHost = 27
ActionReasonConst.RandTaskHost = 28
ActionReasonConst.Expedition = 29
ActionReasonConst.Gacha = 30
ActionReasonConst.Combine = 31
ActionReasonConst.RandTaskGuest = 32
ActionReasonConst.DailyTaskGuest = 33
ActionReasonConst.ForgeOutput = 34
ActionReasonConst.ForgeReturn = 35
ActionReasonConst.InitAvatar = 36
ActionReasonConst.MonsterDie = 37
ActionReasonConst.Gm = 38
ActionReasonConst.OpenChest = 39
ActionReasonConst.GadgetDie = 40
ActionReasonConst.MonsterChangeHp = 41
ActionReasonConst.SubfieldDrop = 42
ActionReasonConst.PushTipsReward = 43
ActionReasonConst.ActivityMonsterDrop = 44
ActionReasonConst.ActivityGather = 45
ActionReasonConst.ActivitySubfieldDrop = 46
ActionReasonConst.TowerScheduleReward = 47
ActionReasonConst.TowerFloorStarReward = 48
ActionReasonConst.TowerFirstPassReward = 49
ActionReasonConst.TowerDailyReward = 50
ActionReasonConst.HitClientTrivialEntity = 51
ActionReasonConst.OpenWorldBossChest = 52
ActionReasonConst.MaterialDeleteReturn = 53
ActionReasonConst.SignInReward = 54
ActionReasonConst.OpenBlossomChest = 55
ActionReasonConst.Recharge = 56
ActionReasonConst.BonusActivityReward = 57
ActionReasonConst.TowerCommemorativeReward = 58
ActionReasonConst.TowerSkipFloorReward = 59
ActionReasonConst.RechargeBonus = 60
ActionReasonConst.RechargeCard = 61
ActionReasonConst.RechargeCardDaily = 62
ActionReasonConst.RechargeCardReplace = 63
ActionReasonConst.RechargeCardReplaceFree = 64
ActionReasonConst.RechargePlayReplace = 65
ActionReasonConst.MpPlayTakeReward = 66
ActionReasonConst.ActivityWatcher = 67
ActionReasonConst.SalesmanDeliverItem = 68
ActionReasonConst.SalesmanReward = 69
ActionReasonConst.Rebate = 70
ActionReasonConst.McoinExchangeHcoin = 71
ActionReasonConst.DailyTaskExchangeLegendaryKey = 72
ActionReasonConst.UnlockPersonLine = 73
ActionReasonConst.FetterLevelReward = 74
ActionReasonConst.BuyResin = 75
ActionReasonConst.RechargePackage = 76
ActionReasonConst.DeliveryDailyReward = 77
ActionReasonConst.CityReputationLevel = 78
ActionReasonConst.CityReputationQuest = 79
ActionReasonConst.CityReputationRequest = 80
ActionReasonConst.CityReputationExplore = 81
ActionReasonConst.OffergingLevel = 82
ActionReasonConst.RoutineHost = 83
ActionReasonConst.RoutineGuest = 84
ActionReasonConst.TreasureMapSpotToken = 89
ActionReasonConst.TreasureMapBonusLevelReward = 90
ActionReasonConst.TreasureMapMpReward = 91
ActionReasonConst.Convert = 92
ActionReasonConst.OverflowTransform = 93
ActionReasonConst.ActivityAvatarSelectionReward = 96
ActionReasonConst.ActivityWatcherBatch = 97
ActionReasonConst.HitTreeDrop = 98
ActionReasonConst.GetHomeLevelupReward = 99
ActionReasonConst.HomeDefaultFurniture = 100
ActionReasonConst.ActivityCond = 101
ActionReasonConst.BattlePassNotify = 102
ActionReasonConst.PlayerUseItem = 1001
ActionReasonConst.DropItem = 1002
ActionReasonConst.WeaponUpgrade = 1011
ActionReasonConst.WeaponPromote = 1012
ActionReasonConst.WeaponAwaken = 1013
ActionReasonConst.RelicUpgrade = 1014
ActionReasonConst.Ability = 1015
ActionReasonConst.DungeonStatueDrop = 1016
ActionReasonConst.OfflineMsg = 1017
ActionReasonConst.AvatarUpgrade = 1018
ActionReasonConst.AvatarPromote = 1019
ActionReasonConst.QuestAction = 1021
ActionReasonConst.CityLevelup = 1022
ActionReasonConst.UpgradeSkill = 1024
ActionReasonConst.UnlockTalent = 1025
ActionReasonConst.UpgradeProudSkill = 1026
ActionReasonConst.PlayerLevelLimitUp = 1027
ActionReasonConst.DungeonDaily = 1028
ActionReasonConst.ItemGiving = 1030
ActionReasonConst.ForgeCost = 1031
ActionReasonConst.InvestigationReward = 1032
ActionReasonConst.InvestigationTargetReward = 1033
ActionReasonConst.GadgetInteract = 1034
ActionReasonConst.SeaLampCiMaterial = 1036
ActionReasonConst.SeaLampContributionReward = 1037
ActionReasonConst.SeaLampPhaseReward = 1038
ActionReasonConst.SeaLampFlyLamp = 1039
ActionReasonConst.AutoRecover = 1040
ActionReasonConst.ActivityExpireItem = 1041
ActionReasonConst.SubCoinNegative = 1042
ActionReasonConst.BargainDeduct = 1043
ActionReasonConst.BattlePassPaidReward = 1044
ActionReasonConst.BattlePassLevelReward = 1045
ActionReasonConst.TrialAvatarActivityFirstPassReward = 1046
ActionReasonConst.BuyBattlePassLevel = 1047
ActionReasonConst.GrantBirthdayBenefit = 1048
ActionReasonConst.AchievementReward = 1049
ActionReasonConst.AchievementGoalReward = 1050
ActionReasonConst.FirstShareToSocialNetwork = 1051
ActionReasonConst.DestroyMaterial = 1052
ActionReasonConst.CodexLevelupReward = 1053
ActionReasonConst.HuntingOfferReward = 1054
ActionReasonConst.UseWidgetAnchorPoint = 1055
ActionReasonConst.UseWidgetBonfire = 1056
ActionReasonConst.UngradeWeaponReturnMaterial = 1057
ActionReasonConst.UseWidgetOneoffGatherPointDetector = 1058
ActionReasonConst.UseWidgetClientCollector = 1059
ActionReasonConst.UseWidgetClientDetector = 1060
ActionReasonConst.TakeGeneralReward = 1061
ActionReasonConst.AsterTakeSpecialReward = 1062
ActionReasonConst.RemoveCodexBook = 1063
ActionReasonConst.OfferingItem = 1064
ActionReasonConst.UseWidgetGadgetBuilder = 1065
ActionReasonConst.EffigyFirstPassReward = 1066
ActionReasonConst.EffigyReward = 1067
ActionReasonConst.ReunionFirstGiftReward = 1068
ActionReasonConst.ReunionSignInReward = 1069
ActionReasonConst.ReunionWatcherReward = 1070
ActionReasonConst.SalesmanMpReward = 1071
ActionReasonConst.ActionReasionAvatarPromoteReward = 1072
ActionReasonConst.BlessingRedeemReward = 1073
ActionReasonConst.ActionMiracleRingReward = 1074
ActionReasonConst.ExpeditionReward = 1075
ActionReasonConst.TreasureMapRemoveDetector = 1076
ActionReasonConst.MechanicusDungeonTicket = 1077
ActionReasonConst.MechanicusLevelupGear = 1078
ActionReasonConst.MechanicusBattleSettle = 1079
ActionReasonConst.RegionSearchReward = 1080
ActionReasonConst.UnlockCoopChapter = 1081
ActionReasonConst.TakeCoopReward = 1082
ActionReasonConst.FleurFairDungeonReward = 1083
ActionReasonConst.ActivityScore = 1084
ActionReasonConst.ChannellerSlabOneoffDungeonReward = 1085
ActionReasonConst.FurnitureMakeStart = 1086
ActionReasonConst.FurnitureMakeTake = 1087
ActionReasonConst.FurnitureMakeCancel = 1088
ActionReasonConst.FurnitureMakeFastFinish = 1089
ActionReasonConst.ChannellerSlabLoopDungeonFirstPassReward = 1090
ActionReasonConst.ChannellerSlabLoopDungeonScoreReward = 1091
ActionReasonConst.HomeLimitedShopBuy = 1092
ActionReasonConst.HomeCoinCollect = 1093
}

View File

@@ -1,25 +1,11 @@
package constant package constant
var ClimateTypeConst *ClimateType const (
CLIMATE_TYPE_NONE uint16 = 0
type ClimateType struct { CLIMATE_TYPE_SUNNY uint16 = 1
CLIMATE_NONE uint16 CLIMATE_TYPE_CLOUDY uint16 = 2
CLIMATE_SUNNY uint16 CLIMATE_TYPE_RAIN uint16 = 3
CLIMATE_CLOUDY uint16 CLIMATE_TYPE_THUNDERSTORM uint16 = 4
CLIMATE_RAIN uint16 CLIMATE_TYPE_SNOW uint16 = 5
CLIMATE_THUNDERSTORM uint16 CLIMATE_TYPE_MIST uint16 = 6
CLIMATE_SNOW uint16 )
CLIMATE_MIST uint16
}
func InitClimateTypeConst() {
ClimateTypeConst = new(ClimateType)
ClimateTypeConst.CLIMATE_NONE = 0
ClimateTypeConst.CLIMATE_SUNNY = 1
ClimateTypeConst.CLIMATE_CLOUDY = 2
ClimateTypeConst.CLIMATE_RAIN = 3
ClimateTypeConst.CLIMATE_THUNDERSTORM = 4
ClimateTypeConst.CLIMATE_SNOW = 5
ClimateTypeConst.CLIMATE_MIST = 6
}

View File

@@ -1,25 +0,0 @@
package constant
func InitConstant() {
InitFightPropertyConst()
InitActionReasonConst()
InitClimateTypeConst()
InitElementTypeConst()
InitEnterReasonConst()
InitEntityIdTypeConst()
InitEquipTypeConst()
InitFetterStateConst()
InitGameConstant()
InitGrowCurveConst()
InitItemTypeConst()
InitLifeStateConst()
InitMaterialTypeConst()
InitOpenStateConst()
InitPlayerPropertyConst()
InitSceneTypeConst()
InitEntityTypeConst()
InitStaminaCostConst()
InitWeaponTypeConst()
InitGCGTokenConst()
InitItemConstantConst()
}

View File

@@ -0,0 +1,26 @@
package constant
import "hk4e/pkg/endec"
var (
DEFAULT_ABILITY_STRINGS []string
DEFAULT_ABILITY_HASHES []int32
DEFAULT_ABILITY_NAME int32
)
func init() {
DEFAULT_ABILITY_STRINGS = []string{
"Avatar_DefaultAbility_VisionReplaceDieInvincible",
"Avatar_DefaultAbility_AvartarInShaderChange",
"Avatar_SprintBS_Invincible",
"Avatar_Freeze_Duration_Reducer",
"Avatar_Attack_ReviveEnergy",
"Avatar_Component_Initializer",
"Avatar_FallAnthem_Achievement_Listener",
}
DEFAULT_ABILITY_HASHES = make([]int32, 0)
for _, v := range DEFAULT_ABILITY_STRINGS {
DEFAULT_ABILITY_HASHES = append(DEFAULT_ABILITY_HASHES, endec.Hk4eAbilityHashCode(v))
}
DEFAULT_ABILITY_NAME = endec.Hk4eAbilityHashCode("Default")
}

View File

@@ -14,129 +14,112 @@ type ElementTypeValue struct {
} }
type ElementType struct { type ElementType struct {
None *ElementTypeValue None *ElementTypeValue
Fire *ElementTypeValue Fire *ElementTypeValue
Water *ElementTypeValue Water *ElementTypeValue
Grass *ElementTypeValue Grass *ElementTypeValue
Electric *ElementTypeValue Electric *ElementTypeValue
Ice *ElementTypeValue Ice *ElementTypeValue
Frozen *ElementTypeValue Frozen *ElementTypeValue
Wind *ElementTypeValue Wind *ElementTypeValue
Rock *ElementTypeValue Rock *ElementTypeValue
AntiFire *ElementTypeValue AntiFire *ElementTypeValue
Default *ElementTypeValue Default *ElementTypeValue
STRING_MAP map[string]*ElementTypeValue VALUE_MAP map[uint16]*ElementTypeValue
VALUE_MAP map[uint16]*ElementTypeValue
} }
func InitElementTypeConst() { func init() {
ElementTypeConst = new(ElementType) ElementTypeConst = new(ElementType)
ElementTypeConst.None = &ElementTypeValue{ ElementTypeConst.None = &ElementTypeValue{
0, 0,
FightPropertyConst.FIGHT_PROP_CUR_FIRE_ENERGY, FIGHT_PROP_CUR_FIRE_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_FIRE_ENERGY, FIGHT_PROP_MAX_FIRE_ENERGY,
0, 0,
"", "",
endec.Hk4eAbilityHashCode(""), endec.Hk4eAbilityHashCode(""),
} }
ElementTypeConst.Fire = &ElementTypeValue{ ElementTypeConst.Fire = &ElementTypeValue{
1, 1,
FightPropertyConst.FIGHT_PROP_CUR_FIRE_ENERGY, FIGHT_PROP_CUR_FIRE_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_FIRE_ENERGY, FIGHT_PROP_MAX_FIRE_ENERGY,
10101, 10101,
"TeamResonance_Fire_Lv2", "TeamResonance_Fire_Lv2",
endec.Hk4eAbilityHashCode("TeamResonance_Fire_Lv2"), endec.Hk4eAbilityHashCode("TeamResonance_Fire_Lv2"),
} }
ElementTypeConst.Water = &ElementTypeValue{ ElementTypeConst.Water = &ElementTypeValue{
2, 2,
FightPropertyConst.FIGHT_PROP_CUR_WATER_ENERGY, FIGHT_PROP_CUR_WATER_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_WATER_ENERGY, FIGHT_PROP_MAX_WATER_ENERGY,
10201, 10201,
"TeamResonance_Water_Lv2", "TeamResonance_Water_Lv2",
endec.Hk4eAbilityHashCode("TeamResonance_Water_Lv2"), endec.Hk4eAbilityHashCode("TeamResonance_Water_Lv2"),
} }
ElementTypeConst.Grass = &ElementTypeValue{ ElementTypeConst.Grass = &ElementTypeValue{
3, 3,
FightPropertyConst.FIGHT_PROP_CUR_GRASS_ENERGY, FIGHT_PROP_CUR_GRASS_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_GRASS_ENERGY, FIGHT_PROP_MAX_GRASS_ENERGY,
0, 0,
"", "",
endec.Hk4eAbilityHashCode(""), endec.Hk4eAbilityHashCode(""),
} }
ElementTypeConst.Electric = &ElementTypeValue{ ElementTypeConst.Electric = &ElementTypeValue{
4, 4,
FightPropertyConst.FIGHT_PROP_CUR_ELEC_ENERGY, FIGHT_PROP_CUR_ELEC_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_ELEC_ENERGY, FIGHT_PROP_MAX_ELEC_ENERGY,
10401, 10401,
"TeamResonance_Electric_Lv2", "TeamResonance_Electric_Lv2",
endec.Hk4eAbilityHashCode("TeamResonance_Electric_Lv2"), endec.Hk4eAbilityHashCode("TeamResonance_Electric_Lv2"),
} }
ElementTypeConst.Ice = &ElementTypeValue{ ElementTypeConst.Ice = &ElementTypeValue{
5, 5,
FightPropertyConst.FIGHT_PROP_CUR_ICE_ENERGY, FIGHT_PROP_CUR_ICE_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_ICE_ENERGY, FIGHT_PROP_MAX_ICE_ENERGY,
10601, 10601,
"TeamResonance_Ice_Lv2", "TeamResonance_Ice_Lv2",
endec.Hk4eAbilityHashCode("TeamResonance_Ice_Lv2"), endec.Hk4eAbilityHashCode("TeamResonance_Ice_Lv2"),
} }
ElementTypeConst.Frozen = &ElementTypeValue{ ElementTypeConst.Frozen = &ElementTypeValue{
6, 6,
FightPropertyConst.FIGHT_PROP_CUR_ICE_ENERGY, FIGHT_PROP_CUR_ICE_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_ICE_ENERGY, FIGHT_PROP_MAX_ICE_ENERGY,
0, 0,
"", "",
endec.Hk4eAbilityHashCode(""), endec.Hk4eAbilityHashCode(""),
} }
ElementTypeConst.Wind = &ElementTypeValue{ ElementTypeConst.Wind = &ElementTypeValue{
7, 7,
FightPropertyConst.FIGHT_PROP_CUR_WIND_ENERGY, FIGHT_PROP_CUR_WIND_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_WIND_ENERGY, FIGHT_PROP_MAX_WIND_ENERGY,
10301, 10301,
"TeamResonance_Wind_Lv2", "TeamResonance_Wind_Lv2",
endec.Hk4eAbilityHashCode("TeamResonance_Wind_Lv2"), endec.Hk4eAbilityHashCode("TeamResonance_Wind_Lv2"),
} }
ElementTypeConst.Rock = &ElementTypeValue{ ElementTypeConst.Rock = &ElementTypeValue{
8, 8,
FightPropertyConst.FIGHT_PROP_CUR_ROCK_ENERGY, FIGHT_PROP_CUR_ROCK_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_ROCK_ENERGY, FIGHT_PROP_MAX_ROCK_ENERGY,
10701, 10701,
"TeamResonance_Rock_Lv2", "TeamResonance_Rock_Lv2",
endec.Hk4eAbilityHashCode("TeamResonance_Rock_Lv2"), endec.Hk4eAbilityHashCode("TeamResonance_Rock_Lv2"),
} }
ElementTypeConst.AntiFire = &ElementTypeValue{ ElementTypeConst.AntiFire = &ElementTypeValue{
9, 9,
FightPropertyConst.FIGHT_PROP_CUR_FIRE_ENERGY, FIGHT_PROP_CUR_FIRE_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_FIRE_ENERGY, FIGHT_PROP_MAX_FIRE_ENERGY,
0, 0,
"", "",
endec.Hk4eAbilityHashCode(""), endec.Hk4eAbilityHashCode(""),
} }
ElementTypeConst.Default = &ElementTypeValue{ ElementTypeConst.Default = &ElementTypeValue{
255, 255,
FightPropertyConst.FIGHT_PROP_CUR_FIRE_ENERGY, FIGHT_PROP_CUR_FIRE_ENERGY,
FightPropertyConst.FIGHT_PROP_MAX_FIRE_ENERGY, FIGHT_PROP_MAX_FIRE_ENERGY,
10801, 10801,
"TeamResonance_AllDifferent", "TeamResonance_AllDifferent",
endec.Hk4eAbilityHashCode("TeamResonance_AllDifferent"), endec.Hk4eAbilityHashCode("TeamResonance_AllDifferent"),
} }
ElementTypeConst.STRING_MAP = make(map[string]*ElementTypeValue)
ElementTypeConst.STRING_MAP["None"] = ElementTypeConst.None
ElementTypeConst.STRING_MAP["Fire"] = ElementTypeConst.Fire
ElementTypeConst.STRING_MAP["Water"] = ElementTypeConst.Water
ElementTypeConst.STRING_MAP["Grass"] = ElementTypeConst.Grass
ElementTypeConst.STRING_MAP["Electric"] = ElementTypeConst.Electric
ElementTypeConst.STRING_MAP["Ice"] = ElementTypeConst.Ice
ElementTypeConst.STRING_MAP["Frozen"] = ElementTypeConst.Frozen
ElementTypeConst.STRING_MAP["Wind"] = ElementTypeConst.Wind
ElementTypeConst.STRING_MAP["Rock"] = ElementTypeConst.Rock
ElementTypeConst.STRING_MAP["AntiFire"] = ElementTypeConst.AntiFire
ElementTypeConst.STRING_MAP["Default"] = ElementTypeConst.Default
ElementTypeConst.VALUE_MAP = make(map[uint16]*ElementTypeValue) ElementTypeConst.VALUE_MAP = make(map[uint16]*ElementTypeValue)
ElementTypeConst.VALUE_MAP[0] = ElementTypeConst.None ElementTypeConst.VALUE_MAP[0] = ElementTypeConst.None
ElementTypeConst.VALUE_MAP[1] = ElementTypeConst.Fire ElementTypeConst.VALUE_MAP[1] = ElementTypeConst.Fire
ElementTypeConst.VALUE_MAP[2] = ElementTypeConst.Water ElementTypeConst.VALUE_MAP[2] = ElementTypeConst.Water

View File

@@ -1,75 +1,36 @@
package constant package constant
var EnterReasonConst *EnterReason const (
EnterReasonNone uint16 = 0
type EnterReason struct { EnterReasonLogin uint16 = 1 // 登录
None uint16 EnterReasonDungeonReplay uint16 = 11 // 秘境重新挑战
Login uint16 // 登录 EnterReasonDungeonReviveOnWaypoint uint16 = 12 // 秘境重生
DungeonReplay uint16 // 秘境重新挑战 EnterReasonDungeonEnter uint16 = 13 // 秘境进入
DungeonReviveOnWaypoint uint16 // 秘境重生 EnterReasonDungeonQuit uint16 = 14 // 秘境离开
DungeonEnter uint16 // 秘境进入 EnterReasonGm uint16 = 21 // 管理员
DungeonQuit uint16 // 秘境离开 EnterReasonQuestRollback uint16 = 31 // 任务回滚
Gm uint16 // 管理员 EnterReasonRevival uint16 = 32 // 重生
QuestRollback uint16 // 任务回滚 EnterReasonPersonalScene uint16 = 41 // 个人场景
Revival uint16 // 重生 EnterReasonTransPoint uint16 = 42 // 传送点
PersonalScene uint16 // 个人场景 EnterReasonClientTransmit uint16 = 43 // 客户端传送
TransPoint uint16 // 传送点 EnterReasonForceDragBack uint16 = 44 // 强制后退
ClientTransmit uint16 // 客户端传送 EnterReasonTeamKick uint16 = 51 // 队伍踢出
ForceDragBack uint16 // 强制后退 EnterReasonTeamJoin uint16 = 52 // 队伍加入
TeamKick uint16 // 队伍踢出 EnterReasonTeamBack uint16 = 53 // 队伍返回
TeamJoin uint16 // 队伍加入 EnterReasonMuip uint16 = 54 // 与原神项目组的某个服务器组件相关
TeamBack uint16 // 队伍返回 EnterReasonDungeonInviteAccept uint16 = 55 // 秘境邀请接受
Muip uint16 // ?? EnterReasonLua uint16 = 56 // 脚本
DungeonInviteAccept uint16 // 秘境邀请接受 EnterReasonActivityLoadTerrain uint16 = 57 // 活动加载地形
Lua uint16 // 脚本 EnterReasonHostFromSingleToMp uint16 = 58 // 房主从单人到多人
ActivityLoadTerrain uint16 // 活动加载地形 EnterReasonMpPlay uint16 = 59 // 多人游戏
HostFromSingleToMp uint16 // 房主从单人到多人 EnterReasonAnchorPoint uint16 = 60 // 迷你锚点
MpPlay uint16 // 多人游戏 EnterReasonLuaSkipUi uint16 = 61 // 脚本跳过UI
AnchorPoint uint16 // 迷你锚点 EnterReasonReloadTerrain uint16 = 62 // 重载地形
LuaSkipUi uint16 // 脚本跳过UI EnterReasonDraftTransfer uint16 = 63 // 某个东西传送 ??
ReloadTerrain uint16 // 重载地形 EnterReasonEnterHome uint16 = 64 // 进入尘歌壶
DraftTransfer uint16 // 某个东西传送 ?? EnterReasonExitHome uint16 = 65 // 离开尘歌壶
EnterHome uint16 // 进入尘歌壶 EnterReasonChangeHomeModule uint16 = 66 // 更改尘歌壶模块
ExitHome uint16 // 离开尘歌壶 EnterReasonGallery uint16 = 67 // ??
ChangeHomeModule uint16 // 更改尘歌壶模块 EnterReasonHomeSceneJump uint16 = 68 // 尘歌壶场景跳转
Gallery uint16 // ?? EnterReasonHideAndSeek uint16 = 69 // 捉迷藏也就是风行迷宗
HomeSceneJump uint16 // 尘歌壶场景跳转 )
HideAndSeek uint16 // 隐藏和搜索 ??
}
func InitEnterReasonConst() {
EnterReasonConst = new(EnterReason)
EnterReasonConst.None = 0
EnterReasonConst.Login = 1
EnterReasonConst.DungeonReplay = 11
EnterReasonConst.DungeonReviveOnWaypoint = 12
EnterReasonConst.DungeonEnter = 13
EnterReasonConst.DungeonQuit = 14
EnterReasonConst.Gm = 21
EnterReasonConst.QuestRollback = 31
EnterReasonConst.Revival = 32
EnterReasonConst.PersonalScene = 41
EnterReasonConst.TransPoint = 42
EnterReasonConst.ClientTransmit = 43
EnterReasonConst.ForceDragBack = 44
EnterReasonConst.TeamKick = 51
EnterReasonConst.TeamJoin = 52
EnterReasonConst.TeamBack = 53
EnterReasonConst.Muip = 54
EnterReasonConst.DungeonInviteAccept = 55
EnterReasonConst.Lua = 56
EnterReasonConst.ActivityLoadTerrain = 57
EnterReasonConst.HostFromSingleToMp = 58
EnterReasonConst.MpPlay = 59
EnterReasonConst.AnchorPoint = 60
EnterReasonConst.LuaSkipUi = 61
EnterReasonConst.ReloadTerrain = 62
EnterReasonConst.DraftTransfer = 63
EnterReasonConst.EnterHome = 64
EnterReasonConst.ExitHome = 65
EnterReasonConst.ChangeHomeModule = 66
EnterReasonConst.Gallery = 67
EnterReasonConst.HomeSceneJump = 68
EnterReasonConst.HideAndSeek = 69
}

View File

@@ -1,25 +1,11 @@
package constant package constant
var EntityIdTypeConst *EntityIdType const (
ENTITY_ID_TYPE_AVATAR uint16 = 0x01
type EntityIdType struct { ENTITY_ID_TYPE_MONSTER uint16 = 0x02
AVATAR uint16 ENTITY_ID_TYPE_NPC uint16 = 0x03
MONSTER uint16 ENTITY_ID_TYPE_GADGET uint16 = 0x04
NPC uint16 ENTITY_ID_TYPE_WEAPON uint16 = 0x06
GADGET uint16 ENTITY_ID_TYPE_TEAM uint16 = 0x09
WEAPON uint16 ENTITY_ID_TYPE_MPLEVEL uint16 = 0x0b
TEAM uint16 )
MPLEVEL uint16
}
func InitEntityIdTypeConst() {
EntityIdTypeConst = new(EntityIdType)
EntityIdTypeConst.AVATAR = 0x01
EntityIdTypeConst.MONSTER = 0x02
EntityIdTypeConst.NPC = 0x03
EntityIdTypeConst.GADGET = 0x04
EntityIdTypeConst.WEAPON = 0x06
EntityIdTypeConst.TEAM = 0x09
EntityIdTypeConst.MPLEVEL = 0x0b
}

View File

@@ -1,180 +1,59 @@
package constant package constant
var EntityTypeConst *EntityType const (
EntityTypeNone uint16 = 0
type EntityType struct { EntityTypeAvatar uint16 = 1
None uint16 EntityTypeMonster uint16 = 2
Avatar uint16 EntityTypeBullet uint16 = 3
Monster uint16 EntityTypeAttackPhyisicalUnit uint16 = 4
Bullet uint16 EntityTypeAOE uint16 = 5
AttackPhyisicalUnit uint16 EntityTypeCamera uint16 = 6
AOE uint16 EntityTypeEnviroArea uint16 = 7
Camera uint16 EntityTypeEquip uint16 = 8
EnviroArea uint16 EntityTypeMonsterEquip uint16 = 9
Equip uint16 EntityTypeGrass uint16 = 10
MonsterEquip uint16 EntityTypeLevel uint16 = 11
Grass uint16 EntityTypeNPC uint16 = 12
Level uint16 EntityTypeTransPointFirst uint16 = 13
NPC uint16 EntityTypeTransPointFirstGadget uint16 = 14
TransPointFirst uint16 EntityTypeTransPointSecond uint16 = 15
TransPointFirstGadget uint16 EntityTypeTransPointSecondGadget uint16 = 16
TransPointSecond uint16 EntityTypeDropItem uint16 = 17
TransPointSecondGadget uint16 EntityTypeField uint16 = 18
DropItem uint16 EntityTypeGadget uint16 = 19
Field uint16 EntityTypeWater uint16 = 20
Gadget uint16 EntityTypeGatherPoint uint16 = 21
Water uint16 EntityTypeGatherObject uint16 = 22
GatherPoint uint16 EntityTypeAirflowField uint16 = 23
GatherObject uint16 EntityTypeSpeedupField uint16 = 24
AirflowField uint16 EntityTypeGear uint16 = 25
SpeedupField uint16 EntityTypeChest uint16 = 26
Gear uint16 EntityTypeEnergyBall uint16 = 27
Chest uint16 EntityTypeElemCrystal uint16 = 28
EnergyBall uint16 EntityTypeTimeline uint16 = 29
ElemCrystal uint16 EntityTypeWorktop uint16 = 30
Timeline uint16 EntityTypeTeam uint16 = 31
Worktop uint16 EntityTypePlatform uint16 = 32
Team uint16 EntityTypeAmberWind uint16 = 33
Platform uint16 EntityTypeEnvAnimal uint16 = 34
AmberWind uint16 EntityTypeSealGadget uint16 = 35
EnvAnimal uint16 EntityTypeTree uint16 = 36
SealGadget uint16 EntityTypeBush uint16 = 37
Tree uint16 EntityTypeQuestGadget uint16 = 38
Bush uint16 EntityTypeLightning uint16 = 39
QuestGadget uint16 EntityTypeRewardPoint uint16 = 40
Lightning uint16 EntityTypeRewardStatue uint16 = 41
RewardPoint uint16 EntityTypeMPLevel uint16 = 42
RewardStatue uint16 EntityTypeWindSeed uint16 = 43
MPLevel uint16 EntityTypeMpPlayRewardPoint uint16 = 44
WindSeed uint16 EntityTypeViewPoint uint16 = 45
MpPlayRewardPoint uint16 EntityTypeRemoteAvatar uint16 = 46
ViewPoint uint16 EntityTypeGeneralRewardPoint uint16 = 47
RemoteAvatar uint16 EntityTypePlayTeam uint16 = 48
GeneralRewardPoint uint16 EntityTypeOfferingGadget uint16 = 49
PlayTeam uint16 EntityTypeEyePoint uint16 = 50
OfferingGadget uint16 EntityTypeMiracleRing uint16 = 51
EyePoint uint16 EntityTypeFoundation uint16 = 52
MiracleRing uint16 EntityTypeWidgetGadget uint16 = 53
Foundation uint16 EntityTypePlaceHolder uint16 = 99
WidgetGadget uint16 )
PlaceHolder uint16
STRING_MAP map[string]uint16
}
func InitEntityTypeConst() {
EntityTypeConst = new(EntityType)
EntityTypeConst.None = 0
EntityTypeConst.Avatar = 1
EntityTypeConst.Monster = 2
EntityTypeConst.Bullet = 3
EntityTypeConst.AttackPhyisicalUnit = 4
EntityTypeConst.AOE = 5
EntityTypeConst.Camera = 6
EntityTypeConst.EnviroArea = 7
EntityTypeConst.Equip = 8
EntityTypeConst.MonsterEquip = 9
EntityTypeConst.Grass = 10
EntityTypeConst.Level = 11
EntityTypeConst.NPC = 12
EntityTypeConst.TransPointFirst = 13
EntityTypeConst.TransPointFirstGadget = 14
EntityTypeConst.TransPointSecond = 15
EntityTypeConst.TransPointSecondGadget = 16
EntityTypeConst.DropItem = 17
EntityTypeConst.Field = 18
EntityTypeConst.Gadget = 19
EntityTypeConst.Water = 20
EntityTypeConst.GatherPoint = 21
EntityTypeConst.GatherObject = 22
EntityTypeConst.AirflowField = 23
EntityTypeConst.SpeedupField = 24
EntityTypeConst.Gear = 25
EntityTypeConst.Chest = 26
EntityTypeConst.EnergyBall = 27
EntityTypeConst.ElemCrystal = 28
EntityTypeConst.Timeline = 29
EntityTypeConst.Worktop = 30
EntityTypeConst.Team = 31
EntityTypeConst.Platform = 32
EntityTypeConst.AmberWind = 33
EntityTypeConst.EnvAnimal = 34
EntityTypeConst.SealGadget = 35
EntityTypeConst.Tree = 36
EntityTypeConst.Bush = 37
EntityTypeConst.QuestGadget = 38
EntityTypeConst.Lightning = 39
EntityTypeConst.RewardPoint = 40
EntityTypeConst.RewardStatue = 41
EntityTypeConst.MPLevel = 42
EntityTypeConst.WindSeed = 43
EntityTypeConst.MpPlayRewardPoint = 44
EntityTypeConst.ViewPoint = 45
EntityTypeConst.RemoteAvatar = 46
EntityTypeConst.GeneralRewardPoint = 47
EntityTypeConst.PlayTeam = 48
EntityTypeConst.OfferingGadget = 49
EntityTypeConst.EyePoint = 50
EntityTypeConst.MiracleRing = 51
EntityTypeConst.Foundation = 52
EntityTypeConst.WidgetGadget = 53
EntityTypeConst.PlaceHolder = 99
EntityTypeConst.STRING_MAP = make(map[string]uint16)
EntityTypeConst.STRING_MAP["None"] = EntityTypeConst.None
EntityTypeConst.STRING_MAP["Avatar"] = EntityTypeConst.Avatar
EntityTypeConst.STRING_MAP["Monster"] = EntityTypeConst.Monster
EntityTypeConst.STRING_MAP["Bullet"] = EntityTypeConst.Bullet
EntityTypeConst.STRING_MAP["AttackPhyisicalUnit"] = EntityTypeConst.AttackPhyisicalUnit
EntityTypeConst.STRING_MAP["AOE"] = EntityTypeConst.AOE
EntityTypeConst.STRING_MAP["Camera"] = EntityTypeConst.Camera
EntityTypeConst.STRING_MAP["EnviroArea"] = EntityTypeConst.EnviroArea
EntityTypeConst.STRING_MAP["Equip"] = EntityTypeConst.Equip
EntityTypeConst.STRING_MAP["MonsterEquip"] = EntityTypeConst.MonsterEquip
EntityTypeConst.STRING_MAP["Grass"] = EntityTypeConst.Grass
EntityTypeConst.STRING_MAP["Level"] = EntityTypeConst.Level
EntityTypeConst.STRING_MAP["NPC"] = EntityTypeConst.NPC
EntityTypeConst.STRING_MAP["TransPointFirst"] = EntityTypeConst.TransPointFirst
EntityTypeConst.STRING_MAP["TransPointFirstGadget"] = EntityTypeConst.TransPointFirstGadget
EntityTypeConst.STRING_MAP["TransPointSecond"] = EntityTypeConst.TransPointSecond
EntityTypeConst.STRING_MAP["TransPointSecondGadget"] = EntityTypeConst.TransPointSecondGadget
EntityTypeConst.STRING_MAP["DropItem"] = EntityTypeConst.DropItem
EntityTypeConst.STRING_MAP["Field"] = EntityTypeConst.Field
EntityTypeConst.STRING_MAP["Gadget"] = EntityTypeConst.Gadget
EntityTypeConst.STRING_MAP["Water"] = EntityTypeConst.Water
EntityTypeConst.STRING_MAP["GatherPoint"] = EntityTypeConst.GatherPoint
EntityTypeConst.STRING_MAP["GatherObject"] = EntityTypeConst.GatherObject
EntityTypeConst.STRING_MAP["AirflowField"] = EntityTypeConst.AirflowField
EntityTypeConst.STRING_MAP["SpeedupField"] = EntityTypeConst.SpeedupField
EntityTypeConst.STRING_MAP["Gear"] = EntityTypeConst.Gear
EntityTypeConst.STRING_MAP["Chest"] = EntityTypeConst.Chest
EntityTypeConst.STRING_MAP["EnergyBall"] = EntityTypeConst.EnergyBall
EntityTypeConst.STRING_MAP["ElemCrystal"] = EntityTypeConst.ElemCrystal
EntityTypeConst.STRING_MAP["Timeline"] = EntityTypeConst.Timeline
EntityTypeConst.STRING_MAP["Worktop"] = EntityTypeConst.Worktop
EntityTypeConst.STRING_MAP["Team"] = EntityTypeConst.Team
EntityTypeConst.STRING_MAP["Platform"] = EntityTypeConst.Platform
EntityTypeConst.STRING_MAP["AmberWind"] = EntityTypeConst.AmberWind
EntityTypeConst.STRING_MAP["EnvAnimal"] = EntityTypeConst.EnvAnimal
EntityTypeConst.STRING_MAP["SealGadget"] = EntityTypeConst.SealGadget
EntityTypeConst.STRING_MAP["Tree"] = EntityTypeConst.Tree
EntityTypeConst.STRING_MAP["Bush"] = EntityTypeConst.Bush
EntityTypeConst.STRING_MAP["QuestGadget"] = EntityTypeConst.QuestGadget
EntityTypeConst.STRING_MAP["Lightning"] = EntityTypeConst.Lightning
EntityTypeConst.STRING_MAP["RewardPoint"] = EntityTypeConst.RewardPoint
EntityTypeConst.STRING_MAP["RewardStatue"] = EntityTypeConst.RewardStatue
EntityTypeConst.STRING_MAP["MPLevel"] = EntityTypeConst.MPLevel
EntityTypeConst.STRING_MAP["WindSeed"] = EntityTypeConst.WindSeed
EntityTypeConst.STRING_MAP["MpPlayRewardPoint"] = EntityTypeConst.MpPlayRewardPoint
EntityTypeConst.STRING_MAP["ViewPoint"] = EntityTypeConst.ViewPoint
EntityTypeConst.STRING_MAP["RemoteAvatar"] = EntityTypeConst.RemoteAvatar
EntityTypeConst.STRING_MAP["GeneralRewardPoint"] = EntityTypeConst.GeneralRewardPoint
EntityTypeConst.STRING_MAP["PlayTeam"] = EntityTypeConst.PlayTeam
EntityTypeConst.STRING_MAP["OfferingGadget"] = EntityTypeConst.OfferingGadget
EntityTypeConst.STRING_MAP["EyePoint"] = EntityTypeConst.EyePoint
EntityTypeConst.STRING_MAP["MiracleRing"] = EntityTypeConst.MiracleRing
EntityTypeConst.STRING_MAP["Foundation"] = EntityTypeConst.Foundation
EntityTypeConst.STRING_MAP["WidgetGadget"] = EntityTypeConst.WidgetGadget
EntityTypeConst.STRING_MAP["PlaceHolder"] = EntityTypeConst.PlaceHolder
}

View File

@@ -1,36 +1,11 @@
package constant package constant
var EquipTypeConst *EquipType const (
EQUIP_TYPE_NONE uint16 = 0
type EquipType struct { EQUIP_TYPE_BRACER uint16 = 1
EQUIP_NONE uint16 EQUIP_TYPE_NECKLACE uint16 = 2
EQUIP_BRACER uint16 EQUIP_TYPE_SHOES uint16 = 3
EQUIP_NECKLACE uint16 EQUIP_TYPE_RING uint16 = 4
EQUIP_SHOES uint16 EQUIP_TYPE_DRESS uint16 = 5
EQUIP_RING uint16 EQUIP_TYPE_WEAPON uint16 = 6
EQUIP_DRESS uint16 )
EQUIP_WEAPON uint16
STRING_MAP map[string]uint16
}
func InitEquipTypeConst() {
EquipTypeConst = new(EquipType)
EquipTypeConst.EQUIP_NONE = 0
EquipTypeConst.EQUIP_BRACER = 1
EquipTypeConst.EQUIP_NECKLACE = 2
EquipTypeConst.EQUIP_SHOES = 3
EquipTypeConst.EQUIP_RING = 4
EquipTypeConst.EQUIP_DRESS = 5
EquipTypeConst.EQUIP_WEAPON = 6
EquipTypeConst.STRING_MAP = make(map[string]uint16)
EquipTypeConst.STRING_MAP["EQUIP_NONE"] = 0
EquipTypeConst.STRING_MAP["EQUIP_BRACER"] = 1
EquipTypeConst.STRING_MAP["EQUIP_NECKLACE"] = 2
EquipTypeConst.STRING_MAP["EQUIP_SHOES"] = 3
EquipTypeConst.STRING_MAP["EQUIP_RING"] = 4
EquipTypeConst.STRING_MAP["EQUIP_DRESS"] = 5
EquipTypeConst.STRING_MAP["EQUIP_WEAPON"] = 6
}

View File

@@ -1,19 +1,8 @@
package constant package constant
var FetterStateConst *FetterState const (
FETTER_STATE_NONE uint16 = 0
type FetterState struct { FETTER_STATE_NOT_OPEN uint16 = 1
NONE uint16 FETTER_STATE_OPEN uint16 = 1
NOT_OPEN uint16 FETTER_STATE_FINISH uint16 = 3
OPEN uint16 )
FINISH uint16
}
func InitFetterStateConst() {
FetterStateConst = new(FetterState)
FetterStateConst.NONE = 0
FetterStateConst.NOT_OPEN = 1
FetterStateConst.OPEN = 1
FetterStateConst.FINISH = 3
}

View File

@@ -1,303 +1,100 @@
package constant package constant
var FightPropertyConst *FightProperty const (
FIGHT_PROP_NONE uint16 = 0
type FightProperty struct { FIGHT_PROP_BASE_HP uint16 = 1
FIGHT_PROP_NONE uint16 FIGHT_PROP_HP uint16 = 2
FIGHT_PROP_BASE_HP uint16 FIGHT_PROP_HP_PERCENT uint16 = 3
FIGHT_PROP_HP uint16 FIGHT_PROP_BASE_ATTACK uint16 = 4
FIGHT_PROP_HP_PERCENT uint16 FIGHT_PROP_ATTACK uint16 = 5
FIGHT_PROP_BASE_ATTACK uint16 FIGHT_PROP_ATTACK_PERCENT uint16 = 6
FIGHT_PROP_ATTACK uint16 FIGHT_PROP_BASE_DEFENSE uint16 = 7
FIGHT_PROP_ATTACK_PERCENT uint16 FIGHT_PROP_DEFENSE uint16 = 8
FIGHT_PROP_BASE_DEFENSE uint16 FIGHT_PROP_DEFENSE_PERCENT uint16 = 9
FIGHT_PROP_DEFENSE uint16 FIGHT_PROP_BASE_SPEED uint16 = 10
FIGHT_PROP_DEFENSE_PERCENT uint16 FIGHT_PROP_SPEED_PERCENT uint16 = 11
FIGHT_PROP_BASE_SPEED uint16 FIGHT_PROP_HP_MP_PERCENT uint16 = 12
FIGHT_PROP_SPEED_PERCENT uint16 FIGHT_PROP_ATTACK_MP_PERCENT uint16 = 13
FIGHT_PROP_HP_MP_PERCENT uint16 FIGHT_PROP_CRITICAL uint16 = 20
FIGHT_PROP_ATTACK_MP_PERCENT uint16 FIGHT_PROP_ANTI_CRITICAL uint16 = 21
FIGHT_PROP_CRITICAL uint16 FIGHT_PROP_CRITICAL_HURT uint16 = 22
FIGHT_PROP_ANTI_CRITICAL uint16 FIGHT_PROP_CHARGE_EFFICIENCY uint16 = 23
FIGHT_PROP_CRITICAL_HURT uint16 FIGHT_PROP_ADD_HURT uint16 = 24
FIGHT_PROP_CHARGE_EFFICIENCY uint16 FIGHT_PROP_SUB_HURT uint16 = 25
FIGHT_PROP_ADD_HURT uint16 FIGHT_PROP_HEAL_ADD uint16 = 26
FIGHT_PROP_SUB_HURT uint16 FIGHT_PROP_HEALED_ADD uint16 = 27
FIGHT_PROP_HEAL_ADD uint16 FIGHT_PROP_ELEMENT_MASTERY uint16 = 28
FIGHT_PROP_HEALED_ADD uint16 FIGHT_PROP_PHYSICAL_SUB_HURT uint16 = 29
FIGHT_PROP_ELEMENT_MASTERY uint16 FIGHT_PROP_PHYSICAL_ADD_HURT uint16 = 30
FIGHT_PROP_PHYSICAL_SUB_HURT uint16 FIGHT_PROP_DEFENCE_IGNORE_RATIO uint16 = 31
FIGHT_PROP_PHYSICAL_ADD_HURT uint16 FIGHT_PROP_DEFENCE_IGNORE_DELTA uint16 = 32
FIGHT_PROP_DEFENCE_IGNORE_RATIO uint16 FIGHT_PROP_FIRE_ADD_HURT uint16 = 40
FIGHT_PROP_DEFENCE_IGNORE_DELTA uint16 FIGHT_PROP_ELEC_ADD_HURT uint16 = 41
FIGHT_PROP_FIRE_ADD_HURT uint16 FIGHT_PROP_WATER_ADD_HURT uint16 = 42
FIGHT_PROP_ELEC_ADD_HURT uint16 FIGHT_PROP_GRASS_ADD_HURT uint16 = 43
FIGHT_PROP_WATER_ADD_HURT uint16 FIGHT_PROP_WIND_ADD_HURT uint16 = 44
FIGHT_PROP_GRASS_ADD_HURT uint16 FIGHT_PROP_ROCK_ADD_HURT uint16 = 45
FIGHT_PROP_WIND_ADD_HURT uint16 FIGHT_PROP_ICE_ADD_HURT uint16 = 46
FIGHT_PROP_ROCK_ADD_HURT uint16 FIGHT_PROP_HIT_HEAD_ADD_HURT uint16 = 47
FIGHT_PROP_ICE_ADD_HURT uint16 FIGHT_PROP_FIRE_SUB_HURT uint16 = 50
FIGHT_PROP_HIT_HEAD_ADD_HURT uint16 FIGHT_PROP_ELEC_SUB_HURT uint16 = 51
FIGHT_PROP_FIRE_SUB_HURT uint16 FIGHT_PROP_WATER_SUB_HURT uint16 = 52
FIGHT_PROP_ELEC_SUB_HURT uint16 FIGHT_PROP_GRASS_SUB_HURT uint16 = 53
FIGHT_PROP_WATER_SUB_HURT uint16 FIGHT_PROP_WIND_SUB_HURT uint16 = 54
FIGHT_PROP_GRASS_SUB_HURT uint16 FIGHT_PROP_ROCK_SUB_HURT uint16 = 55
FIGHT_PROP_WIND_SUB_HURT uint16 FIGHT_PROP_ICE_SUB_HURT uint16 = 56
FIGHT_PROP_ROCK_SUB_HURT uint16 FIGHT_PROP_EFFECT_HIT uint16 = 60
FIGHT_PROP_ICE_SUB_HURT uint16 FIGHT_PROP_EFFECT_RESIST uint16 = 61
FIGHT_PROP_EFFECT_HIT uint16 FIGHT_PROP_FREEZE_RESIST uint16 = 62
FIGHT_PROP_EFFECT_RESIST uint16 FIGHT_PROP_TORPOR_RESIST uint16 = 63
FIGHT_PROP_FREEZE_RESIST uint16 FIGHT_PROP_DIZZY_RESIST uint16 = 64
FIGHT_PROP_TORPOR_RESIST uint16 FIGHT_PROP_FREEZE_SHORTEN uint16 = 65
FIGHT_PROP_DIZZY_RESIST uint16 FIGHT_PROP_TORPOR_SHORTEN uint16 = 66
FIGHT_PROP_FREEZE_SHORTEN uint16 FIGHT_PROP_DIZZY_SHORTEN uint16 = 67
FIGHT_PROP_TORPOR_SHORTEN uint16 FIGHT_PROP_MAX_FIRE_ENERGY uint16 = 70
FIGHT_PROP_DIZZY_SHORTEN uint16 FIGHT_PROP_MAX_ELEC_ENERGY uint16 = 71
FIGHT_PROP_MAX_FIRE_ENERGY uint16 FIGHT_PROP_MAX_WATER_ENERGY uint16 = 72
FIGHT_PROP_MAX_ELEC_ENERGY uint16 FIGHT_PROP_MAX_GRASS_ENERGY uint16 = 73
FIGHT_PROP_MAX_WATER_ENERGY uint16 FIGHT_PROP_MAX_WIND_ENERGY uint16 = 74
FIGHT_PROP_MAX_GRASS_ENERGY uint16 FIGHT_PROP_MAX_ICE_ENERGY uint16 = 75
FIGHT_PROP_MAX_WIND_ENERGY uint16 FIGHT_PROP_MAX_ROCK_ENERGY uint16 = 76
FIGHT_PROP_MAX_ICE_ENERGY uint16 FIGHT_PROP_SKILL_CD_MINUS_RATIO uint16 = 80
FIGHT_PROP_MAX_ROCK_ENERGY uint16 FIGHT_PROP_SHIELD_COST_MINUS_RATIO uint16 = 81
FIGHT_PROP_SKILL_CD_MINUS_RATIO uint16 FIGHT_PROP_CUR_FIRE_ENERGY uint16 = 1000
FIGHT_PROP_SHIELD_COST_MINUS_RATIO uint16 FIGHT_PROP_CUR_ELEC_ENERGY uint16 = 1001
FIGHT_PROP_CUR_FIRE_ENERGY uint16 FIGHT_PROP_CUR_WATER_ENERGY uint16 = 1002
FIGHT_PROP_CUR_ELEC_ENERGY uint16 FIGHT_PROP_CUR_GRASS_ENERGY uint16 = 1003
FIGHT_PROP_CUR_WATER_ENERGY uint16 FIGHT_PROP_CUR_WIND_ENERGY uint16 = 1004
FIGHT_PROP_CUR_GRASS_ENERGY uint16 FIGHT_PROP_CUR_ICE_ENERGY uint16 = 1005
FIGHT_PROP_CUR_WIND_ENERGY uint16 FIGHT_PROP_CUR_ROCK_ENERGY uint16 = 1006
FIGHT_PROP_CUR_ICE_ENERGY uint16 FIGHT_PROP_CUR_HP uint16 = 1010
FIGHT_PROP_CUR_ROCK_ENERGY uint16 FIGHT_PROP_MAX_HP uint16 = 2000
FIGHT_PROP_CUR_HP uint16 FIGHT_PROP_CUR_ATTACK uint16 = 2001
FIGHT_PROP_MAX_HP uint16 FIGHT_PROP_CUR_DEFENSE uint16 = 2002
FIGHT_PROP_CUR_ATTACK uint16 FIGHT_PROP_CUR_SPEED uint16 = 2003
FIGHT_PROP_CUR_DEFENSE uint16 FIGHT_PROP_NONEXTRA_ATTACK uint16 = 3000
FIGHT_PROP_CUR_SPEED uint16 FIGHT_PROP_NONEXTRA_DEFENSE uint16 = 3001
FIGHT_PROP_NONEXTRA_ATTACK uint16 FIGHT_PROP_NONEXTRA_CRITICAL uint16 = 3002
FIGHT_PROP_NONEXTRA_DEFENSE uint16 FIGHT_PROP_NONEXTRA_ANTI_CRITICAL uint16 = 3003
FIGHT_PROP_NONEXTRA_CRITICAL uint16 FIGHT_PROP_NONEXTRA_CRITICAL_HURT uint16 = 3004
FIGHT_PROP_NONEXTRA_ANTI_CRITICAL uint16 FIGHT_PROP_NONEXTRA_CHARGE_EFFICIENCY uint16 = 3005
FIGHT_PROP_NONEXTRA_CRITICAL_HURT uint16 FIGHT_PROP_NONEXTRA_ELEMENT_MASTERY uint16 = 3006
FIGHT_PROP_NONEXTRA_CHARGE_EFFICIENCY uint16 FIGHT_PROP_NONEXTRA_PHYSICAL_SUB_HURT uint16 = 3007
FIGHT_PROP_NONEXTRA_ELEMENT_MASTERY uint16 FIGHT_PROP_NONEXTRA_FIRE_ADD_HURT uint16 = 3008
FIGHT_PROP_NONEXTRA_PHYSICAL_SUB_HURT uint16 FIGHT_PROP_NONEXTRA_ELEC_ADD_HURT uint16 = 3009
FIGHT_PROP_NONEXTRA_FIRE_ADD_HURT uint16 FIGHT_PROP_NONEXTRA_WATER_ADD_HURT uint16 = 3010
FIGHT_PROP_NONEXTRA_ELEC_ADD_HURT uint16 FIGHT_PROP_NONEXTRA_GRASS_ADD_HURT uint16 = 3011
FIGHT_PROP_NONEXTRA_WATER_ADD_HURT uint16 FIGHT_PROP_NONEXTRA_WIND_ADD_HURT uint16 = 3012
FIGHT_PROP_NONEXTRA_GRASS_ADD_HURT uint16 FIGHT_PROP_NONEXTRA_ROCK_ADD_HURT uint16 = 3013
FIGHT_PROP_NONEXTRA_WIND_ADD_HURT uint16 FIGHT_PROP_NONEXTRA_ICE_ADD_HURT uint16 = 3014
FIGHT_PROP_NONEXTRA_ROCK_ADD_HURT uint16 FIGHT_PROP_NONEXTRA_FIRE_SUB_HURT uint16 = 3015
FIGHT_PROP_NONEXTRA_ICE_ADD_HURT uint16 FIGHT_PROP_NONEXTRA_ELEC_SUB_HURT uint16 = 3016
FIGHT_PROP_NONEXTRA_FIRE_SUB_HURT uint16 FIGHT_PROP_NONEXTRA_WATER_SUB_HURT uint16 = 3017
FIGHT_PROP_NONEXTRA_ELEC_SUB_HURT uint16 FIGHT_PROP_NONEXTRA_GRASS_SUB_HURT uint16 = 3018
FIGHT_PROP_NONEXTRA_WATER_SUB_HURT uint16 FIGHT_PROP_NONEXTRA_WIND_SUB_HURT uint16 = 3019
FIGHT_PROP_NONEXTRA_GRASS_SUB_HURT uint16 FIGHT_PROP_NONEXTRA_ROCK_SUB_HURT uint16 = 3020
FIGHT_PROP_NONEXTRA_WIND_SUB_HURT uint16 FIGHT_PROP_NONEXTRA_ICE_SUB_HURT uint16 = 3021
FIGHT_PROP_NONEXTRA_ROCK_SUB_HURT uint16 FIGHT_PROP_NONEXTRA_SKILL_CD_MINUS_RATIO uint16 = 3022
FIGHT_PROP_NONEXTRA_ICE_SUB_HURT uint16 FIGHT_PROP_NONEXTRA_SHIELD_COST_MINUS_RATIO uint16 = 3023
FIGHT_PROP_NONEXTRA_SKILL_CD_MINUS_RATIO uint16 FIGHT_PROP_NONEXTRA_PHYSICAL_ADD_HURT uint16 = 3024
FIGHT_PROP_NONEXTRA_SHIELD_COST_MINUS_RATIO uint16 )
FIGHT_PROP_NONEXTRA_PHYSICAL_ADD_HURT uint16
STRING_MAP map[string]uint16
}
func InitFightPropertyConst() {
FightPropertyConst = new(FightProperty)
FightPropertyConst.FIGHT_PROP_NONE = 0
FightPropertyConst.FIGHT_PROP_BASE_HP = 1
FightPropertyConst.FIGHT_PROP_HP = 2
FightPropertyConst.FIGHT_PROP_HP_PERCENT = 3
FightPropertyConst.FIGHT_PROP_BASE_ATTACK = 4
FightPropertyConst.FIGHT_PROP_ATTACK = 5
FightPropertyConst.FIGHT_PROP_ATTACK_PERCENT = 6
FightPropertyConst.FIGHT_PROP_BASE_DEFENSE = 7
FightPropertyConst.FIGHT_PROP_DEFENSE = 8
FightPropertyConst.FIGHT_PROP_DEFENSE_PERCENT = 9
FightPropertyConst.FIGHT_PROP_BASE_SPEED = 10
FightPropertyConst.FIGHT_PROP_SPEED_PERCENT = 11
FightPropertyConst.FIGHT_PROP_HP_MP_PERCENT = 12
FightPropertyConst.FIGHT_PROP_ATTACK_MP_PERCENT = 13
FightPropertyConst.FIGHT_PROP_CRITICAL = 20
FightPropertyConst.FIGHT_PROP_ANTI_CRITICAL = 21
FightPropertyConst.FIGHT_PROP_CRITICAL_HURT = 22
FightPropertyConst.FIGHT_PROP_CHARGE_EFFICIENCY = 23
FightPropertyConst.FIGHT_PROP_ADD_HURT = 24
FightPropertyConst.FIGHT_PROP_SUB_HURT = 25
FightPropertyConst.FIGHT_PROP_HEAL_ADD = 26
FightPropertyConst.FIGHT_PROP_HEALED_ADD = 27
FightPropertyConst.FIGHT_PROP_ELEMENT_MASTERY = 28
FightPropertyConst.FIGHT_PROP_PHYSICAL_SUB_HURT = 29
FightPropertyConst.FIGHT_PROP_PHYSICAL_ADD_HURT = 30
FightPropertyConst.FIGHT_PROP_DEFENCE_IGNORE_RATIO = 31
FightPropertyConst.FIGHT_PROP_DEFENCE_IGNORE_DELTA = 32
FightPropertyConst.FIGHT_PROP_FIRE_ADD_HURT = 40
FightPropertyConst.FIGHT_PROP_ELEC_ADD_HURT = 41
FightPropertyConst.FIGHT_PROP_WATER_ADD_HURT = 42
FightPropertyConst.FIGHT_PROP_GRASS_ADD_HURT = 43
FightPropertyConst.FIGHT_PROP_WIND_ADD_HURT = 44
FightPropertyConst.FIGHT_PROP_ROCK_ADD_HURT = 45
FightPropertyConst.FIGHT_PROP_ICE_ADD_HURT = 46
FightPropertyConst.FIGHT_PROP_HIT_HEAD_ADD_HURT = 47
FightPropertyConst.FIGHT_PROP_FIRE_SUB_HURT = 50
FightPropertyConst.FIGHT_PROP_ELEC_SUB_HURT = 51
FightPropertyConst.FIGHT_PROP_WATER_SUB_HURT = 52
FightPropertyConst.FIGHT_PROP_GRASS_SUB_HURT = 53
FightPropertyConst.FIGHT_PROP_WIND_SUB_HURT = 54
FightPropertyConst.FIGHT_PROP_ROCK_SUB_HURT = 55
FightPropertyConst.FIGHT_PROP_ICE_SUB_HURT = 56
FightPropertyConst.FIGHT_PROP_EFFECT_HIT = 60
FightPropertyConst.FIGHT_PROP_EFFECT_RESIST = 61
FightPropertyConst.FIGHT_PROP_FREEZE_RESIST = 62
FightPropertyConst.FIGHT_PROP_TORPOR_RESIST = 63
FightPropertyConst.FIGHT_PROP_DIZZY_RESIST = 64
FightPropertyConst.FIGHT_PROP_FREEZE_SHORTEN = 65
FightPropertyConst.FIGHT_PROP_TORPOR_SHORTEN = 66
FightPropertyConst.FIGHT_PROP_DIZZY_SHORTEN = 67
FightPropertyConst.FIGHT_PROP_MAX_FIRE_ENERGY = 70
FightPropertyConst.FIGHT_PROP_MAX_ELEC_ENERGY = 71
FightPropertyConst.FIGHT_PROP_MAX_WATER_ENERGY = 72
FightPropertyConst.FIGHT_PROP_MAX_GRASS_ENERGY = 73
FightPropertyConst.FIGHT_PROP_MAX_WIND_ENERGY = 74
FightPropertyConst.FIGHT_PROP_MAX_ICE_ENERGY = 75
FightPropertyConst.FIGHT_PROP_MAX_ROCK_ENERGY = 76
FightPropertyConst.FIGHT_PROP_SKILL_CD_MINUS_RATIO = 80
FightPropertyConst.FIGHT_PROP_SHIELD_COST_MINUS_RATIO = 81
FightPropertyConst.FIGHT_PROP_CUR_FIRE_ENERGY = 1000
FightPropertyConst.FIGHT_PROP_CUR_ELEC_ENERGY = 1001
FightPropertyConst.FIGHT_PROP_CUR_WATER_ENERGY = 1002
FightPropertyConst.FIGHT_PROP_CUR_GRASS_ENERGY = 1003
FightPropertyConst.FIGHT_PROP_CUR_WIND_ENERGY = 1004
FightPropertyConst.FIGHT_PROP_CUR_ICE_ENERGY = 1005
FightPropertyConst.FIGHT_PROP_CUR_ROCK_ENERGY = 1006
FightPropertyConst.FIGHT_PROP_CUR_HP = 1010
FightPropertyConst.FIGHT_PROP_MAX_HP = 2000
FightPropertyConst.FIGHT_PROP_CUR_ATTACK = 2001
FightPropertyConst.FIGHT_PROP_CUR_DEFENSE = 2002
FightPropertyConst.FIGHT_PROP_CUR_SPEED = 2003
FightPropertyConst.FIGHT_PROP_NONEXTRA_ATTACK = 3000
FightPropertyConst.FIGHT_PROP_NONEXTRA_DEFENSE = 3001
FightPropertyConst.FIGHT_PROP_NONEXTRA_CRITICAL = 3002
FightPropertyConst.FIGHT_PROP_NONEXTRA_ANTI_CRITICAL = 3003
FightPropertyConst.FIGHT_PROP_NONEXTRA_CRITICAL_HURT = 3004
FightPropertyConst.FIGHT_PROP_NONEXTRA_CHARGE_EFFICIENCY = 3005
FightPropertyConst.FIGHT_PROP_NONEXTRA_ELEMENT_MASTERY = 3006
FightPropertyConst.FIGHT_PROP_NONEXTRA_PHYSICAL_SUB_HURT = 3007
FightPropertyConst.FIGHT_PROP_NONEXTRA_FIRE_ADD_HURT = 3008
FightPropertyConst.FIGHT_PROP_NONEXTRA_ELEC_ADD_HURT = 3009
FightPropertyConst.FIGHT_PROP_NONEXTRA_WATER_ADD_HURT = 3010
FightPropertyConst.FIGHT_PROP_NONEXTRA_GRASS_ADD_HURT = 3011
FightPropertyConst.FIGHT_PROP_NONEXTRA_WIND_ADD_HURT = 3012
FightPropertyConst.FIGHT_PROP_NONEXTRA_ROCK_ADD_HURT = 3013
FightPropertyConst.FIGHT_PROP_NONEXTRA_ICE_ADD_HURT = 3014
FightPropertyConst.FIGHT_PROP_NONEXTRA_FIRE_SUB_HURT = 3015
FightPropertyConst.FIGHT_PROP_NONEXTRA_ELEC_SUB_HURT = 3016
FightPropertyConst.FIGHT_PROP_NONEXTRA_WATER_SUB_HURT = 3017
FightPropertyConst.FIGHT_PROP_NONEXTRA_GRASS_SUB_HURT = 3018
FightPropertyConst.FIGHT_PROP_NONEXTRA_WIND_SUB_HURT = 3019
FightPropertyConst.FIGHT_PROP_NONEXTRA_ROCK_SUB_HURT = 3020
FightPropertyConst.FIGHT_PROP_NONEXTRA_ICE_SUB_HURT = 3021
FightPropertyConst.FIGHT_PROP_NONEXTRA_SKILL_CD_MINUS_RATIO = 3022
FightPropertyConst.FIGHT_PROP_NONEXTRA_SHIELD_COST_MINUS_RATIO = 3023
FightPropertyConst.FIGHT_PROP_NONEXTRA_PHYSICAL_ADD_HURT = 3024
FightPropertyConst.STRING_MAP = make(map[string]uint16)
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONE"] = 0
FightPropertyConst.STRING_MAP["FIGHT_PROP_BASE_HP"] = 1
FightPropertyConst.STRING_MAP["FIGHT_PROP_HP"] = 2
FightPropertyConst.STRING_MAP["FIGHT_PROP_HP_PERCENT"] = 3
FightPropertyConst.STRING_MAP["FIGHT_PROP_BASE_ATTACK"] = 4
FightPropertyConst.STRING_MAP["FIGHT_PROP_ATTACK"] = 5
FightPropertyConst.STRING_MAP["FIGHT_PROP_ATTACK_PERCENT"] = 6
FightPropertyConst.STRING_MAP["FIGHT_PROP_BASE_DEFENSE"] = 7
FightPropertyConst.STRING_MAP["FIGHT_PROP_DEFENSE"] = 8
FightPropertyConst.STRING_MAP["FIGHT_PROP_DEFENSE_PERCENT"] = 9
FightPropertyConst.STRING_MAP["FIGHT_PROP_BASE_SPEED"] = 10
FightPropertyConst.STRING_MAP["FIGHT_PROP_SPEED_PERCENT"] = 11
FightPropertyConst.STRING_MAP["FIGHT_PROP_HP_MP_PERCENT"] = 12
FightPropertyConst.STRING_MAP["FIGHT_PROP_ATTACK_MP_PERCENT"] = 13
FightPropertyConst.STRING_MAP["FIGHT_PROP_CRITICAL"] = 20
FightPropertyConst.STRING_MAP["FIGHT_PROP_ANTI_CRITICAL"] = 21
FightPropertyConst.STRING_MAP["FIGHT_PROP_CRITICAL_HURT"] = 22
FightPropertyConst.STRING_MAP["FIGHT_PROP_CHARGE_EFFICIENCY"] = 23
FightPropertyConst.STRING_MAP["FIGHT_PROP_ADD_HURT"] = 24
FightPropertyConst.STRING_MAP["FIGHT_PROP_SUB_HURT"] = 25
FightPropertyConst.STRING_MAP["FIGHT_PROP_HEAL_ADD"] = 26
FightPropertyConst.STRING_MAP["FIGHT_PROP_HEALED_ADD"] = 27
FightPropertyConst.STRING_MAP["FIGHT_PROP_ELEMENT_MASTERY"] = 28
FightPropertyConst.STRING_MAP["FIGHT_PROP_PHYSICAL_SUB_HURT"] = 29
FightPropertyConst.STRING_MAP["FIGHT_PROP_PHYSICAL_ADD_HURT"] = 30
FightPropertyConst.STRING_MAP["FIGHT_PROP_DEFENCE_IGNORE_RATIO"] = 31
FightPropertyConst.STRING_MAP["FIGHT_PROP_DEFENCE_IGNORE_DELTA"] = 32
FightPropertyConst.STRING_MAP["FIGHT_PROP_FIRE_ADD_HURT"] = 40
FightPropertyConst.STRING_MAP["FIGHT_PROP_ELEC_ADD_HURT"] = 41
FightPropertyConst.STRING_MAP["FIGHT_PROP_WATER_ADD_HURT"] = 42
FightPropertyConst.STRING_MAP["FIGHT_PROP_GRASS_ADD_HURT"] = 43
FightPropertyConst.STRING_MAP["FIGHT_PROP_WIND_ADD_HURT"] = 44
FightPropertyConst.STRING_MAP["FIGHT_PROP_ROCK_ADD_HURT"] = 45
FightPropertyConst.STRING_MAP["FIGHT_PROP_ICE_ADD_HURT"] = 46
FightPropertyConst.STRING_MAP["FIGHT_PROP_HIT_HEAD_ADD_HURT"] = 47
FightPropertyConst.STRING_MAP["FIGHT_PROP_FIRE_SUB_HURT"] = 50
FightPropertyConst.STRING_MAP["FIGHT_PROP_ELEC_SUB_HURT"] = 51
FightPropertyConst.STRING_MAP["FIGHT_PROP_WATER_SUB_HURT"] = 52
FightPropertyConst.STRING_MAP["FIGHT_PROP_GRASS_SUB_HURT"] = 53
FightPropertyConst.STRING_MAP["FIGHT_PROP_WIND_SUB_HURT"] = 54
FightPropertyConst.STRING_MAP["FIGHT_PROP_ROCK_SUB_HURT"] = 55
FightPropertyConst.STRING_MAP["FIGHT_PROP_ICE_SUB_HURT"] = 56
FightPropertyConst.STRING_MAP["FIGHT_PROP_EFFECT_HIT"] = 60
FightPropertyConst.STRING_MAP["FIGHT_PROP_EFFECT_RESIST"] = 61
FightPropertyConst.STRING_MAP["FIGHT_PROP_FREEZE_RESIST"] = 62
FightPropertyConst.STRING_MAP["FIGHT_PROP_TORPOR_RESIST"] = 63
FightPropertyConst.STRING_MAP["FIGHT_PROP_DIZZY_RESIST"] = 64
FightPropertyConst.STRING_MAP["FIGHT_PROP_FREEZE_SHORTEN"] = 65
FightPropertyConst.STRING_MAP["FIGHT_PROP_TORPOR_SHORTEN"] = 66
FightPropertyConst.STRING_MAP["FIGHT_PROP_DIZZY_SHORTEN"] = 67
FightPropertyConst.STRING_MAP["FIGHT_PROP_MAX_FIRE_ENERGY"] = 70
FightPropertyConst.STRING_MAP["FIGHT_PROP_MAX_ELEC_ENERGY"] = 71
FightPropertyConst.STRING_MAP["FIGHT_PROP_MAX_WATER_ENERGY"] = 72
FightPropertyConst.STRING_MAP["FIGHT_PROP_MAX_GRASS_ENERGY"] = 73
FightPropertyConst.STRING_MAP["FIGHT_PROP_MAX_WIND_ENERGY"] = 74
FightPropertyConst.STRING_MAP["FIGHT_PROP_MAX_ICE_ENERGY"] = 75
FightPropertyConst.STRING_MAP["FIGHT_PROP_MAX_ROCK_ENERGY"] = 76
FightPropertyConst.STRING_MAP["FIGHT_PROP_SKILL_CD_MINUS_RATIO"] = 80
FightPropertyConst.STRING_MAP["FIGHT_PROP_SHIELD_COST_MINUS_RATIO"] = 81
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_FIRE_ENERGY"] = 1000
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_ELEC_ENERGY"] = 1001
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_WATER_ENERGY"] = 1002
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_GRASS_ENERGY"] = 1003
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_WIND_ENERGY"] = 1004
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_ICE_ENERGY"] = 1005
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_ROCK_ENERGY"] = 1006
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_HP"] = 1010
FightPropertyConst.STRING_MAP["FIGHT_PROP_MAX_HP"] = 2000
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_ATTACK"] = 2001
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_DEFENSE"] = 2002
FightPropertyConst.STRING_MAP["FIGHT_PROP_CUR_SPEED"] = 2003
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_ATTACK"] = 3000
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_DEFENSE"] = 3001
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_CRITICAL"] = 3002
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_ANTI_CRITICAL"] = 3003
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_CRITICAL_HURT"] = 3004
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_CHARGE_EFFICIENCY"] = 3005
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_ELEMENT_MASTERY"] = 3006
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_PHYSICAL_SUB_HURT"] = 3007
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_FIRE_ADD_HURT"] = 3008
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_ELEC_ADD_HURT"] = 3009
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_WATER_ADD_HURT"] = 3010
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_GRASS_ADD_HURT"] = 3011
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_WIND_ADD_HURT"] = 3012
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_ROCK_ADD_HURT"] = 3013
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_ICE_ADD_HURT"] = 3014
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_FIRE_SUB_HURT"] = 3015
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_ELEC_SUB_HURT"] = 3016
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_WATER_SUB_HURT"] = 3017
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_GRASS_SUB_HURT"] = 3018
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_WIND_SUB_HURT"] = 3019
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_ROCK_SUB_HURT"] = 3020
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_ICE_SUB_HURT"] = 3021
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_SKILL_CD_MINUS_RATIO"] = 3022
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_SHIELD_COST_MINUS_RATIO"] = 3023
FightPropertyConst.STRING_MAP["FIGHT_PROP_NONEXTRA_PHYSICAL_ADD_HURT"] = 3024
}

View File

@@ -1,32 +0,0 @@
package constant
import "hk4e/pkg/endec"
var GameConstantConst *GameConstant
type GameConstant struct {
DEFAULT_ABILITY_STRINGS []string
DEFAULT_ABILITY_HASHES []int32
DEFAULT_ABILITY_NAME int32
}
func InitGameConstant() {
GameConstantConst = new(GameConstant)
GameConstantConst.DEFAULT_ABILITY_STRINGS = []string{
"Avatar_DefaultAbility_VisionReplaceDieInvincible",
"Avatar_DefaultAbility_AvartarInShaderChange",
"Avatar_SprintBS_Invincible",
"Avatar_Freeze_Duration_Reducer",
"Avatar_Attack_ReviveEnergy",
"Avatar_Component_Initializer",
"Avatar_FallAnthem_Achievement_Listener",
}
GameConstantConst.DEFAULT_ABILITY_HASHES = make([]int32, 0)
for _, v := range GameConstantConst.DEFAULT_ABILITY_STRINGS {
GameConstantConst.DEFAULT_ABILITY_HASHES = append(GameConstantConst.DEFAULT_ABILITY_HASHES, endec.Hk4eAbilityHashCode(v))
}
GameConstantConst.DEFAULT_ABILITY_NAME = endec.Hk4eAbilityHashCode("Default")
}

View File

@@ -1,19 +1,8 @@
package constant package constant
var GCGTokenConst *GCGTokenType const (
GCG_TOKEN_TYPE_CUR_HEALTH uint32 = 1 // 现行血量
type GCGTokenType struct { GCG_TOKEN_TYPE_MAX_HEALTH uint32 = 2 // 最大血量(不确定)
TOKEN_CUR_HEALTH uint32 // 现行血量 GCG_TOKEN_TYPE_CUR_ELEM uint32 = 4 // 现行充能
TOKEN_MAX_HEALTH uint32 // 最大血量(不确定) GCG_TOKEN_TYPE_MAX_ELEM uint32 = 5 // 最大充能(充能条长度)
TOKEN_CUR_ELEM uint32 // 现行充能 )
TOKEN_MAX_ELEM uint32 // 最大充能(充能条长度)
}
func InitGCGTokenConst() {
GCGTokenConst = new(GCGTokenType)
GCGTokenConst.TOKEN_CUR_HEALTH = 1
GCGTokenConst.TOKEN_MAX_HEALTH = 2
GCGTokenConst.TOKEN_CUR_ELEM = 4
GCGTokenConst.TOKEN_MAX_ELEM = 5
}

View File

@@ -1,131 +1,64 @@
package constant package constant
var GrowCurveConst *GrowCurve const (
GROW_CURVE_NONE uint16 = 0
type GrowCurve struct { GROW_CURVE_HP uint16 = 1
GROW_CURVE_NONE uint16 GROW_CURVE_ATTACK uint16 = 2
GROW_CURVE_HP uint16 GROW_CURVE_STAMINA uint16 = 3
GROW_CURVE_ATTACK uint16 GROW_CURVE_STRIKE uint16 = 4
GROW_CURVE_STAMINA uint16 GROW_CURVE_ANTI_STRIKE uint16 = 5
GROW_CURVE_STRIKE uint16 GROW_CURVE_ANTI_STRIKE1 uint16 = 6
GROW_CURVE_ANTI_STRIKE uint16 GROW_CURVE_ANTI_STRIKE2 uint16 = 7
GROW_CURVE_ANTI_STRIKE1 uint16 GROW_CURVE_ANTI_STRIKE3 uint16 = 8
GROW_CURVE_ANTI_STRIKE2 uint16 GROW_CURVE_STRIKE_HURT uint16 = 9
GROW_CURVE_ANTI_STRIKE3 uint16 GROW_CURVE_ELEMENT uint16 = 10
GROW_CURVE_STRIKE_HURT uint16 GROW_CURVE_KILL_EXP uint16 = 11
GROW_CURVE_ELEMENT uint16 GROW_CURVE_DEFENSE uint16 = 12
GROW_CURVE_KILL_EXP uint16 GROW_CURVE_ATTACK_BOMB uint16 = 13
GROW_CURVE_DEFENSE uint16 GROW_CURVE_HP_LITTLEMONSTER uint16 = 14
GROW_CURVE_ATTACK_BOMB uint16 GROW_CURVE_ELEMENT_MASTERY uint16 = 15
GROW_CURVE_HP_LITTLEMONSTER uint16 GROW_CURVE_PROGRESSION uint16 = 16
GROW_CURVE_ELEMENT_MASTERY uint16 GROW_CURVE_DEFENDING uint16 = 17
GROW_CURVE_PROGRESSION uint16 GROW_CURVE_MHP uint16 = 18
GROW_CURVE_DEFENDING uint16 GROW_CURVE_MATK uint16 = 19
GROW_CURVE_MHP uint16 GROW_CURVE_TOWERATK uint16 = 20
GROW_CURVE_MATK uint16 GROW_CURVE_HP_S5 uint16 = 21
GROW_CURVE_TOWERATK uint16 GROW_CURVE_HP_S4 uint16 = 22
GROW_CURVE_HP_S5 uint16 GROW_CURVE_HP_2 uint16 = 23
GROW_CURVE_HP_S4 uint16 GROW_CURVE_ATTACK_S5 uint16 = 31
GROW_CURVE_HP_2 uint16 GROW_CURVE_ATTACK_S4 uint16 = 32
GROW_CURVE_ATTACK_S5 uint16 GROW_CURVE_ATTACK_S3 uint16 = 33
GROW_CURVE_ATTACK_S4 uint16 GROW_CURVE_STRIKE_S5 uint16 = 34
GROW_CURVE_ATTACK_S3 uint16 GROW_CURVE_DEFENSE_S5 uint16 = 41
GROW_CURVE_STRIKE_S5 uint16 GROW_CURVE_DEFENSE_S4 uint16 = 42
GROW_CURVE_DEFENSE_S5 uint16 GROW_CURVE_ATTACK_101 uint16 = 1101
GROW_CURVE_DEFENSE_S4 uint16 GROW_CURVE_ATTACK_102 uint16 = 1102
GROW_CURVE_ATTACK_101 uint16 GROW_CURVE_ATTACK_103 uint16 = 1103
GROW_CURVE_ATTACK_102 uint16 GROW_CURVE_ATTACK_104 uint16 = 1104
GROW_CURVE_ATTACK_103 uint16 GROW_CURVE_ATTACK_105 uint16 = 1105
GROW_CURVE_ATTACK_104 uint16 GROW_CURVE_ATTACK_201 uint16 = 1201
GROW_CURVE_ATTACK_105 uint16 GROW_CURVE_ATTACK_202 uint16 = 1202
GROW_CURVE_ATTACK_201 uint16 GROW_CURVE_ATTACK_203 uint16 = 1203
GROW_CURVE_ATTACK_202 uint16 GROW_CURVE_ATTACK_204 uint16 = 1204
GROW_CURVE_ATTACK_203 uint16 GROW_CURVE_ATTACK_205 uint16 = 1205
GROW_CURVE_ATTACK_204 uint16 GROW_CURVE_ATTACK_301 uint16 = 1301
GROW_CURVE_ATTACK_205 uint16 GROW_CURVE_ATTACK_302 uint16 = 1302
GROW_CURVE_ATTACK_301 uint16 GROW_CURVE_ATTACK_303 uint16 = 1303
GROW_CURVE_ATTACK_302 uint16 GROW_CURVE_ATTACK_304 uint16 = 1304
GROW_CURVE_ATTACK_303 uint16 GROW_CURVE_ATTACK_305 uint16 = 1305
GROW_CURVE_ATTACK_304 uint16 GROW_CURVE_CRITICAL_101 uint16 = 2101
GROW_CURVE_ATTACK_305 uint16 GROW_CURVE_CRITICAL_102 uint16 = 2102
GROW_CURVE_CRITICAL_101 uint16 GROW_CURVE_CRITICAL_103 uint16 = 2103
GROW_CURVE_CRITICAL_102 uint16 GROW_CURVE_CRITICAL_104 uint16 = 2104
GROW_CURVE_CRITICAL_103 uint16 GROW_CURVE_CRITICAL_105 uint16 = 2105
GROW_CURVE_CRITICAL_104 uint16 GROW_CURVE_CRITICAL_201 uint16 = 2201
GROW_CURVE_CRITICAL_105 uint16 GROW_CURVE_CRITICAL_202 uint16 = 2202
GROW_CURVE_CRITICAL_201 uint16 GROW_CURVE_CRITICAL_203 uint16 = 2203
GROW_CURVE_CRITICAL_202 uint16 GROW_CURVE_CRITICAL_204 uint16 = 2204
GROW_CURVE_CRITICAL_203 uint16 GROW_CURVE_CRITICAL_205 uint16 = 2205
GROW_CURVE_CRITICAL_204 uint16 GROW_CURVE_CRITICAL_301 uint16 = 2301
GROW_CURVE_CRITICAL_205 uint16 GROW_CURVE_CRITICAL_302 uint16 = 2302
GROW_CURVE_CRITICAL_301 uint16 GROW_CURVE_CRITICAL_303 uint16 = 2303
GROW_CURVE_CRITICAL_302 uint16 GROW_CURVE_CRITICAL_304 uint16 = 2304
GROW_CURVE_CRITICAL_303 uint16 GROW_CURVE_CRITICAL_305 uint16 = 2305
GROW_CURVE_CRITICAL_304 uint16 )
GROW_CURVE_CRITICAL_305 uint16
}
func InitGrowCurveConst() {
GrowCurveConst = new(GrowCurve)
GrowCurveConst.GROW_CURVE_NONE = 0
GrowCurveConst.GROW_CURVE_HP = 1
GrowCurveConst.GROW_CURVE_ATTACK = 2
GrowCurveConst.GROW_CURVE_STAMINA = 3
GrowCurveConst.GROW_CURVE_STRIKE = 4
GrowCurveConst.GROW_CURVE_ANTI_STRIKE = 5
GrowCurveConst.GROW_CURVE_ANTI_STRIKE1 = 6
GrowCurveConst.GROW_CURVE_ANTI_STRIKE2 = 7
GrowCurveConst.GROW_CURVE_ANTI_STRIKE3 = 8
GrowCurveConst.GROW_CURVE_STRIKE_HURT = 9
GrowCurveConst.GROW_CURVE_ELEMENT = 10
GrowCurveConst.GROW_CURVE_KILL_EXP = 11
GrowCurveConst.GROW_CURVE_DEFENSE = 12
GrowCurveConst.GROW_CURVE_ATTACK_BOMB = 13
GrowCurveConst.GROW_CURVE_HP_LITTLEMONSTER = 14
GrowCurveConst.GROW_CURVE_ELEMENT_MASTERY = 15
GrowCurveConst.GROW_CURVE_PROGRESSION = 16
GrowCurveConst.GROW_CURVE_DEFENDING = 17
GrowCurveConst.GROW_CURVE_MHP = 18
GrowCurveConst.GROW_CURVE_MATK = 19
GrowCurveConst.GROW_CURVE_TOWERATK = 20
GrowCurveConst.GROW_CURVE_HP_S5 = 21
GrowCurveConst.GROW_CURVE_HP_S4 = 22
GrowCurveConst.GROW_CURVE_HP_2 = 23
GrowCurveConst.GROW_CURVE_ATTACK_S5 = 31
GrowCurveConst.GROW_CURVE_ATTACK_S4 = 32
GrowCurveConst.GROW_CURVE_ATTACK_S3 = 33
GrowCurveConst.GROW_CURVE_STRIKE_S5 = 34
GrowCurveConst.GROW_CURVE_DEFENSE_S5 = 41
GrowCurveConst.GROW_CURVE_DEFENSE_S4 = 42
GrowCurveConst.GROW_CURVE_ATTACK_101 = 1101
GrowCurveConst.GROW_CURVE_ATTACK_102 = 1102
GrowCurveConst.GROW_CURVE_ATTACK_103 = 1103
GrowCurveConst.GROW_CURVE_ATTACK_104 = 1104
GrowCurveConst.GROW_CURVE_ATTACK_105 = 1105
GrowCurveConst.GROW_CURVE_ATTACK_201 = 1201
GrowCurveConst.GROW_CURVE_ATTACK_202 = 1202
GrowCurveConst.GROW_CURVE_ATTACK_203 = 1203
GrowCurveConst.GROW_CURVE_ATTACK_204 = 1204
GrowCurveConst.GROW_CURVE_ATTACK_205 = 1205
GrowCurveConst.GROW_CURVE_ATTACK_301 = 1301
GrowCurveConst.GROW_CURVE_ATTACK_302 = 1302
GrowCurveConst.GROW_CURVE_ATTACK_303 = 1303
GrowCurveConst.GROW_CURVE_ATTACK_304 = 1304
GrowCurveConst.GROW_CURVE_ATTACK_305 = 1305
GrowCurveConst.GROW_CURVE_CRITICAL_101 = 2101
GrowCurveConst.GROW_CURVE_CRITICAL_102 = 2102
GrowCurveConst.GROW_CURVE_CRITICAL_103 = 2103
GrowCurveConst.GROW_CURVE_CRITICAL_104 = 2104
GrowCurveConst.GROW_CURVE_CRITICAL_105 = 2105
GrowCurveConst.GROW_CURVE_CRITICAL_201 = 2201
GrowCurveConst.GROW_CURVE_CRITICAL_202 = 2202
GrowCurveConst.GROW_CURVE_CRITICAL_203 = 2203
GrowCurveConst.GROW_CURVE_CRITICAL_204 = 2204
GrowCurveConst.GROW_CURVE_CRITICAL_205 = 2205
GrowCurveConst.GROW_CURVE_CRITICAL_301 = 2301
GrowCurveConst.GROW_CURVE_CRITICAL_302 = 2302
GrowCurveConst.GROW_CURVE_CRITICAL_303 = 2303
GrowCurveConst.GROW_CURVE_CRITICAL_304 = 2304
GrowCurveConst.GROW_CURVE_CRITICAL_305 = 2305
}

View File

@@ -1,49 +1,39 @@
package constant package constant
var ItemConstantConst *ItemConstant const (
type ItemConstant struct {
// 虚拟物品 // 虚拟物品
HCOIN uint32 // 原石 201 ITEM_ID_HCOIN uint32 = 201 // 原石
SCOIN uint32 // 摩拉 202 ITEM_ID_SCOIN uint32 = 202 // 摩拉
MCOIN uint32 // 创世结晶 203 ITEM_ID_MCOIN uint32 = 203 // 创世结晶
RESIN uint32 // 树脂 106 ITEM_ID_RESIN uint32 = 106 // 树脂
LEGENDARY_KEY uint32 // 传说任务钥匙 107 ITEM_ID_LEGENDARY_KEY uint32 = 207 // 传说任务钥匙
HOME_COIN uint32 // 洞天宝钱 204 ITEM_ID_HOME_COIN uint32 = 204 // 洞天宝钱
PLAYER_EXP uint32 // 冒险阅历 102 ITEM_ID_PLAYER_EXP uint32 = 102 // 冒险阅历
VIRTUAL_ITEM_PROP map[uint32]uint16 // 虚拟物品对应玩家的属性
// 武器强化物品 // 武器强化物品
WEAPON_UPGRADE_MAGIC uint32 // 精锻用魔矿 104013 ITEM_ID_WEAPON_UPGRADE_MAGIC uint32 = 104013 // 精锻用魔矿
WEAPON_UPGRADE_GOOD uint32 // 精锻用良矿 104012 ITEM_ID_WEAPON_UPGRADE_GOOD uint32 = 104012 // 精锻用良矿
WEAPON_UPGRADE_MOTLEY uint32 // 精锻用杂矿 104011 ITEM_ID_WEAPON_UPGRADE_MOTLEY uint32 = 104011 // 精锻用杂矿
WEAPON_UPGRADE_MATERIAL []uint32 // 武器强化返还材料列表 )
}
func InitItemConstantConst() { // 虚拟物品对应玩家的属性
ItemConstantConst = new(ItemConstant) var VIRTUAL_ITEM_PROP map[uint32]uint16
ItemConstantConst.HCOIN = 201 // 武器强化返还材料列表
ItemConstantConst.SCOIN = 202 var WEAPON_UPGRADE_MATERIAL []uint32
ItemConstantConst.MCOIN = 203
ItemConstantConst.RESIN = 106 func init() {
ItemConstantConst.LEGENDARY_KEY = 207 VIRTUAL_ITEM_PROP = map[uint32]uint16{
ItemConstantConst.HOME_COIN = 204 ITEM_ID_HCOIN: PLAYER_PROP_PLAYER_HCOIN,
ItemConstantConst.PLAYER_EXP = 102 ITEM_ID_SCOIN: PLAYER_PROP_PLAYER_SCOIN,
ItemConstantConst.VIRTUAL_ITEM_PROP = map[uint32]uint16{ ITEM_ID_MCOIN: PLAYER_PROP_PLAYER_MCOIN,
ItemConstantConst.HCOIN: PlayerPropertyConst.PROP_PLAYER_HCOIN, ITEM_ID_RESIN: PLAYER_PROP_PLAYER_RESIN,
ItemConstantConst.SCOIN: PlayerPropertyConst.PROP_PLAYER_SCOIN, ITEM_ID_LEGENDARY_KEY: PLAYER_PROP_PLAYER_LEGENDARY_KEY,
ItemConstantConst.MCOIN: PlayerPropertyConst.PROP_PLAYER_MCOIN, ITEM_ID_HOME_COIN: PLAYER_PROP_PLAYER_HOME_COIN,
ItemConstantConst.RESIN: PlayerPropertyConst.PROP_PLAYER_RESIN, ITEM_ID_PLAYER_EXP: PLAYER_PROP_PLAYER_EXP,
ItemConstantConst.LEGENDARY_KEY: PlayerPropertyConst.PROP_PLAYER_LEGENDARY_KEY,
ItemConstantConst.HOME_COIN: PlayerPropertyConst.PROP_PLAYER_HOME_COIN,
ItemConstantConst.PLAYER_EXP: PlayerPropertyConst.PROP_PLAYER_EXP,
} }
ItemConstantConst.WEAPON_UPGRADE_MAGIC = 104013 WEAPON_UPGRADE_MATERIAL = []uint32{
ItemConstantConst.WEAPON_UPGRADE_GOOD = 104012 ITEM_ID_WEAPON_UPGRADE_MAGIC,
ItemConstantConst.WEAPON_UPGRADE_MOTLEY = 104011 ITEM_ID_WEAPON_UPGRADE_GOOD,
ItemConstantConst.WEAPON_UPGRADE_MATERIAL = []uint32{ ITEM_ID_WEAPON_UPGRADE_MOTLEY,
ItemConstantConst.WEAPON_UPGRADE_MAGIC,
ItemConstantConst.WEAPON_UPGRADE_GOOD,
ItemConstantConst.WEAPON_UPGRADE_MOTLEY,
} }
} }

View File

@@ -1,36 +1,11 @@
package constant package constant
var ItemTypeConst *ItemType const (
ITEM_TYPE_NONE uint16 = 0
type ItemType struct { ITEM_TYPE_VIRTUAL uint16 = 1
ITEM_NONE uint16 ITEM_TYPE_MATERIAL uint16 = 2
ITEM_VIRTUAL uint16 ITEM_TYPE_RELIQUARY uint16 = 3
ITEM_MATERIAL uint16 ITEM_TYPE_WEAPON uint16 = 4
ITEM_RELIQUARY uint16 ITEM_TYPE_DISPLAY uint16 = 5
ITEM_WEAPON uint16 ITEM_TYPE_FURNITURE uint16 = 6
ITEM_DISPLAY uint16 )
ITEM_FURNITURE uint16
STRING_MAP map[string]uint16
}
func InitItemTypeConst() {
ItemTypeConst = new(ItemType)
ItemTypeConst.ITEM_NONE = 0
ItemTypeConst.ITEM_VIRTUAL = 1
ItemTypeConst.ITEM_MATERIAL = 2
ItemTypeConst.ITEM_RELIQUARY = 3
ItemTypeConst.ITEM_WEAPON = 4
ItemTypeConst.ITEM_DISPLAY = 5
ItemTypeConst.ITEM_FURNITURE = 6
ItemTypeConst.STRING_MAP = make(map[string]uint16)
ItemTypeConst.STRING_MAP["ITEM_NONE"] = 0
ItemTypeConst.STRING_MAP["ITEM_VIRTUAL"] = 1
ItemTypeConst.STRING_MAP["ITEM_MATERIAL"] = 2
ItemTypeConst.STRING_MAP["ITEM_RELIQUARY"] = 3
ItemTypeConst.STRING_MAP["ITEM_WEAPON"] = 4
ItemTypeConst.STRING_MAP["ITEM_DISPLAY"] = 5
ItemTypeConst.STRING_MAP["ITEM_FURNITURE"] = 6
}

View File

@@ -1,19 +1,8 @@
package constant package constant
var LifeStateConst *LifeState const (
LIFE_STATE_NONE uint16 = 0
type LifeState struct { LIFE_STATE_ALIVE uint16 = 1
LIFE_NONE uint16 LIFE_STATE_DEAD uint16 = 2
LIFE_ALIVE uint16 LIFE_STATE_REVIVE uint16 = 3
LIFE_DEAD uint16 )
LIFE_REVIVE uint16
}
func InitLifeStateConst() {
LifeStateConst = new(LifeState)
LifeStateConst.LIFE_NONE = 0
LifeStateConst.LIFE_ALIVE = 1
LifeStateConst.LIFE_DEAD = 2
LifeStateConst.LIFE_REVIVE = 3
}

View File

@@ -1,102 +1,33 @@
package constant package constant
var MaterialTypeConst *MaterialType const (
MATERIAL_TYPE_NONE uint16 = 0
type MaterialType struct { MATERIAL_TYPE_FOOD uint16 = 1
MATERIAL_NONE uint16 MATERIAL_TYPE_QUEST uint16 = 2
MATERIAL_FOOD uint16 MATERIAL_TYPE_EXCHANGE uint16 = 4
MATERIAL_QUEST uint16 MATERIAL_TYPE_CONSUME uint16 = 5
MATERIAL_EXCHANGE uint16 MATERIAL_TYPE_EXP_FRUIT uint16 = 6
MATERIAL_CONSUME uint16 MATERIAL_TYPE_AVATAR uint16 = 7
MATERIAL_EXP_FRUIT uint16 MATERIAL_TYPE_ADSORBATE uint16 = 8
MATERIAL_AVATAR uint16 MATERIAL_TYPE_CRICKET uint16 = 9
MATERIAL_ADSORBATE uint16 MATERIAL_TYPE_ELEM_CRYSTAL uint16 = 10
MATERIAL_CRICKET uint16 MATERIAL_TYPE_WEAPON_EXP_STONE uint16 = 11
MATERIAL_ELEM_CRYSTAL uint16 MATERIAL_TYPE_CHEST uint16 = 12
MATERIAL_WEAPON_EXP_STONE uint16 MATERIAL_TYPE_RELIQUARY_MATERIAL uint16 = 13
MATERIAL_CHEST uint16 MATERIAL_TYPE_AVATAR_MATERIAL uint16 = 14
MATERIAL_RELIQUARY_MATERIAL uint16 MATERIAL_TYPE_NOTICE_ADD_HP uint16 = 15
MATERIAL_AVATAR_MATERIAL uint16 MATERIAL_TYPE_SEA_LAMP uint16 = 16
MATERIAL_NOTICE_ADD_HP uint16 MATERIAL_TYPE_SELECTABLE_CHEST uint16 = 17
MATERIAL_SEA_LAMP uint16 MATERIAL_TYPE_FLYCLOAK uint16 = 18
MATERIAL_SELECTABLE_CHEST uint16 MATERIAL_TYPE_NAMECARD uint16 = 19
MATERIAL_FLYCLOAK uint16 MATERIAL_TYPE_TALENT uint16 = 20
MATERIAL_NAMECARD uint16 MATERIAL_TYPE_WIDGET uint16 = 21
MATERIAL_TALENT uint16 MATERIAL_TYPE_CHEST_BATCH_USE uint16 = 22
MATERIAL_WIDGET uint16 MATERIAL_TYPE_FAKE_ABSORBATE uint16 = 23
MATERIAL_CHEST_BATCH_USE uint16 MATERIAL_TYPE_CONSUME_BATCH_USE uint16 = 24
MATERIAL_FAKE_ABSORBATE uint16 MATERIAL_TYPE_WOOD uint16 = 25
MATERIAL_CONSUME_BATCH_USE uint16 MATERIAL_TYPE_FURNITURE_FORMULA uint16 = 27
MATERIAL_WOOD uint16 MATERIAL_TYPE_CHANNELLER_SLAB_BUFF uint16 = 28
MATERIAL_FURNITURE_FORMULA uint16 MATERIAL_TYPE_FURNITURE_SUITE_FORMULA uint16 = 29
MATERIAL_CHANNELLER_SLAB_BUFF uint16 MATERIAL_TYPE_COSTUME uint16 = 30
MATERIAL_FURNITURE_SUITE_FORMULA uint16 )
MATERIAL_COSTUME uint16
STRING_MAP map[string]uint16
}
func InitMaterialTypeConst() {
MaterialTypeConst = new(MaterialType)
MaterialTypeConst.MATERIAL_NONE = 0
MaterialTypeConst.MATERIAL_FOOD = 1
MaterialTypeConst.MATERIAL_QUEST = 2
MaterialTypeConst.MATERIAL_EXCHANGE = 4
MaterialTypeConst.MATERIAL_CONSUME = 5
MaterialTypeConst.MATERIAL_EXP_FRUIT = 6
MaterialTypeConst.MATERIAL_AVATAR = 7
MaterialTypeConst.MATERIAL_ADSORBATE = 8
MaterialTypeConst.MATERIAL_CRICKET = 9
MaterialTypeConst.MATERIAL_ELEM_CRYSTAL = 10
MaterialTypeConst.MATERIAL_WEAPON_EXP_STONE = 11
MaterialTypeConst.MATERIAL_CHEST = 12
MaterialTypeConst.MATERIAL_RELIQUARY_MATERIAL = 13
MaterialTypeConst.MATERIAL_AVATAR_MATERIAL = 14
MaterialTypeConst.MATERIAL_NOTICE_ADD_HP = 15
MaterialTypeConst.MATERIAL_SEA_LAMP = 16
MaterialTypeConst.MATERIAL_SELECTABLE_CHEST = 17
MaterialTypeConst.MATERIAL_FLYCLOAK = 18
MaterialTypeConst.MATERIAL_NAMECARD = 19
MaterialTypeConst.MATERIAL_TALENT = 20
MaterialTypeConst.MATERIAL_WIDGET = 21
MaterialTypeConst.MATERIAL_CHEST_BATCH_USE = 22
MaterialTypeConst.MATERIAL_FAKE_ABSORBATE = 23
MaterialTypeConst.MATERIAL_CONSUME_BATCH_USE = 24
MaterialTypeConst.MATERIAL_WOOD = 25
MaterialTypeConst.MATERIAL_FURNITURE_FORMULA = 27
MaterialTypeConst.MATERIAL_CHANNELLER_SLAB_BUFF = 28
MaterialTypeConst.MATERIAL_FURNITURE_SUITE_FORMULA = 29
MaterialTypeConst.MATERIAL_COSTUME = 30
MaterialTypeConst.STRING_MAP = make(map[string]uint16)
MaterialTypeConst.STRING_MAP["MATERIAL_NONE"] = 0
MaterialTypeConst.STRING_MAP["MATERIAL_FOOD"] = 1
MaterialTypeConst.STRING_MAP["MATERIAL_QUEST"] = 2
MaterialTypeConst.STRING_MAP["MATERIAL_EXCHANGE"] = 4
MaterialTypeConst.STRING_MAP["MATERIAL_CONSUME"] = 5
MaterialTypeConst.STRING_MAP["MATERIAL_EXP_FRUIT"] = 6
MaterialTypeConst.STRING_MAP["MATERIAL_AVATAR"] = 7
MaterialTypeConst.STRING_MAP["MATERIAL_ADSORBATE"] = 8
MaterialTypeConst.STRING_MAP["MATERIAL_CRICKET"] = 9
MaterialTypeConst.STRING_MAP["MATERIAL_ELEM_CRYSTAL"] = 10
MaterialTypeConst.STRING_MAP["MATERIAL_WEAPON_EXP_STONE"] = 11
MaterialTypeConst.STRING_MAP["MATERIAL_CHEST"] = 12
MaterialTypeConst.STRING_MAP["MATERIAL_RELIQUARY_MATERIAL"] = 13
MaterialTypeConst.STRING_MAP["MATERIAL_AVATAR_MATERIAL"] = 14
MaterialTypeConst.STRING_MAP["MATERIAL_NOTICE_ADD_HP"] = 15
MaterialTypeConst.STRING_MAP["MATERIAL_SEA_LAMP"] = 16
MaterialTypeConst.STRING_MAP["MATERIAL_SELECTABLE_CHEST"] = 17
MaterialTypeConst.STRING_MAP["MATERIAL_FLYCLOAK"] = 18
MaterialTypeConst.STRING_MAP["MATERIAL_NAMECARD"] = 19
MaterialTypeConst.STRING_MAP["MATERIAL_TALENT"] = 20
MaterialTypeConst.STRING_MAP["MATERIAL_WIDGET"] = 21
MaterialTypeConst.STRING_MAP["MATERIAL_CHEST_BATCH_USE"] = 22
MaterialTypeConst.STRING_MAP["MATERIAL_FAKE_ABSORBATE"] = 23
MaterialTypeConst.STRING_MAP["MATERIAL_CONSUME_BATCH_USE"] = 24
MaterialTypeConst.STRING_MAP["MATERIAL_WOOD"] = 25
MaterialTypeConst.STRING_MAP["MATERIAL_FURNITURE_FORMULA"] = 27
MaterialTypeConst.STRING_MAP["MATERIAL_CHANNELLER_SLAB_BUFF"] = 28
MaterialTypeConst.STRING_MAP["MATERIAL_FURNITURE_SUITE_FORMULA"] = 29
MaterialTypeConst.STRING_MAP["MATERIAL_COSTUME"] = 30
}

View File

@@ -1,343 +1,343 @@
package constant package constant
var OpenStateConst *OpenState const (
OPEN_STATE_NONE uint16 = 0
OPEN_STATE_PAIMON uint16 = 1
OPEN_STATE_PAIMON_NAVIGATION uint16 = 2
OPEN_STATE_AVATAR_PROMOTE uint16 = 3
OPEN_STATE_AVATAR_TALENT uint16 = 4
OPEN_STATE_WEAPON_PROMOTE uint16 = 5
OPEN_STATE_WEAPON_AWAKEN uint16 = 6
OPEN_STATE_QUEST_REMIND uint16 = 7
OPEN_STATE_GAME_GUIDE uint16 = 8
OPEN_STATE_COOK uint16 = 9
OPEN_STATE_WEAPON_UPGRADE uint16 = 10
OPEN_STATE_RELIQUARY_UPGRADE uint16 = 11
OPEN_STATE_RELIQUARY_PROMOTE uint16 = 12
OPEN_STATE_WEAPON_PROMOTE_GUIDE uint16 = 13
OPEN_STATE_WEAPON_CHANGE_GUIDE uint16 = 14
OPEN_STATE_PLAYER_LVUP_GUIDE uint16 = 15
OPEN_STATE_FRESHMAN_GUIDE uint16 = 16
OPEN_STATE_SKIP_FRESHMAN_GUIDE uint16 = 17
OPEN_STATE_GUIDE_MOVE_CAMERA uint16 = 18
OPEN_STATE_GUIDE_SCALE_CAMERA uint16 = 19
OPEN_STATE_GUIDE_KEYBOARD uint16 = 20
OPEN_STATE_GUIDE_MOVE uint16 = 21
OPEN_STATE_GUIDE_JUMP uint16 = 22
OPEN_STATE_GUIDE_SPRINT uint16 = 23
OPEN_STATE_GUIDE_MAP uint16 = 24
OPEN_STATE_GUIDE_ATTACK uint16 = 25
OPEN_STATE_GUIDE_FLY uint16 = 26
OPEN_STATE_GUIDE_TALENT uint16 = 27
OPEN_STATE_GUIDE_RELIC uint16 = 28
OPEN_STATE_GUIDE_RELIC_PROM uint16 = 29
OPEN_STATE_COMBINE uint16 = 30
OPEN_STATE_GACHA uint16 = 31
OPEN_STATE_GUIDE_GACHA uint16 = 32
OPEN_STATE_GUIDE_TEAM uint16 = 33
OPEN_STATE_GUIDE_PROUD uint16 = 34
OPEN_STATE_GUIDE_AVATAR_PROMOTE uint16 = 35
OPEN_STATE_GUIDE_ADVENTURE_CARD uint16 = 36
OPEN_STATE_FORGE uint16 = 37
OPEN_STATE_GUIDE_BAG uint16 = 38
OPEN_STATE_EXPEDITION uint16 = 39
OPEN_STATE_GUIDE_ADVENTURE_DAILYTASK uint16 = 40
OPEN_STATE_GUIDE_ADVENTURE_DUNGEON uint16 = 41
OPEN_STATE_TOWER uint16 = 42
OPEN_STATE_WORLD_STAMINA uint16 = 43
OPEN_STATE_TOWER_FIRST_ENTER uint16 = 44
OPEN_STATE_RESIN uint16 = 45
OPEN_STATE_LIMIT_REGION_FRESHMEAT uint16 = 47
OPEN_STATE_LIMIT_REGION_GLOBAL uint16 = 48
OPEN_STATE_MULTIPLAYER uint16 = 49
OPEN_STATE_GUIDE_MOUSEPC uint16 = 50
OPEN_STATE_GUIDE_MULTIPLAYER uint16 = 51
OPEN_STATE_GUIDE_DUNGEONREWARD uint16 = 52
OPEN_STATE_GUIDE_BLOSSOM uint16 = 53
OPEN_STATE_AVATAR_FASHION uint16 = 54
OPEN_STATE_PHOTOGRAPH uint16 = 55
OPEN_STATE_GUIDE_KSLQUEST uint16 = 56
OPEN_STATE_PERSONAL_LINE uint16 = 57
OPEN_STATE_GUIDE_PERSONAL_LINE uint16 = 58
OPEN_STATE_GUIDE_APPEARANCE uint16 = 59
OPEN_STATE_GUIDE_PROCESS uint16 = 60
OPEN_STATE_GUIDE_PERSONAL_LINE_KEY uint16 = 61
OPEN_STATE_GUIDE_WIDGET uint16 = 62
OPEN_STATE_GUIDE_ACTIVITY_SKILL_ASTER uint16 = 63
OPEN_STATE_GUIDE_COLDCLIMATE uint16 = 64
OPEN_STATE_DERIVATIVE_MALL uint16 = 65
OPEN_STATE_GUIDE_EXITMULTIPLAYER uint16 = 66
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD uint16 = 67
OPEN_STATE_GUIDE_THEATREMACHANICUS_REBUILD uint16 = 68
OPEN_STATE_GUIDE_THEATREMACHANICUS_CARD uint16 = 69
OPEN_STATE_GUIDE_THEATREMACHANICUS_MONSTER uint16 = 70
OPEN_STATE_GUIDE_THEATREMACHANICUS_MISSION_CHECK uint16 = 71
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD_SELECT uint16 = 72
OPEN_STATE_GUIDE_THEATREMACHANICUS_CHALLENGE_START uint16 = 73
OPEN_STATE_GUIDE_CONVERT uint16 = 74
OPEN_STATE_GUIDE_THEATREMACHANICUS_MULTIPLAYER uint16 = 75
OPEN_STATE_GUIDE_COOP_TASK uint16 = 76
OPEN_STATE_GUIDE_HOMEWORLD_ADEPTIABODE uint16 = 77
OPEN_STATE_GUIDE_HOMEWORLD_DEPLOY uint16 = 78
OPEN_STATE_GUIDE_CHANNELLERSLAB_EQUIP uint16 = 79
OPEN_STATE_GUIDE_CHANNELLERSLAB_MP_SOLUTION uint16 = 80
OPEN_STATE_GUIDE_CHANNELLERSLAB_POWER uint16 = 81
OPEN_STATE_GUIDE_HIDEANDSEEK_SKILL uint16 = 82
OPEN_STATE_GUIDE_HOMEWORLD_MAPLIST uint16 = 83
OPEN_STATE_GUIDE_RELICRESOLVE uint16 = 84
OPEN_STATE_GUIDE_GGUIDE uint16 = 85
OPEN_STATE_GUIDE_GGUIDE_HINT uint16 = 86
OPEN_STATE_CITY_REPUATION_MENGDE uint16 = 800
OPEN_STATE_CITY_REPUATION_LIYUE uint16 = 801
OPEN_STATE_CITY_REPUATION_UI_HINT uint16 = 802
OPEN_STATE_CITY_REPUATION_INAZUMA uint16 = 803
OPEN_STATE_SHOP_TYPE_MALL uint16 = 900
OPEN_STATE_SHOP_TYPE_RECOMMANDED uint16 = 901
OPEN_STATE_SHOP_TYPE_GENESISCRYSTAL uint16 = 902
OPEN_STATE_SHOP_TYPE_GIFTPACKAGE uint16 = 903
OPEN_STATE_SHOP_TYPE_PAIMON uint16 = 1001
OPEN_STATE_SHOP_TYPE_CITY uint16 = 1002
OPEN_STATE_SHOP_TYPE_BLACKSMITH uint16 = 1003
OPEN_STATE_SHOP_TYPE_GROCERY uint16 = 1004
OPEN_STATE_SHOP_TYPE_FOOD uint16 = 1005
OPEN_STATE_SHOP_TYPE_SEA_LAMP uint16 = 1006
OPEN_STATE_SHOP_TYPE_VIRTUAL_SHOP uint16 = 1007
OPEN_STATE_SHOP_TYPE_LIYUE_GROCERY uint16 = 1008
OPEN_STATE_SHOP_TYPE_LIYUE_SOUVENIR uint16 = 1009
OPEN_STATE_SHOP_TYPE_LIYUE_RESTAURANT uint16 = 1010
OPEN_STATE_SHOP_TYPE_INAZUMA_SOUVENIR uint16 = 1011
OPEN_STATE_SHOP_TYPE_NPC_TOMOKI uint16 = 1012
OPEN_ADVENTURE_MANUAL uint16 = 1100
OPEN_ADVENTURE_MANUAL_CITY_MENGDE uint16 = 1101
OPEN_ADVENTURE_MANUAL_CITY_LIYUE uint16 = 1102
OPEN_ADVENTURE_MANUAL_MONSTER uint16 = 1103
OPEN_ADVENTURE_MANUAL_BOSS_DUNGEON uint16 = 1104
OPEN_STATE_ACTIVITY_SEALAMP uint16 = 1200
OPEN_STATE_ACTIVITY_SEALAMP_TAB2 uint16 = 1201
OPEN_STATE_ACTIVITY_SEALAMP_TAB3 uint16 = 1202
OPEN_STATE_BATTLE_PASS uint16 = 1300
OPEN_STATE_BATTLE_PASS_ENTRY uint16 = 1301
OPEN_STATE_ACTIVITY_CRUCIBLE uint16 = 1400
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_OPEN uint16 = 1401
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_CLOSE uint16 = 1402
OPEN_STATE_ACTIVITY_ENTRY_OPEN uint16 = 1403
OPEN_STATE_MENGDE_INFUSEDCRYSTAL uint16 = 1404
OPEN_STATE_LIYUE_INFUSEDCRYSTAL uint16 = 1405
OPEN_STATE_SNOW_MOUNTAIN_ELDER_TREE uint16 = 1406
OPEN_STATE_MIRACLE_RING uint16 = 1407
OPEN_STATE_COOP_LINE uint16 = 1408
OPEN_STATE_INAZUMA_INFUSEDCRYSTAL uint16 = 1409
OPEN_STATE_FISH uint16 = 1410
OPEN_STATE_GUIDE_SUMO_TEAM_SKILL uint16 = 1411
OPEN_STATE_GUIDE_FISH_RECIPE uint16 = 1412
OPEN_STATE_HOME uint16 = 1500
OPEN_STATE_ACTIVITY_HOMEWORLD uint16 = 1501
OPEN_STATE_ADEPTIABODE uint16 = 1502
OPEN_STATE_HOME_AVATAR uint16 = 1503
OPEN_STATE_HOME_EDIT uint16 = 1504
OPEN_STATE_HOME_EDIT_TIPS uint16 = 1505
OPEN_STATE_RELIQUARY_DECOMPOSE uint16 = 1600
OPEN_STATE_ACTIVITY_H5 uint16 = 1700
OPEN_STATE_ORAIONOKAMI uint16 = 2000
OPEN_STATE_GUIDE_CHESS_MISSION_CHECK uint16 = 2001
OPEN_STATE_GUIDE_CHESS_BUILD uint16 = 2002
OPEN_STATE_GUIDE_CHESS_WIND_TOWER_CIRCLE uint16 = 2003
OPEN_STATE_GUIDE_CHESS_CARD_SELECT uint16 = 2004
OPEN_STATE_INAZUMA_MAINQUEST_FINISHED uint16 = 2005
OPEN_STATE_PAIMON_LVINFO uint16 = 2100
OPEN_STATE_TELEPORT_HUD uint16 = 2101
OPEN_STATE_GUIDE_MAP_UNLOCK uint16 = 2102
OPEN_STATE_GUIDE_PAIMON_LVINFO uint16 = 2103
OPEN_STATE_GUIDE_AMBORTRANSPORT uint16 = 2104
OPEN_STATE_GUIDE_FLY_SECOND uint16 = 2105
OPEN_STATE_GUIDE_KAEYA_CLUE uint16 = 2106
OPEN_STATE_CAPTURE_CODEX uint16 = 2107
OPEN_STATE_ACTIVITY_FISH_OPEN uint16 = 2200
OPEN_STATE_ACTIVITY_FISH_CLOSE uint16 = 2201
OPEN_STATE_GUIDE_ROGUE_MAP uint16 = 2205
OPEN_STATE_GUIDE_ROGUE_RUNE uint16 = 2206
OPEN_STATE_GUIDE_BARTENDER_FORMULA uint16 = 2210
OPEN_STATE_GUIDE_BARTENDER_MIX uint16 = 2211
OPEN_STATE_GUIDE_BARTENDER_CUP uint16 = 2212
OPEN_STATE_GUIDE_MAIL_FAVORITES uint16 = 2400
OPEN_STATE_GUIDE_POTION_CONFIGURE uint16 = 2401
OPEN_STATE_GUIDE_LANV2_FIREWORK uint16 = 2402
OPEN_STATE_LOADINGTIPS_ENKANOMIYA uint16 = 2403
OPEN_STATE_MICHIAE_CASKET uint16 = 2500
OPEN_STATE_MAIL_COLLECT_UNLOCK_RED_POINT uint16 = 2501
OPEN_STATE_LUMEN_STONE uint16 = 2600
OPEN_STATE_GUIDE_CRYSTALLINK_BUFF uint16 = 2601
)
type OpenState struct { var ALL_OPEN_STATE []uint16
OPEN_STATE_NONE uint16
OPEN_STATE_PAIMON uint16 func init() {
OPEN_STATE_PAIMON_NAVIGATION uint16 ALL_OPEN_STATE = []uint16{
OPEN_STATE_AVATAR_PROMOTE uint16 OPEN_STATE_NONE,
OPEN_STATE_AVATAR_TALENT uint16 OPEN_STATE_PAIMON,
OPEN_STATE_WEAPON_PROMOTE uint16 OPEN_STATE_PAIMON_NAVIGATION,
OPEN_STATE_WEAPON_AWAKEN uint16 OPEN_STATE_AVATAR_PROMOTE,
OPEN_STATE_QUEST_REMIND uint16 OPEN_STATE_AVATAR_TALENT,
OPEN_STATE_GAME_GUIDE uint16 OPEN_STATE_WEAPON_PROMOTE,
OPEN_STATE_COOK uint16 OPEN_STATE_WEAPON_AWAKEN,
OPEN_STATE_WEAPON_UPGRADE uint16 OPEN_STATE_QUEST_REMIND,
OPEN_STATE_RELIQUARY_UPGRADE uint16 OPEN_STATE_GAME_GUIDE,
OPEN_STATE_RELIQUARY_PROMOTE uint16 OPEN_STATE_COOK,
OPEN_STATE_WEAPON_PROMOTE_GUIDE uint16 OPEN_STATE_WEAPON_UPGRADE,
OPEN_STATE_WEAPON_CHANGE_GUIDE uint16 OPEN_STATE_RELIQUARY_UPGRADE,
OPEN_STATE_PLAYER_LVUP_GUIDE uint16 OPEN_STATE_RELIQUARY_PROMOTE,
OPEN_STATE_FRESHMAN_GUIDE uint16 OPEN_STATE_WEAPON_PROMOTE_GUIDE,
OPEN_STATE_SKIP_FRESHMAN_GUIDE uint16 OPEN_STATE_WEAPON_CHANGE_GUIDE,
OPEN_STATE_GUIDE_MOVE_CAMERA uint16 OPEN_STATE_PLAYER_LVUP_GUIDE,
OPEN_STATE_GUIDE_SCALE_CAMERA uint16 OPEN_STATE_FRESHMAN_GUIDE,
OPEN_STATE_GUIDE_KEYBOARD uint16 OPEN_STATE_SKIP_FRESHMAN_GUIDE,
OPEN_STATE_GUIDE_MOVE uint16 OPEN_STATE_GUIDE_MOVE_CAMERA,
OPEN_STATE_GUIDE_JUMP uint16 OPEN_STATE_GUIDE_SCALE_CAMERA,
OPEN_STATE_GUIDE_SPRINT uint16 OPEN_STATE_GUIDE_KEYBOARD,
OPEN_STATE_GUIDE_MAP uint16 OPEN_STATE_GUIDE_MOVE,
OPEN_STATE_GUIDE_ATTACK uint16 OPEN_STATE_GUIDE_JUMP,
OPEN_STATE_GUIDE_FLY uint16 OPEN_STATE_GUIDE_SPRINT,
OPEN_STATE_GUIDE_TALENT uint16 OPEN_STATE_GUIDE_MAP,
OPEN_STATE_GUIDE_RELIC uint16 OPEN_STATE_GUIDE_ATTACK,
OPEN_STATE_GUIDE_RELIC_PROM uint16 OPEN_STATE_GUIDE_FLY,
OPEN_STATE_COMBINE uint16 OPEN_STATE_GUIDE_TALENT,
OPEN_STATE_GACHA uint16 OPEN_STATE_GUIDE_RELIC,
OPEN_STATE_GUIDE_GACHA uint16 OPEN_STATE_GUIDE_RELIC_PROM,
OPEN_STATE_GUIDE_TEAM uint16 OPEN_STATE_COMBINE,
OPEN_STATE_GUIDE_PROUD uint16 OPEN_STATE_GACHA,
OPEN_STATE_GUIDE_AVATAR_PROMOTE uint16 OPEN_STATE_GUIDE_GACHA,
OPEN_STATE_GUIDE_ADVENTURE_CARD uint16 OPEN_STATE_GUIDE_TEAM,
OPEN_STATE_FORGE uint16 OPEN_STATE_GUIDE_PROUD,
OPEN_STATE_GUIDE_BAG uint16 OPEN_STATE_GUIDE_AVATAR_PROMOTE,
OPEN_STATE_EXPEDITION uint16 OPEN_STATE_GUIDE_ADVENTURE_CARD,
OPEN_STATE_GUIDE_ADVENTURE_DAILYTASK uint16 OPEN_STATE_FORGE,
OPEN_STATE_GUIDE_ADVENTURE_DUNGEON uint16 OPEN_STATE_GUIDE_BAG,
OPEN_STATE_TOWER uint16 OPEN_STATE_EXPEDITION,
OPEN_STATE_WORLD_STAMINA uint16 OPEN_STATE_GUIDE_ADVENTURE_DAILYTASK,
OPEN_STATE_TOWER_FIRST_ENTER uint16 OPEN_STATE_GUIDE_ADVENTURE_DUNGEON,
OPEN_STATE_RESIN uint16 OPEN_STATE_TOWER,
OPEN_STATE_LIMIT_REGION_FRESHMEAT uint16 OPEN_STATE_WORLD_STAMINA,
OPEN_STATE_LIMIT_REGION_GLOBAL uint16 OPEN_STATE_TOWER_FIRST_ENTER,
OPEN_STATE_MULTIPLAYER uint16 OPEN_STATE_RESIN,
OPEN_STATE_GUIDE_MOUSEPC uint16 OPEN_STATE_LIMIT_REGION_FRESHMEAT,
OPEN_STATE_GUIDE_MULTIPLAYER uint16 OPEN_STATE_LIMIT_REGION_GLOBAL,
OPEN_STATE_GUIDE_DUNGEONREWARD uint16 OPEN_STATE_MULTIPLAYER,
OPEN_STATE_GUIDE_BLOSSOM uint16 OPEN_STATE_GUIDE_MOUSEPC,
OPEN_STATE_AVATAR_FASHION uint16 OPEN_STATE_GUIDE_MULTIPLAYER,
OPEN_STATE_PHOTOGRAPH uint16 OPEN_STATE_GUIDE_DUNGEONREWARD,
OPEN_STATE_GUIDE_KSLQUEST uint16 OPEN_STATE_GUIDE_BLOSSOM,
OPEN_STATE_PERSONAL_LINE uint16 OPEN_STATE_AVATAR_FASHION,
OPEN_STATE_GUIDE_PERSONAL_LINE uint16 OPEN_STATE_PHOTOGRAPH,
OPEN_STATE_GUIDE_APPEARANCE uint16 OPEN_STATE_GUIDE_KSLQUEST,
OPEN_STATE_GUIDE_PROCESS uint16 OPEN_STATE_PERSONAL_LINE,
OPEN_STATE_GUIDE_PERSONAL_LINE_KEY uint16 OPEN_STATE_GUIDE_PERSONAL_LINE,
OPEN_STATE_GUIDE_WIDGET uint16 OPEN_STATE_GUIDE_APPEARANCE,
OPEN_STATE_GUIDE_ACTIVITY_SKILL_ASTER uint16 OPEN_STATE_GUIDE_PROCESS,
OPEN_STATE_GUIDE_COLDCLIMATE uint16 OPEN_STATE_GUIDE_PERSONAL_LINE_KEY,
OPEN_STATE_DERIVATIVE_MALL uint16 OPEN_STATE_GUIDE_WIDGET,
OPEN_STATE_GUIDE_EXITMULTIPLAYER uint16 OPEN_STATE_GUIDE_ACTIVITY_SKILL_ASTER,
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD uint16 OPEN_STATE_GUIDE_COLDCLIMATE,
OPEN_STATE_GUIDE_THEATREMACHANICUS_REBUILD uint16 OPEN_STATE_DERIVATIVE_MALL,
OPEN_STATE_GUIDE_THEATREMACHANICUS_CARD uint16 OPEN_STATE_GUIDE_EXITMULTIPLAYER,
OPEN_STATE_GUIDE_THEATREMACHANICUS_MONSTER uint16 OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD,
OPEN_STATE_GUIDE_THEATREMACHANICUS_MISSION_CHECK uint16 OPEN_STATE_GUIDE_THEATREMACHANICUS_REBUILD,
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD_SELECT uint16 OPEN_STATE_GUIDE_THEATREMACHANICUS_CARD,
OPEN_STATE_GUIDE_THEATREMACHANICUS_CHALLENGE_START uint16 OPEN_STATE_GUIDE_THEATREMACHANICUS_MONSTER,
OPEN_STATE_GUIDE_CONVERT uint16 OPEN_STATE_GUIDE_THEATREMACHANICUS_MISSION_CHECK,
OPEN_STATE_GUIDE_THEATREMACHANICUS_MULTIPLAYER uint16 OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD_SELECT,
OPEN_STATE_GUIDE_COOP_TASK uint16 OPEN_STATE_GUIDE_THEATREMACHANICUS_CHALLENGE_START,
OPEN_STATE_GUIDE_HOMEWORLD_ADEPTIABODE uint16 OPEN_STATE_GUIDE_CONVERT,
OPEN_STATE_GUIDE_HOMEWORLD_DEPLOY uint16 OPEN_STATE_GUIDE_THEATREMACHANICUS_MULTIPLAYER,
OPEN_STATE_GUIDE_CHANNELLERSLAB_EQUIP uint16 OPEN_STATE_GUIDE_COOP_TASK,
OPEN_STATE_GUIDE_CHANNELLERSLAB_MP_SOLUTION uint16 OPEN_STATE_GUIDE_HOMEWORLD_ADEPTIABODE,
OPEN_STATE_GUIDE_CHANNELLERSLAB_POWER uint16 OPEN_STATE_GUIDE_HOMEWORLD_DEPLOY,
OPEN_STATE_GUIDE_HIDEANDSEEK_SKILL uint16 OPEN_STATE_GUIDE_CHANNELLERSLAB_EQUIP,
OPEN_STATE_GUIDE_HOMEWORLD_MAPLIST uint16 OPEN_STATE_GUIDE_CHANNELLERSLAB_MP_SOLUTION,
OPEN_STATE_GUIDE_RELICRESOLVE uint16 OPEN_STATE_GUIDE_CHANNELLERSLAB_POWER,
OPEN_STATE_GUIDE_GGUIDE uint16 OPEN_STATE_GUIDE_HIDEANDSEEK_SKILL,
OPEN_STATE_GUIDE_GGUIDE_HINT uint16 OPEN_STATE_GUIDE_HOMEWORLD_MAPLIST,
OPEN_STATE_CITY_REPUATION_MENGDE uint16 OPEN_STATE_GUIDE_RELICRESOLVE,
OPEN_STATE_CITY_REPUATION_LIYUE uint16 OPEN_STATE_GUIDE_GGUIDE,
OPEN_STATE_CITY_REPUATION_UI_HINT uint16 OPEN_STATE_GUIDE_GGUIDE_HINT,
OPEN_STATE_CITY_REPUATION_INAZUMA uint16 OPEN_STATE_CITY_REPUATION_MENGDE,
OPEN_STATE_SHOP_TYPE_MALL uint16 OPEN_STATE_CITY_REPUATION_LIYUE,
OPEN_STATE_SHOP_TYPE_RECOMMANDED uint16 OPEN_STATE_CITY_REPUATION_UI_HINT,
OPEN_STATE_SHOP_TYPE_GENESISCRYSTAL uint16 OPEN_STATE_CITY_REPUATION_INAZUMA,
OPEN_STATE_SHOP_TYPE_GIFTPACKAGE uint16 OPEN_STATE_SHOP_TYPE_MALL,
OPEN_STATE_SHOP_TYPE_PAIMON uint16 OPEN_STATE_SHOP_TYPE_RECOMMANDED,
OPEN_STATE_SHOP_TYPE_CITY uint16 OPEN_STATE_SHOP_TYPE_GENESISCRYSTAL,
OPEN_STATE_SHOP_TYPE_BLACKSMITH uint16 OPEN_STATE_SHOP_TYPE_GIFTPACKAGE,
OPEN_STATE_SHOP_TYPE_GROCERY uint16 OPEN_STATE_SHOP_TYPE_PAIMON,
OPEN_STATE_SHOP_TYPE_FOOD uint16 OPEN_STATE_SHOP_TYPE_CITY,
OPEN_STATE_SHOP_TYPE_SEA_LAMP uint16 OPEN_STATE_SHOP_TYPE_BLACKSMITH,
OPEN_STATE_SHOP_TYPE_VIRTUAL_SHOP uint16 OPEN_STATE_SHOP_TYPE_GROCERY,
OPEN_STATE_SHOP_TYPE_LIYUE_GROCERY uint16 OPEN_STATE_SHOP_TYPE_FOOD,
OPEN_STATE_SHOP_TYPE_LIYUE_SOUVENIR uint16 OPEN_STATE_SHOP_TYPE_SEA_LAMP,
OPEN_STATE_SHOP_TYPE_LIYUE_RESTAURANT uint16 OPEN_STATE_SHOP_TYPE_VIRTUAL_SHOP,
OPEN_STATE_SHOP_TYPE_INAZUMA_SOUVENIR uint16 OPEN_STATE_SHOP_TYPE_LIYUE_GROCERY,
OPEN_STATE_SHOP_TYPE_NPC_TOMOKI uint16 OPEN_STATE_SHOP_TYPE_LIYUE_SOUVENIR,
OPEN_ADVENTURE_MANUAL uint16 OPEN_STATE_SHOP_TYPE_LIYUE_RESTAURANT,
OPEN_ADVENTURE_MANUAL_CITY_MENGDE uint16 OPEN_STATE_SHOP_TYPE_INAZUMA_SOUVENIR,
OPEN_ADVENTURE_MANUAL_CITY_LIYUE uint16 OPEN_STATE_SHOP_TYPE_NPC_TOMOKI,
OPEN_ADVENTURE_MANUAL_MONSTER uint16 OPEN_ADVENTURE_MANUAL,
OPEN_ADVENTURE_MANUAL_BOSS_DUNGEON uint16 OPEN_ADVENTURE_MANUAL_CITY_MENGDE,
OPEN_STATE_ACTIVITY_SEALAMP uint16 OPEN_ADVENTURE_MANUAL_CITY_LIYUE,
OPEN_STATE_ACTIVITY_SEALAMP_TAB2 uint16 OPEN_ADVENTURE_MANUAL_MONSTER,
OPEN_STATE_ACTIVITY_SEALAMP_TAB3 uint16 OPEN_ADVENTURE_MANUAL_BOSS_DUNGEON,
OPEN_STATE_BATTLE_PASS uint16 OPEN_STATE_ACTIVITY_SEALAMP,
OPEN_STATE_BATTLE_PASS_ENTRY uint16 OPEN_STATE_ACTIVITY_SEALAMP_TAB2,
OPEN_STATE_ACTIVITY_CRUCIBLE uint16 OPEN_STATE_ACTIVITY_SEALAMP_TAB3,
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_OPEN uint16 OPEN_STATE_BATTLE_PASS,
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_CLOSE uint16 OPEN_STATE_BATTLE_PASS_ENTRY,
OPEN_STATE_ACTIVITY_ENTRY_OPEN uint16 OPEN_STATE_ACTIVITY_CRUCIBLE,
OPEN_STATE_MENGDE_INFUSEDCRYSTAL uint16 OPEN_STATE_ACTIVITY_NEWBEEBOUNS_OPEN,
OPEN_STATE_LIYUE_INFUSEDCRYSTAL uint16 OPEN_STATE_ACTIVITY_NEWBEEBOUNS_CLOSE,
OPEN_STATE_SNOW_MOUNTAIN_ELDER_TREE uint16 OPEN_STATE_ACTIVITY_ENTRY_OPEN,
OPEN_STATE_MIRACLE_RING uint16 OPEN_STATE_MENGDE_INFUSEDCRYSTAL,
OPEN_STATE_COOP_LINE uint16 OPEN_STATE_LIYUE_INFUSEDCRYSTAL,
OPEN_STATE_INAZUMA_INFUSEDCRYSTAL uint16 OPEN_STATE_SNOW_MOUNTAIN_ELDER_TREE,
OPEN_STATE_FISH uint16 OPEN_STATE_MIRACLE_RING,
OPEN_STATE_GUIDE_SUMO_TEAM_SKILL uint16 OPEN_STATE_COOP_LINE,
OPEN_STATE_GUIDE_FISH_RECIPE uint16 OPEN_STATE_INAZUMA_INFUSEDCRYSTAL,
OPEN_STATE_HOME uint16 OPEN_STATE_FISH,
OPEN_STATE_ACTIVITY_HOMEWORLD uint16 OPEN_STATE_GUIDE_SUMO_TEAM_SKILL,
OPEN_STATE_ADEPTIABODE uint16 OPEN_STATE_GUIDE_FISH_RECIPE,
OPEN_STATE_HOME_AVATAR uint16 OPEN_STATE_HOME,
OPEN_STATE_HOME_EDIT uint16 OPEN_STATE_ACTIVITY_HOMEWORLD,
OPEN_STATE_HOME_EDIT_TIPS uint16 OPEN_STATE_ADEPTIABODE,
OPEN_STATE_RELIQUARY_DECOMPOSE uint16 OPEN_STATE_HOME_AVATAR,
OPEN_STATE_ACTIVITY_H5 uint16 OPEN_STATE_HOME_EDIT,
OPEN_STATE_ORAIONOKAMI uint16 OPEN_STATE_HOME_EDIT_TIPS,
OPEN_STATE_GUIDE_CHESS_MISSION_CHECK uint16 OPEN_STATE_RELIQUARY_DECOMPOSE,
OPEN_STATE_GUIDE_CHESS_BUILD uint16 OPEN_STATE_ACTIVITY_H5,
OPEN_STATE_GUIDE_CHESS_WIND_TOWER_CIRCLE uint16 OPEN_STATE_ORAIONOKAMI,
OPEN_STATE_GUIDE_CHESS_CARD_SELECT uint16 OPEN_STATE_GUIDE_CHESS_MISSION_CHECK,
OPEN_STATE_INAZUMA_MAINQUEST_FINISHED uint16 OPEN_STATE_GUIDE_CHESS_BUILD,
OPEN_STATE_PAIMON_LVINFO uint16 OPEN_STATE_GUIDE_CHESS_WIND_TOWER_CIRCLE,
OPEN_STATE_TELEPORT_HUD uint16 OPEN_STATE_GUIDE_CHESS_CARD_SELECT,
OPEN_STATE_GUIDE_MAP_UNLOCK uint16 OPEN_STATE_INAZUMA_MAINQUEST_FINISHED,
OPEN_STATE_GUIDE_PAIMON_LVINFO uint16 OPEN_STATE_PAIMON_LVINFO,
OPEN_STATE_GUIDE_AMBORTRANSPORT uint16 OPEN_STATE_TELEPORT_HUD,
OPEN_STATE_GUIDE_FLY_SECOND uint16 OPEN_STATE_GUIDE_MAP_UNLOCK,
OPEN_STATE_GUIDE_KAEYA_CLUE uint16 OPEN_STATE_GUIDE_PAIMON_LVINFO,
OPEN_STATE_CAPTURE_CODEX uint16 OPEN_STATE_GUIDE_AMBORTRANSPORT,
OPEN_STATE_ACTIVITY_FISH_OPEN uint16 OPEN_STATE_GUIDE_FLY_SECOND,
OPEN_STATE_ACTIVITY_FISH_CLOSE uint16 OPEN_STATE_GUIDE_KAEYA_CLUE,
OPEN_STATE_GUIDE_ROGUE_MAP uint16 OPEN_STATE_CAPTURE_CODEX,
OPEN_STATE_GUIDE_ROGUE_RUNE uint16 OPEN_STATE_ACTIVITY_FISH_OPEN,
OPEN_STATE_GUIDE_BARTENDER_FORMULA uint16 OPEN_STATE_ACTIVITY_FISH_CLOSE,
OPEN_STATE_GUIDE_BARTENDER_MIX uint16 OPEN_STATE_GUIDE_ROGUE_MAP,
OPEN_STATE_GUIDE_BARTENDER_CUP uint16 OPEN_STATE_GUIDE_ROGUE_RUNE,
OPEN_STATE_GUIDE_MAIL_FAVORITES uint16 OPEN_STATE_GUIDE_BARTENDER_FORMULA,
OPEN_STATE_GUIDE_POTION_CONFIGURE uint16 OPEN_STATE_GUIDE_BARTENDER_MIX,
OPEN_STATE_GUIDE_LANV2_FIREWORK uint16 OPEN_STATE_GUIDE_BARTENDER_CUP,
OPEN_STATE_LOADINGTIPS_ENKANOMIYA uint16 OPEN_STATE_GUIDE_MAIL_FAVORITES,
OPEN_STATE_MICHIAE_CASKET uint16 OPEN_STATE_GUIDE_POTION_CONFIGURE,
OPEN_STATE_MAIL_COLLECT_UNLOCK_RED_POINT uint16 OPEN_STATE_GUIDE_LANV2_FIREWORK,
OPEN_STATE_LUMEN_STONE uint16 OPEN_STATE_LOADINGTIPS_ENKANOMIYA,
OPEN_STATE_GUIDE_CRYSTALLINK_BUFF uint16 OPEN_STATE_MICHIAE_CASKET,
} OPEN_STATE_MAIL_COLLECT_UNLOCK_RED_POINT,
OPEN_STATE_LUMEN_STONE,
func InitOpenStateConst() { OPEN_STATE_GUIDE_CRYSTALLINK_BUFF,
OpenStateConst = new(OpenState) }
OpenStateConst.OPEN_STATE_NONE = 0
OpenStateConst.OPEN_STATE_PAIMON = 1
OpenStateConst.OPEN_STATE_PAIMON_NAVIGATION = 2
OpenStateConst.OPEN_STATE_AVATAR_PROMOTE = 3
OpenStateConst.OPEN_STATE_AVATAR_TALENT = 4
OpenStateConst.OPEN_STATE_WEAPON_PROMOTE = 5
OpenStateConst.OPEN_STATE_WEAPON_AWAKEN = 6
OpenStateConst.OPEN_STATE_QUEST_REMIND = 7
OpenStateConst.OPEN_STATE_GAME_GUIDE = 8
OpenStateConst.OPEN_STATE_COOK = 9
OpenStateConst.OPEN_STATE_WEAPON_UPGRADE = 10
OpenStateConst.OPEN_STATE_RELIQUARY_UPGRADE = 11
OpenStateConst.OPEN_STATE_RELIQUARY_PROMOTE = 12
OpenStateConst.OPEN_STATE_WEAPON_PROMOTE_GUIDE = 13
OpenStateConst.OPEN_STATE_WEAPON_CHANGE_GUIDE = 14
OpenStateConst.OPEN_STATE_PLAYER_LVUP_GUIDE = 15
OpenStateConst.OPEN_STATE_FRESHMAN_GUIDE = 16
OpenStateConst.OPEN_STATE_SKIP_FRESHMAN_GUIDE = 17
OpenStateConst.OPEN_STATE_GUIDE_MOVE_CAMERA = 18
OpenStateConst.OPEN_STATE_GUIDE_SCALE_CAMERA = 19
OpenStateConst.OPEN_STATE_GUIDE_KEYBOARD = 20
OpenStateConst.OPEN_STATE_GUIDE_MOVE = 21
OpenStateConst.OPEN_STATE_GUIDE_JUMP = 22
OpenStateConst.OPEN_STATE_GUIDE_SPRINT = 23
OpenStateConst.OPEN_STATE_GUIDE_MAP = 24
OpenStateConst.OPEN_STATE_GUIDE_ATTACK = 25
OpenStateConst.OPEN_STATE_GUIDE_FLY = 26
OpenStateConst.OPEN_STATE_GUIDE_TALENT = 27
OpenStateConst.OPEN_STATE_GUIDE_RELIC = 28
OpenStateConst.OPEN_STATE_GUIDE_RELIC_PROM = 29
OpenStateConst.OPEN_STATE_COMBINE = 30
OpenStateConst.OPEN_STATE_GACHA = 31
OpenStateConst.OPEN_STATE_GUIDE_GACHA = 32
OpenStateConst.OPEN_STATE_GUIDE_TEAM = 33
OpenStateConst.OPEN_STATE_GUIDE_PROUD = 34
OpenStateConst.OPEN_STATE_GUIDE_AVATAR_PROMOTE = 35
OpenStateConst.OPEN_STATE_GUIDE_ADVENTURE_CARD = 36
OpenStateConst.OPEN_STATE_FORGE = 37
OpenStateConst.OPEN_STATE_GUIDE_BAG = 38
OpenStateConst.OPEN_STATE_EXPEDITION = 39
OpenStateConst.OPEN_STATE_GUIDE_ADVENTURE_DAILYTASK = 40
OpenStateConst.OPEN_STATE_GUIDE_ADVENTURE_DUNGEON = 41
OpenStateConst.OPEN_STATE_TOWER = 42
OpenStateConst.OPEN_STATE_WORLD_STAMINA = 43
OpenStateConst.OPEN_STATE_TOWER_FIRST_ENTER = 44
OpenStateConst.OPEN_STATE_RESIN = 45
OpenStateConst.OPEN_STATE_LIMIT_REGION_FRESHMEAT = 47
OpenStateConst.OPEN_STATE_LIMIT_REGION_GLOBAL = 48
OpenStateConst.OPEN_STATE_MULTIPLAYER = 49
OpenStateConst.OPEN_STATE_GUIDE_MOUSEPC = 50
OpenStateConst.OPEN_STATE_GUIDE_MULTIPLAYER = 51
OpenStateConst.OPEN_STATE_GUIDE_DUNGEONREWARD = 52
OpenStateConst.OPEN_STATE_GUIDE_BLOSSOM = 53
OpenStateConst.OPEN_STATE_AVATAR_FASHION = 54
OpenStateConst.OPEN_STATE_PHOTOGRAPH = 55
OpenStateConst.OPEN_STATE_GUIDE_KSLQUEST = 56
OpenStateConst.OPEN_STATE_PERSONAL_LINE = 57
OpenStateConst.OPEN_STATE_GUIDE_PERSONAL_LINE = 58
OpenStateConst.OPEN_STATE_GUIDE_APPEARANCE = 59
OpenStateConst.OPEN_STATE_GUIDE_PROCESS = 60
OpenStateConst.OPEN_STATE_GUIDE_PERSONAL_LINE_KEY = 61
OpenStateConst.OPEN_STATE_GUIDE_WIDGET = 62
OpenStateConst.OPEN_STATE_GUIDE_ACTIVITY_SKILL_ASTER = 63
OpenStateConst.OPEN_STATE_GUIDE_COLDCLIMATE = 64
OpenStateConst.OPEN_STATE_DERIVATIVE_MALL = 65
OpenStateConst.OPEN_STATE_GUIDE_EXITMULTIPLAYER = 66
OpenStateConst.OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD = 67
OpenStateConst.OPEN_STATE_GUIDE_THEATREMACHANICUS_REBUILD = 68
OpenStateConst.OPEN_STATE_GUIDE_THEATREMACHANICUS_CARD = 69
OpenStateConst.OPEN_STATE_GUIDE_THEATREMACHANICUS_MONSTER = 70
OpenStateConst.OPEN_STATE_GUIDE_THEATREMACHANICUS_MISSION_CHECK = 71
OpenStateConst.OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD_SELECT = 72
OpenStateConst.OPEN_STATE_GUIDE_THEATREMACHANICUS_CHALLENGE_START = 73
OpenStateConst.OPEN_STATE_GUIDE_CONVERT = 74
OpenStateConst.OPEN_STATE_GUIDE_THEATREMACHANICUS_MULTIPLAYER = 75
OpenStateConst.OPEN_STATE_GUIDE_COOP_TASK = 76
OpenStateConst.OPEN_STATE_GUIDE_HOMEWORLD_ADEPTIABODE = 77
OpenStateConst.OPEN_STATE_GUIDE_HOMEWORLD_DEPLOY = 78
OpenStateConst.OPEN_STATE_GUIDE_CHANNELLERSLAB_EQUIP = 79
OpenStateConst.OPEN_STATE_GUIDE_CHANNELLERSLAB_MP_SOLUTION = 80
OpenStateConst.OPEN_STATE_GUIDE_CHANNELLERSLAB_POWER = 81
OpenStateConst.OPEN_STATE_GUIDE_HIDEANDSEEK_SKILL = 82
OpenStateConst.OPEN_STATE_GUIDE_HOMEWORLD_MAPLIST = 83
OpenStateConst.OPEN_STATE_GUIDE_RELICRESOLVE = 84
OpenStateConst.OPEN_STATE_GUIDE_GGUIDE = 85
OpenStateConst.OPEN_STATE_GUIDE_GGUIDE_HINT = 86
OpenStateConst.OPEN_STATE_CITY_REPUATION_MENGDE = 800
OpenStateConst.OPEN_STATE_CITY_REPUATION_LIYUE = 801
OpenStateConst.OPEN_STATE_CITY_REPUATION_UI_HINT = 802
OpenStateConst.OPEN_STATE_CITY_REPUATION_INAZUMA = 803
OpenStateConst.OPEN_STATE_SHOP_TYPE_MALL = 900
OpenStateConst.OPEN_STATE_SHOP_TYPE_RECOMMANDED = 901
OpenStateConst.OPEN_STATE_SHOP_TYPE_GENESISCRYSTAL = 902
OpenStateConst.OPEN_STATE_SHOP_TYPE_GIFTPACKAGE = 903
OpenStateConst.OPEN_STATE_SHOP_TYPE_PAIMON = 1001
OpenStateConst.OPEN_STATE_SHOP_TYPE_CITY = 1002
OpenStateConst.OPEN_STATE_SHOP_TYPE_BLACKSMITH = 1003
OpenStateConst.OPEN_STATE_SHOP_TYPE_GROCERY = 1004
OpenStateConst.OPEN_STATE_SHOP_TYPE_FOOD = 1005
OpenStateConst.OPEN_STATE_SHOP_TYPE_SEA_LAMP = 1006
OpenStateConst.OPEN_STATE_SHOP_TYPE_VIRTUAL_SHOP = 1007
OpenStateConst.OPEN_STATE_SHOP_TYPE_LIYUE_GROCERY = 1008
OpenStateConst.OPEN_STATE_SHOP_TYPE_LIYUE_SOUVENIR = 1009
OpenStateConst.OPEN_STATE_SHOP_TYPE_LIYUE_RESTAURANT = 1010
OpenStateConst.OPEN_STATE_SHOP_TYPE_INAZUMA_SOUVENIR = 1011
OpenStateConst.OPEN_STATE_SHOP_TYPE_NPC_TOMOKI = 1012
OpenStateConst.OPEN_ADVENTURE_MANUAL = 1100
OpenStateConst.OPEN_ADVENTURE_MANUAL_CITY_MENGDE = 1101
OpenStateConst.OPEN_ADVENTURE_MANUAL_CITY_LIYUE = 1102
OpenStateConst.OPEN_ADVENTURE_MANUAL_MONSTER = 1103
OpenStateConst.OPEN_ADVENTURE_MANUAL_BOSS_DUNGEON = 1104
OpenStateConst.OPEN_STATE_ACTIVITY_SEALAMP = 1200
OpenStateConst.OPEN_STATE_ACTIVITY_SEALAMP_TAB2 = 1201
OpenStateConst.OPEN_STATE_ACTIVITY_SEALAMP_TAB3 = 1202
OpenStateConst.OPEN_STATE_BATTLE_PASS = 1300
OpenStateConst.OPEN_STATE_BATTLE_PASS_ENTRY = 1301
OpenStateConst.OPEN_STATE_ACTIVITY_CRUCIBLE = 1400
OpenStateConst.OPEN_STATE_ACTIVITY_NEWBEEBOUNS_OPEN = 1401
OpenStateConst.OPEN_STATE_ACTIVITY_NEWBEEBOUNS_CLOSE = 1402
OpenStateConst.OPEN_STATE_ACTIVITY_ENTRY_OPEN = 1403
OpenStateConst.OPEN_STATE_MENGDE_INFUSEDCRYSTAL = 1404
OpenStateConst.OPEN_STATE_LIYUE_INFUSEDCRYSTAL = 1405
OpenStateConst.OPEN_STATE_SNOW_MOUNTAIN_ELDER_TREE = 1406
OpenStateConst.OPEN_STATE_MIRACLE_RING = 1407
OpenStateConst.OPEN_STATE_COOP_LINE = 1408
OpenStateConst.OPEN_STATE_INAZUMA_INFUSEDCRYSTAL = 1409
OpenStateConst.OPEN_STATE_FISH = 1410
OpenStateConst.OPEN_STATE_GUIDE_SUMO_TEAM_SKILL = 1411
OpenStateConst.OPEN_STATE_GUIDE_FISH_RECIPE = 1412
OpenStateConst.OPEN_STATE_HOME = 1500
OpenStateConst.OPEN_STATE_ACTIVITY_HOMEWORLD = 1501
OpenStateConst.OPEN_STATE_ADEPTIABODE = 1502
OpenStateConst.OPEN_STATE_HOME_AVATAR = 1503
OpenStateConst.OPEN_STATE_HOME_EDIT = 1504
OpenStateConst.OPEN_STATE_HOME_EDIT_TIPS = 1505
OpenStateConst.OPEN_STATE_RELIQUARY_DECOMPOSE = 1600
OpenStateConst.OPEN_STATE_ACTIVITY_H5 = 1700
OpenStateConst.OPEN_STATE_ORAIONOKAMI = 2000
OpenStateConst.OPEN_STATE_GUIDE_CHESS_MISSION_CHECK = 2001
OpenStateConst.OPEN_STATE_GUIDE_CHESS_BUILD = 2002
OpenStateConst.OPEN_STATE_GUIDE_CHESS_WIND_TOWER_CIRCLE = 2003
OpenStateConst.OPEN_STATE_GUIDE_CHESS_CARD_SELECT = 2004
OpenStateConst.OPEN_STATE_INAZUMA_MAINQUEST_FINISHED = 2005
OpenStateConst.OPEN_STATE_PAIMON_LVINFO = 2100
OpenStateConst.OPEN_STATE_TELEPORT_HUD = 2101
OpenStateConst.OPEN_STATE_GUIDE_MAP_UNLOCK = 2102
OpenStateConst.OPEN_STATE_GUIDE_PAIMON_LVINFO = 2103
OpenStateConst.OPEN_STATE_GUIDE_AMBORTRANSPORT = 2104
OpenStateConst.OPEN_STATE_GUIDE_FLY_SECOND = 2105
OpenStateConst.OPEN_STATE_GUIDE_KAEYA_CLUE = 2106
OpenStateConst.OPEN_STATE_CAPTURE_CODEX = 2107
OpenStateConst.OPEN_STATE_ACTIVITY_FISH_OPEN = 2200
OpenStateConst.OPEN_STATE_ACTIVITY_FISH_CLOSE = 2201
OpenStateConst.OPEN_STATE_GUIDE_ROGUE_MAP = 2205
OpenStateConst.OPEN_STATE_GUIDE_ROGUE_RUNE = 2206
OpenStateConst.OPEN_STATE_GUIDE_BARTENDER_FORMULA = 2210
OpenStateConst.OPEN_STATE_GUIDE_BARTENDER_MIX = 2211
OpenStateConst.OPEN_STATE_GUIDE_BARTENDER_CUP = 2212
OpenStateConst.OPEN_STATE_GUIDE_MAIL_FAVORITES = 2400
OpenStateConst.OPEN_STATE_GUIDE_POTION_CONFIGURE = 2401
OpenStateConst.OPEN_STATE_GUIDE_LANV2_FIREWORK = 2402
OpenStateConst.OPEN_STATE_LOADINGTIPS_ENKANOMIYA = 2403
OpenStateConst.OPEN_STATE_MICHIAE_CASKET = 2500
OpenStateConst.OPEN_STATE_MAIL_COLLECT_UNLOCK_RED_POINT = 2501
OpenStateConst.OPEN_STATE_LUMEN_STONE = 2600
OpenStateConst.OPEN_STATE_GUIDE_CRYSTALLINK_BUFF = 2601
} }

View File

@@ -1,95 +1,46 @@
package constant package constant
var PlayerPropertyConst *PlayerProperty const (
PLAYER_PROP_EXP uint16 = 1001 // 角色经验
type PlayerProperty struct { PLAYER_PROP_BREAK_LEVEL uint16 = 1002 // 角色突破等阶
PROP_EXP uint16 // 角色经验 PLAYER_PROP_SATIATION_VAL uint16 = 1003 // 角色饱食度
PROP_BREAK_LEVEL uint16 // 角色突破等阶 PLAYER_PROP_SATIATION_PENALTY_TIME uint16 = 1004 // 角色饱食度溢出
PROP_SATIATION_VAL uint16 // 角色饱食度 PLAYER_PROP_LEVEL uint16 = 4001 // 角色等级
PROP_SATIATION_PENALTY_TIME uint16 // 角色饱食度溢出 PLAYER_PROP_LAST_CHANGE_AVATAR_TIME uint16 = 10001 // 上一次改变角色的时间 暂不确定
PROP_LEVEL uint16 // 角色等级 PLAYER_PROP_MAX_SPRING_VOLUME uint16 = 10002 // 七天神像最大恢复血量 0-8500000
PROP_LAST_CHANGE_AVATAR_TIME uint16 // 上一次改变角色的时间 暂不确定 PLAYER_PROP_CUR_SPRING_VOLUME uint16 = 10003 // 七天神像当前血量 0-PROP_MAX_SPRING_VOLUME
PROP_MAX_SPRING_VOLUME uint16 // 七天神像最大恢复血量 0-8500000 PLAYER_PROP_IS_SPRING_AUTO_USE uint16 = 10004 // 是否开启靠近自动回血 0 1
PROP_CUR_SPRING_VOLUME uint16 // 七天神像当前血量 0-PROP_MAX_SPRING_VOLUME PLAYER_PROP_SPRING_AUTO_USE_PERCENT uint16 = 10005 // 自动回血百分比 0-100
PROP_IS_SPRING_AUTO_USE uint16 // 是否开启靠近自动回血 0 1 PLAYER_PROP_IS_FLYABLE uint16 = 10006 // 禁止使用风之翼 0 1
PROP_SPRING_AUTO_USE_PERCENT uint16 // 自动回血百分比 0-100 PLAYER_PROP_IS_WEATHER_LOCKED uint16 = 10007 // 游戏内天气锁定
PROP_IS_FLYABLE uint16 // 禁止使用风之翼 0 1 PLAYER_PROP_IS_GAME_TIME_LOCKED uint16 = 10008 // 游戏内时间锁定
PROP_IS_WEATHER_LOCKED uint16 // 游戏内天气锁定 PLAYER_PROP_IS_TRANSFERABLE uint16 = 10009 // 是否禁止传送 0 1
PROP_IS_GAME_TIME_LOCKED uint16 // 游戏内时间锁定 PLAYER_PROP_MAX_STAMINA uint16 = 10010 // 最大体力 0-24000
PROP_IS_TRANSFERABLE uint16 // 是否禁止传送 0 1 PLAYER_PROP_CUR_PERSIST_STAMINA uint16 = 10011 // 当前体力 0-PROP_MAX_STAMINA
PROP_MAX_STAMINA uint16 // 最大体力 0-24000 PLAYER_PROP_CUR_TEMPORARY_STAMINA uint16 = 10012 // 当前临时体力 暂不确定
PROP_CUR_PERSIST_STAMINA uint16 // 当前体力 0-PROP_MAX_STAMINA PLAYER_PROP_PLAYER_LEVEL uint16 = 10013 // 冒险等级
PROP_CUR_TEMPORARY_STAMINA uint16 // 当前临时体力 暂不确定 PLAYER_PROP_PLAYER_EXP uint16 = 10014 // 冒险经验
PROP_PLAYER_LEVEL uint16 // 冒险等级 PLAYER_PROP_PLAYER_HCOIN uint16 = 10015 // 原石 可以为负数
PROP_PLAYER_EXP uint16 // 冒险经验 PLAYER_PROP_PLAYER_SCOIN uint16 = 10016 // 摩拉
PROP_PLAYER_HCOIN uint16 // 原石 可以为负数 PLAYER_PROP_PLAYER_MP_SETTING_TYPE uint16 = 10017 // 多人游戏世界权限 0禁止加入 1直接加入 2需要申请
PROP_PLAYER_SCOIN uint16 // 摩拉 PLAYER_PROP_IS_MP_MODE_AVAILABLE uint16 = 10018 // 玩家当前的世界是否可加入 0 1 例如任务中就不可加入
PROP_PLAYER_MP_SETTING_TYPE uint16 // 多人游戏世界权限 0禁止加入 1直接加入 2需要申请 PLAYER_PROP_PLAYER_WORLD_LEVEL uint16 = 10019 // 世界等级 0-8
PROP_IS_MP_MODE_AVAILABLE uint16 // 玩家当前的世界是否可加入 0 1 例如任务中就不可加入 PLAYER_PROP_PLAYER_RESIN uint16 = 10020 // 树脂 0-2000
PROP_PLAYER_WORLD_LEVEL uint16 // 世界等级 0-8 PLAYER_PROP_PLAYER_WAIT_SUB_HCOIN uint16 = 10022 // 暂存的原石 暂不确定
PROP_PLAYER_RESIN uint16 // 树脂 0-2000 PLAYER_PROP_PLAYER_WAIT_SUB_SCOIN uint16 = 10023 // 暂存的摩拉 暂不确定
PROP_PLAYER_WAIT_SUB_HCOIN uint16 // 暂存的原石 暂不确定 PLAYER_PROP_IS_ONLY_MP_WITH_PS_PLAYER uint16 = 10024 // 当前玩家多人世界里是否有PS主机玩家 0 1
PROP_PLAYER_WAIT_SUB_SCOIN uint16 // 暂存的摩拉 暂不确定 PLAYER_PROP_PLAYER_MCOIN uint16 = 10025 // 创世结晶 可以为负数
PROP_IS_ONLY_MP_WITH_PS_PLAYER uint16 // 当前玩家多人世界里是否有PS主机玩家 0 1 PLAYER_PROP_PLAYER_WAIT_SUB_MCOIN uint16 = 10026 // 暂存的创世结晶 暂不确定
PROP_PLAYER_MCOIN uint16 // 创世结晶 可以为负数 PLAYER_PROP_PLAYER_LEGENDARY_KEY uint16 = 10027 // 传说任务钥匙
PROP_PLAYER_WAIT_SUB_MCOIN uint16 // 暂存的创世结晶 暂不确定 PLAYER_PROP_IS_HAS_FIRST_SHARE uint16 = 10028 // 是否拥有抽卡结果首次分享奖励 暂不确定
PROP_PLAYER_LEGENDARY_KEY uint16 // 传说任务钥匙 PLAYER_PROP_PLAYER_FORGE_POINT uint16 = 10029 // 锻造相关
PROP_IS_HAS_FIRST_SHARE uint16 // 是否拥有抽卡结果首次分享奖励 暂不确定 PLAYER_PROP_CUR_CLIMATE_METER uint16 = 10035 // 天气相关
PROP_PLAYER_FORGE_POINT uint16 // 锻造相关 PLAYER_PROP_CUR_CLIMATE_TYPE uint16 = 10036 // 天气相关
PROP_CUR_CLIMATE_METER uint16 // 天气相关 PLAYER_PROP_CUR_CLIMATE_AREA_ID uint16 = 10037 // 天气相关
PROP_CUR_CLIMATE_TYPE uint16 // 天气相关 PLAYER_PROP_CUR_CLIMATE_AREA_CLIMATE_TYPE uint16 = 10038 // 天气相关
PROP_CUR_CLIMATE_AREA_ID uint16 // 天气相关 PLAYER_PROP_PLAYER_WORLD_LEVEL_LIMIT uint16 = 10039 // 降低世界等级到此等级 暂不确定
PROP_CUR_CLIMATE_AREA_CLIMATE_TYPE uint16 // 天气相关 PLAYER_PROP_PLAYER_WORLD_LEVEL_ADJUST_CD uint16 = 10040 // 降低世界等级的CD
PROP_PLAYER_WORLD_LEVEL_LIMIT uint16 // 降低世界等级到此等级 暂不确定 PLAYER_PROP_PLAYER_LEGENDARY_DAILY_TASK_NUM uint16 = 10041 // 传说每日任务数量 暂不确定
PROP_PLAYER_WORLD_LEVEL_ADJUST_CD uint16 // 降低世界等级的CD PLAYER_PROP_PLAYER_HOME_COIN uint16 = 10042 // 洞天宝钱
PROP_PLAYER_LEGENDARY_DAILY_TASK_NUM uint16 // 传说每日任务数量 暂不确定 PLAYER_PROP_PLAYER_WAIT_SUB_HOME_COIN uint16 = 10043 // 暂存的洞天宝钱 暂不确定
PROP_PLAYER_HOME_COIN uint16 // 洞天宝钱 )
PROP_PLAYER_WAIT_SUB_HOME_COIN uint16 // 暂存的洞天宝钱 暂不确定
}
func InitPlayerPropertyConst() {
PlayerPropertyConst = new(PlayerProperty)
PlayerPropertyConst.PROP_EXP = 1001
PlayerPropertyConst.PROP_BREAK_LEVEL = 1002
PlayerPropertyConst.PROP_SATIATION_VAL = 1003
PlayerPropertyConst.PROP_SATIATION_PENALTY_TIME = 1004
PlayerPropertyConst.PROP_LEVEL = 4001
PlayerPropertyConst.PROP_LAST_CHANGE_AVATAR_TIME = 10001
PlayerPropertyConst.PROP_MAX_SPRING_VOLUME = 10002
PlayerPropertyConst.PROP_CUR_SPRING_VOLUME = 10003
PlayerPropertyConst.PROP_IS_SPRING_AUTO_USE = 10004
PlayerPropertyConst.PROP_SPRING_AUTO_USE_PERCENT = 10005
PlayerPropertyConst.PROP_IS_FLYABLE = 10006
PlayerPropertyConst.PROP_IS_WEATHER_LOCKED = 10007
PlayerPropertyConst.PROP_IS_GAME_TIME_LOCKED = 10008
PlayerPropertyConst.PROP_IS_TRANSFERABLE = 10009
PlayerPropertyConst.PROP_MAX_STAMINA = 10010
PlayerPropertyConst.PROP_CUR_PERSIST_STAMINA = 10011
PlayerPropertyConst.PROP_CUR_TEMPORARY_STAMINA = 10012
PlayerPropertyConst.PROP_PLAYER_LEVEL = 10013
PlayerPropertyConst.PROP_PLAYER_EXP = 10014
PlayerPropertyConst.PROP_PLAYER_HCOIN = 10015
PlayerPropertyConst.PROP_PLAYER_SCOIN = 10016
PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE = 10017
PlayerPropertyConst.PROP_IS_MP_MODE_AVAILABLE = 10018
PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL = 10019
PlayerPropertyConst.PROP_PLAYER_RESIN = 10020
PlayerPropertyConst.PROP_PLAYER_WAIT_SUB_HCOIN = 10022
PlayerPropertyConst.PROP_PLAYER_WAIT_SUB_SCOIN = 10023
PlayerPropertyConst.PROP_IS_ONLY_MP_WITH_PS_PLAYER = 10024
PlayerPropertyConst.PROP_PLAYER_MCOIN = 10025
PlayerPropertyConst.PROP_PLAYER_WAIT_SUB_MCOIN = 10026
PlayerPropertyConst.PROP_PLAYER_LEGENDARY_KEY = 10027
PlayerPropertyConst.PROP_IS_HAS_FIRST_SHARE = 10028
PlayerPropertyConst.PROP_PLAYER_FORGE_POINT = 10029
PlayerPropertyConst.PROP_CUR_CLIMATE_METER = 10035
PlayerPropertyConst.PROP_CUR_CLIMATE_TYPE = 10036
PlayerPropertyConst.PROP_CUR_CLIMATE_AREA_ID = 10037
PlayerPropertyConst.PROP_CUR_CLIMATE_AREA_CLIMATE_TYPE = 10038
PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL_LIMIT = 10039
PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL_ADJUST_CD = 10040
PlayerPropertyConst.PROP_PLAYER_LEGENDARY_DAILY_TASK_NUM = 10041
PlayerPropertyConst.PROP_PLAYER_HOME_COIN = 10042
PlayerPropertyConst.PROP_PLAYER_WAIT_SUB_HOME_COIN = 10043
}

View File

@@ -1,25 +1,11 @@
package constant package constant
var SceneTypeConst *SceneType const (
SCENE_TYPE_NONE uint16 = 0
type SceneType struct { SCENE_TYPE_WORLD uint16 = 1
SCENE_NONE uint16 SCENE_TYPE_DUNGEON uint16 = 2
SCENE_WORLD uint16 SCENE_TYPE_ROOM uint16 = 3
SCENE_DUNGEON uint16 SCENE_TYPE_HOME_WORLD uint16 = 4
SCENE_ROOM uint16 SCENE_TYPE_HOME_ROOM uint16 = 5
SCENE_HOME_WORLD uint16 SCENE_TYPE_ACTIVITY uint16 = 6
SCENE_HOME_ROOM uint16 )
SCENE_ACTIVITY uint16
}
func InitSceneTypeConst() {
SceneTypeConst = new(SceneType)
SceneTypeConst.SCENE_NONE = 0
SceneTypeConst.SCENE_WORLD = 1
SceneTypeConst.SCENE_DUNGEON = 2
SceneTypeConst.SCENE_ROOM = 3
SceneTypeConst.SCENE_HOME_WORLD = 4
SceneTypeConst.SCENE_HOME_ROOM = 5
SceneTypeConst.SCENE_ACTIVITY = 6
}

View File

@@ -1,65 +1,30 @@
package constant package constant
var StaminaCostConst *StaminaCost const (
type StaminaCost struct {
// 消耗耐力 // 消耗耐力
CLIMBING_BASE int32 // 缓慢攀爬基数 STAMINA_COST_CLIMBING_BASE int32 = -100 // 缓慢攀爬基数
CLIMB_START int32 // 攀爬开始 STAMINA_COST_CLIMB_START int32 = -500 // 攀爬开始
CLIMB_JUMP int32 // 攀爬跳跃 STAMINA_COST_CLIMB_JUMP int32 = -2500 // 攀爬跳跃
DASH int32 // 快速跑步 STAMINA_COST_DASH int32 = -360 // 快速跑步
FLY int32 // 滑翔 STAMINA_COST_FLY int32 = -60 // 滑翔
SPRINT int32 // 冲刺 STAMINA_COST_SPRINT int32 = -1800 // 冲刺
SWIM_DASH_START int32 // 快速游泳开始 STAMINA_COST_SWIM_DASH_START int32 = -200 // 快速游泳开始
SWIM_DASH int32 // 快速游泳 STAMINA_COST_SWIM_DASH int32 = -204 // 快速游泳
SWIMMING int32 // 缓慢游泳 STAMINA_COST_SWIMMING int32 = -400 // 缓慢游泳
// 恢复耐力 // 恢复耐力
POWERED_FLY int32 // 滑翔加速(风圈等) STAMINA_COST_POWERED_FLY int32 = 500 // 滑翔加速(风圈等)
RUN int32 // 正常跑步 STAMINA_COST_RUN int32 = 500 // 正常跑步
STANDBY int32 // 站立 STAMINA_COST_STANDBY int32 = 500 // 站立
WALK int32 // 走路 STAMINA_COST_WALK int32 = 500 // 走路
// 载具浪船 // 载具浪船
SKIFF_DASH int32 // 浪船加速 STAMINA_COST_SKIFF_DASH int32 = -204 // 浪船加速
SKIFF_NORMAL int32 // 浪船正常移动 (回复耐力) STAMINA_COST_SKIFF_NORMAL int32 = 500 // 浪船正常移动 (回复耐力)
POWERED_SKIFF int32 // 浪船加速(风圈等) (回复耐力) STAMINA_COST_POWERED_SKIFF int32 = 500 // 浪船加速(风圈等) (回复耐力)
IN_SKIFF int32 // 处于浪船中回复角色耐力 (回复耐力) STAMINA_COST_IN_SKIFF int32 = 500 // 处于浪船中回复角色耐力 (回复耐力)
SKIFF_NOBODY int32 // 浪船无人时回复载具耐力 (回复耐力) STAMINA_COST_SKIFF_NOBODY int32 = 500 // 浪船无人时回复载具耐力 (回复耐力)
// 武器消耗默认值 // 武器消耗默认值
FIGHT_SWORD_ONE_HAND int32 // 单手剑 STAMINA_COST_FIGHT_SWORD_ONE_HAND int32 = -2000 // 单手剑
FIGHT_POLE int32 // 长枪 STAMINA_COST_FIGHT_POLE int32 = -2500 // 长枪
FIGHT_CATALYST int32 // 法器 STAMINA_COST_FIGHT_CATALYST int32 = -5000 // 法器
FIGHT_CLAYMORE_PER int32 // 双手剑 (每秒消耗) STAMINA_COST_FIGHT_CLAYMORE_PER int32 = -4000 // 双手剑 (每秒消耗)
// 技能开始消耗 (目前仅发现绫华与莫娜的冲刺会有开始消耗) )
SKILL_START map[uint32]int32 // [skillId]消耗值
}
func InitStaminaCostConst() {
StaminaCostConst = new(StaminaCost)
StaminaCostConst.CLIMBING_BASE = -100
StaminaCostConst.CLIMB_START = -500
StaminaCostConst.CLIMB_JUMP = -2500
StaminaCostConst.DASH = -360
StaminaCostConst.FLY = -60
StaminaCostConst.SPRINT = -1800
StaminaCostConst.SWIM_DASH_START = -200
StaminaCostConst.SWIM_DASH = -204
StaminaCostConst.SWIMMING = -400
StaminaCostConst.POWERED_FLY = 500
StaminaCostConst.RUN = 500
StaminaCostConst.STANDBY = 500
StaminaCostConst.WALK = 500
StaminaCostConst.SKIFF_DASH = -204
StaminaCostConst.SKIFF_NORMAL = 500
StaminaCostConst.POWERED_SKIFF = 500
StaminaCostConst.IN_SKIFF = 500
StaminaCostConst.SKIFF_NOBODY = 500
StaminaCostConst.FIGHT_SWORD_ONE_HAND = -2000
StaminaCostConst.FIGHT_POLE = -2500
StaminaCostConst.FIGHT_CATALYST = -5000
StaminaCostConst.FIGHT_CLAYMORE_PER = -4000
StaminaCostConst.SKILL_START = map[uint32]int32{
10013: -1000, // 绫华冲刺(霰步)
10413: -1000, // 莫娜冲刺(虚实流动)
}
}

View File

@@ -1,39 +1,18 @@
package constant package constant
var WeaponTypeConst *WeaponType const (
WEAPON_TYPE_NONE int32 = 0
type WeaponType struct { WEAPON_TYPE_SWORD_ONE_HAND int32 = 1 // 单手剑
WEAPON_NONE int32 WEAPON_TYPE_CROSSBOW int32 = 2 // 弩
WEAPON_SWORD_ONE_HAND int32 // 单手剑 WEAPON_TYPE_STAFF int32 = 3 // 权杖
WEAPON_CROSSBOW int32 // WEAPON_TYPE_DOUBLE_DAGGER int32 = 4 // 双刀
WEAPON_STAFF int32 // 权杖 WEAPON_TYPE_KATANA int32 = 5 // 武士刀
WEAPON_DOUBLE_DAGGER int32 // 双刀 WEAPON_TYPE_SHURIKEN int32 = 6 // 手里剑
WEAPON_KATANA int32 // 武士刀 WEAPON_TYPE_STICK int32 = 7 //
WEAPON_SHURIKEN int32 // 手里剑 WEAPON_TYPE_SPEAR int32 = 8 //
WEAPON_STICK int32 // WEAPON_TYPE_SHIELD_SMALL int32 = 9 // 小盾牌
WEAPON_SPEAR int32 // WEAPON_TYPE_CATALYST int32 = 10 // 法器
WEAPON_SHIELD_SMALL int32 // 小盾牌 WEAPON_TYPE_CLAYMORE int32 = 11 // 双手剑
WEAPON_CATALYST int32 // 法器 WEAPON_TYPE_BOW int32 = 12 //
WEAPON_CLAYMORE int32 // 双手剑 WEAPON_TYPE_POLE int32 = 13 // 长枪
WEAPON_BOW int32 // 弓 )
WEAPON_POLE int32 // 长枪
}
func InitWeaponTypeConst() {
WeaponTypeConst = new(WeaponType)
WeaponTypeConst.WEAPON_NONE = 0
WeaponTypeConst.WEAPON_SWORD_ONE_HAND = 1
WeaponTypeConst.WEAPON_CROSSBOW = 2
WeaponTypeConst.WEAPON_STAFF = 3
WeaponTypeConst.WEAPON_DOUBLE_DAGGER = 4
WeaponTypeConst.WEAPON_KATANA = 5
WeaponTypeConst.WEAPON_SHURIKEN = 6
WeaponTypeConst.WEAPON_STICK = 7
WeaponTypeConst.WEAPON_SPEAR = 8
WeaponTypeConst.WEAPON_SHIELD_SMALL = 9
WeaponTypeConst.WEAPON_CATALYST = 10
WeaponTypeConst.WEAPON_CLAYMORE = 11
WeaponTypeConst.WEAPON_BOW = 12
WeaponTypeConst.WEAPON_POLE = 13
}

View File

@@ -9,7 +9,6 @@ import (
"time" "time"
"hk4e/common/config" "hk4e/common/config"
"hk4e/common/constant"
"hk4e/common/mq" "hk4e/common/mq"
"hk4e/common/rpc" "hk4e/common/rpc"
"hk4e/fight/engine" "hk4e/fight/engine"
@@ -59,8 +58,6 @@ func Run(ctx context.Context, configFile string) error {
logger.InitLogger("fight_" + APPID) logger.InitLogger("fight_" + APPID)
logger.Warn("fight start, appid: %v", APPID) logger.Warn("fight start, appid: %v", APPID)
constant.InitConstant()
messageQueue := mq.NewMessageQueue(api.FIGHT, APPID, client) messageQueue := mq.NewMessageQueue(api.FIGHT, APPID, client)
defer messageQueue.Close() defer messageQueue.Close()

View File

@@ -201,8 +201,8 @@ func (f *FightRoutine) onTickSecond(now int64) {
if entity.uid == 0 { if entity.uid == 0 {
continue continue
} }
entity.fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_ATTACK)] = 1000000 entity.fightPropMap[uint32(constant.FIGHT_PROP_CUR_ATTACK)] = 1000000
entity.fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CRITICAL)] = 1.0 entity.fightPropMap[uint32(constant.FIGHT_PROP_CRITICAL)] = 1.0
avatarFightPropNotify := &proto.AvatarFightPropNotify{ avatarFightPropNotify := &proto.AvatarFightPropNotify{
AvatarGuid: entity.avatarGuid, AvatarGuid: entity.avatarGuid,
FightPropMap: entity.fightPropMap, FightPropMap: entity.fightPropMap,
@@ -262,17 +262,17 @@ func (f *FightRoutine) attackHandle(gameMsg *mq.GameMsg) {
_ = attackerId _ = attackerId
currHp := float32(0) currHp := float32(0)
if target.fightPropMap != nil { if target.fightPropMap != nil {
currHp = target.fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)] currHp = target.fightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)]
currHp -= damage currHp -= damage
if currHp < 0 { if currHp < 0 {
currHp = 0 currHp = 0
} }
target.fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)] = currHp target.fightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)] = currHp
} }
entityFightPropUpdateNotify := new(proto.EntityFightPropUpdateNotify) entityFightPropUpdateNotify := new(proto.EntityFightPropUpdateNotify)
entityFightPropUpdateNotify.EntityId = target.entityId entityFightPropUpdateNotify.EntityId = target.entityId
entityFightPropUpdateNotify.FightPropMap = make(map[uint32]float32) entityFightPropUpdateNotify.FightPropMap = make(map[uint32]float32)
entityFightPropUpdateNotify.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)] = currHp entityFightPropUpdateNotify.FightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)] = currHp
for _, uid := range f.getAllPlayer(f.entityMap) { for _, uid := range f.getAllPlayer(f.entityMap) {
SendMsg(f.messageQueue, cmd.EntityFightPropUpdateNotify, uid, f.gateAppId, entityFightPropUpdateNotify) SendMsg(f.messageQueue, cmd.EntityFightPropUpdateNotify, uid, f.gateAppId, entityFightPropUpdateNotify)
} }

View File

@@ -2,18 +2,18 @@ package gdconf
import ( import (
"fmt" "fmt"
"hk4e/pkg/endec"
"hk4e/pkg/logger"
"os" "os"
"strconv" "strconv"
"strings" "strings"
"hk4e/pkg/endec"
"hk4e/pkg/logger"
"github.com/hjson/hjson-go/v4" "github.com/hjson/hjson-go/v4"
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 角色配置表 // AvatarData 角色配置表
type AvatarData struct { type AvatarData struct {
AvatarId int32 `csv:"AvatarId"` // ID AvatarId int32 `csv:"AvatarId"` // ID
HpBase float64 `csv:"HpBase,omitempty"` // 基础生命值 HpBase float64 `csv:"HpBase,omitempty"` // 基础生命值
@@ -97,6 +97,14 @@ func (g *GameDataConfig) loadAvatarData() {
logger.Info("AvatarData count: %v", len(g.AvatarDataMap)) logger.Info("AvatarData count: %v", len(g.AvatarDataMap))
} }
func GetAvatarDataById(avatarId int32) *AvatarData {
return CONF.AvatarDataMap[avatarId]
}
func GetAvatarDataMap() map[int32]*AvatarData {
return CONF.AvatarDataMap
}
// TODO 成长属性要读表 // TODO 成长属性要读表
func (a *AvatarData) GetBaseHpByLevel(level uint8) float64 { func (a *AvatarData) GetBaseHpByLevel(level uint8) float64 {

View File

@@ -2,13 +2,13 @@ package gdconf
import ( import (
"fmt" "fmt"
"hk4e/pkg/logger" "hk4e/pkg/logger"
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 角色等级配置表 // AvatarLevelData 角色等级配置表
type AvatarLevelData struct { type AvatarLevelData struct {
Level int32 `csv:"Level"` // 等级 Level int32 `csv:"Level"` // 等级
Exp int32 `csv:"Exp,omitempty"` // 升到下一级所需经验 Exp int32 `csv:"Exp,omitempty"` // 升到下一级所需经验
@@ -29,3 +29,11 @@ func (g *GameDataConfig) loadAvatarLevelData() {
} }
logger.Info("AvatarLevelData count: %v", len(g.AvatarLevelDataMap)) logger.Info("AvatarLevelData count: %v", len(g.AvatarLevelDataMap))
} }
func GetAvatarLevelDataByLevel(level int32) *AvatarLevelData {
return CONF.AvatarLevelDataMap[level]
}
func GetAvatarLevelDataMap() map[int32]*AvatarLevelData {
return CONF.AvatarLevelDataMap
}

View File

@@ -2,13 +2,13 @@ package gdconf
import ( import (
"fmt" "fmt"
"hk4e/pkg/logger" "hk4e/pkg/logger"
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 角色突破配置表 // AvatarPromoteData 角色突破配置表
type AvatarPromoteData struct { type AvatarPromoteData struct {
PromoteId int32 `csv:"PromoteId"` // 角色突破ID PromoteId int32 `csv:"PromoteId"` // 角色突破ID
PromoteLevel int32 `csv:"PromoteLevel,omitempty"` // 突破等级 PromoteLevel int32 `csv:"PromoteLevel,omitempty"` // 突破等级
@@ -59,3 +59,11 @@ func (g *GameDataConfig) loadAvatarPromoteData() {
} }
logger.Info("AvatarPromoteData count: %v", len(g.AvatarPromoteDataMap)) logger.Info("AvatarPromoteData count: %v", len(g.AvatarPromoteDataMap))
} }
func GetAvatarPromoteDataByIdAndLevel(promoteId int32, promoteLevel int32) *AvatarPromoteData {
value, exist := CONF.AvatarPromoteDataMap[promoteId]
if !exist {
return nil
}
return value[promoteLevel]
}

View File

@@ -8,8 +8,7 @@ import (
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 角色技能配置表 // AvatarSkillData 角色技能配置表
type AvatarSkillData struct { type AvatarSkillData struct {
AvatarSkillId int32 `csv:"AvatarSkillId"` // ID AvatarSkillId int32 `csv:"AvatarSkillId"` // ID
AbilityName string `csv:"AbilityName,omitempty"` // Ability名称 AbilityName string `csv:"AbilityName,omitempty"` // Ability名称
@@ -34,3 +33,11 @@ func (g *GameDataConfig) loadAvatarSkillData() {
} }
logger.Info("AvatarSkillData count: %v", len(g.AvatarSkillDataMap)) logger.Info("AvatarSkillData count: %v", len(g.AvatarSkillDataMap))
} }
func GetAvatarSkillDataById(avatarSkillId int32) *AvatarSkillData {
return CONF.AvatarSkillDataMap[avatarSkillId]
}
func GetAvatarSkillDataMap() map[int32]*AvatarSkillData {
return CONF.AvatarSkillDataMap
}

View File

@@ -11,8 +11,7 @@ import (
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 角色技能库配置表 // AvatarSkillDepotData 角色技能库配置表
type AvatarSkillDepotData struct { type AvatarSkillDepotData struct {
AvatarSkillDepotId int32 `csv:"AvatarSkillDepotId"` // ID AvatarSkillDepotId int32 `csv:"AvatarSkillDepotId"` // ID
EnergySkill int32 `csv:"EnergySkill,omitempty"` // 充能技能 EnergySkill int32 `csv:"EnergySkill,omitempty"` // 充能技能
@@ -127,7 +126,15 @@ func (g *GameDataConfig) loadAvatarSkillDepotData() {
logger.Info("AvatarSkillDepotData count: %v", len(g.AvatarSkillDepotDataMap)) logger.Info("AvatarSkillDepotData count: %v", len(g.AvatarSkillDepotDataMap))
} }
func (g *GameDataConfig) GetAvatarEnergySkillConfig(avatarId uint32) *AvatarSkillData { func GetAvatarSkillDepotDataById(avatarSkillDepotId int32) *AvatarSkillDepotData {
return CONF.AvatarSkillDepotDataMap[avatarSkillDepotId]
}
func GetAvatarSkillDepotDataMap() map[int32]*AvatarSkillDepotData {
return CONF.AvatarSkillDepotDataMap
}
func GetAvatarEnergySkillConfig(avatarId uint32) *AvatarSkillData {
if avatarId == 10000005 || avatarId == 10000007 { if avatarId == 10000005 || avatarId == 10000007 {
return nil return nil
} }

View File

@@ -8,6 +8,7 @@ import (
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// FetterData 角色资料解锁配置表
type FetterData struct { type FetterData struct {
FetterId int32 `csv:"FetterId"` // ID FetterId int32 `csv:"FetterId"` // ID
AvatarId int32 `csv:"AvatarId"` // 角色ID AvatarId int32 `csv:"AvatarId"` // 角色ID
@@ -38,3 +39,15 @@ func (g *GameDataConfig) loadFetterData() {
} }
logger.Info("FetterData count: %v", len(g.FetterDataMap)) logger.Info("FetterData count: %v", len(g.FetterDataMap))
} }
func GetFetterDataByFetterId(fetterId int32) *FetterData {
return CONF.FetterDataMap[fetterId]
}
func GetFetterIdListByAvatarId(avatarId int32) []int32 {
return CONF.FetterDataAvatarIdMap[avatarId]
}
func GetFetterDataMap() map[int32]*FetterData {
return CONF.FetterDataMap
}

View File

@@ -32,8 +32,8 @@ type GameDataConfig struct {
GCGSkillDataMap map[int32]*GCGSkillData // 卡牌技能 GCGSkillDataMap map[int32]*GCGSkillData // 卡牌技能
SceneDataMap map[int32]*SceneData // 场景 SceneDataMap map[int32]*SceneData // 场景
ScenePointMap map[int32]*ScenePoint // 场景传送点 ScenePointMap map[int32]*ScenePoint // 场景传送点
SceneTagDataMap map[int32]*SceneTagData // 场景地图图 SceneTagDataMap map[int32]*SceneTagData // 场景标
SceneMap map[int32]*Scene // 场景详情 SceneDetailMap map[int32]*SceneDetail // 场景详情LUA配置数据
WorldAreaDataMap map[int32]*WorldAreaData // 世界区域 WorldAreaDataMap map[int32]*WorldAreaData // 世界区域
GatherDataMap map[int32]*GatherData // 采集物 GatherDataMap map[int32]*GatherData // 采集物
GatherDataPointTypeMap map[int32]*GatherData // 采集物场景节点索引 GatherDataPointTypeMap map[int32]*GatherData // 采集物场景节点索引

View File

@@ -147,7 +147,7 @@ func TestSceneBlock(t *testing.T) {
config.InitConfig("./bin/application.toml") config.InitConfig("./bin/application.toml")
logger.InitLogger("SceneBlock") logger.InitLogger("SceneBlock")
InitGameDataConfig() InitGameDataConfig()
scene, exist := CONF.SceneMap[3] scene, exist := CONF.SceneDetailMap[3]
if !exist { if !exist {
panic("scene 3 not exist") panic("scene 3 not exist")
} }

View File

@@ -8,6 +8,7 @@ import (
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// GatherData 采集物配置表
type GatherData struct { type GatherData struct {
PointType int32 `csv:"PointType"` // 挂节点类型 PointType int32 `csv:"PointType"` // 挂节点类型
GatherId int32 `csv:"GatherId"` // ID GatherId int32 `csv:"GatherId"` // ID
@@ -32,3 +33,15 @@ func (g *GameDataConfig) loadGatherData() {
} }
logger.Info("GatherData count: %v", len(g.GatherDataMap)) logger.Info("GatherData count: %v", len(g.GatherDataMap))
} }
func GetGatherDataById(gatherId int32) *GatherData {
return CONF.GatherDataMap[gatherId]
}
func GetGatherDataByPointType(pointType int32) *GatherData {
return CONF.GatherDataPointTypeMap[pointType]
}
func GetGatherDataMap() map[int32]*GatherData {
return CONF.GatherDataMap
}

View File

@@ -10,8 +10,7 @@ import (
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 角色卡牌配置表 // GCGCharData 角色卡牌配置表
type GCGCharData struct { type GCGCharData struct {
CharId int32 `csv:"CharId"` // ID CharId int32 `csv:"CharId"` // ID
TagId1 int32 `csv:"TagId1,omitempty"` // 卡牌标签列表1 TagId1 int32 `csv:"TagId1,omitempty"` // 卡牌标签列表1
@@ -64,3 +63,11 @@ func (g *GameDataConfig) loadGCGCharData() {
} }
logger.Info("GCGCharData count: %v", len(g.GCGCharDataMap)) logger.Info("GCGCharData count: %v", len(g.GCGCharDataMap))
} }
func GetGCGCharDataById(charId int32) *GCGCharData {
return CONF.GCGCharDataMap[charId]
}
func GetGCGCharDataMap() map[int32]*GCGCharData {
return CONF.GCGCharDataMap
}

View File

@@ -2,16 +2,16 @@ package gdconf
import ( import (
"fmt" "fmt"
"hk4e/pkg/logger"
"os" "os"
"hk4e/pkg/logger"
"github.com/hjson/hjson-go/v4" "github.com/hjson/hjson-go/v4"
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 卡牌技能配置表 // GCGSkillData 卡牌技能配置表
type GCGSkillData struct { type GCGSkillData struct {
SkillId int32 `csv:"SkillId"` // ID SkillId int32 `csv:"SkillId"` // ID
ConfigJson string `csv:"ConfigJson,omitempty"` // 效果config ConfigJson string `csv:"ConfigJson,omitempty"` // 效果config
@@ -109,3 +109,11 @@ func (g *GameDataConfig) loadGCGSkillData() {
} }
logger.Info("GCGSkillData count: %v", len(g.GCGSkillDataMap)) logger.Info("GCGSkillData count: %v", len(g.GCGSkillDataMap))
} }
func GetGCGSkillDataById(skillId int32) *GCGSkillData {
return CONF.GCGSkillDataMap[skillId]
}
func GetGCGSkillDataMap() map[int32]*GCGSkillData {
return CONF.GCGSkillDataMap
}

View File

@@ -2,14 +2,16 @@ package gdconf
import ( import (
"fmt" "fmt"
"hk4e/common/constant"
"hk4e/pkg/logger"
"strconv" "strconv"
"strings" "strings"
"hk4e/common/constant"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// ItemData 统一道具配置表
type ItemData struct { type ItemData struct {
// 公共字段 // 公共字段
ItemId int32 `csv:"ItemId"` // ID ItemId int32 `csv:"ItemId"` // ID
@@ -57,7 +59,7 @@ func (g *GameDataConfig) loadItemData() {
itemData.SkillAffix = append(itemData.SkillAffix, itemData.SkillAffix2) itemData.SkillAffix = append(itemData.SkillAffix, itemData.SkillAffix2)
} }
// 武器精炼摩拉消耗列表读取转换 // 武器精炼摩拉消耗列表读取转换
if itemData.Type == int32(constant.ItemTypeConst.ITEM_WEAPON) && itemData.AwakenCoinCostStr != "" { if itemData.Type == int32(constant.ITEM_TYPE_WEAPON) && itemData.AwakenCoinCostStr != "" {
tempCostList := strings.Split(strings.ReplaceAll(itemData.AwakenCoinCostStr, " ", ""), "#") tempCostList := strings.Split(strings.ReplaceAll(itemData.AwakenCoinCostStr, " ", ""), "#")
itemData.AwakenCoinCostList = make([]uint32, 0, len(tempCostList)) itemData.AwakenCoinCostList = make([]uint32, 0, len(tempCostList))
for _, s := range tempCostList { for _, s := range tempCostList {
@@ -74,3 +76,11 @@ func (g *GameDataConfig) loadItemData() {
} }
logger.Info("ItemData count: %v", len(g.ItemDataMap)) logger.Info("ItemData count: %v", len(g.ItemDataMap))
} }
func GetItemDataById(itemId int32) *ItemData {
return CONF.ItemDataMap[itemId]
}
func GetItemDataMap() map[int32]*ItemData {
return CONF.ItemDataMap
}

View File

@@ -2,13 +2,13 @@ package gdconf
import ( import (
"fmt" "fmt"
"hk4e/pkg/logger" "hk4e/pkg/logger"
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 玩家等级配置表 // PlayerLevelData 玩家等级配置表
type PlayerLevelData struct { type PlayerLevelData struct {
Level int32 `csv:"Level"` // 等级 Level int32 `csv:"Level"` // 等级
Exp int32 `csv:"Exp,omitempty"` // 升到下一级所需经验 Exp int32 `csv:"Exp,omitempty"` // 升到下一级所需经验
@@ -29,3 +29,11 @@ func (g *GameDataConfig) loadPlayerLevelData() {
} }
logger.Info("PlayerLevelData count: %v", len(g.PlayerLevelDataMap)) logger.Info("PlayerLevelData count: %v", len(g.PlayerLevelDataMap))
} }
func GetPlayerLevelDataById(level int32) *PlayerLevelData {
return CONF.PlayerLevelDataMap[level]
}
func GetPlayerLevelDataMap() map[int32]*PlayerLevelData {
return CONF.PlayerLevelDataMap
}

View File

@@ -2,13 +2,13 @@ package gdconf
import ( import (
"fmt" "fmt"
"hk4e/pkg/logger" "hk4e/pkg/logger"
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 奖励配置表 // RewardData 奖励配置表
type RewardData struct { type RewardData struct {
RewardID int32 `csv:"RewardID"` // 奖励ID RewardID int32 `csv:"RewardID"` // 奖励ID
RewardItem1ID int32 `csv:"RewardItem1ID,omitempty"` // Reward道具1ID RewardItem1ID int32 `csv:"RewardItem1ID,omitempty"` // Reward道具1ID
@@ -66,3 +66,11 @@ func (g *GameDataConfig) loadRewardData() {
} }
logger.Info("RewardData count: %v", len(g.RewardDataMap)) logger.Info("RewardData count: %v", len(g.RewardDataMap))
} }
func GetRewardDataById(rewardID int32) *RewardData {
return CONF.RewardDataMap[rewardID]
}
func GetRewardDataMap() map[int32]*RewardData {
return CONF.RewardDataMap
}

View File

@@ -8,6 +8,7 @@ import (
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// SceneData 场景配置表
type SceneData struct { type SceneData struct {
SceneId int32 `csv:"SceneId"` // ID SceneId int32 `csv:"SceneId"` // ID
SceneType int32 `csv:"SceneType,omitempty"` // 类型 SceneType int32 `csv:"SceneType,omitempty"` // 类型
@@ -28,3 +29,11 @@ func (g *GameDataConfig) loadSceneData() {
} }
logger.Info("SceneData count: %v", len(g.SceneDataMap)) logger.Info("SceneData count: %v", len(g.SceneDataMap))
} }
func GetSceneDataById(sceneId int32) *SceneData {
return CONF.SceneDataMap[sceneId]
}
func GetSceneDataMap() map[int32]*SceneData {
return CONF.SceneDataMap
}

View File

@@ -8,11 +8,13 @@ import (
"hk4e/pkg/logger" "hk4e/pkg/logger"
) )
// 场景详情配置数据
const ( const (
SceneGroupLoaderLimit = 4 // 加载文件的并发数 此操作很耗内存 调大之前请确保你的机器内存足够 SceneGroupLoaderLimit = 4 // 加载文件的并发数 此操作很耗内存 调大之前请确保你的机器内存足够
) )
type Scene struct { type SceneDetail struct {
Id int32 Id int32
SceneConfig *SceneConfig // 地图配置 SceneConfig *SceneConfig // 地图配置
BlockMap map[int32]*Block // 所有的区块 BlockMap map[int32]*Block // 所有的区块
@@ -130,7 +132,7 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
} }
func (g *GameDataConfig) loadScene() { func (g *GameDataConfig) loadScene() {
g.SceneMap = make(map[int32]*Scene) g.SceneDetailMap = make(map[int32]*SceneDetail)
sceneLuaPrefix := g.luaPrefix + "scene/" sceneLuaPrefix := g.luaPrefix + "scene/"
for _, sceneData := range g.SceneDataMap { for _, sceneData := range g.SceneDataMap {
sceneId := sceneData.SceneId sceneId := sceneData.SceneId
@@ -141,17 +143,17 @@ func (g *GameDataConfig) loadScene() {
continue continue
} }
luaState := fixLuaState(string(mainLuaData)) luaState := fixLuaState(string(mainLuaData))
scene := new(Scene) sceneDetail := new(SceneDetail)
scene.Id = sceneId sceneDetail.Id = sceneId
// scene_config // scene_config
scene.SceneConfig = new(SceneConfig) sceneDetail.SceneConfig = new(SceneConfig)
ok := parseLuaTableToObject[*SceneConfig](luaState, "scene_config", scene.SceneConfig) ok := parseLuaTableToObject[*SceneConfig](luaState, "scene_config", sceneDetail.SceneConfig)
if !ok { if !ok {
logger.Error("get scene_config object error, sceneId: %v", sceneId) logger.Error("get scene_config object error, sceneId: %v", sceneId)
luaState.Close() luaState.Close()
continue continue
} }
scene.BlockMap = make(map[int32]*Block) sceneDetail.BlockMap = make(map[int32]*Block)
// blocks // blocks
blockIdList := make([]int32, 0) blockIdList := make([]int32, 0)
ok = parseLuaTableToObject[*[]int32](luaState, "blocks", &blockIdList) ok = parseLuaTableToObject[*[]int32](luaState, "blocks", &blockIdList)
@@ -205,9 +207,9 @@ func (g *GameDataConfig) loadScene() {
}() }()
} }
wg.Wait() wg.Wait()
scene.BlockMap[block.Id] = block sceneDetail.BlockMap[block.Id] = block
} }
g.SceneMap[sceneId] = scene g.SceneDetailMap[sceneId] = sceneDetail
} }
sceneCount := 0 sceneCount := 0
blockCount := 0 blockCount := 0
@@ -215,7 +217,7 @@ func (g *GameDataConfig) loadScene() {
monsterCount := 0 monsterCount := 0
npcCount := 0 npcCount := 0
gadgetCount := 0 gadgetCount := 0
for _, scene := range g.SceneMap { for _, scene := range g.SceneDetailMap {
for _, block := range scene.BlockMap { for _, block := range scene.BlockMap {
for _, group := range block.GroupMap { for _, group := range block.GroupMap {
monsterCount += len(group.MonsterList) monsterCount += len(group.MonsterList)
@@ -231,11 +233,19 @@ func (g *GameDataConfig) loadScene() {
sceneCount, blockCount, groupCount, monsterCount, npcCount, gadgetCount) sceneCount, blockCount, groupCount, monsterCount, npcCount, gadgetCount)
} }
func (g *GameDataConfig) GetSceneBlockConfig(sceneId int32, blockId int32) ([]*Monster, []*Npc, []*Gadget, bool) { func GetSceneDetailById(sceneId int32) *SceneDetail {
return CONF.SceneDetailMap[sceneId]
}
func GetSceneDetailMap() map[int32]*SceneDetail {
return CONF.SceneDetailMap
}
func GetSceneBlockConfig(sceneId int32, blockId int32) ([]*Monster, []*Npc, []*Gadget, bool) {
monsterList := make([]*Monster, 0) monsterList := make([]*Monster, 0)
npcList := make([]*Npc, 0) npcList := make([]*Npc, 0)
gadgetList := make([]*Gadget, 0) gadgetList := make([]*Gadget, 0)
sceneConfig, exist := g.SceneMap[sceneId] sceneConfig, exist := CONF.SceneDetailMap[sceneId]
if !exist { if !exist {
return nil, nil, nil, false return nil, nil, nil, false
} }

View File

@@ -8,6 +8,8 @@ import (
"hk4e/pkg/logger" "hk4e/pkg/logger"
) )
// 场景传送点配置数据
// 传送点类型 // 传送点类型
const ( const (
PointTypeStrTransPointNormal = "TransPointNormal" PointTypeStrTransPointNormal = "TransPointNormal"
@@ -126,3 +128,19 @@ func (g *GameDataConfig) loadScenePoint() {
} }
logger.Info("ScenePoint count: %v", scenePointCount) logger.Info("ScenePoint count: %v", scenePointCount)
} }
func GetScenePointBySceneIdAndPointId(sceneId int32, pointId int32) *PointData {
value, exist := CONF.ScenePointMap[sceneId]
if !exist {
return nil
}
return value.PointMap[pointId]
}
func GetScenePointMapBySceneId(sceneId int32) map[int32]*PointData {
value, exist := CONF.ScenePointMap[sceneId]
if !exist {
return nil
}
return value.PointMap
}

View File

@@ -8,6 +8,7 @@ import (
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// SceneTagData 场景标签配置表
type SceneTagData struct { type SceneTagData struct {
SceneTagId int32 `csv:"SceneTagId"` // ID SceneTagId int32 `csv:"SceneTagId"` // ID
SceneId int32 `csv:"SceneId,omitempty"` // 场景ID SceneId int32 `csv:"SceneId,omitempty"` // 场景ID
@@ -28,3 +29,11 @@ func (g *GameDataConfig) loadSceneTagData() {
} }
logger.Info("SceneTagData count: %v", len(g.SceneTagDataMap)) logger.Info("SceneTagData count: %v", len(g.SceneTagDataMap))
} }
func GetSceneTagDataById(sceneTagId int32) *SceneTagData {
return CONF.SceneTagDataMap[sceneTagId]
}
func GetSceneTagDataMap() map[int32]*SceneTagData {
return CONF.SceneTagDataMap
}

View File

@@ -2,13 +2,13 @@ package gdconf
import ( import (
"fmt" "fmt"
"hk4e/pkg/logger" "hk4e/pkg/logger"
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 武器等级配置表 // WeaponLevelData 武器等级配置表
type WeaponLevelData struct { type WeaponLevelData struct {
Level int32 `csv:"Level"` // 等级 Level int32 `csv:"Level"` // 等级
ExpByStar1 int32 `csv:"ExpByStar1,omitempty"` // 武器升级经验1 ExpByStar1 int32 `csv:"ExpByStar1,omitempty"` // 武器升级经验1
@@ -42,3 +42,11 @@ func (g *GameDataConfig) loadWeaponLevelData() {
} }
logger.Info("WeaponLevelData count: %v", len(g.WeaponLevelDataMap)) logger.Info("WeaponLevelData count: %v", len(g.WeaponLevelDataMap))
} }
func GetWeaponLevelDataByLevel(level int32) *WeaponLevelData {
return CONF.WeaponLevelDataMap[level]
}
func GetWeaponLevelDataMap() map[int32]*WeaponLevelData {
return CONF.WeaponLevelDataMap
}

View File

@@ -2,13 +2,13 @@ package gdconf
import ( import (
"fmt" "fmt"
"hk4e/pkg/logger" "hk4e/pkg/logger"
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// 武器突破配置表 // WeaponPromoteData 武器突破配置表
type WeaponPromoteData struct { type WeaponPromoteData struct {
PromoteId int32 `csv:"PromoteId"` // 武器突破ID PromoteId int32 `csv:"PromoteId"` // 武器突破ID
PromoteLevel int32 `csv:"PromoteLevel,omitempty"` // 突破等级 PromoteLevel int32 `csv:"PromoteLevel,omitempty"` // 突破等级
@@ -56,3 +56,11 @@ func (g *GameDataConfig) loadWeaponPromoteData() {
} }
logger.Info("WeaponPromoteData count: %v", len(g.WeaponPromoteDataMap)) logger.Info("WeaponPromoteData count: %v", len(g.WeaponPromoteDataMap))
} }
func GetWeaponPromoteDataByIdAndLevel(promoteId int32, promoteLevel int32) *WeaponPromoteData {
value, exist := CONF.WeaponPromoteDataMap[promoteId]
if !exist {
return nil
}
return value[promoteLevel]
}

View File

@@ -8,6 +8,7 @@ import (
"github.com/jszwec/csvutil" "github.com/jszwec/csvutil"
) )
// WorldAreaData 世界区域配置表
type WorldAreaData struct { type WorldAreaData struct {
WorldAreaId int32 `csv:"WorldAreaId"` // 条目ID WorldAreaId int32 `csv:"WorldAreaId"` // 条目ID
SceneId int32 `csv:"SceneId,omitempty"` // 场景ID SceneId int32 `csv:"SceneId,omitempty"` // 场景ID
@@ -30,3 +31,11 @@ func (g *GameDataConfig) loadWorldAreaData() {
} }
logger.Info("WorldAreaData count: %v", len(g.WorldAreaDataMap)) logger.Info("WorldAreaData count: %v", len(g.WorldAreaDataMap))
} }
func GetWorldAreaDataById(worldAreaId int32) *WorldAreaData {
return CONF.WorldAreaDataMap[worldAreaId]
}
func GetWorldAreaDataMap() map[int32]*WorldAreaData {
return CONF.WorldAreaDataMap
}

View File

@@ -10,7 +10,6 @@ import (
"time" "time"
"hk4e/common/config" "hk4e/common/config"
"hk4e/common/constant"
"hk4e/common/mq" "hk4e/common/mq"
"hk4e/common/rpc" "hk4e/common/rpc"
"hk4e/gdconf" "hk4e/gdconf"
@@ -72,7 +71,6 @@ func Run(ctx context.Context, configFile string) error {
logger.InitLogger("gs_" + APPID) logger.InitLogger("gs_" + APPID)
logger.Warn("gs start, appid: %v, gsid: %v", APPID, GSID) logger.Warn("gs start, appid: %v, gsid: %v", APPID, GSID)
constant.InitConstant()
gdconf.InitGameDataConfig() gdconf.InitGameDataConfig()
db, err := dao.NewDao() db, err := dao.NewDao()

View File

@@ -13,7 +13,7 @@ func (c *CommandManager) GMTeleportPlayer(userId, sceneId uint32, posX, posY, po
logger.Error("player is nil, uid: %v", userId) logger.Error("player is nil, uid: %v", userId)
return return
} }
GAME_MANAGER.TeleportPlayer(player, constant.EnterReasonConst.Gm, sceneId, &model.Vector{ GAME_MANAGER.TeleportPlayer(player, constant.EnterReasonGm, sceneId, &model.Vector{
X: posX, X: posX,
Y: posY, Y: posY,
Z: posZ, Z: posZ,

View File

@@ -100,7 +100,7 @@ func NewGameManager(dao *dao.Dao, messageQueue *mq.MessageQueue, gsId uint32, gs
for i := 1; i < 3; i++ { for i := 1; i < 3; i++ {
uid := 1000000 + uint32(i) uid := 1000000 + uint32(i)
avatarId := uint32(0) avatarId := uint32(0)
for _, avatarData := range gdconf.CONF.AvatarDataMap { for _, avatarData := range gdconf.GetAvatarDataMap() {
avatarId = uint32(avatarData.AvatarId) avatarId = uint32(avatarData.AvatarId)
break break
} }
@@ -175,7 +175,7 @@ func (g *GameManager) gameMainLoop() {
motherfuckerPlayerInfo, _ := json.Marshal(SELF) motherfuckerPlayerInfo, _ := json.Marshal(SELF)
logger.Error("the motherfucker player info: %v", string(motherfuckerPlayerInfo)) logger.Error("the motherfucker player info: %v", string(motherfuckerPlayerInfo))
if SELF != nil { if SELF != nil {
GAME_MANAGER.DisconnectPlayer(SELF.PlayerID, kcp.EnetServerKick) GAME_MANAGER.KickPlayer(SELF.PlayerID, kcp.EnetServerKick)
} }
} }
}() }()
@@ -260,7 +260,7 @@ func (g *GameManager) Close() {
// 单纯的告诉网关下线玩家 // 单纯的告诉网关下线玩家
userList := USER_MANAGER.GetAllOnlineUserList() userList := USER_MANAGER.GetAllOnlineUserList()
for _, player := range userList { for _, player := range userList {
g.DisconnectPlayer(player.PlayerID, kcp.EnetServerShutdown) g.KickPlayer(player.PlayerID, kcp.EnetServerShutdown)
} }
time.Sleep(time.Second) time.Sleep(time.Second)
} }
@@ -374,11 +374,11 @@ func (g *GameManager) SendToWorldH(world *World, cmdId uint16, seq uint32, msg p
GAME_MANAGER.SendMsg(cmdId, world.GetOwner().PlayerID, seq, msg) GAME_MANAGER.SendMsg(cmdId, world.GetOwner().PlayerID, seq, msg)
} }
func (g *GameManager) ReconnectPlayer(userId uint32) { func (g *GameManager) ReLoginPlayer(userId uint32) {
g.SendMsg(cmd.ClientReconnectNotify, userId, 0, new(proto.ClientReconnectNotify)) g.SendMsg(cmd.ClientReconnectNotify, userId, 0, new(proto.ClientReconnectNotify))
} }
func (g *GameManager) DisconnectPlayer(userId uint32, reason uint32) { func (g *GameManager) KickPlayer(userId uint32, reason uint32) {
player := USER_MANAGER.GetOnlineUser(userId) player := USER_MANAGER.GetOnlineUser(userId)
if player == nil { if player == nil {
return return
@@ -391,7 +391,6 @@ func (g *GameManager) DisconnectPlayer(userId uint32, reason uint32) {
KickReason: reason, KickReason: reason,
}, },
}) })
// g.SendMsg(cmd.ServerDisconnectClientNotify, userId, 0, new(proto.ServerDisconnectClientNotify))
} }
func (g *GameManager) GetClientProtoObjByName(protoObjName string) pb.Message { func (g *GameManager) GetClientProtoObjByName(protoObjName string) pb.Message {

View File

@@ -357,8 +357,8 @@ func (g *GCGGame) InitDeckCard(controller *GCGController, cardIdList ...uint32)
// GiveCharCard 给予操控者角色卡牌 // GiveCharCard 给予操控者角色卡牌
func (g *GCGGame) GiveCharCard(controller *GCGController, charId uint32) { func (g *GCGGame) GiveCharCard(controller *GCGController, charId uint32) {
// 读取角色卡牌配置表 // 读取角色卡牌配置表
gcgCharConfig, ok := gdconf.CONF.GCGCharDataMap[int32(charId)] gcgCharConfig := gdconf.GetGCGCharDataById(int32(charId))
if !ok { if gcgCharConfig == nil {
logger.Error("gcg char config error, charId: %v", charId) logger.Error("gcg char config error, charId: %v", charId)
return return
} }
@@ -372,10 +372,10 @@ func (g *GCGGame) GiveCharCard(controller *GCGController, charId uint32) {
faceType: 0, // 1为金卡 faceType: 0, // 1为金卡
tagList: gcgCharConfig.TagList, tagList: gcgCharConfig.TagList,
tokenMap: map[uint32]uint32{ tokenMap: map[uint32]uint32{
constant.GCGTokenConst.TOKEN_CUR_HEALTH: uint32(gcgCharConfig.HPBase), // 血量 constant.GCG_TOKEN_TYPE_CUR_HEALTH: uint32(gcgCharConfig.HPBase), // 血量
constant.GCGTokenConst.TOKEN_MAX_HEALTH: uint32(gcgCharConfig.HPBase), // 最大血量(不确定) constant.GCG_TOKEN_TYPE_MAX_HEALTH: uint32(gcgCharConfig.HPBase), // 最大血量(不确定)
constant.GCGTokenConst.TOKEN_CUR_ELEM: 0, // 充能 constant.GCG_TOKEN_TYPE_CUR_ELEM: 0, // 充能
constant.GCGTokenConst.TOKEN_MAX_ELEM: uint32(gcgCharConfig.MaxElemVal), // 充能条 constant.GCG_TOKEN_TYPE_MAX_ELEM: uint32(gcgCharConfig.MaxElemVal), // 充能条
}, },
skillList: make([]*GCGSkillInfo, 0, len(gcgCharConfig.SkillList)), skillList: make([]*GCGSkillInfo, 0, len(gcgCharConfig.SkillList)),
skillLimitList: []uint32{}, skillLimitList: []uint32{},
@@ -571,13 +571,13 @@ func (g *GCGGame) ControllerUseSkill(controller *GCGController, skillId uint32,
msgList = append(msgList, g.GCGMsgUseSkill(controller.selectedCharCardGuid, skillId)) msgList = append(msgList, g.GCGMsgUseSkill(controller.selectedCharCardGuid, skillId))
msgList = append(msgList, g.GCGMsgTokenChange(targetSelectedCharCard.guid, proto.GCGReason_GCG_REASON_EFFECT, 11, 1)) msgList = append(msgList, g.GCGMsgTokenChange(targetSelectedCharCard.guid, proto.GCGReason_GCG_REASON_EFFECT, 11, 1))
msgList = append(msgList, g.GCGMsgTokenChange(targetSelectedCharCard.guid, proto.GCGReason_GCG_REASON_EFFECT_DAMAGE, constant.GCGTokenConst.TOKEN_CUR_HEALTH, 6)) msgList = append(msgList, g.GCGMsgTokenChange(targetSelectedCharCard.guid, proto.GCGReason_GCG_REASON_EFFECT_DAMAGE, constant.GCG_TOKEN_TYPE_CUR_HEALTH, 6))
msgList = append(msgList, g.GCGMsgSkillResult(targetSelectedCharCard.guid, skillId)) msgList = append(msgList, g.GCGMsgSkillResult(targetSelectedCharCard.guid, skillId))
msgList = append(msgList, g.GCGMsgUseSkillEnd(controller.selectedCharCardGuid, skillId)) msgList = append(msgList, g.GCGMsgUseSkillEnd(controller.selectedCharCardGuid, skillId))
// 因为使用技能自身充能+1 // 因为使用技能自身充能+1
msgList = append(msgList, g.GCGMsgTokenChange(controller.selectedCharCardGuid, proto.GCGReason_GCG_REASON_ATTACK, constant.GCGTokenConst.TOKEN_CUR_ELEM, 3)) msgList = append(msgList, g.GCGMsgTokenChange(controller.selectedCharCardGuid, proto.GCGReason_GCG_REASON_ATTACK, constant.GCG_TOKEN_TYPE_CUR_ELEM, 3))
g.AddAllMsgPack(controller.controllerId, proto.GCGActionType_GCG_ACTION_ATTACK, msgList...) g.AddAllMsgPack(controller.controllerId, proto.GCGActionType_GCG_ACTION_ATTACK, msgList...)
g.ChangePhase(proto.GCGPhaseType_GCG_PHASE_MAIN) g.ChangePhase(proto.GCGPhaseType_GCG_PHASE_MAIN)
} }
@@ -949,8 +949,8 @@ func (g *GCGGame) GCGMsgCostRevise(controller *GCGController) *proto.GCGMessage
// AttackCostList // AttackCostList
for _, skillInfo := range selectedCharCard.skillList { for _, skillInfo := range selectedCharCard.skillList {
// 读取卡牌技能配置表 // 读取卡牌技能配置表
gcgSkillConfig, ok := gdconf.CONF.GCGSkillDataMap[int32(skillInfo.skillId)] gcgSkillConfig := gdconf.GetGCGSkillDataById(int32(skillInfo.skillId))
if !ok { if gcgSkillConfig == nil {
logger.Error("gcg skill config error, skillId: %v", skillInfo.skillId) logger.Error("gcg skill config error, skillId: %v", skillInfo.skillId)
return new(proto.GCGMessage) return new(proto.GCGMessage)
} }
@@ -1048,8 +1048,8 @@ func (g *GCGGame) GCGMsgTokenChange(cardGuid uint32, reason proto.GCGReason, tok
// GCGMsgSkillResult GCG消息技能结果 // GCGMsgSkillResult GCG消息技能结果
func (g *GCGGame) GCGMsgSkillResult(selectedCharCardGuid uint32, skillId uint32) *proto.GCGMessage { func (g *GCGGame) GCGMsgSkillResult(selectedCharCardGuid uint32, skillId uint32) *proto.GCGMessage {
// 读取卡牌技能配置表 // 读取卡牌技能配置表
gcgSkillConfig, ok := gdconf.CONF.GCGSkillDataMap[int32(skillId)] gcgSkillConfig := gdconf.GetGCGSkillDataById(int32(skillId))
if !ok { if gcgSkillConfig == nil {
logger.Error("gcg skill config error, skillId: %v", skillId) logger.Error("gcg skill config error, skillId: %v", skillId)
return new(proto.GCGMessage) return new(proto.GCGMessage)
} }

View File

@@ -16,7 +16,7 @@ import (
func (g *GameManager) GetAllAvatarDataConfig() map[int32]*gdconf.AvatarData { func (g *GameManager) GetAllAvatarDataConfig() map[int32]*gdconf.AvatarData {
allAvatarDataConfig := make(map[int32]*gdconf.AvatarData) allAvatarDataConfig := make(map[int32]*gdconf.AvatarData)
for avatarId, avatarData := range gdconf.CONF.AvatarDataMap { for avatarId, avatarData := range gdconf.GetAvatarDataMap() {
if avatarId < 10000002 || avatarId >= 11000000 { if avatarId < 10000002 || avatarId >= 11000000 {
// 跳过无效角色 // 跳过无效角色
continue continue
@@ -49,8 +49,8 @@ func (g *GameManager) AddUserAvatar(userId uint32, avatarId uint32) {
player.AddAvatar(avatarId) player.AddAvatar(avatarId)
// 添加初始武器 // 添加初始武器
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatarId)] avatarDataConfig := gdconf.GetAvatarDataById(int32(avatarId))
if !ok { if avatarDataConfig == nil {
logger.Error("config is nil, itemId: %v", avatarId) logger.Error("config is nil, itemId: %v", avatarId)
return return
} }
@@ -80,8 +80,8 @@ func (g *GameManager) AvatarPromoteGetRewardReq(player *model.Player, payloadMsg
return return
} }
// 获取角色配置表 // 获取角色配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)] avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if !ok { if avatarDataConfig == nil {
logger.Error("avatar config error, avatarId: %v", avatar.AvatarId) logger.Error("avatar config error, avatarId: %v", avatar.AvatarId)
g.SendError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{}) g.SendError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{})
return return
@@ -93,8 +93,8 @@ func (g *GameManager) AvatarPromoteGetRewardReq(player *model.Player, payloadMsg
return return
} }
// 获取奖励配置表 // 获取奖励配置表
rewardConfig, ok := gdconf.CONF.RewardDataMap[int32(avatarDataConfig.PromoteRewardMap[req.PromoteLevel])] rewardConfig := gdconf.GetRewardDataById(int32(avatarDataConfig.PromoteRewardMap[req.PromoteLevel]))
if !ok { if rewardConfig == nil {
logger.Error("reward config error, rewardId: %v", avatarDataConfig.PromoteRewardMap[req.PromoteLevel]) logger.Error("reward config error, rewardId: %v", avatarDataConfig.PromoteRewardMap[req.PromoteLevel])
g.SendError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{}) g.SendError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{})
return return
@@ -131,22 +131,15 @@ func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Messa
return return
} }
// 获取角色配置表 // 获取角色配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)] avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if !ok { if avatarDataConfig == nil {
logger.Error("avatar config error, avatarId: %v", avatar.AvatarId) logger.Error("avatar config error, avatarId: %v", avatar.AvatarId)
g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}) g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{})
return return
} }
// 获取角色突破配置表 // 获取角色突破配置表
avatarPromoteDataMap, ok := gdconf.CONF.AvatarPromoteDataMap[avatarDataConfig.PromoteId] avatarPromoteConfig := gdconf.GetAvatarPromoteDataByIdAndLevel(avatarDataConfig.PromoteId, int32(avatar.Promote))
if !ok { if avatarPromoteConfig == nil {
logger.Error("avatar promote config error, promoteId: %v", avatarDataConfig.PromoteId)
g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{})
return
}
// 获取角色突破等级的配置表
avatarPromoteConfig, ok := avatarPromoteDataMap[int32(avatar.Promote)]
if !ok {
logger.Error("avatar promote config error, promoteLevel: %v", avatar.Promote) logger.Error("avatar promote config error, promoteLevel: %v", avatar.Promote)
g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}) g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{})
return return
@@ -158,8 +151,8 @@ func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Messa
return return
} }
// 获取角色突破下一级的配置表 // 获取角色突破下一级的配置表
avatarPromoteConfig, ok = avatarPromoteDataMap[int32(avatar.Promote+1)] avatarPromoteConfig = gdconf.GetAvatarPromoteDataByIdAndLevel(avatarDataConfig.PromoteId, int32(avatar.Promote+1))
if !ok { if avatarPromoteConfig == nil {
logger.Error("avatar promote config error, next promoteLevel: %v", avatar.Promote+1) logger.Error("avatar promote config error, next promoteLevel: %v", avatar.Promote+1)
g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}, proto.Retcode_RET_AVATAR_ON_MAX_BREAK_LEVEL) g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}, proto.Retcode_RET_AVATAR_ON_MAX_BREAK_LEVEL)
return return
@@ -175,7 +168,7 @@ func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Messa
} }
// 消耗列表添加摩拉的消耗 // 消耗列表添加摩拉的消耗
costItemList = append(costItemList, &UserItem{ costItemList = append(costItemList, &UserItem{
ItemId: constant.ItemConstantConst.SCOIN, ItemId: constant.ITEM_ID_SCOIN,
ChangeCount: uint32(avatarPromoteConfig.CostCoin), ChangeCount: uint32(avatarPromoteConfig.CostCoin),
}) })
// 突破材料以及摩拉是否足够 // 突破材料以及摩拉是否足够
@@ -183,7 +176,7 @@ func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Messa
if player.GetItemCount(item.ItemId) < item.ChangeCount { if player.GetItemCount(item.ItemId) < item.ChangeCount {
logger.Error("item count not enough, itemId: %v", item.ItemId) logger.Error("item count not enough, itemId: %v", item.ItemId)
// 摩拉的错误提示与材料不同 // 摩拉的错误提示与材料不同
if item.ItemId == constant.ItemConstantConst.SCOIN { if item.ItemId == constant.ITEM_ID_SCOIN {
g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH) g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH)
} }
g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}, proto.Retcode_RET_ITEM_COUNT_NOT_ENOUGH) g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}, proto.Retcode_RET_ITEM_COUNT_NOT_ENOUGH)
@@ -191,8 +184,8 @@ func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Messa
} }
} }
// 冒险等级是否符合要求 // 冒险等级是否符合要求
if player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL] < uint32(avatarPromoteConfig.MinPlayerLevel) { if player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL] < uint32(avatarPromoteConfig.MinPlayerLevel) {
logger.Error("player level not enough, level: %v", player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL]) logger.Error("player level not enough, level: %v", player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL])
g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}, proto.Retcode_RET_PLAYER_LEVEL_LESS_THAN) g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{}, proto.Retcode_RET_PLAYER_LEVEL_LESS_THAN)
return return
} }
@@ -230,9 +223,9 @@ func (g *GameManager) AvatarUpgradeReq(player *model.Player, payloadMsg pb.Messa
return return
} }
// 获取经验书物品配置表 // 获取经验书物品配置表
itemDataConfig, ok := gdconf.CONF.ItemDataMap[int32(req.ItemId)] itemDataConfig := gdconf.GetItemDataById(int32(req.ItemId))
if !ok { if itemDataConfig == nil {
logger.Error("item data config error, itemId: %v", constant.ItemConstantConst.SCOIN) logger.Error("item data config error, itemId: %v", constant.ITEM_ID_SCOIN)
g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{}, proto.Retcode_RET_ITEM_NOT_EXIST) g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{}, proto.Retcode_RET_ITEM_NOT_EXIST)
return return
} }
@@ -246,28 +239,21 @@ func (g *GameManager) AvatarUpgradeReq(player *model.Player, payloadMsg pb.Messa
// 角色获得的经验 // 角色获得的经验
expCount := uint32(itemParam) * req.Count expCount := uint32(itemParam) * req.Count
// 摩拉数量是否足够 // 摩拉数量是否足够
if player.GetItemCount(constant.ItemConstantConst.SCOIN) < expCount/5 { if player.GetItemCount(constant.ITEM_ID_SCOIN) < expCount/5 {
logger.Error("item count not enough, itemId: %v", constant.ItemConstantConst.SCOIN) logger.Error("item count not enough, itemId: %v", constant.ITEM_ID_SCOIN)
g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH) g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH)
return return
} }
// 获取角色配置表 // 获取角色配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)] avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if !ok { if avatarDataConfig == nil {
logger.Error("avatar config error, avatarId: %v", avatar.AvatarId) logger.Error("avatar config error, avatarId: %v", avatar.AvatarId)
g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{}) g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{})
return return
} }
// 获取角色突破配置表 // 获取角色突破配置表
avatarPromoteDataMap, ok := gdconf.CONF.AvatarPromoteDataMap[avatarDataConfig.PromoteId] avatarPromoteConfig := gdconf.GetAvatarPromoteDataByIdAndLevel(avatarDataConfig.PromoteId, int32(avatar.Promote))
if !ok { if avatarPromoteConfig == nil {
logger.Error("avatar promote config error, promoteId: %v", avatarDataConfig.PromoteId)
g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{})
return
}
// 获取角色突破等级对应的配置表
avatarPromoteConfig, ok := avatarPromoteDataMap[int32(avatar.Promote)]
if !ok {
logger.Error("avatar promote config error, promoteLevel: %v", avatar.Promote) logger.Error("avatar promote config error, promoteLevel: %v", avatar.Promote)
g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{}) g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{})
return return
@@ -285,7 +271,7 @@ func (g *GameManager) AvatarUpgradeReq(player *model.Player, payloadMsg pb.Messa
ChangeCount: req.Count, ChangeCount: req.Count,
}, },
{ {
ItemId: constant.ItemConstantConst.SCOIN, ItemId: constant.ITEM_ID_SCOIN,
ChangeCount: expCount / 5, ChangeCount: expCount / 5,
}, },
}) })
@@ -312,20 +298,14 @@ func (g *GameManager) AvatarUpgradeReq(player *model.Player, payloadMsg pb.Messa
// UpgradePlayerAvatar 玩家角色升级 // UpgradePlayerAvatar 玩家角色升级
func (g *GameManager) UpgradePlayerAvatar(player *model.Player, avatar *model.Avatar, expCount uint32) { func (g *GameManager) UpgradePlayerAvatar(player *model.Player, avatar *model.Avatar, expCount uint32) {
// 获取角色配置表 // 获取角色配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)] avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if !ok { if avatarDataConfig == nil {
logger.Error("avatar config error, avatarId: %v", avatar.AvatarId) logger.Error("avatar config error, avatarId: %v", avatar.AvatarId)
return return
} }
// 获取角色突破配置表 // 获取角色突破配置表
avatarPromoteDataMap, ok := gdconf.CONF.AvatarPromoteDataMap[avatarDataConfig.PromoteId] avatarPromoteConfig := gdconf.GetAvatarPromoteDataByIdAndLevel(avatarDataConfig.PromoteId, int32(avatar.Promote))
if !ok { if avatarPromoteConfig == nil {
logger.Error("avatar promote config error, promoteId: %v", avatarDataConfig.PromoteId)
return
}
// 获取角色突破等级对应的配置表
avatarPromoteConfig, ok := avatarPromoteDataMap[int32(avatar.Promote)]
if !ok {
logger.Error("avatar promote config error, promoteLevel: %v", avatar.Promote) logger.Error("avatar promote config error, promoteLevel: %v", avatar.Promote)
return return
} }
@@ -334,8 +314,8 @@ func (g *GameManager) UpgradePlayerAvatar(player *model.Player, avatar *model.Av
// 角色升级 // 角色升级
for { for {
// 获取角色等级配置表 // 获取角色等级配置表
avatarLevelConfig, ok := gdconf.CONF.AvatarLevelDataMap[int32(avatar.Level)] avatarLevelConfig := gdconf.GetAvatarLevelDataByLevel(int32(avatar.Level))
if !ok { if avatarLevelConfig == nil {
// 获取不到代表已经到达最大等级 // 获取不到代表已经到达最大等级
break break
} }
@@ -366,15 +346,15 @@ func (g *GameManager) PacketAvatarPropNotify(avatar *model.Avatar) *proto.Avatar
AvatarGuid: avatar.Guid, AvatarGuid: avatar.Guid,
} }
// 角色等级 // 角色等级
avatarPropNotify.PropMap[uint32(constant.PlayerPropertyConst.PROP_LEVEL)] = int64(avatar.Level) avatarPropNotify.PropMap[uint32(constant.PLAYER_PROP_LEVEL)] = int64(avatar.Level)
// 角色经验 // 角色经验
avatarPropNotify.PropMap[uint32(constant.PlayerPropertyConst.PROP_EXP)] = int64(avatar.Exp) avatarPropNotify.PropMap[uint32(constant.PLAYER_PROP_EXP)] = int64(avatar.Exp)
// 角色突破等级 // 角色突破等级
avatarPropNotify.PropMap[uint32(constant.PlayerPropertyConst.PROP_BREAK_LEVEL)] = int64(avatar.Promote) avatarPropNotify.PropMap[uint32(constant.PLAYER_PROP_BREAK_LEVEL)] = int64(avatar.Promote)
// 角色饱食度 // 角色饱食度
avatarPropNotify.PropMap[uint32(constant.PlayerPropertyConst.PROP_SATIATION_VAL)] = int64(avatar.Satiation) avatarPropNotify.PropMap[uint32(constant.PLAYER_PROP_SATIATION_VAL)] = int64(avatar.Satiation)
// 角色饱食度溢出 // 角色饱食度溢出
avatarPropNotify.PropMap[uint32(constant.PlayerPropertyConst.PROP_SATIATION_PENALTY_TIME)] = int64(avatar.SatiationPenalty) avatarPropNotify.PropMap[uint32(constant.PLAYER_PROP_SATIATION_PENALTY_TIME)] = int64(avatar.SatiationPenalty)
return avatarPropNotify return avatarPropNotify
} }
@@ -536,8 +516,8 @@ func (g *GameManager) AvatarWearFlycloakReq(player *model.Player, payloadMsg pb.
} }
func (g *GameManager) PacketAvatarEquipChangeNotify(avatar *model.Avatar, weapon *model.Weapon, entityId uint32) *proto.AvatarEquipChangeNotify { func (g *GameManager) PacketAvatarEquipChangeNotify(avatar *model.Avatar, weapon *model.Weapon, entityId uint32) *proto.AvatarEquipChangeNotify {
itemDataConfig, ok := gdconf.CONF.ItemDataMap[int32(weapon.ItemId)] itemDataConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if !ok { if itemDataConfig == nil {
logger.Error("item data config error, itemId: %v", weapon.ItemId) logger.Error("item data config error, itemId: %v", weapon.ItemId)
return new(proto.AvatarEquipChangeNotify) return new(proto.AvatarEquipChangeNotify)
} }
@@ -547,9 +527,9 @@ func (g *GameManager) PacketAvatarEquipChangeNotify(avatar *model.Avatar, weapon
EquipGuid: weapon.Guid, EquipGuid: weapon.Guid,
} }
switch itemDataConfig.Type { switch itemDataConfig.Type {
case int32(constant.ItemTypeConst.ITEM_WEAPON): case int32(constant.ITEM_TYPE_WEAPON):
avatarEquipChangeNotify.EquipType = uint32(constant.EquipTypeConst.EQUIP_WEAPON) avatarEquipChangeNotify.EquipType = uint32(constant.EQUIP_TYPE_WEAPON)
case int32(constant.ItemTypeConst.ITEM_RELIQUARY): case int32(constant.ITEM_TYPE_RELIQUARY):
avatarEquipChangeNotify.EquipType = uint32(itemDataConfig.ReliquaryType) avatarEquipChangeNotify.EquipType = uint32(itemDataConfig.ReliquaryType)
} }
avatarEquipChangeNotify.Weapon = &proto.SceneWeaponInfo{ avatarEquipChangeNotify.Weapon = &proto.SceneWeaponInfo{
@@ -567,8 +547,8 @@ func (g *GameManager) PacketAvatarEquipTakeOffNotify(avatar *model.Avatar, weapo
avatarEquipChangeNotify := &proto.AvatarEquipChangeNotify{ avatarEquipChangeNotify := &proto.AvatarEquipChangeNotify{
AvatarGuid: avatar.Guid, AvatarGuid: avatar.Guid,
} }
itemDataConfig, exist := gdconf.CONF.ItemDataMap[int32(weapon.ItemId)] itemDataConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if exist { if itemDataConfig != nil {
avatarEquipChangeNotify.EquipType = uint32(itemDataConfig.Type) avatarEquipChangeNotify.EquipType = uint32(itemDataConfig.Type)
} }
return avatarEquipChangeNotify return avatarEquipChangeNotify
@@ -605,28 +585,28 @@ func (g *GameManager) PacketAvatarInfo(avatar *model.Avatar) *proto.AvatarInfo {
AvatarId: avatar.AvatarId, AvatarId: avatar.AvatarId,
Guid: avatar.Guid, Guid: avatar.Guid,
PropMap: map[uint32]*proto.PropValue{ PropMap: map[uint32]*proto.PropValue{
uint32(constant.PlayerPropertyConst.PROP_LEVEL): { uint32(constant.PLAYER_PROP_LEVEL): {
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), Type: uint32(constant.PLAYER_PROP_LEVEL),
Val: int64(avatar.Level), Val: int64(avatar.Level),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Level)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.Level)},
}, },
uint32(constant.PlayerPropertyConst.PROP_EXP): { uint32(constant.PLAYER_PROP_EXP): {
Type: uint32(constant.PlayerPropertyConst.PROP_EXP), Type: uint32(constant.PLAYER_PROP_EXP),
Val: int64(avatar.Exp), Val: int64(avatar.Exp),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Exp)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.Exp)},
}, },
uint32(constant.PlayerPropertyConst.PROP_BREAK_LEVEL): { uint32(constant.PLAYER_PROP_BREAK_LEVEL): {
Type: uint32(constant.PlayerPropertyConst.PROP_BREAK_LEVEL), Type: uint32(constant.PLAYER_PROP_BREAK_LEVEL),
Val: int64(avatar.Promote), Val: int64(avatar.Promote),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Promote)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.Promote)},
}, },
uint32(constant.PlayerPropertyConst.PROP_SATIATION_VAL): { uint32(constant.PLAYER_PROP_SATIATION_VAL): {
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_VAL), Type: uint32(constant.PLAYER_PROP_SATIATION_VAL),
Val: int64(avatar.Satiation), Val: int64(avatar.Satiation),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Satiation)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.Satiation)},
}, },
uint32(constant.PlayerPropertyConst.PROP_SATIATION_PENALTY_TIME): { uint32(constant.PLAYER_PROP_SATIATION_PENALTY_TIME): {
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_PENALTY_TIME), Type: uint32(constant.PLAYER_PROP_SATIATION_PENALTY_TIME),
Val: int64(avatar.SatiationPenalty), Val: int64(avatar.SatiationPenalty),
Value: &proto.PropValue_Ival{Ival: int64(avatar.SatiationPenalty)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.SatiationPenalty)},
}, },
@@ -651,14 +631,14 @@ func (g *GameManager) PacketAvatarInfo(avatar *model.Avatar) *proto.AvatarInfo {
for _, v := range avatar.FetterList { for _, v := range avatar.FetterList {
pbAvatar.FetterInfo.FetterList = append(pbAvatar.FetterInfo.FetterList, &proto.FetterData{ pbAvatar.FetterInfo.FetterList = append(pbAvatar.FetterInfo.FetterList, &proto.FetterData{
FetterId: v, FetterId: v,
FetterState: uint32(constant.FetterStateConst.FINISH), FetterState: uint32(constant.FETTER_STATE_FINISH),
}) })
} }
// 解锁全部资料 // 解锁全部资料
for _, v := range gdconf.CONF.FetterDataAvatarIdMap[int32(avatar.AvatarId)] { for _, v := range gdconf.GetFetterIdListByAvatarId(int32(avatar.AvatarId)) {
pbAvatar.FetterInfo.FetterList = append(pbAvatar.FetterInfo.FetterList, &proto.FetterData{ pbAvatar.FetterInfo.FetterList = append(pbAvatar.FetterInfo.FetterList, &proto.FetterData{
FetterId: uint32(v), FetterId: uint32(v),
FetterState: uint32(constant.FetterStateConst.FINISH), FetterState: uint32(constant.FETTER_STATE_FINISH),
}) })
} }
// 突破等级奖励 // 突破等级奖励

View File

@@ -16,40 +16,40 @@ func (g *GameManager) AddUserPlayerExp(userId uint32, expCount uint32) {
return return
} }
// 玩家增加冒险阅历 // 玩家增加冒险阅历
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_EXP] += expCount player.PropertiesMap[constant.PLAYER_PROP_PLAYER_EXP] += expCount
// 玩家升级 // 玩家升级
for { for {
playerLevel := player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL] playerLevel := player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL]
// 读取玩家等级配置表 // 读取玩家等级配置表
playerLevelConfig, ok := gdconf.CONF.PlayerLevelDataMap[int32(playerLevel)] playerLevelConfig := gdconf.GetPlayerLevelDataById(int32(playerLevel))
if !ok { if playerLevelConfig == nil {
// 获取不到代表已经到达最大等级 // 获取不到代表已经到达最大等级
break break
} }
// 玩家冒险阅历不足则跳出循环 // 玩家冒险阅历不足则跳出循环
if player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_EXP] < uint32(playerLevelConfig.Exp) { if player.PropertiesMap[constant.PLAYER_PROP_PLAYER_EXP] < uint32(playerLevelConfig.Exp) {
break break
} }
// 玩家增加冒险等阶 // 玩家增加冒险等阶
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL]++ player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL]++
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_EXP] -= uint32(playerLevelConfig.Exp) player.PropertiesMap[constant.PLAYER_PROP_PLAYER_EXP] -= uint32(playerLevelConfig.Exp)
// 更新玩家属性 // 更新玩家属性
playerPropNotify := &proto.PlayerPropNotify{ playerPropNotify := &proto.PlayerPropNotify{
PropMap: make(map[uint32]*proto.PropValue), PropMap: make(map[uint32]*proto.PropValue),
} }
playerPropNotify.PropMap[uint32(constant.PlayerPropertyConst.PROP_PLAYER_LEVEL)] = &proto.PropValue{ playerPropNotify.PropMap[uint32(constant.PLAYER_PROP_PLAYER_LEVEL)] = &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_PLAYER_LEVEL), Type: uint32(constant.PLAYER_PROP_PLAYER_LEVEL),
Val: int64(player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL]), Val: int64(player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL]),
Value: &proto.PropValue_Ival{ Value: &proto.PropValue_Ival{
Ival: int64(player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL]), Ival: int64(player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL]),
}, },
} }
playerPropNotify.PropMap[uint32(constant.PlayerPropertyConst.PROP_PLAYER_EXP)] = &proto.PropValue{ playerPropNotify.PropMap[uint32(constant.PLAYER_PROP_PLAYER_EXP)] = &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_PLAYER_EXP), Type: uint32(constant.PLAYER_PROP_PLAYER_EXP),
Val: int64(player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_EXP]), Val: int64(player.PropertiesMap[constant.PLAYER_PROP_PLAYER_EXP]),
Value: &proto.PropValue_Ival{ Value: &proto.PropValue_Ival{
Ival: int64(player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_EXP]), Ival: int64(player.PropertiesMap[constant.PLAYER_PROP_PLAYER_EXP]),
}, },
} }
g.SendMsg(cmd.PlayerPropNotify, userId, player.ClientSeq, playerPropNotify) g.SendMsg(cmd.PlayerPropNotify, userId, player.ClientSeq, playerPropNotify)

View File

@@ -139,12 +139,12 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p
currHp := float32(0) currHp := float32(0)
fightProp := target.GetFightProp() fightProp := target.GetFightProp()
if fightProp != nil { if fightProp != nil {
currHp = fightProp[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)] currHp = fightProp[uint32(constant.FIGHT_PROP_CUR_HP)]
currHp -= damage currHp -= damage
if currHp < 0 { if currHp < 0 {
currHp = 0 currHp = 0
} }
fightProp[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)] = currHp fightProp[uint32(constant.FIGHT_PROP_CUR_HP)] = currHp
} }
entityFightPropUpdateNotify := &proto.EntityFightPropUpdateNotify{ entityFightPropUpdateNotify := &proto.EntityFightPropUpdateNotify{
FightPropMap: fightProp, FightPropMap: fightProp,
@@ -152,7 +152,7 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p
} }
g.SendToWorldA(world, cmd.EntityFightPropUpdateNotify, player.ClientSeq, entityFightPropUpdateNotify) g.SendToWorldA(world, cmd.EntityFightPropUpdateNotify, player.ClientSeq, entityFightPropUpdateNotify)
if currHp == 0 && target.GetAvatarEntity() == nil { if currHp == 0 && target.GetAvatarEntity() == nil {
scene.SetEntityLifeState(target, constant.LifeStateConst.LIFE_DEAD, proto.PlayerDieType_PLAYER_DIE_GM) scene.SetEntityLifeState(target, constant.LIFE_STATE_DEAD, proto.PlayerDieType_PLAYER_DIE_GM)
} }
combatData, err := pb.Marshal(hitInfo) combatData, err := pb.Marshal(hitInfo)
if err != nil { if err != nil {

View File

@@ -63,7 +63,7 @@ func (g *GameManager) GCGStartChallenge(player *model.Player) {
g.PacketGCGGameBriefDataNotify(player, proto.GCGGameBusinessType_GCG_GAME_GUIDE_GROUP, game)) g.PacketGCGGameBriefDataNotify(player, proto.GCGGameBusinessType_GCG_GAME_GUIDE_GROUP, game))
// 玩家进入GCG界面 // 玩家进入GCG界面
g.TeleportPlayer(player, constant.EnterReasonConst.DungeonEnter, 79999, new(model.Vector), new(model.Vector), 2162) g.TeleportPlayer(player, constant.EnterReasonDungeonEnter, 79999, new(model.Vector), new(model.Vector), 2162)
} }
// GCGAskDuelReq GCG决斗请求 // GCGAskDuelReq GCG决斗请求
@@ -392,8 +392,8 @@ func (g *GameManager) PacketGCGSkillPreviewNotify(game *GCGGame, controller *GCG
// SkillPreviewList // SkillPreviewList
for _, skillInfo := range selectedCharCard.skillList { for _, skillInfo := range selectedCharCard.skillList {
// 读取卡牌技能配置表 // 读取卡牌技能配置表
gcgSkillConfig, ok := gdconf.CONF.GCGSkillDataMap[int32(skillInfo.skillId)] gcgSkillConfig := gdconf.GetGCGSkillDataById(int32(skillInfo.skillId))
if !ok { if gcgSkillConfig == nil {
logger.Error("gcg skill config error, skillId: %v", skillInfo.skillId) logger.Error("gcg skill config error, skillId: %v", skillInfo.skillId)
return new(proto.GCGSkillPreviewNotify) return new(proto.GCGSkillPreviewNotify)
} }
@@ -421,10 +421,10 @@ func (g *GameManager) PacketGCGSkillPreviewNotify(game *GCGGame, controller *GCG
TokenChangeList: []*proto.GCGSkillPreviewTokenInfo{ TokenChangeList: []*proto.GCGSkillPreviewTokenInfo{
{ {
// Token类型 // Token类型
TokenType: constant.GCGTokenConst.TOKEN_CUR_ELEM, TokenType: constant.GCG_TOKEN_TYPE_CUR_ELEM,
BeforeValue: 0, BeforeValue: 0,
// 更改为的值 // 更改为的值
AfterValue: selectedCharCard.tokenMap[constant.GCGTokenConst.TOKEN_CUR_ELEM] + 1, AfterValue: selectedCharCard.tokenMap[constant.GCG_TOKEN_TYPE_CUR_ELEM] + 1,
}, },
}, },
} }

View File

@@ -15,12 +15,12 @@ type UserItem struct {
func (g *GameManager) GetAllItemDataConfig() map[int32]*gdconf.ItemData { func (g *GameManager) GetAllItemDataConfig() map[int32]*gdconf.ItemData {
allItemDataConfig := make(map[int32]*gdconf.ItemData) allItemDataConfig := make(map[int32]*gdconf.ItemData)
for itemId, itemData := range gdconf.CONF.ItemDataMap { for itemId, itemData := range gdconf.GetItemDataMap() {
if uint16(itemData.Type) == constant.ItemTypeConst.ITEM_WEAPON { if uint16(itemData.Type) == constant.ITEM_TYPE_WEAPON {
// 排除武器 // 排除武器
continue continue
} }
if uint16(itemData.Type) == constant.ItemTypeConst.ITEM_RELIQUARY { if uint16(itemData.Type) == constant.ITEM_TYPE_RELIQUARY {
// 排除圣遗物 // 排除圣遗物
continue continue
} }
@@ -61,10 +61,10 @@ func (g *GameManager) AddUserItem(userId uint32, itemList []*UserItem, isHint bo
for _, userItem := range itemList { for _, userItem := range itemList {
// 物品为虚拟物品则另外处理 // 物品为虚拟物品则另外处理
switch userItem.ItemId { switch userItem.ItemId {
case constant.ItemConstantConst.RESIN, constant.ItemConstantConst.LEGENDARY_KEY, constant.ItemConstantConst.HCOIN, case constant.ITEM_ID_RESIN, constant.ITEM_ID_LEGENDARY_KEY, constant.ITEM_ID_HCOIN, constant.ITEM_ID_SCOIN,
constant.ItemConstantConst.SCOIN, constant.ItemConstantConst.MCOIN, constant.ItemConstantConst.HOME_COIN: constant.ITEM_ID_MCOIN, constant.ITEM_ID_HOME_COIN:
// 树脂 传说任务钥匙 原石 摩拉 创世结晶 洞天宝钱 // 树脂 传说任务钥匙 原石 摩拉 创世结晶 洞天宝钱
prop, ok := constant.ItemConstantConst.VIRTUAL_ITEM_PROP[userItem.ItemId] prop, ok := constant.VIRTUAL_ITEM_PROP[userItem.ItemId]
if !ok { if !ok {
continue continue
} }
@@ -78,7 +78,7 @@ func (g *GameManager) AddUserItem(userId uint32, itemList []*UserItem, isHint bo
Ival: int64(player.PropertiesMap[prop]), Ival: int64(player.PropertiesMap[prop]),
}, },
} }
case constant.ItemConstantConst.PLAYER_EXP: case constant.ITEM_ID_PLAYER_EXP:
// 冒险阅历 // 冒险阅历
g.AddUserPlayerExp(userId, userItem.ChangeCount) g.AddUserPlayerExp(userId, userItem.ChangeCount)
default: default:
@@ -110,7 +110,7 @@ func (g *GameManager) AddUserItem(userId uint32, itemList []*UserItem, isHint bo
if isHint { if isHint {
if hintReason == 0 { if hintReason == 0 {
hintReason = constant.ActionReasonConst.SubfieldDrop hintReason = constant.ActionReasonSubfieldDrop
} }
itemAddHintNotify := &proto.ItemAddHintNotify{ itemAddHintNotify := &proto.ItemAddHintNotify{
Reason: uint32(hintReason), Reason: uint32(hintReason),
@@ -139,10 +139,10 @@ func (g *GameManager) CostUserItem(userId uint32, itemList []*UserItem) {
for _, userItem := range itemList { for _, userItem := range itemList {
// 物品为虚拟物品则另外处理 // 物品为虚拟物品则另外处理
switch userItem.ItemId { switch userItem.ItemId {
case constant.ItemConstantConst.RESIN, constant.ItemConstantConst.LEGENDARY_KEY, constant.ItemConstantConst.HCOIN, case constant.ITEM_ID_RESIN, constant.ITEM_ID_LEGENDARY_KEY, constant.ITEM_ID_HCOIN, constant.ITEM_ID_SCOIN,
constant.ItemConstantConst.SCOIN, constant.ItemConstantConst.MCOIN, constant.ItemConstantConst.HOME_COIN: constant.ITEM_ID_MCOIN, constant.ITEM_ID_HOME_COIN:
// 树脂 传说任务钥匙 原石 摩拉 创世结晶 洞天宝钱 // 树脂 传说任务钥匙 原石 摩拉 创世结晶 洞天宝钱
prop, ok := constant.ItemConstantConst.VIRTUAL_ITEM_PROP[userItem.ItemId] prop, ok := constant.VIRTUAL_ITEM_PROP[userItem.ItemId]
if !ok { if !ok {
continue continue
} }
@@ -160,7 +160,7 @@ func (g *GameManager) CostUserItem(userId uint32, itemList []*UserItem) {
Ival: int64(player.PropertiesMap[prop]), Ival: int64(player.PropertiesMap[prop]),
}, },
} }
case constant.ItemConstantConst.PLAYER_EXP: case constant.ITEM_ID_PLAYER_EXP:
// 冒险阅历应该也没人会去扣吧? // 冒险阅历应该也没人会去扣吧?
default: default:
// 普通物品直接扣除 // 普通物品直接扣除

View File

@@ -9,7 +9,6 @@ import (
"hk4e/gdconf" "hk4e/gdconf"
"hk4e/gs/model" "hk4e/gs/model"
"hk4e/pkg/logger" "hk4e/pkg/logger"
"hk4e/pkg/reflection"
"hk4e/protocol/cmd" "hk4e/protocol/cmd"
"hk4e/protocol/proto" "hk4e/protocol/proto"
@@ -198,19 +197,18 @@ func (g *GameManager) PacketPlayerStoreNotify(player *model.Player) *proto.Playe
StoreType: proto.StoreType_STORE_PACK, StoreType: proto.StoreType_STORE_PACK,
WeightLimit: 30000, WeightLimit: 30000,
} }
itemDataMapConfig := gdconf.CONF.ItemDataMap
for _, weapon := range player.WeaponMap { for _, weapon := range player.WeaponMap {
pbItem := &proto.Item{ pbItem := &proto.Item{
ItemId: weapon.ItemId, ItemId: weapon.ItemId,
Guid: weapon.Guid, Guid: weapon.Guid,
Detail: nil, Detail: nil,
} }
itemData, ok := itemDataMapConfig[int32(weapon.ItemId)] itemDataConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if !ok { if itemDataConfig == nil {
logger.Error("config is nil, itemId: %v", weapon.ItemId) logger.Error("get item data config is nil, itemId: %v", weapon.ItemId)
return nil continue
} }
if uint16(itemData.Type) != constant.ItemTypeConst.ITEM_WEAPON { if uint16(itemDataConfig.Type) != constant.ITEM_TYPE_WEAPON {
continue continue
} }
affixMap := make(map[uint32]uint32) affixMap := make(map[uint32]uint32)
@@ -238,7 +236,12 @@ func (g *GameManager) PacketPlayerStoreNotify(player *model.Player) *proto.Playe
Guid: reliquary.Guid, Guid: reliquary.Guid,
Detail: nil, Detail: nil,
} }
if uint16(itemDataMapConfig[int32(reliquary.ItemId)].Type) != constant.ItemTypeConst.ITEM_RELIQUARY { itemDataConfig := gdconf.GetItemDataById(int32(reliquary.ItemId))
if itemDataConfig == nil {
logger.Error("get item data config is nil, itemId: %v", reliquary.ItemId)
continue
}
if uint16(itemDataConfig.Type) != constant.ITEM_TYPE_RELIQUARY {
continue continue
} }
pbItem.Detail = &proto.Item_Equip{ pbItem.Detail = &proto.Item_Equip{
@@ -263,8 +266,12 @@ func (g *GameManager) PacketPlayerStoreNotify(player *model.Player) *proto.Playe
Guid: item.Guid, Guid: item.Guid,
Detail: nil, Detail: nil,
} }
itemDataConfig := itemDataMapConfig[int32(item.ItemId)] itemDataConfig := gdconf.GetItemDataById(int32(item.ItemId))
if itemDataConfig != nil && uint16(itemDataConfig.Type) == constant.ItemTypeConst.ITEM_FURNITURE { if itemDataConfig == nil {
logger.Error("get item data config is nil, itemId: %v", item.ItemId)
continue
}
if itemDataConfig != nil && uint16(itemDataConfig.Type) == constant.ITEM_TYPE_FURNITURE {
pbItem.Detail = &proto.Item_Furniture{ pbItem.Detail = &proto.Item_Furniture{
Furniture: &proto.Furniture{ Furniture: &proto.Furniture{
Count: item.Count, Count: item.Count,
@@ -315,10 +322,9 @@ func (g *GameManager) PacketOpenStateUpdateNotify() *proto.OpenStateUpdateNotify
openStateUpdateNotify := &proto.OpenStateUpdateNotify{ openStateUpdateNotify := &proto.OpenStateUpdateNotify{
OpenStateMap: make(map[uint32]uint32), OpenStateMap: make(map[uint32]uint32),
} }
openStateConstMap := reflection.ConvStructToMap(constant.OpenStateConst)
// 先暂时开放全部功能模块 // 先暂时开放全部功能模块
for _, v := range openStateConstMap { for _, v := range constant.ALL_OPEN_STATE {
openStateUpdateNotify.OpenStateMap[uint32(v.(uint16))] = 1 openStateUpdateNotify.OpenStateMap[uint32(v)] = 1
} }
return openStateUpdateNotify return openStateUpdateNotify
} }
@@ -342,31 +348,17 @@ func (g *GameManager) CreatePlayer(userId uint32, nickName string, mainCharAvata
player.SceneId = 3 player.SceneId = 3
player.PropertiesMap = make(map[uint16]uint32) player.PropertiesMap = make(map[uint16]uint32)
// 初始化所有属性 player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL] = 1
propList := reflection.ConvStructToMap(constant.PlayerPropertyConst) player.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL] = 0
for fieldName, fieldValue := range propList { player.PropertiesMap[constant.PLAYER_PROP_IS_SPRING_AUTO_USE] = 1
// 排除角色相关的属性 player.PropertiesMap[constant.PLAYER_PROP_SPRING_AUTO_USE_PERCENT] = 100
if fieldName == "PROP_EXP" || player.PropertiesMap[constant.PLAYER_PROP_IS_FLYABLE] = 1
fieldName == "PROP_BREAK_LEVEL" || player.PropertiesMap[constant.PLAYER_PROP_IS_TRANSFERABLE] = 1
fieldName == "PROP_SATIATION_VAL" || player.PropertiesMap[constant.PLAYER_PROP_MAX_STAMINA] = 24000
fieldName == "PROP_SATIATION_PENALTY_TIME" || player.PropertiesMap[constant.PLAYER_PROP_CUR_PERSIST_STAMINA] = 24000
fieldName == "PROP_LEVEL" { player.PropertiesMap[constant.PLAYER_PROP_PLAYER_RESIN] = 160
continue player.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE] = 2
} player.PropertiesMap[constant.PLAYER_PROP_IS_MP_MODE_AVAILABLE] = 1
value := fieldValue.(uint16)
player.PropertiesMap[value] = 0
}
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL] = 1
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL] = 0
player.PropertiesMap[constant.PlayerPropertyConst.PROP_IS_SPRING_AUTO_USE] = 1
player.PropertiesMap[constant.PlayerPropertyConst.PROP_SPRING_AUTO_USE_PERCENT] = 100
player.PropertiesMap[constant.PlayerPropertyConst.PROP_IS_FLYABLE] = 1
player.PropertiesMap[constant.PlayerPropertyConst.PROP_IS_TRANSFERABLE] = 1
player.PropertiesMap[constant.PlayerPropertyConst.PROP_MAX_STAMINA] = 24000
player.PropertiesMap[constant.PlayerPropertyConst.PROP_CUR_PERSIST_STAMINA] = 24000
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_RESIN] = 160
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE] = 2
player.PropertiesMap[constant.PlayerPropertyConst.PROP_IS_MP_MODE_AVAILABLE] = 1
player.FlyCloakList = make([]uint32, 0) player.FlyCloakList = make([]uint32, 0)
player.FlyCloakList = append(player.FlyCloakList, 140001) player.FlyCloakList = append(player.FlyCloakList, 140001)
@@ -411,8 +403,8 @@ func (g *GameManager) CreatePlayer(userId uint32, nickName string, mainCharAvata
// 添加选定的主角 // 添加选定的主角
player.AddAvatar(mainCharAvatarId) player.AddAvatar(mainCharAvatarId)
// 添加初始武器 // 添加初始武器
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(mainCharAvatarId)] avatarDataConfig := gdconf.GetAvatarDataById(int32(mainCharAvatarId))
if !ok { if avatarDataConfig == nil {
logger.Error("config is nil, mainCharAvatarId: %v", mainCharAvatarId) logger.Error("config is nil, mainCharAvatarId: %v", mainCharAvatarId)
return nil return nil
} }

View File

@@ -17,27 +17,22 @@ func (g *GameManager) SceneTransToPointReq(player *model.Player, payloadMsg pb.M
logger.Debug("user get scene trans to point, uid: %v", player.PlayerID) logger.Debug("user get scene trans to point, uid: %v", player.PlayerID)
req := payloadMsg.(*proto.SceneTransToPointReq) req := payloadMsg.(*proto.SceneTransToPointReq)
scenePointConfig, exist := gdconf.CONF.ScenePointMap[int32(req.SceneId)] pointDataConfig := gdconf.GetScenePointBySceneIdAndPointId(int32(req.SceneId), int32(req.PointId))
if !exist { if pointDataConfig == nil {
g.SendError(cmd.SceneTransToPointRsp, player, &proto.SceneTransToPointRsp{})
return
}
pointConfig, exist := scenePointConfig.PointMap[int32(req.PointId)]
if !exist {
g.SendError(cmd.SceneTransToPointRsp, player, &proto.SceneTransToPointRsp{}) g.SendError(cmd.SceneTransToPointRsp, player, &proto.SceneTransToPointRsp{})
return return
} }
// 传送玩家 // 传送玩家
sceneId := req.SceneId sceneId := req.SceneId
g.TeleportPlayer(player, constant.EnterReasonConst.TransPoint, sceneId, &model.Vector{ g.TeleportPlayer(player, constant.EnterReasonTransPoint, sceneId, &model.Vector{
X: pointConfig.TranPos.X, X: pointDataConfig.TranPos.X,
Y: pointConfig.TranPos.Y, Y: pointDataConfig.TranPos.Y,
Z: pointConfig.TranPos.Z, Z: pointDataConfig.TranPos.Z,
}, &model.Vector{ }, &model.Vector{
X: pointConfig.TranRot.X, X: pointDataConfig.TranRot.X,
Y: pointConfig.TranRot.Y, Y: pointDataConfig.TranRot.Y,
Z: pointConfig.TranRot.Z, Z: pointDataConfig.TranRot.Z,
}, 0) }, 0)
sceneTransToPointRsp := &proto.SceneTransToPointRsp{ sceneTransToPointRsp := &proto.SceneTransToPointRsp{
@@ -60,7 +55,7 @@ func (g *GameManager) MarkMapReq(player *model.Player, payloadMsg pb.Message) {
posYInt = 300 posYInt = 300
} }
// 传送玩家 // 传送玩家
g.TeleportPlayer(player, constant.EnterReasonConst.Gm, req.Mark.SceneId, &model.Vector{ g.TeleportPlayer(player, constant.EnterReasonGm, req.Mark.SceneId, &model.Vector{
X: float64(req.Mark.Pos.X), X: float64(req.Mark.Pos.X),
Y: float64(posYInt), Y: float64(posYInt),
Z: float64(req.Mark.Pos.Z), Z: float64(req.Mark.Pos.Z),
@@ -107,7 +102,7 @@ func (g *GameManager) TeleportPlayer(player *model.Player, enterReason uint16, s
var enterType proto.EnterType var enterType proto.EnterType
switch enterReason { switch enterReason {
case constant.EnterReasonConst.DungeonEnter: case constant.EnterReasonDungeonEnter:
logger.Debug("player dungeon scene, scene: %v, pos: %v", player.SceneId, player.Pos) logger.Debug("player dungeon scene, scene: %v, pos: %v", player.SceneId, player.Pos)
enterType = proto.EnterType_ENTER_DUNGEON enterType = proto.EnterType_ENTER_DUNGEON
default: default:
@@ -127,8 +122,8 @@ func (g *GameManager) GetScenePointReq(player *model.Player, payloadMsg pb.Messa
logger.Debug("user get scene point, uid: %v", player.PlayerID) logger.Debug("user get scene point, uid: %v", player.PlayerID)
req := payloadMsg.(*proto.GetScenePointReq) req := payloadMsg.(*proto.GetScenePointReq)
scenePointConfig, exist := gdconf.CONF.ScenePointMap[int32(req.SceneId)] scenePointMapConfig := gdconf.GetScenePointMapBySceneId(int32(req.SceneId))
if !exist { if scenePointMapConfig == nil {
return return
} }
@@ -136,7 +131,7 @@ func (g *GameManager) GetScenePointReq(player *model.Player, payloadMsg pb.Messa
SceneId: req.SceneId, SceneId: req.SceneId,
} }
areaIdMap := make(map[uint32]bool) areaIdMap := make(map[uint32]bool)
for _, worldAreaData := range gdconf.CONF.WorldAreaDataMap { for _, worldAreaData := range gdconf.GetWorldAreaDataMap() {
if uint32(worldAreaData.SceneId) == req.SceneId { if uint32(worldAreaData.SceneId) == req.SceneId {
areaIdMap[uint32(worldAreaData.AreaId1)] = true areaIdMap[uint32(worldAreaData.AreaId1)] = true
} }
@@ -146,7 +141,7 @@ func (g *GameManager) GetScenePointReq(player *model.Player, payloadMsg pb.Messa
areaList = append(areaList, areaId) areaList = append(areaList, areaId)
} }
getScenePointRsp.UnlockAreaList = areaList getScenePointRsp.UnlockAreaList = areaList
for _, pointData := range scenePointConfig.PointMap { for _, pointData := range scenePointMapConfig {
if pointData.PointType == gdconf.PointTypeOther { if pointData.PointType == gdconf.PointTypeOther {
continue continue
} }
@@ -163,7 +158,7 @@ func (g *GameManager) GetSceneAreaReq(player *model.Player, payloadMsg pb.Messag
SceneId: req.SceneId, SceneId: req.SceneId,
} }
areaIdMap := make(map[uint32]bool) areaIdMap := make(map[uint32]bool)
for _, worldAreaData := range gdconf.CONF.WorldAreaDataMap { for _, worldAreaData := range gdconf.GetWorldAreaDataMap() {
if uint32(worldAreaData.SceneId) == req.SceneId { if uint32(worldAreaData.SceneId) == req.SceneId {
areaIdMap[uint32(worldAreaData.AreaId1)] = true areaIdMap[uint32(worldAreaData.AreaId1)] = true
} }

View File

@@ -212,8 +212,8 @@ func (g *GameManager) UserApplyEnterWorld(player *model.Player, targetUid uint32
ApplyPlayerOnlineInfo: &mq.UserBaseInfo{ ApplyPlayerOnlineInfo: &mq.UserBaseInfo{
UserId: player.PlayerID, UserId: player.PlayerID,
Nickname: player.NickName, Nickname: player.NickName,
PlayerLevel: player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], PlayerLevel: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: uint8(player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]), MpSettingType: uint8(player.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: player.NameCard, NameCardId: player.NameCard,
Signature: player.Signature, Signature: player.Signature,
HeadImageId: player.HeadImage, HeadImageId: player.HeadImage,
@@ -235,7 +235,7 @@ func (g *GameManager) UserApplyEnterWorld(player *model.Player, targetUid uint32
applyFailNotify(proto.PlayerApplyEnterMpResultNotify_PLAYER_NOT_IN_PLAYER_WORLD) applyFailNotify(proto.PlayerApplyEnterMpResultNotify_PLAYER_NOT_IN_PLAYER_WORLD)
return return
} }
mpSetting := targetPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE] mpSetting := targetPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]
if mpSetting == 0 { if mpSetting == 0 {
// 房主玩家没开权限 // 房主玩家没开权限
applyFailNotify(proto.PlayerApplyEnterMpResultNotify_SCENE_CANNOT_ENTER) applyFailNotify(proto.PlayerApplyEnterMpResultNotify_SCENE_CANNOT_ENTER)
@@ -340,7 +340,7 @@ func (g *GameManager) HostEnterMpWorld(hostPlayer *model.Player, otherUid uint32
hostPlayer, hostPlayer,
hostPlayer, hostPlayer,
proto.EnterType_ENTER_GOTO, proto.EnterType_ENTER_GOTO,
uint32(constant.EnterReasonConst.HostFromSingleToMp), uint32(constant.EnterReasonHostFromSingleToMp),
hostPlayer.SceneId, hostPlayer.SceneId,
hostPlayer.Pos, hostPlayer.Pos,
0, 0,
@@ -368,7 +368,7 @@ func (g *GameManager) UserLeaveWorld(player *model.Player) bool {
return false return false
} }
} }
g.ReconnectPlayer(player.PlayerID) g.ReLoginPlayer(player.PlayerID)
return true return true
} }
@@ -458,8 +458,8 @@ func (g *GameManager) UpdateWorldPlayerInfo(hostWorld *World, excludePlayer *mod
onlinePlayerInfo := &proto.OnlinePlayerInfo{ onlinePlayerInfo := &proto.OnlinePlayerInfo{
Uid: subWorldPlayer.PlayerID, Uid: subWorldPlayer.PlayerID,
Nickname: subWorldPlayer.NickName, Nickname: subWorldPlayer.NickName,
PlayerLevel: subWorldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], PlayerLevel: subWorldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(subWorldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]), MpSettingType: proto.MpSettingType(subWorldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: subWorldPlayer.NameCard, NameCardId: subWorldPlayer.NameCard,
Signature: subWorldPlayer.Signature, Signature: subWorldPlayer.Signature,
ProfilePicture: &proto.ProfilePicture{AvatarId: subWorldPlayer.HeadImage}, ProfilePicture: &proto.ProfilePicture{AvatarId: subWorldPlayer.HeadImage},
@@ -483,8 +483,8 @@ func (g *GameManager) UpdateWorldPlayerInfo(hostWorld *World, excludePlayer *mod
onlinePlayerInfo := &proto.OnlinePlayerInfo{ onlinePlayerInfo := &proto.OnlinePlayerInfo{
Uid: worldPlayer.PlayerID, Uid: worldPlayer.PlayerID,
Nickname: worldPlayer.NickName, Nickname: worldPlayer.NickName,
PlayerLevel: worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], PlayerLevel: worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]), MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: worldPlayer.NameCard, NameCardId: worldPlayer.NameCard,
Signature: worldPlayer.Signature, Signature: worldPlayer.Signature,
ProfilePicture: &proto.ProfilePicture{AvatarId: worldPlayer.HeadImage}, ProfilePicture: &proto.ProfilePicture{AvatarId: worldPlayer.HeadImage},
@@ -565,7 +565,7 @@ func (g *GameManager) ServerUserMpReq(userMpInfo *mq.UserMpInfo, gsAppId string)
applyFailNotify(proto.PlayerApplyEnterMpResultNotify_PLAYER_NOT_IN_PLAYER_WORLD) applyFailNotify(proto.PlayerApplyEnterMpResultNotify_PLAYER_NOT_IN_PLAYER_WORLD)
return return
} }
mpSetting := hostPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE] mpSetting := hostPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]
if mpSetting == 0 { if mpSetting == 0 {
// 房主玩家没开权限 // 房主玩家没开权限
applyFailNotify(proto.PlayerApplyEnterMpResultNotify_SCENE_CANNOT_ENTER) applyFailNotify(proto.PlayerApplyEnterMpResultNotify_SCENE_CANNOT_ENTER)

View File

@@ -58,8 +58,8 @@ func (g *GameManager) SceneInitFinishReq(player *model.Player, payloadMsg pb.Mes
onlinePlayerInfo := &proto.OnlinePlayerInfo{ onlinePlayerInfo := &proto.OnlinePlayerInfo{
Uid: worldPlayer.PlayerID, Uid: worldPlayer.PlayerID,
Nickname: worldPlayer.NickName, Nickname: worldPlayer.NickName,
PlayerLevel: worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], PlayerLevel: worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]), MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: worldPlayer.NameCard, NameCardId: worldPlayer.NameCard,
Signature: worldPlayer.Signature, Signature: worldPlayer.Signature,
ProfilePicture: &proto.ProfilePicture{AvatarId: worldPlayer.HeadImage}, ProfilePicture: &proto.ProfilePicture{AvatarId: worldPlayer.HeadImage},
@@ -99,7 +99,7 @@ func (g *GameManager) SceneInitFinishReq(player *model.Player, payloadMsg pb.Mes
}, },
} }
for _, info := range playerWorldSceneInfoListNotify.InfoList { for _, info := range playerWorldSceneInfoListNotify.InfoList {
for _, sceneTagDataConfig := range gdconf.CONF.SceneTagDataMap { for _, sceneTagDataConfig := range gdconf.GetSceneTagDataMap() {
if uint32(sceneTagDataConfig.SceneId) == info.SceneId { if uint32(sceneTagDataConfig.SceneId) == info.SceneId {
info.SceneTagIdList = append(info.SceneTagIdList, uint32(sceneTagDataConfig.SceneTagId)) info.SceneTagIdList = append(info.SceneTagIdList, uint32(sceneTagDataConfig.SceneTagId))
} }
@@ -167,7 +167,7 @@ func (g *GameManager) SceneInitFinishReq(player *model.Player, payloadMsg pb.Mes
sceneAreaWeatherNotify := &proto.SceneAreaWeatherNotify{ sceneAreaWeatherNotify := &proto.SceneAreaWeatherNotify{
WeatherAreaId: 0, WeatherAreaId: 0,
ClimateType: uint32(constant.ClimateTypeConst.CLIMATE_SUNNY), ClimateType: uint32(constant.CLIMATE_TYPE_SUNNY),
} }
g.SendMsg(cmd.SceneAreaWeatherNotify, player.PlayerID, player.ClientSeq, sceneAreaWeatherNotify) g.SendMsg(cmd.SceneAreaWeatherNotify, player.PlayerID, player.ClientSeq, sceneAreaWeatherNotify)
} }
@@ -179,8 +179,8 @@ func (g *GameManager) SceneInitFinishReq(player *model.Player, payloadMsg pb.Mes
onlinePlayerInfo := &proto.OnlinePlayerInfo{ onlinePlayerInfo := &proto.OnlinePlayerInfo{
Uid: worldPlayer.PlayerID, Uid: worldPlayer.PlayerID,
Nickname: worldPlayer.NickName, Nickname: worldPlayer.NickName,
PlayerLevel: worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], PlayerLevel: worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]), MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: worldPlayer.NameCard, NameCardId: worldPlayer.NameCard,
Signature: worldPlayer.Signature, Signature: worldPlayer.Signature,
ProfilePicture: &proto.ProfilePicture{AvatarId: worldPlayer.HeadImage}, ProfilePicture: &proto.ProfilePicture{AvatarId: worldPlayer.HeadImage},
@@ -284,7 +284,7 @@ func (g *GameManager) EnterSceneDoneReq(player *model.Player, payloadMsg pb.Mess
sceneAreaWeatherNotify := &proto.SceneAreaWeatherNotify{ sceneAreaWeatherNotify := &proto.SceneAreaWeatherNotify{
WeatherAreaId: 0, WeatherAreaId: 0,
ClimateType: uint32(constant.ClimateTypeConst.CLIMATE_SUNNY), ClimateType: uint32(constant.CLIMATE_TYPE_SUNNY),
} }
g.SendMsg(cmd.SceneAreaWeatherNotify, player.PlayerID, player.ClientSeq, sceneAreaWeatherNotify) g.SendMsg(cmd.SceneAreaWeatherNotify, player.PlayerID, player.ClientSeq, sceneAreaWeatherNotify)
@@ -380,8 +380,8 @@ func (g *GameManager) CreateConfigEntity(scene *Scene, objectId int64, entityCon
gadget := entityConfig.(*gdconf.Gadget) gadget := entityConfig.(*gdconf.Gadget)
// 70500000并不是实际的装置id 根据节点类型对应采集物配置表 // 70500000并不是实际的装置id 根据节点类型对应采集物配置表
if gadget.PointType != 0 && gadget.GadgetId == 70500000 { if gadget.PointType != 0 && gadget.GadgetId == 70500000 {
gatherDataConfig, exist := gdconf.CONF.GatherDataPointTypeMap[gadget.PointType] gatherDataConfig := gdconf.GetGatherDataByPointType(gadget.PointType)
if !exist { if gatherDataConfig == nil {
return 0 return 0
} }
return scene.CreateEntityGadgetGather(&model.Vector{ return scene.CreateEntityGadgetGather(&model.Vector{
@@ -420,8 +420,8 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyLogin(player *model.Player, en
Type: enterType, Type: enterType,
TargetUid: player.PlayerID, TargetUid: player.PlayerID,
EnterSceneToken: player.EnterSceneToken, EnterSceneToken: player.EnterSceneToken,
WorldLevel: player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL], WorldLevel: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL],
EnterReason: uint32(constant.EnterReasonConst.Login), EnterReason: uint32(constant.EnterReasonLogin),
IsFirstLoginEnterScene: true, IsFirstLoginEnterScene: true,
WorldType: 1, WorldType: 1,
SceneTagIdList: make([]uint32, 0), SceneTagIdList: make([]uint32, 0),
@@ -430,7 +430,7 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyLogin(player *model.Player, en
strconv.Itoa(int(player.PlayerID)) + "-" + strconv.Itoa(int(player.PlayerID)) + "-" +
strconv.Itoa(int(time.Now().Unix())) + "-" + strconv.Itoa(int(time.Now().Unix())) + "-" +
"296359" "296359"
for _, sceneTagDataConfig := range gdconf.CONF.SceneTagDataMap { for _, sceneTagDataConfig := range gdconf.GetSceneTagDataMap() {
if uint32(sceneTagDataConfig.SceneId) == player.SceneId { if uint32(sceneTagDataConfig.SceneId) == player.SceneId {
playerEnterSceneNotify.SceneTagIdList = append(playerEnterSceneNotify.SceneTagIdList, uint32(sceneTagDataConfig.SceneTagId)) playerEnterSceneNotify.SceneTagIdList = append(playerEnterSceneNotify.SceneTagIdList, uint32(sceneTagDataConfig.SceneTagId))
} }
@@ -470,7 +470,7 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
Type: enterType, Type: enterType,
TargetUid: targetPlayer.PlayerID, TargetUid: targetPlayer.PlayerID,
EnterSceneToken: player.EnterSceneToken, EnterSceneToken: player.EnterSceneToken,
WorldLevel: targetPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL], WorldLevel: targetPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL],
EnterReason: enterReason, EnterReason: enterReason,
WorldType: 1, WorldType: 1,
DungeonId: dungeonId, DungeonId: dungeonId,
@@ -480,7 +480,7 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
strconv.Itoa(int(targetPlayer.PlayerID)) + "-" + strconv.Itoa(int(targetPlayer.PlayerID)) + "-" +
strconv.Itoa(int(time.Now().Unix())) + "-" + strconv.Itoa(int(time.Now().Unix())) + "-" +
"296359" "296359"
for _, sceneTagDataConfig := range gdconf.CONF.SceneTagDataMap { for _, sceneTagDataConfig := range gdconf.GetSceneTagDataMap() {
if uint32(sceneTagDataConfig.SceneId) == player.SceneId { if uint32(sceneTagDataConfig.SceneId) == player.SceneId {
playerEnterSceneNotify.SceneTagIdList = append(playerEnterSceneNotify.SceneTagIdList, uint32(sceneTagDataConfig.SceneTagId)) playerEnterSceneNotify.SceneTagIdList = append(playerEnterSceneNotify.SceneTagIdList, uint32(sceneTagDataConfig.SceneTagId))
} }
@@ -591,56 +591,28 @@ func (g *GameManager) AddSceneEntityNotify(player *model.Player, visionType prot
func (g *GameManager) EntityFightPropUpdateNotifyBroadcast(scene *Scene, entity *Entity, fightPropId uint32) { func (g *GameManager) EntityFightPropUpdateNotifyBroadcast(scene *Scene, entity *Entity, fightPropId uint32) {
for _, player := range scene.GetAllPlayer() { for _, player := range scene.GetAllPlayer() {
// PacketEntityFightPropUpdateNotify fightProp := entity.GetFightProp()
g.SendMsg(cmd.EntityFightPropUpdateNotify, player.PlayerID, player.ClientSeq, &proto.EntityFightPropUpdateNotify{ ntf := &proto.EntityFightPropUpdateNotify{
FightPropMap: entity.GetFightProp(), FightPropMap: make(map[uint32]float32),
EntityId: entity.GetId(), EntityId: entity.GetId(),
}) }
ntf.FightPropMap[fightPropId] = fightProp[fightPropId]
g.SendMsg(cmd.EntityFightPropUpdateNotify, player.PlayerID, player.ClientSeq, ntf)
} }
} }
func (g *GameManager) PacketFightPropMapToPbFightPropList(fightPropMap map[uint32]float32) []*proto.FightPropPair { func (g *GameManager) PacketFightPropMapToPbFightPropList(fightPropMap map[uint32]float32) []*proto.FightPropPair {
fightPropList := []*proto.FightPropPair{ fightPropList := []*proto.FightPropPair{
{ {PropType: uint32(constant.FIGHT_PROP_BASE_HP), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_BASE_HP)]},
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP), {PropType: uint32(constant.FIGHT_PROP_BASE_ATTACK), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_BASE_ATTACK)]},
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP)], {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.FightPropertyConst.FIGHT_PROP_BASE_ATTACK), {PropType: uint32(constant.FIGHT_PROP_CHARGE_EFFICIENCY), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CHARGE_EFFICIENCY)]},
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_ATTACK)], {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.FightPropertyConst.FIGHT_PROP_BASE_DEFENSE), {PropType: uint32(constant.FIGHT_PROP_CUR_DEFENSE), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CUR_DEFENSE)]},
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_DEFENSE)],
},
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_CRITICAL),
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CRITICAL)],
},
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_CRITICAL_HURT),
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CRITICAL_HURT)],
},
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_CHARGE_EFFICIENCY),
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CHARGE_EFFICIENCY)],
},
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP),
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)],
},
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP),
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP)],
},
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_ATTACK),
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_ATTACK)],
},
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_DEFENSE),
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_DEFENSE)],
},
} }
return fightPropList return fightPropList
} }
@@ -676,37 +648,37 @@ func (g *GameManager) PacketSceneEntityInfoAvatar(scene *Scene, player *model.Pl
}, },
PropList: []*proto.PropPair{ PropList: []*proto.PropPair{
{ {
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), Type: uint32(constant.PLAYER_PROP_LEVEL),
PropValue: &proto.PropValue{ PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), Type: uint32(constant.PLAYER_PROP_LEVEL),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Level)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.Level)},
Val: int64(avatar.Level)}, Val: int64(avatar.Level)},
}, },
{ {
Type: uint32(constant.PlayerPropertyConst.PROP_EXP), Type: uint32(constant.PLAYER_PROP_EXP),
PropValue: &proto.PropValue{ PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_EXP), Type: uint32(constant.PLAYER_PROP_EXP),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Exp)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.Exp)},
Val: int64(avatar.Exp)}, Val: int64(avatar.Exp)},
}, },
{ {
Type: uint32(constant.PlayerPropertyConst.PROP_BREAK_LEVEL), Type: uint32(constant.PLAYER_PROP_BREAK_LEVEL),
PropValue: &proto.PropValue{ PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_BREAK_LEVEL), Type: uint32(constant.PLAYER_PROP_BREAK_LEVEL),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Promote)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.Promote)},
Val: int64(avatar.Promote)}, Val: int64(avatar.Promote)},
}, },
{ {
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_VAL), Type: uint32(constant.PLAYER_PROP_SATIATION_VAL),
PropValue: &proto.PropValue{ PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_VAL), Type: uint32(constant.PLAYER_PROP_SATIATION_VAL),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Satiation)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.Satiation)},
Val: int64(avatar.Satiation)}, Val: int64(avatar.Satiation)},
}, },
{ {
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_PENALTY_TIME), Type: uint32(constant.PLAYER_PROP_SATIATION_PENALTY_TIME),
PropValue: &proto.PropValue{ PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_PENALTY_TIME), Type: uint32(constant.PLAYER_PROP_SATIATION_PENALTY_TIME),
Value: &proto.PropValue_Ival{Ival: int64(avatar.SatiationPenalty)}, Value: &proto.PropValue_Ival{Ival: int64(avatar.SatiationPenalty)},
Val: int64(avatar.SatiationPenalty)}, Val: int64(avatar.SatiationPenalty)},
}, },
@@ -763,8 +735,8 @@ func (g *GameManager) PacketSceneEntityInfoMonster(scene *Scene, entityId uint32
Speed: &proto.Vector{}, Speed: &proto.Vector{},
State: proto.MotionState(entity.GetMoveState()), State: proto.MotionState(entity.GetMoveState()),
}, },
PropList: []*proto.PropPair{{Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), PropValue: &proto.PropValue{ PropList: []*proto.PropPair{{Type: uint32(constant.PLAYER_PROP_LEVEL), PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), Type: uint32(constant.PLAYER_PROP_LEVEL),
Value: &proto.PropValue_Ival{Ival: int64(entity.GetLevel())}, Value: &proto.PropValue_Ival{Ival: int64(entity.GetLevel())},
Val: int64(entity.GetLevel()), Val: int64(entity.GetLevel()),
}}}, }}},
@@ -811,8 +783,8 @@ func (g *GameManager) PacketSceneEntityInfoNpc(scene *Scene, entityId uint32) *p
Speed: &proto.Vector{}, Speed: &proto.Vector{},
State: proto.MotionState(entity.GetMoveState()), State: proto.MotionState(entity.GetMoveState()),
}, },
PropList: []*proto.PropPair{{Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), PropValue: &proto.PropValue{ PropList: []*proto.PropPair{{Type: uint32(constant.PLAYER_PROP_LEVEL), PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), Type: uint32(constant.PLAYER_PROP_LEVEL),
Value: &proto.PropValue_Ival{Ival: int64(entity.GetLevel())}, Value: &proto.PropValue_Ival{Ival: int64(entity.GetLevel())},
Val: int64(entity.GetLevel()), Val: int64(entity.GetLevel()),
}}}, }}},
@@ -859,8 +831,8 @@ func (g *GameManager) PacketSceneEntityInfoGadget(scene *Scene, entityId uint32)
Speed: &proto.Vector{}, Speed: &proto.Vector{},
State: proto.MotionState(entity.GetMoveState()), State: proto.MotionState(entity.GetMoveState()),
}, },
PropList: []*proto.PropPair{{Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), PropValue: &proto.PropValue{ PropList: []*proto.PropPair{{Type: uint32(constant.PLAYER_PROP_LEVEL), PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), Type: uint32(constant.PLAYER_PROP_LEVEL),
Value: &proto.PropValue_Ival{Ival: int64(1)}, Value: &proto.PropValue_Ival{Ival: int64(1)},
Val: int64(1), Val: int64(1),
}}}, }}},
@@ -917,7 +889,7 @@ func (g *GameManager) PacketSceneAvatarInfo(scene *Scene, player *model.Player,
SkillDepotId: player.AvatarMap[avatarId].SkillDepotId, SkillDepotId: player.AvatarMap[avatarId].SkillDepotId,
Weapon: &proto.SceneWeaponInfo{ Weapon: &proto.SceneWeaponInfo{
EntityId: scene.GetWorld().GetPlayerWorldAvatarWeaponEntityId(player, avatarId), EntityId: scene.GetWorld().GetPlayerWorldAvatarWeaponEntityId(player, avatarId),
GadgetId: uint32(gdconf.CONF.ItemDataMap[int32(weapon.ItemId)].GadgetId), GadgetId: uint32(gdconf.GetItemDataById(int32(weapon.ItemId)).GadgetId),
ItemId: weapon.ItemId, ItemId: weapon.ItemId,
Guid: weapon.Guid, Guid: weapon.Guid,
Level: uint32(weapon.Level), Level: uint32(weapon.Level),
@@ -974,8 +946,8 @@ func (g *GameManager) PacketSceneGadgetInfoNormal(entity *Entity) *proto.SceneGa
func (g *GameManager) PacketSceneGadgetInfoGather(entity *Entity) *proto.SceneGadgetInfo { func (g *GameManager) PacketSceneGadgetInfoGather(entity *Entity) *proto.SceneGadgetInfo {
gadgetEntity := entity.GetGadgetEntity() gadgetEntity := entity.GetGadgetEntity()
gatherEntity := gadgetEntity.GetGadgetGatherEntity() gatherEntity := gadgetEntity.GetGadgetGatherEntity()
gather, ok := gdconf.CONF.GatherDataMap[int32(gatherEntity.GetGatherId())] gatherDataConfig := gdconf.GetGatherDataById(int32(gatherEntity.GetGatherId()))
if !ok { if gatherDataConfig == nil {
logger.Error("gather data error, gatherId: %v", gatherEntity.GetGatherId()) logger.Error("gather data error, gatherId: %v", gatherEntity.GetGatherId())
return new(proto.SceneGadgetInfo) return new(proto.SceneGadgetInfo)
} }
@@ -988,7 +960,7 @@ func (g *GameManager) PacketSceneGadgetInfoGather(entity *Entity) *proto.SceneGa
AuthorityPeerId: 1, AuthorityPeerId: 1,
Content: &proto.SceneGadgetInfo_GatherGadget{ Content: &proto.SceneGadgetInfo_GatherGadget{
GatherGadget: &proto.GatherGadgetInfo{ GatherGadget: &proto.GatherGadgetInfo{
ItemId: uint32(gather.ItemId), ItemId: uint32(gatherDataConfig.ItemId),
IsForbidGuest: false, IsForbidGuest: false,
}, },
}, },
@@ -1041,21 +1013,21 @@ func (g *GameManager) PacketDelTeamEntityNotify(scene *Scene, player *model.Play
func (g *GameManager) GetTempFightPropMap() map[uint32]float32 { func (g *GameManager) GetTempFightPropMap() map[uint32]float32 {
fpm := map[uint32]float32{ fpm := map[uint32]float32{
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP): float32(72.91699), uint32(constant.FIGHT_PROP_CUR_HP): float32(72.91699),
uint32(constant.FightPropertyConst.FIGHT_PROP_PHYSICAL_SUB_HURT): float32(0.1), uint32(constant.FIGHT_PROP_PHYSICAL_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_DEFENSE): float32(505.0), uint32(constant.FIGHT_PROP_CUR_DEFENSE): float32(505.0),
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_ATTACK): float32(45.679916), uint32(constant.FIGHT_PROP_CUR_ATTACK): float32(45.679916),
uint32(constant.FightPropertyConst.FIGHT_PROP_ICE_SUB_HURT): float32(0.1), uint32(constant.FIGHT_PROP_ICE_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_ATTACK): float32(45.679916), uint32(constant.FIGHT_PROP_BASE_ATTACK): float32(45.679916),
uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP): float32(72.91699), uint32(constant.FIGHT_PROP_MAX_HP): float32(72.91699),
uint32(constant.FightPropertyConst.FIGHT_PROP_FIRE_SUB_HURT): float32(0.1), uint32(constant.FIGHT_PROP_FIRE_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_ELEC_SUB_HURT): float32(0.1), uint32(constant.FIGHT_PROP_ELEC_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_WIND_SUB_HURT): float32(0.1), uint32(constant.FIGHT_PROP_WIND_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_ROCK_SUB_HURT): float32(0.1), uint32(constant.FIGHT_PROP_ROCK_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_GRASS_SUB_HURT): float32(0.1), uint32(constant.FIGHT_PROP_GRASS_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_WATER_SUB_HURT): float32(0.1), uint32(constant.FIGHT_PROP_WATER_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP): float32(72.91699), uint32(constant.FIGHT_PROP_BASE_HP): float32(72.91699),
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_DEFENSE): float32(505.0), uint32(constant.FIGHT_PROP_BASE_DEFENSE): float32(505.0),
} }
return fpm return fpm
} }

View File

@@ -91,7 +91,7 @@ func (g *GameManager) BuyGoodsReq(player *model.Player, payloadMsg pb.Message) {
g.AddUserItem(player.PlayerID, []*UserItem{{ g.AddUserItem(player.PlayerID, []*UserItem{{
ItemId: buyItemId, ItemId: buyItemId,
ChangeCount: buyItemCount, ChangeCount: buyItemCount,
}}, true, constant.ActionReasonConst.Shop) }}, true, constant.ActionReasonShop)
req.Goods.BoughtNum = player.GetItemCount(buyItemId) req.Goods.BoughtNum = player.GetItemCount(buyItemId)
buyGoodsRsp := &proto.BuyGoodsRsp{ buyGoodsRsp := &proto.BuyGoodsRsp{

View File

@@ -32,9 +32,9 @@ func (g *GameManager) GetPlayerSocialDetailReq(player *model.Player, payloadMsg
ProfilePicture: &proto.ProfilePicture{AvatarId: targetPlayer.HeadImage}, ProfilePicture: &proto.ProfilePicture{AvatarId: targetPlayer.HeadImage},
Nickname: targetPlayer.NickName, Nickname: targetPlayer.NickName,
Signature: targetPlayer.Signature, Signature: targetPlayer.Signature,
Level: targetPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], Level: targetPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
Birthday: &proto.Birthday{Month: uint32(targetPlayer.Birthday[0]), Day: uint32(targetPlayer.Birthday[1])}, Birthday: &proto.Birthday{Month: uint32(targetPlayer.Birthday[0]), Day: uint32(targetPlayer.Birthday[1])},
WorldLevel: targetPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL], WorldLevel: targetPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL],
NameCardId: targetPlayer.NameCard, NameCardId: targetPlayer.NameCard,
IsShowAvatar: false, IsShowAvatar: false,
FinishAchievementNum: 0, FinishAchievementNum: 0,
@@ -174,9 +174,9 @@ func (g *GameManager) GetPlayerFriendListReq(player *model.Player, payloadMsg pb
friendBrief := &proto.FriendBrief{ friendBrief := &proto.FriendBrief{
Uid: friendPlayer.PlayerID, Uid: friendPlayer.PlayerID,
Nickname: friendPlayer.NickName, Nickname: friendPlayer.NickName,
Level: friendPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], Level: friendPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
ProfilePicture: &proto.ProfilePicture{AvatarId: friendPlayer.HeadImage}, ProfilePicture: &proto.ProfilePicture{AvatarId: friendPlayer.HeadImage},
WorldLevel: friendPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL], WorldLevel: friendPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL],
Signature: friendPlayer.Signature, Signature: friendPlayer.Signature,
OnlineState: onlineState, OnlineState: onlineState,
IsMpModeAvailable: true, IsMpModeAvailable: true,
@@ -212,9 +212,9 @@ func (g *GameManager) GetPlayerAskFriendListReq(player *model.Player, payloadMsg
friendBrief := &proto.FriendBrief{ friendBrief := &proto.FriendBrief{
Uid: friendPlayer.PlayerID, Uid: friendPlayer.PlayerID,
Nickname: friendPlayer.NickName, Nickname: friendPlayer.NickName,
Level: friendPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], Level: friendPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
ProfilePicture: &proto.ProfilePicture{AvatarId: friendPlayer.HeadImage}, ProfilePicture: &proto.ProfilePicture{AvatarId: friendPlayer.HeadImage},
WorldLevel: friendPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL], WorldLevel: friendPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL],
Signature: friendPlayer.Signature, Signature: friendPlayer.Signature,
OnlineState: onlineState, OnlineState: onlineState,
IsMpModeAvailable: true, IsMpModeAvailable: true,
@@ -258,11 +258,11 @@ func (g *GameManager) AskAddFriendReq(player *model.Player, payloadMsg pb.Messag
ApplyPlayerOnlineInfo: &mq.UserBaseInfo{ ApplyPlayerOnlineInfo: &mq.UserBaseInfo{
UserId: player.PlayerID, UserId: player.PlayerID,
Nickname: player.NickName, Nickname: player.NickName,
PlayerLevel: player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], PlayerLevel: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
NameCardId: player.NameCard, NameCardId: player.NameCard,
Signature: player.Signature, Signature: player.Signature,
HeadImageId: player.HeadImage, HeadImageId: player.HeadImage,
WorldLevel: player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL], WorldLevel: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL],
}, },
}, },
}, },
@@ -301,9 +301,9 @@ func (g *GameManager) AskAddFriendReq(player *model.Player, payloadMsg pb.Messag
askAddFriendNotify.TargetFriendBrief = &proto.FriendBrief{ askAddFriendNotify.TargetFriendBrief = &proto.FriendBrief{
Uid: player.PlayerID, Uid: player.PlayerID,
Nickname: player.NickName, Nickname: player.NickName,
Level: player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], Level: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
ProfilePicture: &proto.ProfilePicture{AvatarId: player.HeadImage}, ProfilePicture: &proto.ProfilePicture{AvatarId: player.HeadImage},
WorldLevel: player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL], WorldLevel: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL],
Signature: player.Signature, Signature: player.Signature,
OnlineState: proto.FriendOnlineState_FRIEND_ONLINE, OnlineState: proto.FriendOnlineState_FRIEND_ONLINE,
IsMpModeAvailable: true, IsMpModeAvailable: true,
@@ -460,8 +460,8 @@ func (g *GameManager) PacketOnlinePlayerInfo(player *model.Player) *proto.Online
onlinePlayerInfo := &proto.OnlinePlayerInfo{ onlinePlayerInfo := &proto.OnlinePlayerInfo{
Uid: player.PlayerID, Uid: player.PlayerID,
Nickname: player.NickName, Nickname: player.NickName,
PlayerLevel: player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL], PlayerLevel: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]), MpSettingType: proto.MpSettingType(player.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: player.NameCard, NameCardId: player.NameCard,
Signature: player.Signature, Signature: player.Signature,
ProfilePicture: &proto.ProfilePicture{AvatarId: player.HeadImage}, ProfilePicture: &proto.ProfilePicture{AvatarId: player.HeadImage},

View File

@@ -63,7 +63,7 @@ func (g *GameManager) HandleAbilityStamina(player *model.Player, entry *proto.Ab
} }
// 根据ability name查找到对应的技能表里的技能配置 // 根据ability name查找到对应的技能表里的技能配置
var avatarAbility *gdconf.AvatarSkillData = nil var avatarAbility *gdconf.AvatarSkillData = nil
for _, avatarSkillData := range gdconf.CONF.AvatarSkillDataMap { for _, avatarSkillData := range gdconf.GetAvatarSkillDataMap() {
hashCode := endec.Hk4eAbilityHashCode(avatarSkillData.AbilityName) hashCode := endec.Hk4eAbilityHashCode(avatarSkillData.AbilityName)
if uint32(hashCode) == abilityNameHashCode { if uint32(hashCode) == abilityNameHashCode {
avatarAbility = avatarSkillData avatarAbility = avatarSkillData
@@ -121,11 +121,11 @@ func (g *GameManager) SceneAvatarStaminaStepReq(player *model.Player, payloadMsg
// 倒三角 非常消耗体力 // 倒三角 非常消耗体力
costRevise = -(angleRevise * 2) + 10 costRevise = -(angleRevise * 2) + 10
} }
logger.Debug("stamina climbing, rotX: %v, costRevise: %v, cost: %v", req.Rot.X, costRevise, constant.StaminaCostConst.CLIMBING_BASE-costRevise) logger.Debug("stamina climbing, rotX: %v, costRevise: %v, cost: %v", req.Rot.X, costRevise, constant.STAMINA_COST_CLIMBING_BASE-costRevise)
g.UpdatePlayerStamina(player, constant.StaminaCostConst.CLIMBING_BASE-costRevise) g.UpdatePlayerStamina(player, constant.STAMINA_COST_CLIMBING_BASE-costRevise)
case proto.MotionState_MOTION_SWIM_MOVE: case proto.MotionState_MOTION_SWIM_MOVE:
// 缓慢游泳 // 缓慢游泳
g.UpdatePlayerStamina(player, constant.StaminaCostConst.SWIMMING) g.UpdatePlayerStamina(player, constant.STAMINA_COST_SWIMMING)
} }
// PacketSceneAvatarStaminaStepRsp // PacketSceneAvatarStaminaStepRsp
@@ -159,16 +159,16 @@ func (g *GameManager) ImmediateStamina(player *model.Player, motionState proto.M
switch motionState { switch motionState {
case proto.MotionState_MOTION_CLIMB: case proto.MotionState_MOTION_CLIMB:
// 攀爬开始 // 攀爬开始
g.UpdatePlayerStamina(player, constant.StaminaCostConst.CLIMB_START) g.UpdatePlayerStamina(player, constant.STAMINA_COST_CLIMB_START)
case proto.MotionState_MOTION_DASH_BEFORE_SHAKE: case proto.MotionState_MOTION_DASH_BEFORE_SHAKE:
// 冲刺 // 冲刺
g.UpdatePlayerStamina(player, constant.StaminaCostConst.SPRINT) g.UpdatePlayerStamina(player, constant.STAMINA_COST_SPRINT)
case proto.MotionState_MOTION_CLIMB_JUMP: case proto.MotionState_MOTION_CLIMB_JUMP:
// 攀爬跳跃 // 攀爬跳跃
g.UpdatePlayerStamina(player, constant.StaminaCostConst.CLIMB_JUMP) g.UpdatePlayerStamina(player, constant.STAMINA_COST_CLIMB_JUMP)
case proto.MotionState_MOTION_SWIM_DASH: case proto.MotionState_MOTION_SWIM_DASH:
// 快速游泳开始 // 快速游泳开始
g.UpdatePlayerStamina(player, constant.StaminaCostConst.SWIM_DASH_START) g.UpdatePlayerStamina(player, constant.STAMINA_COST_SWIM_DASH_START)
} }
} }
@@ -178,8 +178,8 @@ func (g *GameManager) SkillSustainStamina(player *model.Player, isSwim bool) {
skillId := staminaInfo.LastSkillId skillId := staminaInfo.LastSkillId
// 读取技能配置表 // 读取技能配置表
avatarSkillConfig, ok := gdconf.CONF.AvatarSkillDataMap[int32(skillId)] avatarSkillConfig := gdconf.GetAvatarSkillDataById(int32(skillId))
if !ok { if avatarSkillConfig == nil {
logger.Error("avatarSkillConfig error, skillId: %v", skillId) logger.Error("avatarSkillConfig error, skillId: %v", skillId)
return return
} }
@@ -191,8 +191,8 @@ func (g *GameManager) SkillSustainStamina(player *model.Player, isSwim bool) {
return return
} }
// 获取现行角色的配置表 // 获取现行角色的配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(worldAvatar.GetAvatarId())] avatarDataConfig := gdconf.GetAvatarDataById(int32(worldAvatar.GetAvatarId()))
if !ok { if avatarDataConfig == nil {
logger.Error("avatarDataConfig error, avatarId: %v", worldAvatar.GetAvatarId()) logger.Error("avatarDataConfig error, avatarId: %v", worldAvatar.GetAvatarId())
return return
} }
@@ -203,8 +203,8 @@ func (g *GameManager) SkillSustainStamina(player *model.Player, isSwim bool) {
// 如果为0代表使用默认值 // 如果为0代表使用默认值
if avatarSkillConfig.CostStamina == 0 { if avatarSkillConfig.CostStamina == 0 {
// 大剑持续耐力消耗默认值 // 大剑持续耐力消耗默认值
if avatarDataConfig.WeaponType == constant.WeaponTypeConst.WEAPON_CLAYMORE { if avatarDataConfig.WeaponType == constant.WEAPON_TYPE_CLAYMORE {
costStamina = constant.StaminaCostConst.FIGHT_CLAYMORE_PER costStamina = constant.STAMINA_COST_FIGHT_CLAYMORE_PER
} }
} else { } else {
costStamina = -(avatarSkillConfig.CostStamina * 100) costStamina = -(avatarSkillConfig.CostStamina * 100)
@@ -230,8 +230,8 @@ func (g *GameManager) ChargedAttackStamina(player *model.Player, worldAvatar *Wo
return return
} }
// 获取现行角色的配置表 // 获取现行角色的配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(worldAvatar.GetAvatarId())] avatarDataConfig := gdconf.GetAvatarDataById(int32(worldAvatar.GetAvatarId()))
if !ok { if avatarDataConfig == nil {
logger.Error("avatarDataConfig error, avatarId: %v", worldAvatar.GetAvatarId()) logger.Error("avatarDataConfig error, avatarId: %v", worldAvatar.GetAvatarId())
return return
} }
@@ -244,15 +244,15 @@ func (g *GameManager) ChargedAttackStamina(player *model.Player, worldAvatar *Wo
// 使用武器对应默认耐力消耗 // 使用武器对应默认耐力消耗
// 双手剑为持续耐力消耗不在这里处理 // 双手剑为持续耐力消耗不在这里处理
switch avatarDataConfig.WeaponType { switch avatarDataConfig.WeaponType {
case constant.WeaponTypeConst.WEAPON_SWORD_ONE_HAND: case constant.WEAPON_TYPE_SWORD_ONE_HAND:
// 单手剑 // 单手剑
costStamina = constant.StaminaCostConst.FIGHT_SWORD_ONE_HAND costStamina = constant.STAMINA_COST_FIGHT_SWORD_ONE_HAND
case constant.WeaponTypeConst.WEAPON_POLE: case constant.WEAPON_TYPE_POLE:
// 长枪 // 长枪
costStamina = constant.StaminaCostConst.FIGHT_POLE costStamina = constant.STAMINA_COST_FIGHT_POLE
case constant.WeaponTypeConst.WEAPON_CATALYST: case constant.WEAPON_TYPE_CATALYST:
// 法器 // 法器
costStamina = constant.StaminaCostConst.FIGHT_CATALYST costStamina = constant.STAMINA_COST_FIGHT_CATALYST
} }
} else { } else {
costStamina = -(skillData.CostStamina * 100) costStamina = -(skillData.CostStamina * 100)
@@ -268,17 +268,17 @@ func (g *GameManager) SkillStartStamina(player *model.Player, casterId uint32, s
staminaInfo := player.StaminaInfo staminaInfo := player.StaminaInfo
// 获取该技能开始时所需消耗的耐力 // 获取该技能开始时所需消耗的耐力
costStamina, ok := constant.StaminaCostConst.SKILL_START[skillId] avatarSkillDataConfig := gdconf.GetAvatarSkillDataById(int32(skillId))
// 配置表确保存在技能开始对应的耐力消耗 // 配置表确保存在技能开始对应的耐力消耗
if ok { if avatarSkillDataConfig != nil {
// 距离上次处理技能开始耐力消耗过去的时间 // 距离上次处理技能开始耐力消耗过去的时间
pastTime := time.Now().UnixMilli() - staminaInfo.LastSkillStartTime pastTime := time.Now().UnixMilli() - staminaInfo.LastSkillStartTime
// 上次触发的技能相同则每400ms触发一次消耗 // 上次触发的技能相同则每400ms触发一次消耗
if staminaInfo.LastSkillId != skillId || pastTime > 400 { if staminaInfo.LastSkillId != skillId || pastTime > 400 {
logger.Debug("skill start stamina, skillId: %v, cost: %v", skillId, costStamina) logger.Debug("skill start stamina, skillId: %v, cost: %v", skillId, avatarSkillDataConfig.CostStamina)
// 根据配置消耗耐力 // 根据配置消耗耐力
g.UpdatePlayerStamina(player, costStamina) g.UpdatePlayerStamina(player, avatarSkillDataConfig.CostStamina)
staminaInfo.LastSkillStartTime = time.Now().UnixMilli() staminaInfo.LastSkillStartTime = time.Now().UnixMilli()
} }
} else { } else {
@@ -314,10 +314,10 @@ func (g *GameManager) VehicleRestoreStaminaHandler(player *model.Player) {
// 判断玩家处于载具中 // 判断玩家处于载具中
if g.IsPlayerInVehicle(player, gadgetEntity.GetGadgetVehicleEntity()) { if g.IsPlayerInVehicle(player, gadgetEntity.GetGadgetVehicleEntity()) {
// 角色回复耐力 // 角色回复耐力
g.UpdatePlayerStamina(player, constant.StaminaCostConst.IN_SKIFF) g.UpdatePlayerStamina(player, constant.STAMINA_COST_IN_SKIFF)
} else { } else {
// 载具回复耐力 // 载具回复耐力
g.UpdateVehicleStamina(player, entity, constant.StaminaCostConst.SKIFF_NOBODY) g.UpdateVehicleStamina(player, entity, constant.STAMINA_COST_SKIFF_NOBODY)
} }
} }
@@ -422,9 +422,9 @@ func (g *GameManager) UpdatePlayerStamina(player *model.Player, staminaCost int3
} }
// 最大耐力值 // 最大耐力值
maxStamina := int32(player.PropertiesMap[constant.PlayerPropertyConst.PROP_MAX_STAMINA]) maxStamina := int32(player.PropertiesMap[constant.PLAYER_PROP_MAX_STAMINA])
// 现行耐力值 // 现行耐力值
curStamina := int32(player.PropertiesMap[constant.PlayerPropertyConst.PROP_CUR_PERSIST_STAMINA]) curStamina := int32(player.PropertiesMap[constant.PLAYER_PROP_CUR_PERSIST_STAMINA])
// 将被变更的耐力 // 将被变更的耐力
stamina := g.GetChangeStamina(curStamina, maxStamina, staminaCost) stamina := g.GetChangeStamina(curStamina, maxStamina, staminaCost)
@@ -471,12 +471,12 @@ func (g *GameManager) DrownBackHandler(player *model.Player) {
// 先传送玩家再设置角色存活否则同时设置会传送前显示角色实体 // 先传送玩家再设置角色存活否则同时设置会传送前显示角色实体
if player.StaminaInfo.DrownBackDelay > 20 && player.SceneLoadState == model.SceneEnterDone { if player.StaminaInfo.DrownBackDelay > 20 && player.SceneLoadState == model.SceneEnterDone {
// 设置角色存活 // 设置角色存活
scene.SetEntityLifeState(avatarEntity, constant.LifeStateConst.LIFE_REVIVE, proto.PlayerDieType_PLAYER_DIE_NONE) scene.SetEntityLifeState(avatarEntity, constant.LIFE_STATE_REVIVE, proto.PlayerDieType_PLAYER_DIE_NONE)
// 重置溺水返回时间 // 重置溺水返回时间
player.StaminaInfo.DrownBackDelay = 0 player.StaminaInfo.DrownBackDelay = 0
} else if player.StaminaInfo.DrownBackDelay == 20 { } else if player.StaminaInfo.DrownBackDelay == 20 {
// TODO 队伍扣血 // TODO 队伍扣血
maxStamina := player.PropertiesMap[constant.PlayerPropertyConst.PROP_MAX_STAMINA] maxStamina := player.PropertiesMap[constant.PLAYER_PROP_MAX_STAMINA]
// 设置玩家耐力为一半 // 设置玩家耐力为一半
g.SetPlayerStamina(player, maxStamina/2) g.SetPlayerStamina(player, maxStamina/2)
// 如果玩家的位置比锚点距离近则优先使用玩家位置 // 如果玩家的位置比锚点距离近则优先使用玩家位置
@@ -502,7 +502,7 @@ func (g *GameManager) DrownBackHandler(player *model.Player) {
// } // }
// } // }
// 传送玩家至安全位置 // 传送玩家至安全位置
g.TeleportPlayer(player, constant.EnterReasonConst.Revival, player.SceneId, pos, new(model.Vector), 0) g.TeleportPlayer(player, constant.EnterReasonRevival, player.SceneId, pos, new(model.Vector), 0)
} }
// 防止重置后又被修改 // 防止重置后又被修改
if player.StaminaInfo.DrownBackDelay != 0 { if player.StaminaInfo.DrownBackDelay != 0 {
@@ -530,7 +530,7 @@ func (g *GameManager) HandleDrown(player *model.Player, stamina uint32) {
if player.StaminaInfo.State == proto.MotionState_MOTION_SWIM_MOVE || player.StaminaInfo.State == proto.MotionState_MOTION_SWIM_DASH { if player.StaminaInfo.State == proto.MotionState_MOTION_SWIM_MOVE || player.StaminaInfo.State == proto.MotionState_MOTION_SWIM_DASH {
logger.Debug("player drown, curStamina: %v, state: %v", stamina, player.StaminaInfo.State) logger.Debug("player drown, curStamina: %v, state: %v", stamina, player.StaminaInfo.State)
// 设置角色为死亡 // 设置角色为死亡
scene.SetEntityLifeState(avatarEntity, constant.LifeStateConst.LIFE_DEAD, proto.PlayerDieType_PLAYER_DIE_DRAWN) scene.SetEntityLifeState(avatarEntity, constant.LIFE_STATE_DEAD, proto.PlayerDieType_PLAYER_DIE_DRAWN)
// 溺水返回安全点 计时开始 // 溺水返回安全点 计时开始
player.StaminaInfo.DrownBackDelay = 1 player.StaminaInfo.DrownBackDelay = 1
} }
@@ -553,7 +553,7 @@ func (g *GameManager) SetVehicleStamina(player *model.Player, vehicleEntity *Ent
// SetPlayerStamina 设置玩家耐力 // SetPlayerStamina 设置玩家耐力
func (g *GameManager) SetPlayerStamina(player *model.Player, stamina uint32) { func (g *GameManager) SetPlayerStamina(player *model.Player, stamina uint32) {
// 设置玩家的耐力 // 设置玩家的耐力
prop := constant.PlayerPropertyConst.PROP_CUR_PERSIST_STAMINA prop := constant.PLAYER_PROP_CUR_PERSIST_STAMINA
player.PropertiesMap[prop] = stamina player.PropertiesMap[prop] = stamina
// logger.Debug("player stamina set, stamina: %v", stamina) // logger.Debug("player stamina set, stamina: %v", stamina)

View File

@@ -244,28 +244,28 @@ func (g *GameManager) PacketSceneTeamUpdateNotify(world *World) *proto.SceneTeam
sceneTeamAvatar.SceneAvatarInfo = g.PacketSceneAvatarInfo(worldPlayerScene, worldPlayer, worldAvatar.GetAvatarId()) sceneTeamAvatar.SceneAvatarInfo = g.PacketSceneAvatarInfo(worldPlayerScene, worldPlayer, worldAvatar.GetAvatarId())
} }
// add AbilityControlBlock // add AbilityControlBlock
avatarDataConfig := gdconf.CONF.AvatarDataMap[int32(worldAvatar.GetAvatarId())]
acb := sceneTeamAvatar.AbilityControlBlock acb := sceneTeamAvatar.AbilityControlBlock
embryoId := 0 embryoId := 0
// add avatar abilities // add avatar abilities
avatarDataConfig := gdconf.GetAvatarDataById(int32(worldAvatar.GetAvatarId()))
if avatarDataConfig != nil { if avatarDataConfig != nil {
for _, abilityId := range avatarDataConfig.AbilityHashCodeList { for _, abilityId := range avatarDataConfig.AbilityHashCodeList {
embryoId++ embryoId++
emb := &proto.AbilityEmbryo{ emb := &proto.AbilityEmbryo{
AbilityId: uint32(embryoId), AbilityId: uint32(embryoId),
AbilityNameHash: uint32(abilityId), AbilityNameHash: uint32(abilityId),
AbilityOverrideNameHash: uint32(constant.GameConstantConst.DEFAULT_ABILITY_NAME), AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
} }
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb) acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
} }
} }
// add default abilities // add default abilities
for _, abilityId := range constant.GameConstantConst.DEFAULT_ABILITY_HASHES { for _, abilityId := range constant.DEFAULT_ABILITY_HASHES {
embryoId++ embryoId++
emb := &proto.AbilityEmbryo{ emb := &proto.AbilityEmbryo{
AbilityId: uint32(embryoId), AbilityId: uint32(embryoId),
AbilityNameHash: uint32(abilityId), AbilityNameHash: uint32(abilityId),
AbilityOverrideNameHash: uint32(constant.GameConstantConst.DEFAULT_ABILITY_NAME), AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
} }
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb) acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
} }
@@ -280,14 +280,14 @@ func (g *GameManager) PacketSceneTeamUpdateNotify(world *World) *proto.SceneTeam
// acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb) // acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
// } // }
// add skill depot abilities // add skill depot abilities
skillDepot := gdconf.CONF.AvatarSkillDepotDataMap[int32(worldPlayerAvatar.SkillDepotId)] skillDepot := gdconf.GetAvatarSkillDepotDataById(int32(worldPlayerAvatar.SkillDepotId))
if skillDepot != nil && len(skillDepot.AbilityHashCodeList) != 0 { if skillDepot != nil && len(skillDepot.AbilityHashCodeList) != 0 {
for _, id := range skillDepot.AbilityHashCodeList { for _, id := range skillDepot.AbilityHashCodeList {
embryoId++ embryoId++
emb := &proto.AbilityEmbryo{ emb := &proto.AbilityEmbryo{
AbilityId: uint32(embryoId), AbilityId: uint32(embryoId),
AbilityNameHash: uint32(id), AbilityNameHash: uint32(id),
AbilityOverrideNameHash: uint32(constant.GameConstantConst.DEFAULT_ABILITY_NAME), AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
} }
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb) acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
} }
@@ -298,7 +298,7 @@ func (g *GameManager) PacketSceneTeamUpdateNotify(world *World) *proto.SceneTeam
emb := &proto.AbilityEmbryo{ emb := &proto.AbilityEmbryo{
AbilityId: uint32(embryoId), AbilityId: uint32(embryoId),
AbilityNameHash: uint32(endec.Hk4eAbilityHashCode(skill)), AbilityNameHash: uint32(endec.Hk4eAbilityHashCode(skill)),
AbilityOverrideNameHash: uint32(constant.GameConstantConst.DEFAULT_ABILITY_NAME), AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
} }
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb) acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
} }

View File

@@ -16,8 +16,8 @@ import (
func (g *GameManager) GetAllWeaponDataConfig() map[int32]*gdconf.ItemData { func (g *GameManager) GetAllWeaponDataConfig() map[int32]*gdconf.ItemData {
allWeaponDataConfig := make(map[int32]*gdconf.ItemData) allWeaponDataConfig := make(map[int32]*gdconf.ItemData)
for itemId, itemData := range gdconf.CONF.ItemDataMap { for itemId, itemData := range gdconf.GetItemDataMap() {
if uint16(itemData.Type) != constant.ItemTypeConst.ITEM_WEAPON { if uint16(itemData.Type) != constant.ITEM_TYPE_WEAPON {
continue continue
} }
if (itemId >= 10000 && itemId <= 10008) || if (itemId >= 10000 && itemId <= 10008) ||
@@ -130,15 +130,15 @@ func (g *GameManager) WeaponAwakenReq(player *model.Player, payloadMsg pb.Messag
return return
} }
// 获取武器物品配置表 // 获取武器物品配置表
weaponConfig, ok := gdconf.CONF.ItemDataMap[int32(weapon.ItemId)] weaponConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if !ok { if weaponConfig == nil {
logger.Error("weapon config error, itemId: %v", weapon.ItemId) logger.Error("weapon config error, itemId: %v", weapon.ItemId)
g.SendError(cmd.WeaponAwakenRsp, player, &proto.WeaponAwakenRsp{}, proto.Retcode_RET_ITEM_NOT_EXIST) g.SendError(cmd.WeaponAwakenRsp, player, &proto.WeaponAwakenRsp{}, proto.Retcode_RET_ITEM_NOT_EXIST)
return return
} }
// 摩拉数量是否足够 // 摩拉数量是否足够
if player.GetItemCount(constant.ItemConstantConst.SCOIN) < weaponConfig.AwakenCoinCostList[weapon.Refinement] { if player.GetItemCount(constant.ITEM_ID_SCOIN) < weaponConfig.AwakenCoinCostList[weapon.Refinement] {
logger.Error("item count not enough, itemId: %v", constant.ItemConstantConst.SCOIN) logger.Error("item count not enough, itemId: %v", constant.ITEM_ID_SCOIN)
g.SendError(cmd.WeaponAwakenRsp, player, &proto.WeaponAwakenRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH) g.SendError(cmd.WeaponAwakenRsp, player, &proto.WeaponAwakenRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH)
return return
} }
@@ -151,15 +151,15 @@ func (g *GameManager) WeaponAwakenReq(player *model.Player, payloadMsg pb.Messag
} }
// 获取精炼材料物品配置表 // 获取精炼材料物品配置表
// 精炼的材料可能是武器也可能是物品 // 精炼的材料可能是武器也可能是物品
itemDataConfig, ok := gdconf.CONF.ItemDataMap[int32(player.GetItemIdByItemAndWeaponGuid(req.ItemGuid))] itemDataConfig := gdconf.GetItemDataById(int32(player.GetItemIdByItemAndWeaponGuid(req.ItemGuid)))
if !ok { if itemDataConfig == nil {
logger.Error("item data config error, itemGuid: %v", req.ItemGuid) logger.Error("item data config error, itemGuid: %v", req.ItemGuid)
g.SendError(cmd.WeaponAwakenRsp, player, &proto.WeaponAwakenRsp{}, proto.Retcode_RET_ITEM_NOT_EXIST) g.SendError(cmd.WeaponAwakenRsp, player, &proto.WeaponAwakenRsp{}, proto.Retcode_RET_ITEM_NOT_EXIST)
return return
} }
// 根据精炼材料的类型做不同操作 // 根据精炼材料的类型做不同操作
switch itemDataConfig.Type { switch itemDataConfig.Type {
case int32(constant.ItemTypeConst.ITEM_WEAPON): case int32(constant.ITEM_TYPE_WEAPON):
// 精炼材料为武器 // 精炼材料为武器
// 是否拥有将被用于精炼的武器 // 是否拥有将被用于精炼的武器
foodWeapon, ok := player.WeaponMap[player.GetWeaponIdByGuid(req.ItemGuid)] foodWeapon, ok := player.WeaponMap[player.GetWeaponIdByGuid(req.ItemGuid)]
@@ -176,7 +176,7 @@ func (g *GameManager) WeaponAwakenReq(player *model.Player, payloadMsg pb.Messag
} }
// 消耗作为精炼材料的武器 // 消耗作为精炼材料的武器
g.CostUserWeapon(player.PlayerID, []uint64{foodWeapon.WeaponId}) g.CostUserWeapon(player.PlayerID, []uint64{foodWeapon.WeaponId})
case int32(constant.ItemTypeConst.ITEM_MATERIAL): case int32(constant.ITEM_TYPE_MATERIAL):
// 精炼材料为道具 // 精炼材料为道具
// 是否拥有将被用于精炼的道具 // 是否拥有将被用于精炼的道具
item, ok := player.ItemMap[player.GetItemIdByGuid(req.ItemGuid)] item, ok := player.ItemMap[player.GetItemIdByGuid(req.ItemGuid)]
@@ -206,7 +206,7 @@ func (g *GameManager) WeaponAwakenReq(player *model.Player, payloadMsg pb.Messag
// 消耗摩拉 // 消耗摩拉
g.CostUserItem(player.PlayerID, []*UserItem{ g.CostUserItem(player.PlayerID, []*UserItem{
{ {
ItemId: constant.ItemConstantConst.SCOIN, ItemId: constant.ITEM_ID_SCOIN,
ChangeCount: weaponConfig.AwakenCoinCostList[weapon.Refinement], ChangeCount: weaponConfig.AwakenCoinCostList[weapon.Refinement],
}, },
}) })
@@ -256,22 +256,15 @@ func (g *GameManager) WeaponPromoteReq(player *model.Player, payloadMsg pb.Messa
return return
} }
// 获取武器配置表 // 获取武器配置表
weaponConfig, ok := gdconf.CONF.ItemDataMap[int32(weapon.ItemId)] weaponConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if !ok { if weaponConfig == nil {
logger.Error("weapon config error, itemId: %v", weapon.ItemId) logger.Error("weapon config error, itemId: %v", weapon.ItemId)
g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}) g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{})
return return
} }
// 获取武器突破配置表 // 获取武器突破配置表
weaponPromoteDataMap, ok := gdconf.CONF.WeaponPromoteDataMap[weaponConfig.PromoteId] weaponPromoteConfig := gdconf.GetWeaponPromoteDataByIdAndLevel(weaponConfig.PromoteId, int32(weapon.Promote))
if !ok { if weaponPromoteConfig == nil {
logger.Error("weapon promote config error, promoteId: %v", weaponConfig.PromoteId)
g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{})
return
}
// 获取武器突破等级的配置表
weaponPromoteConfig, ok := weaponPromoteDataMap[int32(weapon.Promote)]
if !ok {
logger.Error("weapon promote config error, promoteLevel: %v", weapon.Promote) logger.Error("weapon promote config error, promoteLevel: %v", weapon.Promote)
g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}) g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{})
return return
@@ -283,8 +276,8 @@ func (g *GameManager) WeaponPromoteReq(player *model.Player, payloadMsg pb.Messa
return return
} }
// 获取武器突破下一级的配置表 // 获取武器突破下一级的配置表
weaponPromoteConfig, ok = weaponPromoteDataMap[int32(weapon.Promote+1)] weaponPromoteConfig = gdconf.GetWeaponPromoteDataByIdAndLevel(weaponConfig.PromoteId, int32(weapon.Promote+1))
if !ok { if weaponPromoteConfig == nil {
logger.Error("weapon promote config error, next promoteLevel: %v", weapon.Promote+1) logger.Error("weapon promote config error, next promoteLevel: %v", weapon.Promote+1)
g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}, proto.Retcode_RET_WEAPON_PROMOTE_LEVEL_EXCEED_LIMIT) g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}, proto.Retcode_RET_WEAPON_PROMOTE_LEVEL_EXCEED_LIMIT)
return return
@@ -300,7 +293,7 @@ func (g *GameManager) WeaponPromoteReq(player *model.Player, payloadMsg pb.Messa
} }
// 消耗列表添加摩拉的消耗 // 消耗列表添加摩拉的消耗
costItemList = append(costItemList, &UserItem{ costItemList = append(costItemList, &UserItem{
ItemId: constant.ItemConstantConst.SCOIN, ItemId: constant.ITEM_ID_SCOIN,
ChangeCount: uint32(weaponPromoteConfig.CostCoin), ChangeCount: uint32(weaponPromoteConfig.CostCoin),
}) })
// 突破材料以及摩拉是否足够 // 突破材料以及摩拉是否足够
@@ -308,7 +301,7 @@ func (g *GameManager) WeaponPromoteReq(player *model.Player, payloadMsg pb.Messa
if player.GetItemCount(item.ItemId) < item.ChangeCount { if player.GetItemCount(item.ItemId) < item.ChangeCount {
logger.Error("item count not enough, itemId: %v", item.ItemId) logger.Error("item count not enough, itemId: %v", item.ItemId)
// 摩拉的错误提示与材料不同 // 摩拉的错误提示与材料不同
if item.ItemId == constant.ItemConstantConst.SCOIN { if item.ItemId == constant.ITEM_ID_SCOIN {
g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH) g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH)
} }
g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}, proto.Retcode_RET_ITEM_COUNT_NOT_ENOUGH) g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}, proto.Retcode_RET_ITEM_COUNT_NOT_ENOUGH)
@@ -316,8 +309,8 @@ func (g *GameManager) WeaponPromoteReq(player *model.Player, payloadMsg pb.Messa
} }
} }
// 冒险等级是否符合要求 // 冒险等级是否符合要求
if player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL] < uint32(weaponPromoteConfig.MinPlayerLevel) { if player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL] < uint32(weaponPromoteConfig.MinPlayerLevel) {
logger.Error("player level not enough, level: %v", player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL]) logger.Error("player level not enough, level: %v", player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL])
g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}, proto.Retcode_RET_PLAYER_LEVEL_LESS_THAN) g.SendError(cmd.WeaponPromoteRsp, player, &proto.WeaponPromoteRsp{}, proto.Retcode_RET_PLAYER_LEVEL_LESS_THAN)
return return
} }
@@ -356,12 +349,12 @@ func (g *GameManager) GetWeaponUpgradeReturnMaterial(overflowExp uint32) (return
Exp uint32 Exp uint32
} }
// 武器强化返还材料的经验列表 // 武器强化返还材料的经验列表
materialExpList := make([]*materialExpData, 0, len(constant.ItemConstantConst.WEAPON_UPGRADE_MATERIAL)) materialExpList := make([]*materialExpData, 0, len(constant.WEAPON_UPGRADE_MATERIAL))
for _, itemId := range constant.ItemConstantConst.WEAPON_UPGRADE_MATERIAL { for _, itemId := range constant.WEAPON_UPGRADE_MATERIAL {
// 获取物品配置表 // 获取物品配置表
itemDataConfig, ok := gdconf.CONF.ItemDataMap[int32(itemId)] itemDataConfig := gdconf.GetItemDataById(int32(itemId))
if !ok { if itemDataConfig == nil {
logger.Error("item data config error, itemId: %v", constant.ItemConstantConst.SCOIN) logger.Error("item data config error, itemId: %v", constant.ITEM_ID_SCOIN)
return return
} }
// 材料将给予的经验数 // 材料将给予的经验数
@@ -411,8 +404,8 @@ func (g *GameManager) CalcWeaponUpgradeExpAndCoin(player *model.Player, itemPara
return return
} }
// 获取武器配置表 // 获取武器配置表
weaponConfig, ok := gdconf.CONF.ItemDataMap[int32(foodWeapon.ItemId)] weaponConfig := gdconf.GetItemDataById(int32(foodWeapon.ItemId))
if !ok { if weaponConfig == nil {
logger.Error("weapon config error, itemId: %v", foodWeapon.ItemId) logger.Error("weapon config error, itemId: %v", foodWeapon.ItemId)
return return
} }
@@ -421,8 +414,8 @@ func (g *GameManager) CalcWeaponUpgradeExpAndCoin(player *model.Player, itemPara
// 计算从1级到武器当前等级所需消耗的经验 // 计算从1级到武器当前等级所需消耗的经验
for i := int32(1); i < int32(foodWeapon.Level); i++ { for i := int32(1); i < int32(foodWeapon.Level); i++ {
// 获取武器等级配置表 // 获取武器等级配置表
weaponLevelConfig, ok := gdconf.CONF.WeaponLevelDataMap[i] weaponLevelConfig := gdconf.GetWeaponLevelDataByLevel(i)
if !ok { if weaponLevelConfig == nil {
logger.Error("weapon level config error, level: %v", i) logger.Error("weapon level config error, level: %v", i)
return return
} }
@@ -445,9 +438,9 @@ func (g *GameManager) CalcWeaponUpgradeExpAndCoin(player *model.Player, itemPara
// 材料经验计算 // 材料经验计算
for _, param := range itemParamList { for _, param := range itemParamList {
// 获取物品配置表 // 获取物品配置表
itemDataConfig, ok := gdconf.CONF.ItemDataMap[int32(param.ItemId)] itemDataConfig := gdconf.GetItemDataById(int32(param.ItemId))
if !ok { if itemDataConfig == nil {
logger.Error("item data config error, itemId: %v", constant.ItemConstantConst.SCOIN) logger.Error("item data config error, itemId: %v", constant.ITEM_ID_SCOIN)
return return
} }
// 材料将给予的经验数 // 材料将给予的经验数
@@ -471,20 +464,14 @@ func (g *GameManager) CalcWeaponUpgradeExpAndCoin(player *model.Player, itemPara
// CalcWeaponUpgrade 计算使用材料给武器强化后的等级经验以及返回的矿石 // CalcWeaponUpgrade 计算使用材料给武器强化后的等级经验以及返回的矿石
func (g *GameManager) CalcWeaponUpgrade(weapon *model.Weapon, expCount uint32) (weaponLevel uint8, weaponExp uint32, returnItemList []*proto.ItemParam, success bool) { func (g *GameManager) CalcWeaponUpgrade(weapon *model.Weapon, expCount uint32) (weaponLevel uint8, weaponExp uint32, returnItemList []*proto.ItemParam, success bool) {
// 获取武器配置表 // 获取武器配置表
weaponConfig, ok := gdconf.CONF.ItemDataMap[int32(weapon.ItemId)] weaponConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if !ok { if weaponConfig == nil {
logger.Error("weapon config error, itemId: %v", weapon.ItemId) logger.Error("weapon config error, itemId: %v", weapon.ItemId)
return return
} }
// 获取武器突破配置表 // 获取武器突破配置表
weaponPromoteDataMap, ok := gdconf.CONF.WeaponPromoteDataMap[weaponConfig.PromoteId] weaponPromoteConfig := gdconf.GetWeaponPromoteDataByIdAndLevel(weaponConfig.PromoteId, int32(weapon.Promote))
if !ok { if weaponPromoteConfig == nil {
logger.Error("weapon promote config error, promoteId: %v", weaponConfig.PromoteId)
return
}
// 获取武器突破等级对应的配置表
weaponPromoteConfig, ok := weaponPromoteDataMap[int32(weapon.Promote)]
if !ok {
logger.Error("weapon promote config error, promoteLevel: %v", weapon.Promote) logger.Error("weapon promote config error, promoteLevel: %v", weapon.Promote)
return return
} }
@@ -493,8 +480,8 @@ func (g *GameManager) CalcWeaponUpgrade(weapon *model.Weapon, expCount uint32) (
weaponExp = weapon.Exp + expCount weaponExp = weapon.Exp + expCount
for { for {
// 获取武器等级配置表 // 获取武器等级配置表
weaponLevelConfig, ok := gdconf.CONF.WeaponLevelDataMap[int32(weaponLevel)] weaponLevelConfig := gdconf.GetWeaponLevelDataByLevel(int32(weaponLevel))
if !ok { if weaponLevelConfig == nil {
// 获取不到代表已经到达最大等级 // 获取不到代表已经到达最大等级
break break
} }
@@ -537,22 +524,15 @@ func (g *GameManager) WeaponUpgradeReq(player *model.Player, payloadMsg pb.Messa
return return
} }
// 获取武器配置表 // 获取武器配置表
weaponConfig, ok := gdconf.CONF.ItemDataMap[int32(weapon.ItemId)] weaponConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if !ok { if weaponConfig == nil {
logger.Error("weapon config error, itemId: %v", weapon.ItemId) logger.Error("weapon config error, itemId: %v", weapon.ItemId)
g.SendError(cmd.WeaponUpgradeRsp, player, &proto.WeaponUpgradeRsp{}) g.SendError(cmd.WeaponUpgradeRsp, player, &proto.WeaponUpgradeRsp{})
return return
} }
// 获取武器突破配置表 // 获取武器突破配置表
weaponPromoteDataMap, ok := gdconf.CONF.WeaponPromoteDataMap[weaponConfig.PromoteId] weaponPromoteConfig := gdconf.GetWeaponPromoteDataByIdAndLevel(weaponConfig.PromoteId, int32(weapon.Promote))
if !ok { if weaponPromoteConfig == nil {
logger.Error("weapon promote config error, promoteId: %v", weaponConfig.PromoteId)
g.SendError(cmd.WeaponUpgradeRsp, player, &proto.WeaponUpgradeRsp{})
return
}
// 获取武器突破等级对应的配置表
weaponPromoteConfig, ok := weaponPromoteDataMap[int32(weapon.Promote)]
if !ok {
logger.Error("weapon promote config error, promoteLevel: %v", weapon.Promote) logger.Error("weapon promote config error, promoteLevel: %v", weapon.Promote)
g.SendError(cmd.WeaponUpgradeRsp, player, &proto.WeaponUpgradeRsp{}) g.SendError(cmd.WeaponUpgradeRsp, player, &proto.WeaponUpgradeRsp{})
return return
@@ -581,7 +561,7 @@ func (g *GameManager) WeaponUpgradeReq(player *model.Player, payloadMsg pb.Messa
} }
// 消耗列表添加摩拉的消耗 // 消耗列表添加摩拉的消耗
costItemList = append(costItemList, &UserItem{ costItemList = append(costItemList, &UserItem{
ItemId: constant.ItemConstantConst.SCOIN, ItemId: constant.ITEM_ID_SCOIN,
ChangeCount: coinCost, ChangeCount: coinCost,
}) })
// 校验物品是否足够 // 校验物品是否足够
@@ -589,7 +569,7 @@ func (g *GameManager) WeaponUpgradeReq(player *model.Player, payloadMsg pb.Messa
if player.GetItemCount(item.ItemId) < item.ChangeCount { if player.GetItemCount(item.ItemId) < item.ChangeCount {
logger.Error("item count not enough, itemId: %v", item.ItemId) logger.Error("item count not enough, itemId: %v", item.ItemId)
// 摩拉的错误提示与材料不同 // 摩拉的错误提示与材料不同
if item.ItemId == constant.ItemConstantConst.SCOIN { if item.ItemId == constant.ITEM_ID_SCOIN {
g.SendError(cmd.WeaponUpgradeRsp, player, &proto.WeaponUpgradeRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH) g.SendError(cmd.WeaponUpgradeRsp, player, &proto.WeaponUpgradeRsp{}, proto.Retcode_RET_SCOIN_NOT_ENOUGH)
} }
g.SendError(cmd.WeaponUpgradeRsp, player, &proto.WeaponUpgradeRsp{}, proto.Retcode_RET_ITEM_COUNT_NOT_ENOUGH) g.SendError(cmd.WeaponUpgradeRsp, player, &proto.WeaponUpgradeRsp{}, proto.Retcode_RET_ITEM_COUNT_NOT_ENOUGH)

View File

@@ -40,7 +40,7 @@ func (r *RouteManager) doRoute(cmdId uint16, userId uint32, clientSeq uint32, pa
player := USER_MANAGER.GetOnlineUser(userId) player := USER_MANAGER.GetOnlineUser(userId)
if player == nil { if player == nil {
logger.Error("player is nil, uid: %v", userId) logger.Error("player is nil, uid: %v", userId)
GAME_MANAGER.DisconnectPlayer(userId, kcp.EnetNotFoundSession) GAME_MANAGER.KickPlayer(userId, kcp.EnetNotFoundSession)
return return
} }
if !player.Online { if !player.Online {

View File

@@ -188,7 +188,7 @@ func (t *TickManager) onTickMinute(now int64) {
return return
} }
// TODO 3.0.0REL版本中 发送某些无效家具 可能会导致客户端背包家具界面卡死 // TODO 3.0.0REL版本中 发送某些无效家具 可能会导致客户端背包家具界面卡死
if uint16(itemDataConfig.Type) == constant.ItemTypeConst.ITEM_FURNITURE { if uint16(itemDataConfig.Type) == constant.ITEM_TYPE_FURNITURE {
continue continue
} }
num := random.GetRandomInt32(1, 9) num := random.GetRandomInt32(1, 9)
@@ -298,7 +298,7 @@ func (t *TickManager) onTick5Second(now int64) {
Z: float32(entity.rot.Z), Z: float32(entity.rot.Z),
}, },
EntityId: entity.id, EntityId: entity.id,
CurHp: entity.fightProp[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)], CurHp: entity.fightProp[uint32(constant.FIGHT_PROP_CUR_HP)],
OwnerUid: entity.gadgetEntity.gadgetVehicleEntity.owner.PlayerID, OwnerUid: entity.gadgetEntity.gadgetVehicleEntity.owner.PlayerID,
Pos: &proto.Vector{ Pos: &proto.Vector{
X: float32(entity.pos.X), X: float32(entity.pos.X),
@@ -307,7 +307,7 @@ func (t *TickManager) onTick5Second(now int64) {
}, },
UidList: make([]uint32, 0, len(entity.gadgetEntity.gadgetVehicleEntity.memberMap)), UidList: make([]uint32, 0, len(entity.gadgetEntity.gadgetVehicleEntity.memberMap)),
GadgetId: entity.gadgetEntity.gadgetVehicleEntity.vehicleId, GadgetId: entity.gadgetEntity.gadgetVehicleEntity.vehicleId,
MaxHp: entity.fightProp[uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP)], MaxHp: entity.fightProp[uint32(constant.FIGHT_PROP_MAX_HP)],
} }
for _, p := range entity.gadgetEntity.gadgetVehicleEntity.memberMap { for _, p := range entity.gadgetEntity.gadgetVehicleEntity.memberMap {
vehicleLocationInfo.UidList = append(vehicleLocationInfo.UidList, p.PlayerID) vehicleLocationInfo.UidList = append(vehicleLocationInfo.UidList, p.PlayerID)

View File

@@ -1,16 +1,13 @@
package game package game
import ( import (
"math"
"time" "time"
"hk4e/common/constant" "hk4e/common/constant"
"hk4e/common/mq"
"hk4e/gdconf" "hk4e/gdconf"
"hk4e/gs/model" "hk4e/gs/model"
"hk4e/pkg/alg" "hk4e/pkg/alg"
"hk4e/pkg/logger" "hk4e/pkg/logger"
"hk4e/protocol/cmd"
"hk4e/protocol/proto" "hk4e/protocol/proto"
) )
@@ -35,7 +32,7 @@ func NewWorldManager(snowflake *alg.SnowflakeWorker) (r *WorldManager) {
r.worldMap = make(map[uint32]*World) r.worldMap = make(map[uint32]*World)
r.snowflake = snowflake r.snowflake = snowflake
r.sceneBlockAoiMap = make(map[uint32]*alg.AoiManager) r.sceneBlockAoiMap = make(map[uint32]*alg.AoiManager)
for _, sceneConfig := range gdconf.CONF.SceneMap { for _, sceneConfig := range gdconf.GetSceneDetailMap() {
minX := int16(0) minX := int16(0)
maxX := int16(0) maxX := int16(0)
minZ := int16(0) minZ := int16(0)
@@ -172,7 +169,7 @@ func (w *WorldManager) CreateWorld(owner *model.Player) *World {
multiplayerTeam: CreateMultiplayerTeam(), multiplayerTeam: CreateMultiplayerTeam(),
peerList: make([]*model.Player, 0), peerList: make([]*model.Player, 0),
} }
world.mpLevelEntityId = world.GetNextWorldEntityId(constant.EntityIdTypeConst.MPLEVEL) world.mpLevelEntityId = world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_MPLEVEL)
w.worldMap[worldId] = world w.worldMap[worldId] = world
return world return world
} }
@@ -221,8 +218,7 @@ func (w *WorldManager) GetMultiplayerWorldNum() uint32 {
return w.multiplayerWorldNum return w.multiplayerWorldNum
} }
// 世界数据结构 // World 世界数据结构
type World struct { type World struct {
id uint32 id uint32
owner *model.Player owner *model.Player
@@ -482,7 +478,7 @@ func (w *World) GetPlayerTeamEntityId(player *model.Player) uint32 {
// InitPlayerTeamEntityId 初始化某玩家的本地队伍实体id // InitPlayerTeamEntityId 初始化某玩家的本地队伍实体id
func (w *World) InitPlayerTeamEntityId(player *model.Player) { func (w *World) InitPlayerTeamEntityId(player *model.Player) {
w.multiplayerTeam.localTeamEntityMap[player.PlayerID] = w.GetNextWorldEntityId(constant.EntityIdTypeConst.TEAM) w.multiplayerTeam.localTeamEntityMap[player.PlayerID] = w.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_TEAM)
} }
// GetPlayerWorldAvatarEntityId 获取某玩家在世界队伍中的某角色的实体id // GetPlayerWorldAvatarEntityId 获取某玩家在世界队伍中的某角色的实体id
@@ -749,670 +745,3 @@ func (w *World) GetSceneById(sceneId uint32) *Scene {
} }
return scene return scene
} }
// 场景数据结构
type Scene struct {
id uint32
world *World
playerMap map[uint32]*model.Player
entityMap map[uint32]*Entity
objectIdEntityMap map[int64]*Entity // 用于标识配置档里的唯一实体是否已被创建
gameTime uint32 // 游戏内提瓦特大陆的时间
createTime int64 // 场景创建时间
meeoIndex uint32 // 客户端风元素染色同步协议的计数器
}
func (s *Scene) GetId() uint32 {
return s.id
}
func (s *Scene) GetWorld() *World {
return s.world
}
func (s *Scene) GetAllPlayer() map[uint32]*model.Player {
return s.playerMap
}
func (s *Scene) GetAllEntity() map[uint32]*Entity {
return s.entityMap
}
func (s *Scene) GetGameTime() uint32 {
return s.gameTime
}
func (s *Scene) GetMeeoIndex() uint32 {
return s.meeoIndex
}
func (s *Scene) SetMeeoIndex(meeoIndex uint32) {
s.meeoIndex = meeoIndex
}
type AvatarEntity struct {
uid uint32
avatarId uint32
}
func (a *AvatarEntity) GetUid() uint32 {
return a.uid
}
func (a *AvatarEntity) GetAvatarId() uint32 {
return a.avatarId
}
type MonsterEntity struct {
monsterId uint32
}
func (m *MonsterEntity) GetMonsterId() uint32 {
return m.monsterId
}
type NpcEntity struct {
NpcId uint32
RoomId uint32
ParentQuestId uint32
BlockId uint32
}
const (
GADGET_TYPE_NORMAL = iota
GADGET_TYPE_GATHER
GADGET_TYPE_CLIENT
GADGET_TYPE_VEHICLE // 载具
)
type GadgetClientEntity struct {
configId uint32
campId uint32
campType uint32
ownerEntityId uint32
targetEntityId uint32
propOwnerEntityId uint32
}
func (g *GadgetClientEntity) GetConfigId() uint32 {
return g.configId
}
func (g *GadgetClientEntity) GetCampId() uint32 {
return g.campId
}
func (g *GadgetClientEntity) GetCampType() uint32 {
return g.campType
}
func (g *GadgetClientEntity) GetOwnerEntityId() uint32 {
return g.ownerEntityId
}
func (g *GadgetClientEntity) GetTargetEntityId() uint32 {
return g.targetEntityId
}
func (g *GadgetClientEntity) GetPropOwnerEntityId() uint32 {
return g.propOwnerEntityId
}
type GadgetGatherEntity struct {
gatherId uint32
}
func (g *GadgetGatherEntity) GetGatherId() uint32 {
return g.gatherId
}
type GadgetVehicleEntity struct {
vehicleId uint32
owner *model.Player
maxStamina float32
curStamina float32
memberMap map[uint32]*model.Player // uint32 = pos
}
func (g *GadgetVehicleEntity) GetVehicleId() uint32 {
return g.vehicleId
}
func (g *GadgetVehicleEntity) GetOwner() *model.Player {
return g.owner
}
func (g *GadgetVehicleEntity) GetMaxStamina() float32 {
return g.maxStamina
}
func (g *GadgetVehicleEntity) GetCurStamina() float32 {
return g.curStamina
}
func (g *GadgetVehicleEntity) SetCurStamina(curStamina float32) {
g.curStamina = curStamina
}
func (g *GadgetVehicleEntity) GetMemberMap() map[uint32]*model.Player {
return g.memberMap
}
type GadgetEntity struct {
gadgetType int
gadgetId uint32
gadgetClientEntity *GadgetClientEntity
gadgetGatherEntity *GadgetGatherEntity
gadgetVehicleEntity *GadgetVehicleEntity
}
func (g *GadgetEntity) GetGadgetType() int {
return g.gadgetType
}
func (g *GadgetEntity) GetGadgetId() uint32 {
return g.gadgetId
}
func (g *GadgetEntity) GetGadgetClientEntity() *GadgetClientEntity {
return g.gadgetClientEntity
}
func (g *GadgetEntity) GetGadgetGatherEntity() *GadgetGatherEntity {
return g.gadgetGatherEntity
}
func (g *GadgetEntity) GetGadgetVehicleEntity() *GadgetVehicleEntity {
return g.gadgetVehicleEntity
}
// 场景实体数据结构
type Entity struct {
id uint32
scene *Scene
lifeState uint16
pos *model.Vector
rot *model.Vector
moveState uint16
lastMoveSceneTimeMs uint32
lastMoveReliableSeq uint32
fightProp map[uint32]float32
entityType uint32
level uint8
avatarEntity *AvatarEntity
monsterEntity *MonsterEntity
npcEntity *NpcEntity
gadgetEntity *GadgetEntity
configId uint32
objectId int64
}
func (e *Entity) GetId() uint32 {
return e.id
}
func (e *Entity) GetLifeState() uint16 {
return e.lifeState
}
func (e *Entity) GetPos() *model.Vector {
return e.pos
}
func (e *Entity) GetRot() *model.Vector {
return e.rot
}
func (e *Entity) GetMoveState() uint16 {
return e.moveState
}
func (e *Entity) SetMoveState(moveState uint16) {
e.moveState = moveState
}
func (e *Entity) GetLastMoveSceneTimeMs() uint32 {
return e.lastMoveSceneTimeMs
}
func (e *Entity) SetLastMoveSceneTimeMs(lastMoveSceneTimeMs uint32) {
e.lastMoveSceneTimeMs = lastMoveSceneTimeMs
}
func (e *Entity) GetLastMoveReliableSeq() uint32 {
return e.lastMoveReliableSeq
}
func (e *Entity) SetLastMoveReliableSeq(lastMoveReliableSeq uint32) {
e.lastMoveReliableSeq = lastMoveReliableSeq
}
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) GetAvatarEntity() *AvatarEntity {
return e.avatarEntity
}
func (e *Entity) GetMonsterEntity() *MonsterEntity {
return e.monsterEntity
}
func (e *Entity) GetNpcEntity() *NpcEntity {
return e.npcEntity
}
func (e *Entity) GetGadgetEntity() *GadgetEntity {
return e.gadgetEntity
}
func (e *Entity) GetConfigId() uint32 {
return e.configId
}
type Attack struct {
combatInvokeEntry *proto.CombatInvokeEntry
uid uint32
}
func (s *Scene) ChangeGameTime(time uint32) {
s.gameTime = time % 1440
}
func (s *Scene) GetSceneCreateTime() int64 {
return s.createTime
}
func (s *Scene) GetSceneTime() int64 {
now := time.Now().UnixMilli()
return now - s.createTime
}
func (s *Scene) AddPlayer(player *model.Player) {
s.playerMap[player.PlayerID] = player
s.world.InitPlayerWorldAvatar(player)
}
func (s *Scene) RemovePlayer(player *model.Player) {
delete(s.playerMap, player.PlayerID)
worldAvatarList := s.world.GetPlayerWorldAvatarList(player)
for _, worldAvatar := range worldAvatarList {
s.DestroyEntity(worldAvatar.avatarEntityId)
s.DestroyEntity(worldAvatar.weaponEntityId)
}
}
func (s *Scene) SetEntityLifeState(entity *Entity, lifeState uint16, dieType proto.PlayerDieType) {
if entity.avatarEntity != nil {
// 获取玩家对象
player := USER_MANAGER.GetOnlineUser(entity.avatarEntity.uid)
if player == nil {
logger.Error("player is nil, uid: %v", entity.avatarEntity.uid)
return
}
// 获取角色
avatar, ok := player.AvatarMap[entity.avatarEntity.avatarId]
if !ok {
logger.Error("avatar is nil, avatarId: %v", avatar)
return
}
// 设置角色存活状态
if lifeState == constant.LifeStateConst.LIFE_REVIVE {
avatar.LifeState = constant.LifeStateConst.LIFE_ALIVE
// 设置血量
entity.fightProp[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)] = 110
GAME_MANAGER.EntityFightPropUpdateNotifyBroadcast(s, entity, uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP))
}
// PacketAvatarLifeStateChangeNotify
avatarLifeStateChangeNotify := &proto.AvatarLifeStateChangeNotify{
LifeState: uint32(lifeState),
AttackTag: "",
DieType: dieType,
ServerBuffList: nil,
MoveReliableSeq: entity.lastMoveReliableSeq,
SourceEntityId: 0,
AvatarGuid: avatar.Guid,
}
for _, p := range s.playerMap {
GAME_MANAGER.SendMsg(cmd.AvatarLifeStateChangeNotify, p.PlayerID, p.ClientSeq, avatarLifeStateChangeNotify)
}
} else {
// 设置存活状态
entity.lifeState = lifeState
if lifeState == constant.LifeStateConst.LIFE_DEAD {
// 设置血量
entity.fightProp[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)] = 0
GAME_MANAGER.EntityFightPropUpdateNotifyBroadcast(s, entity, uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP))
}
// PacketLifeStateChangeNotify
lifeStateChangeNotify := &proto.LifeStateChangeNotify{
EntityId: entity.id,
AttackTag: "",
MoveReliableSeq: entity.lastMoveReliableSeq,
DieType: dieType,
LifeState: uint32(lifeState),
SourceEntityId: 0,
}
for _, p := range s.playerMap {
GAME_MANAGER.SendMsg(cmd.LifeStateChangeNotify, p.PlayerID, p.ClientSeq, lifeStateChangeNotify)
}
// 删除实体
s.DestroyEntity(entity.id)
GAME_MANAGER.RemoveSceneEntityNotifyBroadcast(s, proto.VisionType_VISION_DIE, []uint32{entity.id})
}
}
func (s *Scene) CreateEntityAvatar(player *model.Player, avatarId uint32) uint32 {
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.AVATAR)
avatar, ok := player.AvatarMap[avatarId]
if !ok {
logger.Error("avatar error, avatarId: %v", avatar)
return 0
}
entity := &Entity{
id: entityId,
scene: s,
lifeState: avatar.LifeState,
pos: player.Pos,
rot: player.Rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
// fightProp: player.AvatarMap[avatarId].FightPropMap, // 使用角色结构的数据
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_AVATAR),
// level: 0, // 使用角色结构的数据
avatarEntity: &AvatarEntity{
uid: player.PlayerID,
avatarId: avatarId,
},
}
s.CreateEntity(entity, 0)
MESSAGE_QUEUE.SendToFight(s.world.owner.FightAppId, &mq.NetMsg{
MsgType: mq.MsgTypeFight,
EventId: mq.FightRoutineAddEntity,
FightMsg: &mq.FightMsg{
FightRoutineId: s.world.id,
EntityId: entity.id,
FightPropMap: entity.fightProp,
Uid: entity.avatarEntity.uid,
AvatarGuid: player.AvatarMap[avatarId].Guid,
},
})
return entity.id
}
func (s *Scene) CreateEntityWeapon() uint32 {
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.WEAPON)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LifeStateConst.LIFE_ALIVE,
pos: new(model.Vector),
rot: new(model.Vector),
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
fightProp: nil,
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_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 {
_, exist := s.objectIdEntityMap[objectId]
if exist {
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.MONSTER)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LifeStateConst.LIFE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
fightProp: fightProp,
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_MONSTER),
level: level,
monsterEntity: &MonsterEntity{
monsterId: monsterId,
},
configId: configId,
objectId: objectId,
}
s.CreateEntity(entity, objectId)
MESSAGE_QUEUE.SendToFight(s.world.owner.FightAppId, &mq.NetMsg{
MsgType: mq.MsgTypeFight,
EventId: mq.FightRoutineAddEntity,
FightMsg: &mq.FightMsg{
FightRoutineId: s.world.id,
EntityId: entity.id,
FightPropMap: entity.fightProp,
},
})
return entity.id
}
func (s *Scene) CreateEntityNpc(pos, rot *model.Vector, npcId, roomId, parentQuestId, blockId, configId uint32, objectId int64) uint32 {
_, exist := s.objectIdEntityMap[objectId]
if exist {
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.NPC)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LifeStateConst.LIFE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
fightProp: map[uint32]float32{
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP): math.MaxFloat32,
uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP): math.MaxFloat32,
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP): float32(1),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_NPC),
npcEntity: &NpcEntity{
NpcId: npcId,
RoomId: roomId,
ParentQuestId: parentQuestId,
BlockId: blockId,
},
configId: configId,
objectId: objectId,
}
s.CreateEntity(entity, objectId)
return entity.id
}
func (s *Scene) CreateEntityGadgetNormal(pos, rot *model.Vector, gadgetId uint32, configId uint32, objectId int64) uint32 {
_, exist := s.objectIdEntityMap[objectId]
if exist {
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.GADGET)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LifeStateConst.LIFE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
fightProp: map[uint32]float32{
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP): math.MaxFloat32,
uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP): math.MaxFloat32,
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP): float32(1),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET),
gadgetEntity: &GadgetEntity{
gadgetId: gadgetId,
gadgetType: GADGET_TYPE_NORMAL,
},
configId: configId,
objectId: objectId,
}
s.CreateEntity(entity, objectId)
return entity.id
}
func (s *Scene) CreateEntityGadgetGather(pos, rot *model.Vector, gadgetId uint32, gatherId uint32, configId uint32, objectId int64) uint32 {
_, exist := s.objectIdEntityMap[objectId]
if exist {
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.GADGET)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LifeStateConst.LIFE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
fightProp: map[uint32]float32{
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP): math.MaxFloat32,
uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP): math.MaxFloat32,
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP): float32(1),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET),
gadgetEntity: &GadgetEntity{
gadgetId: gadgetId,
gadgetType: GADGET_TYPE_GATHER,
gadgetGatherEntity: &GadgetGatherEntity{
gatherId: gatherId,
},
},
configId: configId,
objectId: objectId,
}
s.CreateEntity(entity, objectId)
return entity.id
}
func (s *Scene) CreateEntityGadgetClient(pos, rot *model.Vector, entityId uint32, configId, campId, campType, ownerEntityId, targetEntityId, propOwnerEntityId uint32) {
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LifeStateConst.LIFE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
fightProp: map[uint32]float32{
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP): math.MaxFloat32,
uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP): math.MaxFloat32,
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP): float32(1),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET),
gadgetEntity: &GadgetEntity{
gadgetType: GADGET_TYPE_CLIENT,
gadgetClientEntity: &GadgetClientEntity{
configId: configId,
campId: campId,
campType: campType,
ownerEntityId: ownerEntityId,
targetEntityId: targetEntityId,
propOwnerEntityId: propOwnerEntityId,
},
},
}
s.CreateEntity(entity, 0)
}
func (s *Scene) CreateEntityGadgetVehicle(uid uint32, pos, rot *model.Vector, vehicleId uint32) uint32 {
player := USER_MANAGER.GetOnlineUser(uid)
if player == nil {
logger.Error("player is nil, uid: %v", uid)
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.GADGET)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LifeStateConst.LIFE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
fightProp: map[uint32]float32{
// TODO 以后使用配置表
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP): 114514,
uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP): 114514,
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP): float32(1),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET),
gadgetEntity: &GadgetEntity{
gadgetType: GADGET_TYPE_VEHICLE,
gadgetVehicleEntity: &GadgetVehicleEntity{
vehicleId: vehicleId,
owner: player,
maxStamina: 240, // TODO 应该也能在配置表找到
curStamina: 240, // TODO 与maxStamina一致
memberMap: make(map[uint32]*model.Player),
},
},
}
s.CreateEntity(entity, 0)
return entity.id
}
func (s *Scene) CreateEntity(entity *Entity, objectId int64) {
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
}
if objectId != 0 {
s.objectIdEntityMap[objectId] = entity
}
s.entityMap[entity.id] = entity
}
func (s *Scene) DestroyEntity(entityId uint32) {
entity := s.GetEntity(entityId)
if entity == nil {
return
}
delete(s.entityMap, entity.id)
delete(s.objectIdEntityMap, entity.objectId)
MESSAGE_QUEUE.SendToFight(s.world.owner.FightAppId, &mq.NetMsg{
MsgType: mq.MsgTypeFight,
EventId: mq.FightRoutineDelEntity,
FightMsg: &mq.FightMsg{
FightRoutineId: s.world.id,
EntityId: entity.id,
},
})
}
func (s *Scene) GetEntity(entityId uint32) *Entity {
return s.entityMap[entityId]
}
func (s *Scene) GetEntityByObjectId(objectId int64) *Entity {
return s.objectIdEntityMap[objectId]
}

673
gs/game/world_scene.go Normal file
View File

@@ -0,0 +1,673 @@
package game
import (
"math"
"time"
"hk4e/common/constant"
"hk4e/common/mq"
"hk4e/gs/model"
"hk4e/pkg/logger"
"hk4e/protocol/cmd"
"hk4e/protocol/proto"
)
// Scene 场景数据结构
type Scene struct {
id uint32
world *World
playerMap map[uint32]*model.Player
entityMap map[uint32]*Entity
objectIdEntityMap map[int64]*Entity // 用于标识配置档里的唯一实体是否已被创建
gameTime uint32 // 游戏内提瓦特大陆的时间
createTime int64 // 场景创建时间
meeoIndex uint32 // 客户端风元素染色同步协议的计数器
}
func (s *Scene) GetId() uint32 {
return s.id
}
func (s *Scene) GetWorld() *World {
return s.world
}
func (s *Scene) GetAllPlayer() map[uint32]*model.Player {
return s.playerMap
}
func (s *Scene) GetAllEntity() map[uint32]*Entity {
return s.entityMap
}
func (s *Scene) GetGameTime() uint32 {
return s.gameTime
}
func (s *Scene) GetMeeoIndex() uint32 {
return s.meeoIndex
}
func (s *Scene) SetMeeoIndex(meeoIndex uint32) {
s.meeoIndex = meeoIndex
}
func (s *Scene) ChangeGameTime(time uint32) {
s.gameTime = time % 1440
}
func (s *Scene) GetSceneCreateTime() int64 {
return s.createTime
}
func (s *Scene) GetSceneTime() int64 {
now := time.Now().UnixMilli()
return now - s.createTime
}
func (s *Scene) AddPlayer(player *model.Player) {
s.playerMap[player.PlayerID] = player
s.world.InitPlayerWorldAvatar(player)
}
func (s *Scene) RemovePlayer(player *model.Player) {
delete(s.playerMap, player.PlayerID)
worldAvatarList := s.world.GetPlayerWorldAvatarList(player)
for _, worldAvatar := range worldAvatarList {
s.DestroyEntity(worldAvatar.avatarEntityId)
s.DestroyEntity(worldAvatar.weaponEntityId)
}
}
func (s *Scene) SetEntityLifeState(entity *Entity, lifeState uint16, dieType proto.PlayerDieType) {
if entity.avatarEntity != nil {
// 获取玩家对象
player := USER_MANAGER.GetOnlineUser(entity.avatarEntity.uid)
if player == nil {
logger.Error("player is nil, uid: %v", entity.avatarEntity.uid)
return
}
// 获取角色
avatar, ok := player.AvatarMap[entity.avatarEntity.avatarId]
if !ok {
logger.Error("avatar is nil, avatarId: %v", avatar)
return
}
// 设置角色存活状态
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))
}
// PacketAvatarLifeStateChangeNotify
avatarLifeStateChangeNotify := &proto.AvatarLifeStateChangeNotify{
LifeState: uint32(lifeState),
AttackTag: "",
DieType: dieType,
ServerBuffList: nil,
MoveReliableSeq: entity.lastMoveReliableSeq,
SourceEntityId: 0,
AvatarGuid: avatar.Guid,
}
for _, p := range s.playerMap {
GAME_MANAGER.SendMsg(cmd.AvatarLifeStateChangeNotify, p.PlayerID, p.ClientSeq, avatarLifeStateChangeNotify)
}
} else {
// 设置存活状态
entity.lifeState = lifeState
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))
}
// PacketLifeStateChangeNotify
lifeStateChangeNotify := &proto.LifeStateChangeNotify{
EntityId: entity.id,
AttackTag: "",
MoveReliableSeq: entity.lastMoveReliableSeq,
DieType: dieType,
LifeState: uint32(lifeState),
SourceEntityId: 0,
}
for _, p := range s.playerMap {
GAME_MANAGER.SendMsg(cmd.LifeStateChangeNotify, p.PlayerID, p.ClientSeq, lifeStateChangeNotify)
}
// 删除实体
s.DestroyEntity(entity.id)
GAME_MANAGER.RemoveSceneEntityNotifyBroadcast(s, proto.VisionType_VISION_DIE, []uint32{entity.id})
}
}
func (s *Scene) CreateEntityAvatar(player *model.Player, avatarId uint32) uint32 {
entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_AVATAR)
avatar, ok := player.AvatarMap[avatarId]
if !ok {
logger.Error("avatar error, avatarId: %v", avatar)
return 0
}
entity := &Entity{
id: entityId,
scene: s,
lifeState: avatar.LifeState,
pos: player.Pos,
rot: player.Rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
// fightProp: player.AvatarMap[avatarId].FightPropMap, // 使用角色结构的数据
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_AVATAR),
// level: 0, // 使用角色结构的数据
avatarEntity: &AvatarEntity{
uid: player.PlayerID,
avatarId: avatarId,
},
}
s.CreateEntity(entity, 0)
MESSAGE_QUEUE.SendToFight(s.world.owner.FightAppId, &mq.NetMsg{
MsgType: mq.MsgTypeFight,
EventId: mq.FightRoutineAddEntity,
FightMsg: &mq.FightMsg{
FightRoutineId: s.world.id,
EntityId: entity.id,
FightPropMap: entity.fightProp,
Uid: entity.avatarEntity.uid,
AvatarGuid: player.AvatarMap[avatarId].Guid,
},
})
return entity.id
}
func (s *Scene) CreateEntityWeapon() uint32 {
entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_WEAPON)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LIFE_STATE_ALIVE,
pos: new(model.Vector),
rot: new(model.Vector),
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
fightProp: nil,
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_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 {
_, exist := s.objectIdEntityMap[objectId]
if exist {
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_MONSTER)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LIFE_STATE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
lastMoveReliableSeq: 0,
fightProp: fightProp,
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_MONSTER),
level: level,
monsterEntity: &MonsterEntity{
monsterId: monsterId,
},
configId: configId,
objectId: objectId,
}
s.CreateEntity(entity, objectId)
MESSAGE_QUEUE.SendToFight(s.world.owner.FightAppId, &mq.NetMsg{
MsgType: mq.MsgTypeFight,
EventId: mq.FightRoutineAddEntity,
FightMsg: &mq.FightMsg{
FightRoutineId: s.world.id,
EntityId: entity.id,
FightPropMap: entity.fightProp,
},
})
return entity.id
}
func (s *Scene) CreateEntityNpc(pos, rot *model.Vector, npcId, roomId, parentQuestId, blockId, configId uint32, objectId int64) uint32 {
_, exist := s.objectIdEntityMap[objectId]
if exist {
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_NPC)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LIFE_STATE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
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),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_NPC),
npcEntity: &NpcEntity{
NpcId: npcId,
RoomId: roomId,
ParentQuestId: parentQuestId,
BlockId: blockId,
},
configId: configId,
objectId: objectId,
}
s.CreateEntity(entity, objectId)
return entity.id
}
func (s *Scene) CreateEntityGadgetNormal(pos, rot *model.Vector, gadgetId uint32, configId uint32, objectId int64) uint32 {
_, exist := s.objectIdEntityMap[objectId]
if exist {
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_GADGET)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LIFE_STATE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
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),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET),
gadgetEntity: &GadgetEntity{
gadgetId: gadgetId,
gadgetType: GADGET_TYPE_NORMAL,
},
configId: configId,
objectId: objectId,
}
s.CreateEntity(entity, objectId)
return entity.id
}
func (s *Scene) CreateEntityGadgetGather(pos, rot *model.Vector, gadgetId uint32, gatherId uint32, configId uint32, objectId int64) uint32 {
_, exist := s.objectIdEntityMap[objectId]
if exist {
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_GADGET)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LIFE_STATE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
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),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET),
gadgetEntity: &GadgetEntity{
gadgetId: gadgetId,
gadgetType: GADGET_TYPE_GATHER,
gadgetGatherEntity: &GadgetGatherEntity{
gatherId: gatherId,
},
},
configId: configId,
objectId: objectId,
}
s.CreateEntity(entity, objectId)
return entity.id
}
func (s *Scene) CreateEntityGadgetClient(pos, rot *model.Vector, entityId uint32, configId, campId, campType, ownerEntityId, targetEntityId, propOwnerEntityId uint32) {
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LIFE_STATE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
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),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET),
gadgetEntity: &GadgetEntity{
gadgetType: GADGET_TYPE_CLIENT,
gadgetClientEntity: &GadgetClientEntity{
configId: configId,
campId: campId,
campType: campType,
ownerEntityId: ownerEntityId,
targetEntityId: targetEntityId,
propOwnerEntityId: propOwnerEntityId,
},
},
}
s.CreateEntity(entity, 0)
}
func (s *Scene) CreateEntityGadgetVehicle(uid uint32, pos, rot *model.Vector, vehicleId uint32) uint32 {
player := USER_MANAGER.GetOnlineUser(uid)
if player == nil {
logger.Error("player is nil, uid: %v", uid)
return 0
}
entityId := s.world.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_GADGET)
entity := &Entity{
id: entityId,
scene: s,
lifeState: constant.LIFE_STATE_ALIVE,
pos: pos,
rot: rot,
moveState: uint16(proto.MotionState_MOTION_NONE),
lastMoveSceneTimeMs: 0,
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),
},
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_GADGET),
gadgetEntity: &GadgetEntity{
gadgetType: GADGET_TYPE_VEHICLE,
gadgetVehicleEntity: &GadgetVehicleEntity{
vehicleId: vehicleId,
owner: player,
maxStamina: 240, // TODO 应该也能在配置表找到
curStamina: 240, // TODO 与maxStamina一致
memberMap: make(map[uint32]*model.Player),
},
},
}
s.CreateEntity(entity, 0)
return entity.id
}
func (s *Scene) CreateEntity(entity *Entity, objectId int64) {
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
}
if objectId != 0 {
s.objectIdEntityMap[objectId] = entity
}
s.entityMap[entity.id] = entity
}
func (s *Scene) DestroyEntity(entityId uint32) {
entity := s.GetEntity(entityId)
if entity == nil {
return
}
delete(s.entityMap, entity.id)
delete(s.objectIdEntityMap, entity.objectId)
MESSAGE_QUEUE.SendToFight(s.world.owner.FightAppId, &mq.NetMsg{
MsgType: mq.MsgTypeFight,
EventId: mq.FightRoutineDelEntity,
FightMsg: &mq.FightMsg{
FightRoutineId: s.world.id,
EntityId: entity.id,
},
})
}
func (s *Scene) GetEntity(entityId uint32) *Entity {
return s.entityMap[entityId]
}
func (s *Scene) GetEntityByObjectId(objectId int64) *Entity {
return s.objectIdEntityMap[objectId]
}
// Entity 场景实体数据结构
type Entity struct {
id uint32
scene *Scene
lifeState uint16
pos *model.Vector
rot *model.Vector
moveState uint16
lastMoveSceneTimeMs uint32
lastMoveReliableSeq uint32
fightProp map[uint32]float32
entityType uint32
level uint8
avatarEntity *AvatarEntity
monsterEntity *MonsterEntity
npcEntity *NpcEntity
gadgetEntity *GadgetEntity
configId uint32
objectId int64
}
func (e *Entity) GetId() uint32 {
return e.id
}
func (e *Entity) GetLifeState() uint16 {
return e.lifeState
}
func (e *Entity) GetPos() *model.Vector {
return e.pos
}
func (e *Entity) GetRot() *model.Vector {
return e.rot
}
func (e *Entity) GetMoveState() uint16 {
return e.moveState
}
func (e *Entity) SetMoveState(moveState uint16) {
e.moveState = moveState
}
func (e *Entity) GetLastMoveSceneTimeMs() uint32 {
return e.lastMoveSceneTimeMs
}
func (e *Entity) SetLastMoveSceneTimeMs(lastMoveSceneTimeMs uint32) {
e.lastMoveSceneTimeMs = lastMoveSceneTimeMs
}
func (e *Entity) GetLastMoveReliableSeq() uint32 {
return e.lastMoveReliableSeq
}
func (e *Entity) SetLastMoveReliableSeq(lastMoveReliableSeq uint32) {
e.lastMoveReliableSeq = lastMoveReliableSeq
}
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) GetAvatarEntity() *AvatarEntity {
return e.avatarEntity
}
func (e *Entity) GetMonsterEntity() *MonsterEntity {
return e.monsterEntity
}
func (e *Entity) GetNpcEntity() *NpcEntity {
return e.npcEntity
}
func (e *Entity) GetGadgetEntity() *GadgetEntity {
return e.gadgetEntity
}
func (e *Entity) GetConfigId() uint32 {
return e.configId
}
type AvatarEntity struct {
uid uint32
avatarId uint32
}
func (a *AvatarEntity) GetUid() uint32 {
return a.uid
}
func (a *AvatarEntity) GetAvatarId() uint32 {
return a.avatarId
}
type MonsterEntity struct {
monsterId uint32
}
func (m *MonsterEntity) GetMonsterId() uint32 {
return m.monsterId
}
type NpcEntity struct {
NpcId uint32
RoomId uint32
ParentQuestId uint32
BlockId uint32
}
type GadgetEntity struct {
gadgetType int
gadgetId uint32
gadgetClientEntity *GadgetClientEntity
gadgetGatherEntity *GadgetGatherEntity
gadgetVehicleEntity *GadgetVehicleEntity
}
func (g *GadgetEntity) GetGadgetType() int {
return g.gadgetType
}
func (g *GadgetEntity) GetGadgetId() uint32 {
return g.gadgetId
}
func (g *GadgetEntity) GetGadgetClientEntity() *GadgetClientEntity {
return g.gadgetClientEntity
}
func (g *GadgetEntity) GetGadgetGatherEntity() *GadgetGatherEntity {
return g.gadgetGatherEntity
}
func (g *GadgetEntity) GetGadgetVehicleEntity() *GadgetVehicleEntity {
return g.gadgetVehicleEntity
}
const (
GADGET_TYPE_NORMAL = iota
GADGET_TYPE_GATHER
GADGET_TYPE_CLIENT
GADGET_TYPE_VEHICLE // 载具
)
type GadgetClientEntity struct {
configId uint32
campId uint32
campType uint32
ownerEntityId uint32
targetEntityId uint32
propOwnerEntityId uint32
}
func (g *GadgetClientEntity) GetConfigId() uint32 {
return g.configId
}
func (g *GadgetClientEntity) GetCampId() uint32 {
return g.campId
}
func (g *GadgetClientEntity) GetCampType() uint32 {
return g.campType
}
func (g *GadgetClientEntity) GetOwnerEntityId() uint32 {
return g.ownerEntityId
}
func (g *GadgetClientEntity) GetTargetEntityId() uint32 {
return g.targetEntityId
}
func (g *GadgetClientEntity) GetPropOwnerEntityId() uint32 {
return g.propOwnerEntityId
}
type GadgetGatherEntity struct {
gatherId uint32
}
func (g *GadgetGatherEntity) GetGatherId() uint32 {
return g.gatherId
}
type GadgetVehicleEntity struct {
vehicleId uint32
owner *model.Player
maxStamina float32
curStamina float32
memberMap map[uint32]*model.Player // uint32 = pos
}
func (g *GadgetVehicleEntity) GetVehicleId() uint32 {
return g.vehicleId
}
func (g *GadgetVehicleEntity) GetOwner() *model.Player {
return g.owner
}
func (g *GadgetVehicleEntity) GetMaxStamina() float32 {
return g.maxStamina
}
func (g *GadgetVehicleEntity) GetCurStamina() float32 {
return g.curStamina
}
func (g *GadgetVehicleEntity) SetCurStamina(curStamina float32) {
g.curStamina = curStamina
}
func (g *GadgetVehicleEntity) GetMemberMap() map[uint32]*model.Player {
return g.memberMap
}

View File

@@ -54,28 +54,28 @@ func (p *Player) InitAvatar(avatar *Avatar) {
// InitAvatarFightProp 初始化角色面板 // InitAvatarFightProp 初始化角色面板
func (p *Player) InitAvatarFightProp(avatar *Avatar) { func (p *Player) InitAvatarFightProp(avatar *Avatar) {
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)] avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if !ok { if avatarDataConfig == nil {
logger.Error("avatarDataConfig error, avatarId: %v", avatar.AvatarId) logger.Error("avatarDataConfig error, avatarId: %v", avatar.AvatarId)
return return
} }
avatar.FightPropMap = make(map[uint32]float32) avatar.FightPropMap = make(map[uint32]float32)
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_NONE)] = 0.0 avatar.FightPropMap[uint32(constant.FIGHT_PROP_NONE)] = 0.0
// 白字攻防血 // 白字攻防血
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_ATTACK)] = float32(avatarDataConfig.GetBaseAttackByLevel(avatar.Level)) avatar.FightPropMap[uint32(constant.FIGHT_PROP_BASE_ATTACK)] = float32(avatarDataConfig.GetBaseAttackByLevel(avatar.Level))
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_DEFENSE)] = float32(avatarDataConfig.GetBaseDefenseByLevel(avatar.Level)) avatar.FightPropMap[uint32(constant.FIGHT_PROP_BASE_DEFENSE)] = float32(avatarDataConfig.GetBaseDefenseByLevel(avatar.Level))
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP)] = float32(avatarDataConfig.GetBaseHpByLevel(avatar.Level)) avatar.FightPropMap[uint32(constant.FIGHT_PROP_BASE_HP)] = float32(avatarDataConfig.GetBaseHpByLevel(avatar.Level))
// 白字+绿字攻防血 // 白字+绿字攻防血
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_ATTACK)] = float32(avatarDataConfig.GetBaseAttackByLevel(avatar.Level)) avatar.FightPropMap[uint32(constant.FIGHT_PROP_CUR_ATTACK)] = float32(avatarDataConfig.GetBaseAttackByLevel(avatar.Level))
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_DEFENSE)] = float32(avatarDataConfig.GetBaseDefenseByLevel(avatar.Level)) avatar.FightPropMap[uint32(constant.FIGHT_PROP_CUR_DEFENSE)] = float32(avatarDataConfig.GetBaseDefenseByLevel(avatar.Level))
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP)] = float32(avatarDataConfig.GetBaseHpByLevel(avatar.Level)) avatar.FightPropMap[uint32(constant.FIGHT_PROP_MAX_HP)] = float32(avatarDataConfig.GetBaseHpByLevel(avatar.Level))
// 当前血量 // 当前血量
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)] = float32(avatar.CurrHP) avatar.FightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)] = float32(avatar.CurrHP)
// 双暴 // 双暴
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CRITICAL)] = float32(avatarDataConfig.Critical) avatar.FightPropMap[uint32(constant.FIGHT_PROP_CRITICAL)] = float32(avatarDataConfig.Critical)
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CRITICAL_HURT)] = float32(avatarDataConfig.CriticalHurt) avatar.FightPropMap[uint32(constant.FIGHT_PROP_CRITICAL_HURT)] = float32(avatarDataConfig.CriticalHurt)
// 元素充能 // 元素充能
avatar.FightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_CHARGE_EFFICIENCY)] = 1.0 avatar.FightPropMap[uint32(constant.FIGHT_PROP_CHARGE_EFFICIENCY)] = 1.0
p.SetCurrEnergy(avatar, avatar.CurrEnergy, true) p.SetCurrEnergy(avatar, avatar.CurrEnergy, true)
} }
@@ -89,8 +89,8 @@ func (p *Player) GetAvatarIdByGuid(guid uint64) uint32 {
} }
func (p *Player) AddAvatar(avatarId uint32) { func (p *Player) AddAvatar(avatarId uint32) {
avatarDataConfig, exist := gdconf.CONF.AvatarDataMap[int32(avatarId)] avatarDataConfig := gdconf.GetAvatarDataById(int32(avatarId))
if !exist { if avatarDataConfig == nil {
logger.Error("avatar data config is nil, avatarId: %v", avatarId) logger.Error("avatar data config is nil, avatarId: %v", avatarId)
return return
} }
@@ -103,14 +103,14 @@ func (p *Player) AddAvatar(avatarId uint32) {
} else { } else {
skillDepotId = avatarDataConfig.SkillDepotId skillDepotId = avatarDataConfig.SkillDepotId
} }
avatarSkillDepotDataConfig, exist := gdconf.CONF.AvatarSkillDepotDataMap[skillDepotId] avatarSkillDepotDataConfig := gdconf.GetAvatarSkillDepotDataById(skillDepotId)
if !exist { if avatarSkillDepotDataConfig == nil {
logger.Error("avatar skill depot data config is nil, skillDepotId: %v", skillDepotId) logger.Error("avatar skill depot data config is nil, skillDepotId: %v", skillDepotId)
return return
} }
avatar := &Avatar{ avatar := &Avatar{
AvatarId: avatarId, AvatarId: avatarId,
LifeState: constant.LifeStateConst.LIFE_ALIVE, LifeState: constant.LIFE_STATE_ALIVE,
Level: 1, Level: 1,
Exp: 0, Exp: 0,
Promote: 0, Promote: 0,
@@ -155,16 +155,16 @@ func (p *Player) AddAvatar(avatarId uint32) {
func (p *Player) SetCurrEnergy(avatar *Avatar, value float64, max bool) { func (p *Player) SetCurrEnergy(avatar *Avatar, value float64, max bool) {
var avatarSkillDataConfig *gdconf.AvatarSkillData = nil var avatarSkillDataConfig *gdconf.AvatarSkillData = nil
if avatar.AvatarId == 10000005 || avatar.AvatarId == 10000007 { if avatar.AvatarId == 10000005 || avatar.AvatarId == 10000007 {
avatarSkillDepotDataConfig, exist := gdconf.CONF.AvatarSkillDepotDataMap[int32(avatar.SkillDepotId)] avatarSkillDepotDataConfig := gdconf.GetAvatarSkillDepotDataById(int32(avatar.SkillDepotId))
if !exist { if avatarSkillDepotDataConfig == nil {
return return
} }
avatarSkillDataConfig, exist = gdconf.CONF.AvatarSkillDataMap[avatarSkillDepotDataConfig.EnergySkill] avatarSkillDataConfig = gdconf.GetAvatarSkillDataById(avatarSkillDepotDataConfig.EnergySkill)
if !exist { if avatarSkillDataConfig == nil {
return return
} }
} else { } else {
avatarSkillDataConfig = gdconf.CONF.GetAvatarEnergySkillConfig(avatar.AvatarId) avatarSkillDataConfig = gdconf.GetAvatarEnergySkillConfig(avatar.AvatarId)
} }
if avatarSkillDataConfig == nil { if avatarSkillDataConfig == nil {
logger.Error("get avatar energy skill is nil, avatarId: %v", avatar.AvatarId) logger.Error("get avatar energy skill is nil, avatarId: %v", avatar.AvatarId)

View File

@@ -46,7 +46,7 @@ func (p *Player) GetItemIdByItemAndWeaponGuid(guid uint64) uint32 {
} }
func (p *Player) GetItemCount(itemId uint32) uint32 { func (p *Player) GetItemCount(itemId uint32) uint32 {
prop, ok := constant.ItemConstantConst.VIRTUAL_ITEM_PROP[itemId] prop, ok := constant.VIRTUAL_ITEM_PROP[itemId]
if ok { if ok {
value := p.PropertiesMap[prop] value := p.PropertiesMap[prop]
return value return value

View File

@@ -48,8 +48,8 @@ func (p *Player) AddReliquary(itemId uint32, reliquaryId uint64, mainPropId uint
AvatarId: 0, AvatarId: 0,
Guid: 0, Guid: 0,
} }
itemDataConfig, exist := gdconf.CONF.ItemDataMap[int32(itemId)] itemDataConfig := gdconf.GetItemDataById(int32(itemId))
if !exist { if itemDataConfig == nil {
logger.Error("reliquary config is nil, itemId: %v", itemId) logger.Error("reliquary config is nil, itemId: %v", itemId)
return return
} }

View File

@@ -26,35 +26,35 @@ func (s *StaminaInfo) SetStaminaCost(state proto.MotionState) {
// 消耗耐力 // 消耗耐力
case proto.MotionState_MOTION_DASH: case proto.MotionState_MOTION_DASH:
// 快速跑步 // 快速跑步
s.CostStamina = constant.StaminaCostConst.DASH s.CostStamina = constant.STAMINA_COST_DASH
case proto.MotionState_MOTION_FLY, proto.MotionState_MOTION_FLY_FAST, proto.MotionState_MOTION_FLY_SLOW: case proto.MotionState_MOTION_FLY, proto.MotionState_MOTION_FLY_FAST, proto.MotionState_MOTION_FLY_SLOW:
// 滑翔 // 滑翔
s.CostStamina = constant.StaminaCostConst.FLY s.CostStamina = constant.STAMINA_COST_FLY
case proto.MotionState_MOTION_SWIM_DASH: case proto.MotionState_MOTION_SWIM_DASH:
// 快速游泳 // 快速游泳
s.CostStamina = constant.StaminaCostConst.SWIM_DASH s.CostStamina = constant.STAMINA_COST_SWIM_DASH
case proto.MotionState_MOTION_SKIFF_DASH: case proto.MotionState_MOTION_SKIFF_DASH:
// 浪船加速 // 浪船加速
s.CostStamina = constant.StaminaCostConst.SKIFF_DASH s.CostStamina = constant.STAMINA_COST_SKIFF_DASH
// 恢复耐力 // 恢复耐力
case proto.MotionState_MOTION_DANGER_RUN, proto.MotionState_MOTION_RUN: case proto.MotionState_MOTION_DANGER_RUN, proto.MotionState_MOTION_RUN:
// 正常跑步 // 正常跑步
s.CostStamina = constant.StaminaCostConst.RUN s.CostStamina = constant.STAMINA_COST_RUN
case proto.MotionState_MOTION_DANGER_STANDBY_MOVE, proto.MotionState_MOTION_DANGER_STANDBY, proto.MotionState_MOTION_LADDER_TO_STANDBY, proto.MotionState_MOTION_STANDBY_MOVE, proto.MotionState_MOTION_STANDBY: case proto.MotionState_MOTION_DANGER_STANDBY_MOVE, proto.MotionState_MOTION_DANGER_STANDBY, proto.MotionState_MOTION_LADDER_TO_STANDBY, proto.MotionState_MOTION_STANDBY_MOVE, proto.MotionState_MOTION_STANDBY:
// 站立 // 站立
s.CostStamina = constant.StaminaCostConst.STANDBY s.CostStamina = constant.STAMINA_COST_STANDBY
case proto.MotionState_MOTION_DANGER_WALK, proto.MotionState_MOTION_WALK: case proto.MotionState_MOTION_DANGER_WALK, proto.MotionState_MOTION_WALK:
// 走路 // 走路
s.CostStamina = constant.StaminaCostConst.WALK s.CostStamina = constant.STAMINA_COST_WALK
case proto.MotionState_MOTION_SKIFF_BOARDING, proto.MotionState_MOTION_SKIFF_NORMAL: case proto.MotionState_MOTION_SKIFF_BOARDING, proto.MotionState_MOTION_SKIFF_NORMAL:
// 浪船正常移动或停下 // 浪船正常移动或停下
s.CostStamina = constant.StaminaCostConst.SKIFF_NORMAL s.CostStamina = constant.STAMINA_COST_SKIFF_NORMAL
case proto.MotionState_MOTION_POWERED_FLY: case proto.MotionState_MOTION_POWERED_FLY:
// 滑翔加速 (风圈等) // 滑翔加速 (风圈等)
s.CostStamina = constant.StaminaCostConst.POWERED_FLY s.CostStamina = constant.STAMINA_COST_POWERED_FLY
case proto.MotionState_MOTION_SKIFF_POWERED_DASH: case proto.MotionState_MOTION_SKIFF_POWERED_DASH:
// 浪船加速 (风圈等) // 浪船加速 (风圈等)
s.CostStamina = constant.StaminaCostConst.POWERED_SKIFF s.CostStamina = constant.STAMINA_COST_POWERED_SKIFF
// 缓慢动作将在客户端发送消息后消耗 // 缓慢动作将在客户端发送消息后消耗
case proto.MotionState_MOTION_CLIMB, proto.MotionState_MOTION_SWIM_MOVE: case proto.MotionState_MOTION_CLIMB, proto.MotionState_MOTION_SWIM_MOVE:
// 缓慢攀爬 或 缓慢游泳 // 缓慢攀爬 或 缓慢游泳

View File

@@ -61,7 +61,7 @@ func (t *TeamInfo) UpdateTeam() {
t.TeamResonancesConfig = make(map[int32]bool) t.TeamResonancesConfig = make(map[int32]bool)
teamElementTypeCountMap := make(map[uint16]uint8) teamElementTypeCountMap := make(map[uint16]uint8)
for _, avatarId := range activeTeam.GetAvatarIdList() { for _, avatarId := range activeTeam.GetAvatarIdList() {
avatarSkillDataConfig := gdconf.CONF.GetAvatarEnergySkillConfig(avatarId) avatarSkillDataConfig := gdconf.GetAvatarEnergySkillConfig(avatarId)
if avatarSkillDataConfig == nil { if avatarSkillDataConfig == nil {
logger.Error("get avatar energy skill is nil, avatarId: %v", avatarId) logger.Error("get avatar energy skill is nil, avatarId: %v", avatarId)
continue continue

View File

@@ -68,8 +68,8 @@ func (p *Player) AddWeapon(itemId uint32, weaponId uint64) {
Refinement: 0, Refinement: 0,
Guid: 0, Guid: 0,
} }
itemDataConfig, exist := gdconf.CONF.ItemDataMap[int32(itemId)] itemDataConfig := gdconf.GetItemDataById(int32(itemId))
if !exist { if itemDataConfig == nil {
logger.Error("weapon config is nil, itemId: %v", itemId) logger.Error("weapon config is nil, itemId: %v", itemId)
return return
} }