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

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

View File

@@ -1,25 +1,11 @@
package constant
var ClimateTypeConst *ClimateType
type ClimateType struct {
CLIMATE_NONE uint16
CLIMATE_SUNNY uint16
CLIMATE_CLOUDY uint16
CLIMATE_RAIN uint16
CLIMATE_THUNDERSTORM uint16
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
}
const (
CLIMATE_TYPE_NONE uint16 = 0
CLIMATE_TYPE_SUNNY uint16 = 1
CLIMATE_TYPE_CLOUDY uint16 = 2
CLIMATE_TYPE_RAIN uint16 = 3
CLIMATE_TYPE_THUNDERSTORM uint16 = 4
CLIMATE_TYPE_SNOW uint16 = 5
CLIMATE_TYPE_MIST uint16 = 6
)

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

View File

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

View File

@@ -1,25 +1,11 @@
package constant
var EntityIdTypeConst *EntityIdType
type EntityIdType struct {
AVATAR uint16
MONSTER uint16
NPC uint16
GADGET uint16
WEAPON uint16
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
}
const (
ENTITY_ID_TYPE_AVATAR uint16 = 0x01
ENTITY_ID_TYPE_MONSTER uint16 = 0x02
ENTITY_ID_TYPE_NPC uint16 = 0x03
ENTITY_ID_TYPE_GADGET uint16 = 0x04
ENTITY_ID_TYPE_WEAPON uint16 = 0x06
ENTITY_ID_TYPE_TEAM uint16 = 0x09
ENTITY_ID_TYPE_MPLEVEL uint16 = 0x0b
)

View File

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

View File

@@ -1,36 +1,11 @@
package constant
var EquipTypeConst *EquipType
type EquipType struct {
EQUIP_NONE uint16
EQUIP_BRACER uint16
EQUIP_NECKLACE uint16
EQUIP_SHOES uint16
EQUIP_RING uint16
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
}
const (
EQUIP_TYPE_NONE uint16 = 0
EQUIP_TYPE_BRACER uint16 = 1
EQUIP_TYPE_NECKLACE uint16 = 2
EQUIP_TYPE_SHOES uint16 = 3
EQUIP_TYPE_RING uint16 = 4
EQUIP_TYPE_DRESS uint16 = 5
EQUIP_TYPE_WEAPON uint16 = 6
)

View File

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

View File

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

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
var GCGTokenConst *GCGTokenType
type GCGTokenType struct {
TOKEN_CUR_HEALTH uint32 // 现行血量
TOKEN_MAX_HEALTH uint32 // 最大血量(不确定)
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
}
const (
GCG_TOKEN_TYPE_CUR_HEALTH uint32 = 1 // 现行血量
GCG_TOKEN_TYPE_MAX_HEALTH uint32 = 2 // 最大血量(不确定)
GCG_TOKEN_TYPE_CUR_ELEM uint32 = 4 // 现行充能
GCG_TOKEN_TYPE_MAX_ELEM uint32 = 5 // 最大充能(充能条长度)
)

View File

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

View File

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

View File

@@ -1,36 +1,11 @@
package constant
var ItemTypeConst *ItemType
type ItemType struct {
ITEM_NONE uint16
ITEM_VIRTUAL uint16
ITEM_MATERIAL uint16
ITEM_RELIQUARY uint16
ITEM_WEAPON uint16
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
}
const (
ITEM_TYPE_NONE uint16 = 0
ITEM_TYPE_VIRTUAL uint16 = 1
ITEM_TYPE_MATERIAL uint16 = 2
ITEM_TYPE_RELIQUARY uint16 = 3
ITEM_TYPE_WEAPON uint16 = 4
ITEM_TYPE_DISPLAY uint16 = 5
ITEM_TYPE_FURNITURE uint16 = 6
)

View File

@@ -1,19 +1,8 @@
package constant
var LifeStateConst *LifeState
type LifeState struct {
LIFE_NONE uint16
LIFE_ALIVE uint16
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
}
const (
LIFE_STATE_NONE uint16 = 0
LIFE_STATE_ALIVE uint16 = 1
LIFE_STATE_DEAD uint16 = 2
LIFE_STATE_REVIVE uint16 = 3
)

View File

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

View File

@@ -1,343 +1,343 @@
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 {
OPEN_STATE_NONE uint16
OPEN_STATE_PAIMON uint16
OPEN_STATE_PAIMON_NAVIGATION uint16
OPEN_STATE_AVATAR_PROMOTE uint16
OPEN_STATE_AVATAR_TALENT uint16
OPEN_STATE_WEAPON_PROMOTE uint16
OPEN_STATE_WEAPON_AWAKEN uint16
OPEN_STATE_QUEST_REMIND uint16
OPEN_STATE_GAME_GUIDE uint16
OPEN_STATE_COOK uint16
OPEN_STATE_WEAPON_UPGRADE uint16
OPEN_STATE_RELIQUARY_UPGRADE uint16
OPEN_STATE_RELIQUARY_PROMOTE uint16
OPEN_STATE_WEAPON_PROMOTE_GUIDE uint16
OPEN_STATE_WEAPON_CHANGE_GUIDE uint16
OPEN_STATE_PLAYER_LVUP_GUIDE uint16
OPEN_STATE_FRESHMAN_GUIDE uint16
OPEN_STATE_SKIP_FRESHMAN_GUIDE uint16
OPEN_STATE_GUIDE_MOVE_CAMERA uint16
OPEN_STATE_GUIDE_SCALE_CAMERA uint16
OPEN_STATE_GUIDE_KEYBOARD uint16
OPEN_STATE_GUIDE_MOVE uint16
OPEN_STATE_GUIDE_JUMP uint16
OPEN_STATE_GUIDE_SPRINT uint16
OPEN_STATE_GUIDE_MAP uint16
OPEN_STATE_GUIDE_ATTACK uint16
OPEN_STATE_GUIDE_FLY uint16
OPEN_STATE_GUIDE_TALENT uint16
OPEN_STATE_GUIDE_RELIC uint16
OPEN_STATE_GUIDE_RELIC_PROM uint16
OPEN_STATE_COMBINE uint16
OPEN_STATE_GACHA uint16
OPEN_STATE_GUIDE_GACHA uint16
OPEN_STATE_GUIDE_TEAM uint16
OPEN_STATE_GUIDE_PROUD uint16
OPEN_STATE_GUIDE_AVATAR_PROMOTE uint16
OPEN_STATE_GUIDE_ADVENTURE_CARD uint16
OPEN_STATE_FORGE uint16
OPEN_STATE_GUIDE_BAG uint16
OPEN_STATE_EXPEDITION uint16
OPEN_STATE_GUIDE_ADVENTURE_DAILYTASK uint16
OPEN_STATE_GUIDE_ADVENTURE_DUNGEON uint16
OPEN_STATE_TOWER uint16
OPEN_STATE_WORLD_STAMINA uint16
OPEN_STATE_TOWER_FIRST_ENTER uint16
OPEN_STATE_RESIN uint16
OPEN_STATE_LIMIT_REGION_FRESHMEAT uint16
OPEN_STATE_LIMIT_REGION_GLOBAL uint16
OPEN_STATE_MULTIPLAYER uint16
OPEN_STATE_GUIDE_MOUSEPC uint16
OPEN_STATE_GUIDE_MULTIPLAYER uint16
OPEN_STATE_GUIDE_DUNGEONREWARD uint16
OPEN_STATE_GUIDE_BLOSSOM uint16
OPEN_STATE_AVATAR_FASHION uint16
OPEN_STATE_PHOTOGRAPH uint16
OPEN_STATE_GUIDE_KSLQUEST uint16
OPEN_STATE_PERSONAL_LINE uint16
OPEN_STATE_GUIDE_PERSONAL_LINE uint16
OPEN_STATE_GUIDE_APPEARANCE uint16
OPEN_STATE_GUIDE_PROCESS uint16
OPEN_STATE_GUIDE_PERSONAL_LINE_KEY uint16
OPEN_STATE_GUIDE_WIDGET uint16
OPEN_STATE_GUIDE_ACTIVITY_SKILL_ASTER uint16
OPEN_STATE_GUIDE_COLDCLIMATE uint16
OPEN_STATE_DERIVATIVE_MALL uint16
OPEN_STATE_GUIDE_EXITMULTIPLAYER uint16
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD uint16
OPEN_STATE_GUIDE_THEATREMACHANICUS_REBUILD uint16
OPEN_STATE_GUIDE_THEATREMACHANICUS_CARD uint16
OPEN_STATE_GUIDE_THEATREMACHANICUS_MONSTER uint16
OPEN_STATE_GUIDE_THEATREMACHANICUS_MISSION_CHECK uint16
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD_SELECT uint16
OPEN_STATE_GUIDE_THEATREMACHANICUS_CHALLENGE_START uint16
OPEN_STATE_GUIDE_CONVERT uint16
OPEN_STATE_GUIDE_THEATREMACHANICUS_MULTIPLAYER uint16
OPEN_STATE_GUIDE_COOP_TASK uint16
OPEN_STATE_GUIDE_HOMEWORLD_ADEPTIABODE uint16
OPEN_STATE_GUIDE_HOMEWORLD_DEPLOY uint16
OPEN_STATE_GUIDE_CHANNELLERSLAB_EQUIP uint16
OPEN_STATE_GUIDE_CHANNELLERSLAB_MP_SOLUTION uint16
OPEN_STATE_GUIDE_CHANNELLERSLAB_POWER uint16
OPEN_STATE_GUIDE_HIDEANDSEEK_SKILL uint16
OPEN_STATE_GUIDE_HOMEWORLD_MAPLIST uint16
OPEN_STATE_GUIDE_RELICRESOLVE uint16
OPEN_STATE_GUIDE_GGUIDE uint16
OPEN_STATE_GUIDE_GGUIDE_HINT uint16
OPEN_STATE_CITY_REPUATION_MENGDE uint16
OPEN_STATE_CITY_REPUATION_LIYUE uint16
OPEN_STATE_CITY_REPUATION_UI_HINT uint16
OPEN_STATE_CITY_REPUATION_INAZUMA uint16
OPEN_STATE_SHOP_TYPE_MALL uint16
OPEN_STATE_SHOP_TYPE_RECOMMANDED uint16
OPEN_STATE_SHOP_TYPE_GENESISCRYSTAL uint16
OPEN_STATE_SHOP_TYPE_GIFTPACKAGE uint16
OPEN_STATE_SHOP_TYPE_PAIMON uint16
OPEN_STATE_SHOP_TYPE_CITY uint16
OPEN_STATE_SHOP_TYPE_BLACKSMITH uint16
OPEN_STATE_SHOP_TYPE_GROCERY uint16
OPEN_STATE_SHOP_TYPE_FOOD uint16
OPEN_STATE_SHOP_TYPE_SEA_LAMP uint16
OPEN_STATE_SHOP_TYPE_VIRTUAL_SHOP uint16
OPEN_STATE_SHOP_TYPE_LIYUE_GROCERY uint16
OPEN_STATE_SHOP_TYPE_LIYUE_SOUVENIR uint16
OPEN_STATE_SHOP_TYPE_LIYUE_RESTAURANT uint16
OPEN_STATE_SHOP_TYPE_INAZUMA_SOUVENIR uint16
OPEN_STATE_SHOP_TYPE_NPC_TOMOKI uint16
OPEN_ADVENTURE_MANUAL uint16
OPEN_ADVENTURE_MANUAL_CITY_MENGDE uint16
OPEN_ADVENTURE_MANUAL_CITY_LIYUE uint16
OPEN_ADVENTURE_MANUAL_MONSTER uint16
OPEN_ADVENTURE_MANUAL_BOSS_DUNGEON uint16
OPEN_STATE_ACTIVITY_SEALAMP uint16
OPEN_STATE_ACTIVITY_SEALAMP_TAB2 uint16
OPEN_STATE_ACTIVITY_SEALAMP_TAB3 uint16
OPEN_STATE_BATTLE_PASS uint16
OPEN_STATE_BATTLE_PASS_ENTRY uint16
OPEN_STATE_ACTIVITY_CRUCIBLE uint16
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_OPEN uint16
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_CLOSE uint16
OPEN_STATE_ACTIVITY_ENTRY_OPEN uint16
OPEN_STATE_MENGDE_INFUSEDCRYSTAL uint16
OPEN_STATE_LIYUE_INFUSEDCRYSTAL uint16
OPEN_STATE_SNOW_MOUNTAIN_ELDER_TREE uint16
OPEN_STATE_MIRACLE_RING uint16
OPEN_STATE_COOP_LINE uint16
OPEN_STATE_INAZUMA_INFUSEDCRYSTAL uint16
OPEN_STATE_FISH uint16
OPEN_STATE_GUIDE_SUMO_TEAM_SKILL uint16
OPEN_STATE_GUIDE_FISH_RECIPE uint16
OPEN_STATE_HOME uint16
OPEN_STATE_ACTIVITY_HOMEWORLD uint16
OPEN_STATE_ADEPTIABODE uint16
OPEN_STATE_HOME_AVATAR uint16
OPEN_STATE_HOME_EDIT uint16
OPEN_STATE_HOME_EDIT_TIPS uint16
OPEN_STATE_RELIQUARY_DECOMPOSE uint16
OPEN_STATE_ACTIVITY_H5 uint16
OPEN_STATE_ORAIONOKAMI uint16
OPEN_STATE_GUIDE_CHESS_MISSION_CHECK uint16
OPEN_STATE_GUIDE_CHESS_BUILD uint16
OPEN_STATE_GUIDE_CHESS_WIND_TOWER_CIRCLE uint16
OPEN_STATE_GUIDE_CHESS_CARD_SELECT uint16
OPEN_STATE_INAZUMA_MAINQUEST_FINISHED uint16
OPEN_STATE_PAIMON_LVINFO uint16
OPEN_STATE_TELEPORT_HUD uint16
OPEN_STATE_GUIDE_MAP_UNLOCK uint16
OPEN_STATE_GUIDE_PAIMON_LVINFO uint16
OPEN_STATE_GUIDE_AMBORTRANSPORT uint16
OPEN_STATE_GUIDE_FLY_SECOND uint16
OPEN_STATE_GUIDE_KAEYA_CLUE uint16
OPEN_STATE_CAPTURE_CODEX uint16
OPEN_STATE_ACTIVITY_FISH_OPEN uint16
OPEN_STATE_ACTIVITY_FISH_CLOSE uint16
OPEN_STATE_GUIDE_ROGUE_MAP uint16
OPEN_STATE_GUIDE_ROGUE_RUNE uint16
OPEN_STATE_GUIDE_BARTENDER_FORMULA uint16
OPEN_STATE_GUIDE_BARTENDER_MIX uint16
OPEN_STATE_GUIDE_BARTENDER_CUP uint16
OPEN_STATE_GUIDE_MAIL_FAVORITES uint16
OPEN_STATE_GUIDE_POTION_CONFIGURE uint16
OPEN_STATE_GUIDE_LANV2_FIREWORK uint16
OPEN_STATE_LOADINGTIPS_ENKANOMIYA uint16
OPEN_STATE_MICHIAE_CASKET uint16
OPEN_STATE_MAIL_COLLECT_UNLOCK_RED_POINT uint16
OPEN_STATE_LUMEN_STONE uint16
OPEN_STATE_GUIDE_CRYSTALLINK_BUFF uint16
}
func InitOpenStateConst() {
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
var ALL_OPEN_STATE []uint16
func init() {
ALL_OPEN_STATE = []uint16{
OPEN_STATE_NONE,
OPEN_STATE_PAIMON,
OPEN_STATE_PAIMON_NAVIGATION,
OPEN_STATE_AVATAR_PROMOTE,
OPEN_STATE_AVATAR_TALENT,
OPEN_STATE_WEAPON_PROMOTE,
OPEN_STATE_WEAPON_AWAKEN,
OPEN_STATE_QUEST_REMIND,
OPEN_STATE_GAME_GUIDE,
OPEN_STATE_COOK,
OPEN_STATE_WEAPON_UPGRADE,
OPEN_STATE_RELIQUARY_UPGRADE,
OPEN_STATE_RELIQUARY_PROMOTE,
OPEN_STATE_WEAPON_PROMOTE_GUIDE,
OPEN_STATE_WEAPON_CHANGE_GUIDE,
OPEN_STATE_PLAYER_LVUP_GUIDE,
OPEN_STATE_FRESHMAN_GUIDE,
OPEN_STATE_SKIP_FRESHMAN_GUIDE,
OPEN_STATE_GUIDE_MOVE_CAMERA,
OPEN_STATE_GUIDE_SCALE_CAMERA,
OPEN_STATE_GUIDE_KEYBOARD,
OPEN_STATE_GUIDE_MOVE,
OPEN_STATE_GUIDE_JUMP,
OPEN_STATE_GUIDE_SPRINT,
OPEN_STATE_GUIDE_MAP,
OPEN_STATE_GUIDE_ATTACK,
OPEN_STATE_GUIDE_FLY,
OPEN_STATE_GUIDE_TALENT,
OPEN_STATE_GUIDE_RELIC,
OPEN_STATE_GUIDE_RELIC_PROM,
OPEN_STATE_COMBINE,
OPEN_STATE_GACHA,
OPEN_STATE_GUIDE_GACHA,
OPEN_STATE_GUIDE_TEAM,
OPEN_STATE_GUIDE_PROUD,
OPEN_STATE_GUIDE_AVATAR_PROMOTE,
OPEN_STATE_GUIDE_ADVENTURE_CARD,
OPEN_STATE_FORGE,
OPEN_STATE_GUIDE_BAG,
OPEN_STATE_EXPEDITION,
OPEN_STATE_GUIDE_ADVENTURE_DAILYTASK,
OPEN_STATE_GUIDE_ADVENTURE_DUNGEON,
OPEN_STATE_TOWER,
OPEN_STATE_WORLD_STAMINA,
OPEN_STATE_TOWER_FIRST_ENTER,
OPEN_STATE_RESIN,
OPEN_STATE_LIMIT_REGION_FRESHMEAT,
OPEN_STATE_LIMIT_REGION_GLOBAL,
OPEN_STATE_MULTIPLAYER,
OPEN_STATE_GUIDE_MOUSEPC,
OPEN_STATE_GUIDE_MULTIPLAYER,
OPEN_STATE_GUIDE_DUNGEONREWARD,
OPEN_STATE_GUIDE_BLOSSOM,
OPEN_STATE_AVATAR_FASHION,
OPEN_STATE_PHOTOGRAPH,
OPEN_STATE_GUIDE_KSLQUEST,
OPEN_STATE_PERSONAL_LINE,
OPEN_STATE_GUIDE_PERSONAL_LINE,
OPEN_STATE_GUIDE_APPEARANCE,
OPEN_STATE_GUIDE_PROCESS,
OPEN_STATE_GUIDE_PERSONAL_LINE_KEY,
OPEN_STATE_GUIDE_WIDGET,
OPEN_STATE_GUIDE_ACTIVITY_SKILL_ASTER,
OPEN_STATE_GUIDE_COLDCLIMATE,
OPEN_STATE_DERIVATIVE_MALL,
OPEN_STATE_GUIDE_EXITMULTIPLAYER,
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD,
OPEN_STATE_GUIDE_THEATREMACHANICUS_REBUILD,
OPEN_STATE_GUIDE_THEATREMACHANICUS_CARD,
OPEN_STATE_GUIDE_THEATREMACHANICUS_MONSTER,
OPEN_STATE_GUIDE_THEATREMACHANICUS_MISSION_CHECK,
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD_SELECT,
OPEN_STATE_GUIDE_THEATREMACHANICUS_CHALLENGE_START,
OPEN_STATE_GUIDE_CONVERT,
OPEN_STATE_GUIDE_THEATREMACHANICUS_MULTIPLAYER,
OPEN_STATE_GUIDE_COOP_TASK,
OPEN_STATE_GUIDE_HOMEWORLD_ADEPTIABODE,
OPEN_STATE_GUIDE_HOMEWORLD_DEPLOY,
OPEN_STATE_GUIDE_CHANNELLERSLAB_EQUIP,
OPEN_STATE_GUIDE_CHANNELLERSLAB_MP_SOLUTION,
OPEN_STATE_GUIDE_CHANNELLERSLAB_POWER,
OPEN_STATE_GUIDE_HIDEANDSEEK_SKILL,
OPEN_STATE_GUIDE_HOMEWORLD_MAPLIST,
OPEN_STATE_GUIDE_RELICRESOLVE,
OPEN_STATE_GUIDE_GGUIDE,
OPEN_STATE_GUIDE_GGUIDE_HINT,
OPEN_STATE_CITY_REPUATION_MENGDE,
OPEN_STATE_CITY_REPUATION_LIYUE,
OPEN_STATE_CITY_REPUATION_UI_HINT,
OPEN_STATE_CITY_REPUATION_INAZUMA,
OPEN_STATE_SHOP_TYPE_MALL,
OPEN_STATE_SHOP_TYPE_RECOMMANDED,
OPEN_STATE_SHOP_TYPE_GENESISCRYSTAL,
OPEN_STATE_SHOP_TYPE_GIFTPACKAGE,
OPEN_STATE_SHOP_TYPE_PAIMON,
OPEN_STATE_SHOP_TYPE_CITY,
OPEN_STATE_SHOP_TYPE_BLACKSMITH,
OPEN_STATE_SHOP_TYPE_GROCERY,
OPEN_STATE_SHOP_TYPE_FOOD,
OPEN_STATE_SHOP_TYPE_SEA_LAMP,
OPEN_STATE_SHOP_TYPE_VIRTUAL_SHOP,
OPEN_STATE_SHOP_TYPE_LIYUE_GROCERY,
OPEN_STATE_SHOP_TYPE_LIYUE_SOUVENIR,
OPEN_STATE_SHOP_TYPE_LIYUE_RESTAURANT,
OPEN_STATE_SHOP_TYPE_INAZUMA_SOUVENIR,
OPEN_STATE_SHOP_TYPE_NPC_TOMOKI,
OPEN_ADVENTURE_MANUAL,
OPEN_ADVENTURE_MANUAL_CITY_MENGDE,
OPEN_ADVENTURE_MANUAL_CITY_LIYUE,
OPEN_ADVENTURE_MANUAL_MONSTER,
OPEN_ADVENTURE_MANUAL_BOSS_DUNGEON,
OPEN_STATE_ACTIVITY_SEALAMP,
OPEN_STATE_ACTIVITY_SEALAMP_TAB2,
OPEN_STATE_ACTIVITY_SEALAMP_TAB3,
OPEN_STATE_BATTLE_PASS,
OPEN_STATE_BATTLE_PASS_ENTRY,
OPEN_STATE_ACTIVITY_CRUCIBLE,
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_OPEN,
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_CLOSE,
OPEN_STATE_ACTIVITY_ENTRY_OPEN,
OPEN_STATE_MENGDE_INFUSEDCRYSTAL,
OPEN_STATE_LIYUE_INFUSEDCRYSTAL,
OPEN_STATE_SNOW_MOUNTAIN_ELDER_TREE,
OPEN_STATE_MIRACLE_RING,
OPEN_STATE_COOP_LINE,
OPEN_STATE_INAZUMA_INFUSEDCRYSTAL,
OPEN_STATE_FISH,
OPEN_STATE_GUIDE_SUMO_TEAM_SKILL,
OPEN_STATE_GUIDE_FISH_RECIPE,
OPEN_STATE_HOME,
OPEN_STATE_ACTIVITY_HOMEWORLD,
OPEN_STATE_ADEPTIABODE,
OPEN_STATE_HOME_AVATAR,
OPEN_STATE_HOME_EDIT,
OPEN_STATE_HOME_EDIT_TIPS,
OPEN_STATE_RELIQUARY_DECOMPOSE,
OPEN_STATE_ACTIVITY_H5,
OPEN_STATE_ORAIONOKAMI,
OPEN_STATE_GUIDE_CHESS_MISSION_CHECK,
OPEN_STATE_GUIDE_CHESS_BUILD,
OPEN_STATE_GUIDE_CHESS_WIND_TOWER_CIRCLE,
OPEN_STATE_GUIDE_CHESS_CARD_SELECT,
OPEN_STATE_INAZUMA_MAINQUEST_FINISHED,
OPEN_STATE_PAIMON_LVINFO,
OPEN_STATE_TELEPORT_HUD,
OPEN_STATE_GUIDE_MAP_UNLOCK,
OPEN_STATE_GUIDE_PAIMON_LVINFO,
OPEN_STATE_GUIDE_AMBORTRANSPORT,
OPEN_STATE_GUIDE_FLY_SECOND,
OPEN_STATE_GUIDE_KAEYA_CLUE,
OPEN_STATE_CAPTURE_CODEX,
OPEN_STATE_ACTIVITY_FISH_OPEN,
OPEN_STATE_ACTIVITY_FISH_CLOSE,
OPEN_STATE_GUIDE_ROGUE_MAP,
OPEN_STATE_GUIDE_ROGUE_RUNE,
OPEN_STATE_GUIDE_BARTENDER_FORMULA,
OPEN_STATE_GUIDE_BARTENDER_MIX,
OPEN_STATE_GUIDE_BARTENDER_CUP,
OPEN_STATE_GUIDE_MAIL_FAVORITES,
OPEN_STATE_GUIDE_POTION_CONFIGURE,
OPEN_STATE_GUIDE_LANV2_FIREWORK,
OPEN_STATE_LOADINGTIPS_ENKANOMIYA,
OPEN_STATE_MICHIAE_CASKET,
OPEN_STATE_MAIL_COLLECT_UNLOCK_RED_POINT,
OPEN_STATE_LUMEN_STONE,
OPEN_STATE_GUIDE_CRYSTALLINK_BUFF,
}
}

View File

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

View File

@@ -1,25 +1,11 @@
package constant
var SceneTypeConst *SceneType
type SceneType struct {
SCENE_NONE uint16
SCENE_WORLD uint16
SCENE_DUNGEON uint16
SCENE_ROOM uint16
SCENE_HOME_WORLD uint16
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
}
const (
SCENE_TYPE_NONE uint16 = 0
SCENE_TYPE_WORLD uint16 = 1
SCENE_TYPE_DUNGEON uint16 = 2
SCENE_TYPE_ROOM uint16 = 3
SCENE_TYPE_HOME_WORLD uint16 = 4
SCENE_TYPE_HOME_ROOM uint16 = 5
SCENE_TYPE_ACTIVITY uint16 = 6
)

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,18 +2,18 @@ package gdconf
import (
"fmt"
"hk4e/pkg/endec"
"hk4e/pkg/logger"
"os"
"strconv"
"strings"
"hk4e/pkg/endec"
"hk4e/pkg/logger"
"github.com/hjson/hjson-go/v4"
"github.com/jszwec/csvutil"
)
// 角色配置表
// AvatarData 角色配置表
type AvatarData struct {
AvatarId int32 `csv:"AvatarId"` // ID
HpBase float64 `csv:"HpBase,omitempty"` // 基础生命值
@@ -97,6 +97,14 @@ func (g *GameDataConfig) loadAvatarData() {
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 成长属性要读表
func (a *AvatarData) GetBaseHpByLevel(level uint8) float64 {

View File

@@ -2,13 +2,13 @@ package gdconf
import (
"fmt"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil"
)
// 角色等级配置表
// AvatarLevelData 角色等级配置表
type AvatarLevelData struct {
Level int32 `csv:"Level"` // 等级
Exp int32 `csv:"Exp,omitempty"` // 升到下一级所需经验
@@ -29,3 +29,11 @@ func (g *GameDataConfig) loadAvatarLevelData() {
}
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 (
"fmt"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil"
)
// 角色突破配置表
// AvatarPromoteData 角色突破配置表
type AvatarPromoteData struct {
PromoteId int32 `csv:"PromoteId"` // 角色突破ID
PromoteLevel int32 `csv:"PromoteLevel,omitempty"` // 突破等级
@@ -59,3 +59,11 @@ func (g *GameDataConfig) loadAvatarPromoteData() {
}
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"
)
// 角色技能配置表
// AvatarSkillData 角色技能配置表
type AvatarSkillData struct {
AvatarSkillId int32 `csv:"AvatarSkillId"` // ID
AbilityName string `csv:"AbilityName,omitempty"` // Ability名称
@@ -34,3 +33,11 @@ func (g *GameDataConfig) loadAvatarSkillData() {
}
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"
)
// 角色技能库配置表
// AvatarSkillDepotData 角色技能库配置表
type AvatarSkillDepotData struct {
AvatarSkillDepotId int32 `csv:"AvatarSkillDepotId"` // ID
EnergySkill int32 `csv:"EnergySkill,omitempty"` // 充能技能
@@ -127,7 +126,15 @@ func (g *GameDataConfig) loadAvatarSkillDepotData() {
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 {
return nil
}

View File

@@ -8,6 +8,7 @@ import (
"github.com/jszwec/csvutil"
)
// FetterData 角色资料解锁配置表
type FetterData struct {
FetterId int32 `csv:"FetterId"` // ID
AvatarId int32 `csv:"AvatarId"` // 角色ID
@@ -38,3 +39,15 @@ func (g *GameDataConfig) loadFetterData() {
}
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 // 卡牌技能
SceneDataMap map[int32]*SceneData // 场景
ScenePointMap map[int32]*ScenePoint // 场景传送点
SceneTagDataMap map[int32]*SceneTagData // 场景地图图
SceneMap map[int32]*Scene // 场景详情
SceneTagDataMap map[int32]*SceneTagData // 场景标
SceneDetailMap map[int32]*SceneDetail // 场景详情LUA配置数据
WorldAreaDataMap map[int32]*WorldAreaData // 世界区域
GatherDataMap map[int32]*GatherData // 采集物
GatherDataPointTypeMap map[int32]*GatherData // 采集物场景节点索引

View File

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

View File

@@ -8,6 +8,7 @@ import (
"github.com/jszwec/csvutil"
)
// GatherData 采集物配置表
type GatherData struct {
PointType int32 `csv:"PointType"` // 挂节点类型
GatherId int32 `csv:"GatherId"` // ID
@@ -32,3 +33,15 @@ func (g *GameDataConfig) loadGatherData() {
}
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"
)
// 角色卡牌配置表
// GCGCharData 角色卡牌配置表
type GCGCharData struct {
CharId int32 `csv:"CharId"` // ID
TagId1 int32 `csv:"TagId1,omitempty"` // 卡牌标签列表1
@@ -64,3 +63,11 @@ func (g *GameDataConfig) loadGCGCharData() {
}
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 (
"fmt"
"hk4e/pkg/logger"
"os"
"hk4e/pkg/logger"
"github.com/hjson/hjson-go/v4"
"github.com/jszwec/csvutil"
)
// 卡牌技能配置表
// GCGSkillData 卡牌技能配置表
type GCGSkillData struct {
SkillId int32 `csv:"SkillId"` // ID
ConfigJson string `csv:"ConfigJson,omitempty"` // 效果config
@@ -109,3 +109,11 @@ func (g *GameDataConfig) loadGCGSkillData() {
}
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 (
"fmt"
"hk4e/common/constant"
"hk4e/pkg/logger"
"strconv"
"strings"
"hk4e/common/constant"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil"
)
// ItemData 统一道具配置表
type ItemData struct {
// 公共字段
ItemId int32 `csv:"ItemId"` // ID
@@ -57,7 +59,7 @@ func (g *GameDataConfig) loadItemData() {
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, " ", ""), "#")
itemData.AwakenCoinCostList = make([]uint32, 0, len(tempCostList))
for _, s := range tempCostList {
@@ -74,3 +76,11 @@ func (g *GameDataConfig) loadItemData() {
}
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 (
"fmt"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil"
)
// 玩家等级配置表
// PlayerLevelData 玩家等级配置表
type PlayerLevelData struct {
Level int32 `csv:"Level"` // 等级
Exp int32 `csv:"Exp,omitempty"` // 升到下一级所需经验
@@ -29,3 +29,11 @@ func (g *GameDataConfig) loadPlayerLevelData() {
}
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 (
"fmt"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil"
)
// 奖励配置表
// RewardData 奖励配置表
type RewardData struct {
RewardID int32 `csv:"RewardID"` // 奖励ID
RewardItem1ID int32 `csv:"RewardItem1ID,omitempty"` // Reward道具1ID
@@ -66,3 +66,11 @@ func (g *GameDataConfig) loadRewardData() {
}
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"
)
// SceneData 场景配置表
type SceneData struct {
SceneId int32 `csv:"SceneId"` // ID
SceneType int32 `csv:"SceneType,omitempty"` // 类型
@@ -28,3 +29,11 @@ func (g *GameDataConfig) loadSceneData() {
}
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"
)
// 场景详情配置数据
const (
SceneGroupLoaderLimit = 4 // 加载文件的并发数 此操作很耗内存 调大之前请确保你的机器内存足够
)
type Scene struct {
type SceneDetail struct {
Id int32
SceneConfig *SceneConfig // 地图配置
BlockMap map[int32]*Block // 所有的区块
@@ -130,7 +132,7 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
}
func (g *GameDataConfig) loadScene() {
g.SceneMap = make(map[int32]*Scene)
g.SceneDetailMap = make(map[int32]*SceneDetail)
sceneLuaPrefix := g.luaPrefix + "scene/"
for _, sceneData := range g.SceneDataMap {
sceneId := sceneData.SceneId
@@ -141,17 +143,17 @@ func (g *GameDataConfig) loadScene() {
continue
}
luaState := fixLuaState(string(mainLuaData))
scene := new(Scene)
scene.Id = sceneId
sceneDetail := new(SceneDetail)
sceneDetail.Id = sceneId
// scene_config
scene.SceneConfig = new(SceneConfig)
ok := parseLuaTableToObject[*SceneConfig](luaState, "scene_config", scene.SceneConfig)
sceneDetail.SceneConfig = new(SceneConfig)
ok := parseLuaTableToObject[*SceneConfig](luaState, "scene_config", sceneDetail.SceneConfig)
if !ok {
logger.Error("get scene_config object error, sceneId: %v", sceneId)
luaState.Close()
continue
}
scene.BlockMap = make(map[int32]*Block)
sceneDetail.BlockMap = make(map[int32]*Block)
// blocks
blockIdList := make([]int32, 0)
ok = parseLuaTableToObject[*[]int32](luaState, "blocks", &blockIdList)
@@ -205,9 +207,9 @@ func (g *GameDataConfig) loadScene() {
}()
}
wg.Wait()
scene.BlockMap[block.Id] = block
sceneDetail.BlockMap[block.Id] = block
}
g.SceneMap[sceneId] = scene
g.SceneDetailMap[sceneId] = sceneDetail
}
sceneCount := 0
blockCount := 0
@@ -215,7 +217,7 @@ func (g *GameDataConfig) loadScene() {
monsterCount := 0
npcCount := 0
gadgetCount := 0
for _, scene := range g.SceneMap {
for _, scene := range g.SceneDetailMap {
for _, block := range scene.BlockMap {
for _, group := range block.GroupMap {
monsterCount += len(group.MonsterList)
@@ -231,11 +233,19 @@ func (g *GameDataConfig) loadScene() {
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)
npcList := make([]*Npc, 0)
gadgetList := make([]*Gadget, 0)
sceneConfig, exist := g.SceneMap[sceneId]
sceneConfig, exist := CONF.SceneDetailMap[sceneId]
if !exist {
return nil, nil, nil, false
}

View File

@@ -8,6 +8,8 @@ import (
"hk4e/pkg/logger"
)
// 场景传送点配置数据
// 传送点类型
const (
PointTypeStrTransPointNormal = "TransPointNormal"
@@ -126,3 +128,19 @@ func (g *GameDataConfig) loadScenePoint() {
}
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"
)
// SceneTagData 场景标签配置表
type SceneTagData struct {
SceneTagId int32 `csv:"SceneTagId"` // ID
SceneId int32 `csv:"SceneId,omitempty"` // 场景ID
@@ -28,3 +29,11 @@ func (g *GameDataConfig) loadSceneTagData() {
}
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 (
"fmt"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil"
)
// 武器等级配置表
// WeaponLevelData 武器等级配置表
type WeaponLevelData struct {
Level int32 `csv:"Level"` // 等级
ExpByStar1 int32 `csv:"ExpByStar1,omitempty"` // 武器升级经验1
@@ -42,3 +42,11 @@ func (g *GameDataConfig) loadWeaponLevelData() {
}
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 (
"fmt"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil"
)
// 武器突破配置表
// WeaponPromoteData 武器突破配置表
type WeaponPromoteData struct {
PromoteId int32 `csv:"PromoteId"` // 武器突破ID
PromoteLevel int32 `csv:"PromoteLevel,omitempty"` // 突破等级
@@ -56,3 +56,11 @@ func (g *GameDataConfig) loadWeaponPromoteData() {
}
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"
)
// WorldAreaData 世界区域配置表
type WorldAreaData struct {
WorldAreaId int32 `csv:"WorldAreaId"` // 条目ID
SceneId int32 `csv:"SceneId,omitempty"` // 场景ID
@@ -30,3 +31,11 @@ func (g *GameDataConfig) loadWorldAreaData() {
}
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"
"hk4e/common/config"
"hk4e/common/constant"
"hk4e/common/mq"
"hk4e/common/rpc"
"hk4e/gdconf"
@@ -72,7 +71,6 @@ func Run(ctx context.Context, configFile string) error {
logger.InitLogger("gs_" + APPID)
logger.Warn("gs start, appid: %v, gsid: %v", APPID, GSID)
constant.InitConstant()
gdconf.InitGameDataConfig()
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)
return
}
GAME_MANAGER.TeleportPlayer(player, constant.EnterReasonConst.Gm, sceneId, &model.Vector{
GAME_MANAGER.TeleportPlayer(player, constant.EnterReasonGm, sceneId, &model.Vector{
X: posX,
Y: posY,
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++ {
uid := 1000000 + uint32(i)
avatarId := uint32(0)
for _, avatarData := range gdconf.CONF.AvatarDataMap {
for _, avatarData := range gdconf.GetAvatarDataMap() {
avatarId = uint32(avatarData.AvatarId)
break
}
@@ -175,7 +175,7 @@ func (g *GameManager) gameMainLoop() {
motherfuckerPlayerInfo, _ := json.Marshal(SELF)
logger.Error("the motherfucker player info: %v", string(motherfuckerPlayerInfo))
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()
for _, player := range userList {
g.DisconnectPlayer(player.PlayerID, kcp.EnetServerShutdown)
g.KickPlayer(player.PlayerID, kcp.EnetServerShutdown)
}
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)
}
func (g *GameManager) ReconnectPlayer(userId uint32) {
func (g *GameManager) ReLoginPlayer(userId uint32) {
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)
if player == nil {
return
@@ -391,7 +391,6 @@ func (g *GameManager) DisconnectPlayer(userId uint32, reason uint32) {
KickReason: reason,
},
})
// g.SendMsg(cmd.ServerDisconnectClientNotify, userId, 0, new(proto.ServerDisconnectClientNotify))
}
func (g *GameManager) GetClientProtoObjByName(protoObjName string) pb.Message {

View File

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

View File

@@ -16,7 +16,7 @@ import (
func (g *GameManager) GetAllAvatarDataConfig() 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 {
// 跳过无效角色
continue
@@ -49,8 +49,8 @@ func (g *GameManager) AddUserAvatar(userId uint32, avatarId uint32) {
player.AddAvatar(avatarId)
// 添加初始武器
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatarId)]
if !ok {
avatarDataConfig := gdconf.GetAvatarDataById(int32(avatarId))
if avatarDataConfig == nil {
logger.Error("config is nil, itemId: %v", avatarId)
return
}
@@ -80,8 +80,8 @@ func (g *GameManager) AvatarPromoteGetRewardReq(player *model.Player, payloadMsg
return
}
// 获取角色配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)]
if !ok {
avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if avatarDataConfig == nil {
logger.Error("avatar config error, avatarId: %v", avatar.AvatarId)
g.SendError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{})
return
@@ -93,8 +93,8 @@ func (g *GameManager) AvatarPromoteGetRewardReq(player *model.Player, payloadMsg
return
}
// 获取奖励配置表
rewardConfig, ok := gdconf.CONF.RewardDataMap[int32(avatarDataConfig.PromoteRewardMap[req.PromoteLevel])]
if !ok {
rewardConfig := gdconf.GetRewardDataById(int32(avatarDataConfig.PromoteRewardMap[req.PromoteLevel]))
if rewardConfig == nil {
logger.Error("reward config error, rewardId: %v", avatarDataConfig.PromoteRewardMap[req.PromoteLevel])
g.SendError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{})
return
@@ -131,22 +131,15 @@ func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Messa
return
}
// 获取角色配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)]
if !ok {
avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if avatarDataConfig == nil {
logger.Error("avatar config error, avatarId: %v", avatar.AvatarId)
g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{})
return
}
// 获取角色突破配置表
avatarPromoteDataMap, ok := gdconf.CONF.AvatarPromoteDataMap[avatarDataConfig.PromoteId]
if !ok {
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 {
avatarPromoteConfig := gdconf.GetAvatarPromoteDataByIdAndLevel(avatarDataConfig.PromoteId, int32(avatar.Promote))
if avatarPromoteConfig == nil {
logger.Error("avatar promote config error, promoteLevel: %v", avatar.Promote)
g.SendError(cmd.AvatarPromoteRsp, player, &proto.AvatarPromoteRsp{})
return
@@ -158,8 +151,8 @@ func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Messa
return
}
// 获取角色突破下一级的配置表
avatarPromoteConfig, ok = avatarPromoteDataMap[int32(avatar.Promote+1)]
if !ok {
avatarPromoteConfig = gdconf.GetAvatarPromoteDataByIdAndLevel(avatarDataConfig.PromoteId, int32(avatar.Promote+1))
if avatarPromoteConfig == nil {
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)
return
@@ -175,7 +168,7 @@ func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Messa
}
// 消耗列表添加摩拉的消耗
costItemList = append(costItemList, &UserItem{
ItemId: constant.ItemConstantConst.SCOIN,
ItemId: constant.ITEM_ID_SCOIN,
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 {
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_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) {
logger.Error("player level not enough, level: %v", player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL])
if player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL] < uint32(avatarPromoteConfig.MinPlayerLevel) {
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)
return
}
@@ -230,9 +223,9 @@ func (g *GameManager) AvatarUpgradeReq(player *model.Player, payloadMsg pb.Messa
return
}
// 获取经验书物品配置表
itemDataConfig, ok := gdconf.CONF.ItemDataMap[int32(req.ItemId)]
if !ok {
logger.Error("item data config error, itemId: %v", constant.ItemConstantConst.SCOIN)
itemDataConfig := gdconf.GetItemDataById(int32(req.ItemId))
if itemDataConfig == nil {
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)
return
}
@@ -246,28 +239,21 @@ func (g *GameManager) AvatarUpgradeReq(player *model.Player, payloadMsg pb.Messa
// 角色获得的经验
expCount := uint32(itemParam) * req.Count
// 摩拉数量是否足够
if player.GetItemCount(constant.ItemConstantConst.SCOIN) < expCount/5 {
logger.Error("item count not enough, itemId: %v", constant.ItemConstantConst.SCOIN)
if player.GetItemCount(constant.ITEM_ID_SCOIN) < expCount/5 {
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)
return
}
// 获取角色配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)]
if !ok {
avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if avatarDataConfig == nil {
logger.Error("avatar config error, avatarId: %v", avatar.AvatarId)
g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{})
return
}
// 获取角色突破配置表
avatarPromoteDataMap, ok := gdconf.CONF.AvatarPromoteDataMap[avatarDataConfig.PromoteId]
if !ok {
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 {
avatarPromoteConfig := gdconf.GetAvatarPromoteDataByIdAndLevel(avatarDataConfig.PromoteId, int32(avatar.Promote))
if avatarPromoteConfig == nil {
logger.Error("avatar promote config error, promoteLevel: %v", avatar.Promote)
g.SendError(cmd.AvatarUpgradeRsp, player, &proto.AvatarUpgradeRsp{})
return
@@ -285,7 +271,7 @@ func (g *GameManager) AvatarUpgradeReq(player *model.Player, payloadMsg pb.Messa
ChangeCount: req.Count,
},
{
ItemId: constant.ItemConstantConst.SCOIN,
ItemId: constant.ITEM_ID_SCOIN,
ChangeCount: expCount / 5,
},
})
@@ -312,20 +298,14 @@ func (g *GameManager) AvatarUpgradeReq(player *model.Player, payloadMsg pb.Messa
// UpgradePlayerAvatar 玩家角色升级
func (g *GameManager) UpgradePlayerAvatar(player *model.Player, avatar *model.Avatar, expCount uint32) {
// 获取角色配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)]
if !ok {
avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if avatarDataConfig == nil {
logger.Error("avatar config error, avatarId: %v", avatar.AvatarId)
return
}
// 获取角色突破配置表
avatarPromoteDataMap, ok := gdconf.CONF.AvatarPromoteDataMap[avatarDataConfig.PromoteId]
if !ok {
logger.Error("avatar promote config error, promoteId: %v", avatarDataConfig.PromoteId)
return
}
// 获取角色突破等级对应的配置表
avatarPromoteConfig, ok := avatarPromoteDataMap[int32(avatar.Promote)]
if !ok {
avatarPromoteConfig := gdconf.GetAvatarPromoteDataByIdAndLevel(avatarDataConfig.PromoteId, int32(avatar.Promote))
if avatarPromoteConfig == nil {
logger.Error("avatar promote config error, promoteLevel: %v", avatar.Promote)
return
}
@@ -334,8 +314,8 @@ func (g *GameManager) UpgradePlayerAvatar(player *model.Player, avatar *model.Av
// 角色升级
for {
// 获取角色等级配置表
avatarLevelConfig, ok := gdconf.CONF.AvatarLevelDataMap[int32(avatar.Level)]
if !ok {
avatarLevelConfig := gdconf.GetAvatarLevelDataByLevel(int32(avatar.Level))
if avatarLevelConfig == nil {
// 获取不到代表已经到达最大等级
break
}
@@ -366,15 +346,15 @@ func (g *GameManager) PacketAvatarPropNotify(avatar *model.Avatar) *proto.Avatar
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
}
@@ -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 {
itemDataConfig, ok := gdconf.CONF.ItemDataMap[int32(weapon.ItemId)]
if !ok {
itemDataConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if itemDataConfig == nil {
logger.Error("item data config error, itemId: %v", weapon.ItemId)
return new(proto.AvatarEquipChangeNotify)
}
@@ -547,9 +527,9 @@ func (g *GameManager) PacketAvatarEquipChangeNotify(avatar *model.Avatar, weapon
EquipGuid: weapon.Guid,
}
switch itemDataConfig.Type {
case int32(constant.ItemTypeConst.ITEM_WEAPON):
avatarEquipChangeNotify.EquipType = uint32(constant.EquipTypeConst.EQUIP_WEAPON)
case int32(constant.ItemTypeConst.ITEM_RELIQUARY):
case int32(constant.ITEM_TYPE_WEAPON):
avatarEquipChangeNotify.EquipType = uint32(constant.EQUIP_TYPE_WEAPON)
case int32(constant.ITEM_TYPE_RELIQUARY):
avatarEquipChangeNotify.EquipType = uint32(itemDataConfig.ReliquaryType)
}
avatarEquipChangeNotify.Weapon = &proto.SceneWeaponInfo{
@@ -567,8 +547,8 @@ func (g *GameManager) PacketAvatarEquipTakeOffNotify(avatar *model.Avatar, weapo
avatarEquipChangeNotify := &proto.AvatarEquipChangeNotify{
AvatarGuid: avatar.Guid,
}
itemDataConfig, exist := gdconf.CONF.ItemDataMap[int32(weapon.ItemId)]
if exist {
itemDataConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if itemDataConfig != nil {
avatarEquipChangeNotify.EquipType = uint32(itemDataConfig.Type)
}
return avatarEquipChangeNotify
@@ -605,28 +585,28 @@ func (g *GameManager) PacketAvatarInfo(avatar *model.Avatar) *proto.AvatarInfo {
AvatarId: avatar.AvatarId,
Guid: avatar.Guid,
PropMap: map[uint32]*proto.PropValue{
uint32(constant.PlayerPropertyConst.PROP_LEVEL): {
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL),
uint32(constant.PLAYER_PROP_LEVEL): {
Type: uint32(constant.PLAYER_PROP_LEVEL),
Val: int64(avatar.Level),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Level)},
},
uint32(constant.PlayerPropertyConst.PROP_EXP): {
Type: uint32(constant.PlayerPropertyConst.PROP_EXP),
uint32(constant.PLAYER_PROP_EXP): {
Type: uint32(constant.PLAYER_PROP_EXP),
Val: int64(avatar.Exp),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Exp)},
},
uint32(constant.PlayerPropertyConst.PROP_BREAK_LEVEL): {
Type: uint32(constant.PlayerPropertyConst.PROP_BREAK_LEVEL),
uint32(constant.PLAYER_PROP_BREAK_LEVEL): {
Type: uint32(constant.PLAYER_PROP_BREAK_LEVEL),
Val: int64(avatar.Promote),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Promote)},
},
uint32(constant.PlayerPropertyConst.PROP_SATIATION_VAL): {
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_VAL),
uint32(constant.PLAYER_PROP_SATIATION_VAL): {
Type: uint32(constant.PLAYER_PROP_SATIATION_VAL),
Val: int64(avatar.Satiation),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Satiation)},
},
uint32(constant.PlayerPropertyConst.PROP_SATIATION_PENALTY_TIME): {
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_PENALTY_TIME),
uint32(constant.PLAYER_PROP_SATIATION_PENALTY_TIME): {
Type: uint32(constant.PLAYER_PROP_SATIATION_PENALTY_TIME),
Val: 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 {
pbAvatar.FetterInfo.FetterList = append(pbAvatar.FetterInfo.FetterList, &proto.FetterData{
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{
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
}
// 玩家增加冒险阅历
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_EXP] += expCount
player.PropertiesMap[constant.PLAYER_PROP_PLAYER_EXP] += expCount
// 玩家升级
for {
playerLevel := player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL]
playerLevel := player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL]
// 读取玩家等级配置表
playerLevelConfig, ok := gdconf.CONF.PlayerLevelDataMap[int32(playerLevel)]
if !ok {
playerLevelConfig := gdconf.GetPlayerLevelDataById(int32(playerLevel))
if playerLevelConfig == nil {
// 获取不到代表已经到达最大等级
break
}
// 玩家冒险阅历不足则跳出循环
if player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_EXP] < uint32(playerLevelConfig.Exp) {
if player.PropertiesMap[constant.PLAYER_PROP_PLAYER_EXP] < uint32(playerLevelConfig.Exp) {
break
}
// 玩家增加冒险等阶
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL]++
player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_EXP] -= uint32(playerLevelConfig.Exp)
player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL]++
player.PropertiesMap[constant.PLAYER_PROP_PLAYER_EXP] -= uint32(playerLevelConfig.Exp)
// 更新玩家属性
playerPropNotify := &proto.PlayerPropNotify{
PropMap: make(map[uint32]*proto.PropValue),
}
playerPropNotify.PropMap[uint32(constant.PlayerPropertyConst.PROP_PLAYER_LEVEL)] = &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_PLAYER_LEVEL),
Val: int64(player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL]),
playerPropNotify.PropMap[uint32(constant.PLAYER_PROP_PLAYER_LEVEL)] = &proto.PropValue{
Type: uint32(constant.PLAYER_PROP_PLAYER_LEVEL),
Val: int64(player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL]),
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{
Type: uint32(constant.PlayerPropertyConst.PROP_PLAYER_EXP),
Val: int64(player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_EXP]),
playerPropNotify.PropMap[uint32(constant.PLAYER_PROP_PLAYER_EXP)] = &proto.PropValue{
Type: uint32(constant.PLAYER_PROP_PLAYER_EXP),
Val: int64(player.PropertiesMap[constant.PLAYER_PROP_PLAYER_EXP]),
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)

View File

@@ -139,12 +139,12 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p
currHp := float32(0)
fightProp := target.GetFightProp()
if fightProp != nil {
currHp = fightProp[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)]
currHp = fightProp[uint32(constant.FIGHT_PROP_CUR_HP)]
currHp -= damage
if currHp < 0 {
currHp = 0
}
fightProp[uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP)] = currHp
fightProp[uint32(constant.FIGHT_PROP_CUR_HP)] = currHp
}
entityFightPropUpdateNotify := &proto.EntityFightPropUpdateNotify{
FightPropMap: fightProp,
@@ -152,7 +152,7 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p
}
g.SendToWorldA(world, cmd.EntityFightPropUpdateNotify, player.ClientSeq, entityFightPropUpdateNotify)
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)
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))
// 玩家进入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决斗请求
@@ -392,8 +392,8 @@ func (g *GameManager) PacketGCGSkillPreviewNotify(game *GCGGame, controller *GCG
// SkillPreviewList
for _, skillInfo := range selectedCharCard.skillList {
// 读取卡牌技能配置表
gcgSkillConfig, ok := gdconf.CONF.GCGSkillDataMap[int32(skillInfo.skillId)]
if !ok {
gcgSkillConfig := gdconf.GetGCGSkillDataById(int32(skillInfo.skillId))
if gcgSkillConfig == nil {
logger.Error("gcg skill config error, skillId: %v", skillInfo.skillId)
return new(proto.GCGSkillPreviewNotify)
}
@@ -421,10 +421,10 @@ func (g *GameManager) PacketGCGSkillPreviewNotify(game *GCGGame, controller *GCG
TokenChangeList: []*proto.GCGSkillPreviewTokenInfo{
{
// Token类型
TokenType: constant.GCGTokenConst.TOKEN_CUR_ELEM,
TokenType: constant.GCG_TOKEN_TYPE_CUR_ELEM,
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 {
allItemDataConfig := make(map[int32]*gdconf.ItemData)
for itemId, itemData := range gdconf.CONF.ItemDataMap {
if uint16(itemData.Type) == constant.ItemTypeConst.ITEM_WEAPON {
for itemId, itemData := range gdconf.GetItemDataMap() {
if uint16(itemData.Type) == constant.ITEM_TYPE_WEAPON {
// 排除武器
continue
}
if uint16(itemData.Type) == constant.ItemTypeConst.ITEM_RELIQUARY {
if uint16(itemData.Type) == constant.ITEM_TYPE_RELIQUARY {
// 排除圣遗物
continue
}
@@ -61,10 +61,10 @@ func (g *GameManager) AddUserItem(userId uint32, itemList []*UserItem, isHint bo
for _, userItem := range itemList {
// 物品为虚拟物品则另外处理
switch userItem.ItemId {
case constant.ItemConstantConst.RESIN, constant.ItemConstantConst.LEGENDARY_KEY, constant.ItemConstantConst.HCOIN,
constant.ItemConstantConst.SCOIN, constant.ItemConstantConst.MCOIN, constant.ItemConstantConst.HOME_COIN:
case constant.ITEM_ID_RESIN, constant.ITEM_ID_LEGENDARY_KEY, constant.ITEM_ID_HCOIN, constant.ITEM_ID_SCOIN,
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 {
continue
}
@@ -78,7 +78,7 @@ func (g *GameManager) AddUserItem(userId uint32, itemList []*UserItem, isHint bo
Ival: int64(player.PropertiesMap[prop]),
},
}
case constant.ItemConstantConst.PLAYER_EXP:
case constant.ITEM_ID_PLAYER_EXP:
// 冒险阅历
g.AddUserPlayerExp(userId, userItem.ChangeCount)
default:
@@ -110,7 +110,7 @@ func (g *GameManager) AddUserItem(userId uint32, itemList []*UserItem, isHint bo
if isHint {
if hintReason == 0 {
hintReason = constant.ActionReasonConst.SubfieldDrop
hintReason = constant.ActionReasonSubfieldDrop
}
itemAddHintNotify := &proto.ItemAddHintNotify{
Reason: uint32(hintReason),
@@ -139,10 +139,10 @@ func (g *GameManager) CostUserItem(userId uint32, itemList []*UserItem) {
for _, userItem := range itemList {
// 物品为虚拟物品则另外处理
switch userItem.ItemId {
case constant.ItemConstantConst.RESIN, constant.ItemConstantConst.LEGENDARY_KEY, constant.ItemConstantConst.HCOIN,
constant.ItemConstantConst.SCOIN, constant.ItemConstantConst.MCOIN, constant.ItemConstantConst.HOME_COIN:
case constant.ITEM_ID_RESIN, constant.ITEM_ID_LEGENDARY_KEY, constant.ITEM_ID_HCOIN, constant.ITEM_ID_SCOIN,
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 {
continue
}
@@ -160,7 +160,7 @@ func (g *GameManager) CostUserItem(userId uint32, itemList []*UserItem) {
Ival: int64(player.PropertiesMap[prop]),
},
}
case constant.ItemConstantConst.PLAYER_EXP:
case constant.ITEM_ID_PLAYER_EXP:
// 冒险阅历应该也没人会去扣吧?
default:
// 普通物品直接扣除

View File

@@ -9,7 +9,6 @@ import (
"hk4e/gdconf"
"hk4e/gs/model"
"hk4e/pkg/logger"
"hk4e/pkg/reflection"
"hk4e/protocol/cmd"
"hk4e/protocol/proto"
@@ -198,19 +197,18 @@ func (g *GameManager) PacketPlayerStoreNotify(player *model.Player) *proto.Playe
StoreType: proto.StoreType_STORE_PACK,
WeightLimit: 30000,
}
itemDataMapConfig := gdconf.CONF.ItemDataMap
for _, weapon := range player.WeaponMap {
pbItem := &proto.Item{
ItemId: weapon.ItemId,
Guid: weapon.Guid,
Detail: nil,
}
itemData, ok := itemDataMapConfig[int32(weapon.ItemId)]
if !ok {
logger.Error("config is nil, itemId: %v", weapon.ItemId)
return nil
itemDataConfig := gdconf.GetItemDataById(int32(weapon.ItemId))
if itemDataConfig == nil {
logger.Error("get item data config is nil, itemId: %v", weapon.ItemId)
continue
}
if uint16(itemData.Type) != constant.ItemTypeConst.ITEM_WEAPON {
if uint16(itemDataConfig.Type) != constant.ITEM_TYPE_WEAPON {
continue
}
affixMap := make(map[uint32]uint32)
@@ -238,7 +236,12 @@ func (g *GameManager) PacketPlayerStoreNotify(player *model.Player) *proto.Playe
Guid: reliquary.Guid,
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
}
pbItem.Detail = &proto.Item_Equip{
@@ -263,8 +266,12 @@ func (g *GameManager) PacketPlayerStoreNotify(player *model.Player) *proto.Playe
Guid: item.Guid,
Detail: nil,
}
itemDataConfig := itemDataMapConfig[int32(item.ItemId)]
if itemDataConfig != nil && uint16(itemDataConfig.Type) == constant.ItemTypeConst.ITEM_FURNITURE {
itemDataConfig := gdconf.GetItemDataById(int32(item.ItemId))
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{
Furniture: &proto.Furniture{
Count: item.Count,
@@ -315,10 +322,9 @@ func (g *GameManager) PacketOpenStateUpdateNotify() *proto.OpenStateUpdateNotify
openStateUpdateNotify := &proto.OpenStateUpdateNotify{
OpenStateMap: make(map[uint32]uint32),
}
openStateConstMap := reflection.ConvStructToMap(constant.OpenStateConst)
// 先暂时开放全部功能模块
for _, v := range openStateConstMap {
openStateUpdateNotify.OpenStateMap[uint32(v.(uint16))] = 1
for _, v := range constant.ALL_OPEN_STATE {
openStateUpdateNotify.OpenStateMap[uint32(v)] = 1
}
return openStateUpdateNotify
}
@@ -342,31 +348,17 @@ func (g *GameManager) CreatePlayer(userId uint32, nickName string, mainCharAvata
player.SceneId = 3
player.PropertiesMap = make(map[uint16]uint32)
// 初始化所有属性
propList := reflection.ConvStructToMap(constant.PlayerPropertyConst)
for fieldName, fieldValue := range propList {
// 排除角色相关的属性
if fieldName == "PROP_EXP" ||
fieldName == "PROP_BREAK_LEVEL" ||
fieldName == "PROP_SATIATION_VAL" ||
fieldName == "PROP_SATIATION_PENALTY_TIME" ||
fieldName == "PROP_LEVEL" {
continue
}
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.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL] = 1
player.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL] = 0
player.PropertiesMap[constant.PLAYER_PROP_IS_SPRING_AUTO_USE] = 1
player.PropertiesMap[constant.PLAYER_PROP_SPRING_AUTO_USE_PERCENT] = 100
player.PropertiesMap[constant.PLAYER_PROP_IS_FLYABLE] = 1
player.PropertiesMap[constant.PLAYER_PROP_IS_TRANSFERABLE] = 1
player.PropertiesMap[constant.PLAYER_PROP_MAX_STAMINA] = 24000
player.PropertiesMap[constant.PLAYER_PROP_CUR_PERSIST_STAMINA] = 24000
player.PropertiesMap[constant.PLAYER_PROP_PLAYER_RESIN] = 160
player.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE] = 2
player.PropertiesMap[constant.PLAYER_PROP_IS_MP_MODE_AVAILABLE] = 1
player.FlyCloakList = make([]uint32, 0)
player.FlyCloakList = append(player.FlyCloakList, 140001)
@@ -411,8 +403,8 @@ func (g *GameManager) CreatePlayer(userId uint32, nickName string, mainCharAvata
// 添加选定的主角
player.AddAvatar(mainCharAvatarId)
// 添加初始武器
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(mainCharAvatarId)]
if !ok {
avatarDataConfig := gdconf.GetAvatarDataById(int32(mainCharAvatarId))
if avatarDataConfig == nil {
logger.Error("config is nil, mainCharAvatarId: %v", mainCharAvatarId)
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)
req := payloadMsg.(*proto.SceneTransToPointReq)
scenePointConfig, exist := gdconf.CONF.ScenePointMap[int32(req.SceneId)]
if !exist {
g.SendError(cmd.SceneTransToPointRsp, player, &proto.SceneTransToPointRsp{})
return
}
pointConfig, exist := scenePointConfig.PointMap[int32(req.PointId)]
if !exist {
pointDataConfig := gdconf.GetScenePointBySceneIdAndPointId(int32(req.SceneId), int32(req.PointId))
if pointDataConfig == nil {
g.SendError(cmd.SceneTransToPointRsp, player, &proto.SceneTransToPointRsp{})
return
}
// 传送玩家
sceneId := req.SceneId
g.TeleportPlayer(player, constant.EnterReasonConst.TransPoint, sceneId, &model.Vector{
X: pointConfig.TranPos.X,
Y: pointConfig.TranPos.Y,
Z: pointConfig.TranPos.Z,
g.TeleportPlayer(player, constant.EnterReasonTransPoint, sceneId, &model.Vector{
X: pointDataConfig.TranPos.X,
Y: pointDataConfig.TranPos.Y,
Z: pointDataConfig.TranPos.Z,
}, &model.Vector{
X: pointConfig.TranRot.X,
Y: pointConfig.TranRot.Y,
Z: pointConfig.TranRot.Z,
X: pointDataConfig.TranRot.X,
Y: pointDataConfig.TranRot.Y,
Z: pointDataConfig.TranRot.Z,
}, 0)
sceneTransToPointRsp := &proto.SceneTransToPointRsp{
@@ -60,7 +55,7 @@ func (g *GameManager) MarkMapReq(player *model.Player, payloadMsg pb.Message) {
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),
Y: float64(posYInt),
Z: float64(req.Mark.Pos.Z),
@@ -107,7 +102,7 @@ func (g *GameManager) TeleportPlayer(player *model.Player, enterReason uint16, s
var enterType proto.EnterType
switch enterReason {
case constant.EnterReasonConst.DungeonEnter:
case constant.EnterReasonDungeonEnter:
logger.Debug("player dungeon scene, scene: %v, pos: %v", player.SceneId, player.Pos)
enterType = proto.EnterType_ENTER_DUNGEON
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)
req := payloadMsg.(*proto.GetScenePointReq)
scenePointConfig, exist := gdconf.CONF.ScenePointMap[int32(req.SceneId)]
if !exist {
scenePointMapConfig := gdconf.GetScenePointMapBySceneId(int32(req.SceneId))
if scenePointMapConfig == nil {
return
}
@@ -136,7 +131,7 @@ func (g *GameManager) GetScenePointReq(player *model.Player, payloadMsg pb.Messa
SceneId: req.SceneId,
}
areaIdMap := make(map[uint32]bool)
for _, worldAreaData := range gdconf.CONF.WorldAreaDataMap {
for _, worldAreaData := range gdconf.GetWorldAreaDataMap() {
if uint32(worldAreaData.SceneId) == req.SceneId {
areaIdMap[uint32(worldAreaData.AreaId1)] = true
}
@@ -146,7 +141,7 @@ func (g *GameManager) GetScenePointReq(player *model.Player, payloadMsg pb.Messa
areaList = append(areaList, areaId)
}
getScenePointRsp.UnlockAreaList = areaList
for _, pointData := range scenePointConfig.PointMap {
for _, pointData := range scenePointMapConfig {
if pointData.PointType == gdconf.PointTypeOther {
continue
}
@@ -163,7 +158,7 @@ func (g *GameManager) GetSceneAreaReq(player *model.Player, payloadMsg pb.Messag
SceneId: req.SceneId,
}
areaIdMap := make(map[uint32]bool)
for _, worldAreaData := range gdconf.CONF.WorldAreaDataMap {
for _, worldAreaData := range gdconf.GetWorldAreaDataMap() {
if uint32(worldAreaData.SceneId) == req.SceneId {
areaIdMap[uint32(worldAreaData.AreaId1)] = true
}

View File

@@ -212,8 +212,8 @@ func (g *GameManager) UserApplyEnterWorld(player *model.Player, targetUid uint32
ApplyPlayerOnlineInfo: &mq.UserBaseInfo{
UserId: player.PlayerID,
Nickname: player.NickName,
PlayerLevel: player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL],
MpSettingType: uint8(player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]),
PlayerLevel: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: uint8(player.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: player.NameCard,
Signature: player.Signature,
HeadImageId: player.HeadImage,
@@ -235,7 +235,7 @@ func (g *GameManager) UserApplyEnterWorld(player *model.Player, targetUid uint32
applyFailNotify(proto.PlayerApplyEnterMpResultNotify_PLAYER_NOT_IN_PLAYER_WORLD)
return
}
mpSetting := targetPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]
mpSetting := targetPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]
if mpSetting == 0 {
// 房主玩家没开权限
applyFailNotify(proto.PlayerApplyEnterMpResultNotify_SCENE_CANNOT_ENTER)
@@ -340,7 +340,7 @@ func (g *GameManager) HostEnterMpWorld(hostPlayer *model.Player, otherUid uint32
hostPlayer,
hostPlayer,
proto.EnterType_ENTER_GOTO,
uint32(constant.EnterReasonConst.HostFromSingleToMp),
uint32(constant.EnterReasonHostFromSingleToMp),
hostPlayer.SceneId,
hostPlayer.Pos,
0,
@@ -368,7 +368,7 @@ func (g *GameManager) UserLeaveWorld(player *model.Player) bool {
return false
}
}
g.ReconnectPlayer(player.PlayerID)
g.ReLoginPlayer(player.PlayerID)
return true
}
@@ -458,8 +458,8 @@ func (g *GameManager) UpdateWorldPlayerInfo(hostWorld *World, excludePlayer *mod
onlinePlayerInfo := &proto.OnlinePlayerInfo{
Uid: subWorldPlayer.PlayerID,
Nickname: subWorldPlayer.NickName,
PlayerLevel: subWorldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(subWorldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]),
PlayerLevel: subWorldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(subWorldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: subWorldPlayer.NameCard,
Signature: subWorldPlayer.Signature,
ProfilePicture: &proto.ProfilePicture{AvatarId: subWorldPlayer.HeadImage},
@@ -483,8 +483,8 @@ func (g *GameManager) UpdateWorldPlayerInfo(hostWorld *World, excludePlayer *mod
onlinePlayerInfo := &proto.OnlinePlayerInfo{
Uid: worldPlayer.PlayerID,
Nickname: worldPlayer.NickName,
PlayerLevel: worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]),
PlayerLevel: worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: worldPlayer.NameCard,
Signature: worldPlayer.Signature,
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)
return
}
mpSetting := hostPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]
mpSetting := hostPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]
if mpSetting == 0 {
// 房主玩家没开权限
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{
Uid: worldPlayer.PlayerID,
Nickname: worldPlayer.NickName,
PlayerLevel: worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]),
PlayerLevel: worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: worldPlayer.NameCard,
Signature: worldPlayer.Signature,
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 _, sceneTagDataConfig := range gdconf.CONF.SceneTagDataMap {
for _, sceneTagDataConfig := range gdconf.GetSceneTagDataMap() {
if uint32(sceneTagDataConfig.SceneId) == info.SceneId {
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{
WeatherAreaId: 0,
ClimateType: uint32(constant.ClimateTypeConst.CLIMATE_SUNNY),
ClimateType: uint32(constant.CLIMATE_TYPE_SUNNY),
}
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{
Uid: worldPlayer.PlayerID,
Nickname: worldPlayer.NickName,
PlayerLevel: worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_MP_SETTING_TYPE]),
PlayerLevel: worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_LEVEL],
MpSettingType: proto.MpSettingType(worldPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_MP_SETTING_TYPE]),
NameCardId: worldPlayer.NameCard,
Signature: worldPlayer.Signature,
ProfilePicture: &proto.ProfilePicture{AvatarId: worldPlayer.HeadImage},
@@ -284,7 +284,7 @@ func (g *GameManager) EnterSceneDoneReq(player *model.Player, payloadMsg pb.Mess
sceneAreaWeatherNotify := &proto.SceneAreaWeatherNotify{
WeatherAreaId: 0,
ClimateType: uint32(constant.ClimateTypeConst.CLIMATE_SUNNY),
ClimateType: uint32(constant.CLIMATE_TYPE_SUNNY),
}
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)
// 70500000并不是实际的装置id 根据节点类型对应采集物配置表
if gadget.PointType != 0 && gadget.GadgetId == 70500000 {
gatherDataConfig, exist := gdconf.CONF.GatherDataPointTypeMap[gadget.PointType]
if !exist {
gatherDataConfig := gdconf.GetGatherDataByPointType(gadget.PointType)
if gatherDataConfig == nil {
return 0
}
return scene.CreateEntityGadgetGather(&model.Vector{
@@ -420,8 +420,8 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyLogin(player *model.Player, en
Type: enterType,
TargetUid: player.PlayerID,
EnterSceneToken: player.EnterSceneToken,
WorldLevel: player.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL],
EnterReason: uint32(constant.EnterReasonConst.Login),
WorldLevel: player.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL],
EnterReason: uint32(constant.EnterReasonLogin),
IsFirstLoginEnterScene: true,
WorldType: 1,
SceneTagIdList: make([]uint32, 0),
@@ -430,7 +430,7 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyLogin(player *model.Player, en
strconv.Itoa(int(player.PlayerID)) + "-" +
strconv.Itoa(int(time.Now().Unix())) + "-" +
"296359"
for _, sceneTagDataConfig := range gdconf.CONF.SceneTagDataMap {
for _, sceneTagDataConfig := range gdconf.GetSceneTagDataMap() {
if uint32(sceneTagDataConfig.SceneId) == player.SceneId {
playerEnterSceneNotify.SceneTagIdList = append(playerEnterSceneNotify.SceneTagIdList, uint32(sceneTagDataConfig.SceneTagId))
}
@@ -470,7 +470,7 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
Type: enterType,
TargetUid: targetPlayer.PlayerID,
EnterSceneToken: player.EnterSceneToken,
WorldLevel: targetPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL],
WorldLevel: targetPlayer.PropertiesMap[constant.PLAYER_PROP_PLAYER_WORLD_LEVEL],
EnterReason: enterReason,
WorldType: 1,
DungeonId: dungeonId,
@@ -480,7 +480,7 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
strconv.Itoa(int(targetPlayer.PlayerID)) + "-" +
strconv.Itoa(int(time.Now().Unix())) + "-" +
"296359"
for _, sceneTagDataConfig := range gdconf.CONF.SceneTagDataMap {
for _, sceneTagDataConfig := range gdconf.GetSceneTagDataMap() {
if uint32(sceneTagDataConfig.SceneId) == player.SceneId {
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) {
for _, player := range scene.GetAllPlayer() {
// PacketEntityFightPropUpdateNotify
g.SendMsg(cmd.EntityFightPropUpdateNotify, player.PlayerID, player.ClientSeq, &proto.EntityFightPropUpdateNotify{
FightPropMap: entity.GetFightProp(),
fightProp := entity.GetFightProp()
ntf := &proto.EntityFightPropUpdateNotify{
FightPropMap: make(map[uint32]float32),
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 {
fightPropList := []*proto.FightPropPair{
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP),
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP)],
},
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_ATTACK),
PropValue: fightPropMap[uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_ATTACK)],
},
{
PropType: uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_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)],
},
{PropType: uint32(constant.FIGHT_PROP_BASE_HP), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_BASE_HP)]},
{PropType: uint32(constant.FIGHT_PROP_BASE_ATTACK), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_BASE_ATTACK)]},
{PropType: uint32(constant.FIGHT_PROP_BASE_DEFENSE), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_BASE_DEFENSE)]},
{PropType: uint32(constant.FIGHT_PROP_CRITICAL), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CRITICAL)]},
{PropType: uint32(constant.FIGHT_PROP_CRITICAL_HURT), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CRITICAL_HURT)]},
{PropType: uint32(constant.FIGHT_PROP_CHARGE_EFFICIENCY), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CHARGE_EFFICIENCY)]},
{PropType: uint32(constant.FIGHT_PROP_CUR_HP), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CUR_HP)]},
{PropType: uint32(constant.FIGHT_PROP_MAX_HP), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_MAX_HP)]},
{PropType: uint32(constant.FIGHT_PROP_CUR_ATTACK), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CUR_ATTACK)]},
{PropType: uint32(constant.FIGHT_PROP_CUR_DEFENSE), PropValue: fightPropMap[uint32(constant.FIGHT_PROP_CUR_DEFENSE)]},
}
return fightPropList
}
@@ -676,37 +648,37 @@ func (g *GameManager) PacketSceneEntityInfoAvatar(scene *Scene, player *model.Pl
},
PropList: []*proto.PropPair{
{
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL),
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(avatar.Level)},
Val: int64(avatar.Level)},
},
{
Type: uint32(constant.PlayerPropertyConst.PROP_EXP),
Type: uint32(constant.PLAYER_PROP_EXP),
PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_EXP),
Type: uint32(constant.PLAYER_PROP_EXP),
Value: &proto.PropValue_Ival{Ival: int64(avatar.Exp)},
Val: int64(avatar.Exp)},
},
{
Type: uint32(constant.PlayerPropertyConst.PROP_BREAK_LEVEL),
Type: uint32(constant.PLAYER_PROP_BREAK_LEVEL),
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)},
Val: int64(avatar.Promote)},
},
{
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_VAL),
Type: uint32(constant.PLAYER_PROP_SATIATION_VAL),
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)},
Val: int64(avatar.Satiation)},
},
{
Type: uint32(constant.PlayerPropertyConst.PROP_SATIATION_PENALTY_TIME),
Type: uint32(constant.PLAYER_PROP_SATIATION_PENALTY_TIME),
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)},
Val: int64(avatar.SatiationPenalty)},
},
@@ -763,8 +735,8 @@ func (g *GameManager) PacketSceneEntityInfoMonster(scene *Scene, entityId uint32
Speed: &proto.Vector{},
State: proto.MotionState(entity.GetMoveState()),
},
PropList: []*proto.PropPair{{Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL),
PropList: []*proto.PropPair{{Type: uint32(constant.PLAYER_PROP_LEVEL), PropValue: &proto.PropValue{
Type: uint32(constant.PLAYER_PROP_LEVEL),
Value: &proto.PropValue_Ival{Ival: int64(entity.GetLevel())},
Val: int64(entity.GetLevel()),
}}},
@@ -811,8 +783,8 @@ func (g *GameManager) PacketSceneEntityInfoNpc(scene *Scene, entityId uint32) *p
Speed: &proto.Vector{},
State: proto.MotionState(entity.GetMoveState()),
},
PropList: []*proto.PropPair{{Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL),
PropList: []*proto.PropPair{{Type: uint32(constant.PLAYER_PROP_LEVEL), PropValue: &proto.PropValue{
Type: uint32(constant.PLAYER_PROP_LEVEL),
Value: &proto.PropValue_Ival{Ival: int64(entity.GetLevel())},
Val: int64(entity.GetLevel()),
}}},
@@ -859,8 +831,8 @@ func (g *GameManager) PacketSceneEntityInfoGadget(scene *Scene, entityId uint32)
Speed: &proto.Vector{},
State: proto.MotionState(entity.GetMoveState()),
},
PropList: []*proto.PropPair{{Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), PropValue: &proto.PropValue{
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL),
PropList: []*proto.PropPair{{Type: uint32(constant.PLAYER_PROP_LEVEL), PropValue: &proto.PropValue{
Type: uint32(constant.PLAYER_PROP_LEVEL),
Value: &proto.PropValue_Ival{Ival: int64(1)},
Val: int64(1),
}}},
@@ -917,7 +889,7 @@ func (g *GameManager) PacketSceneAvatarInfo(scene *Scene, player *model.Player,
SkillDepotId: player.AvatarMap[avatarId].SkillDepotId,
Weapon: &proto.SceneWeaponInfo{
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,
Guid: weapon.Guid,
Level: uint32(weapon.Level),
@@ -974,8 +946,8 @@ func (g *GameManager) PacketSceneGadgetInfoNormal(entity *Entity) *proto.SceneGa
func (g *GameManager) PacketSceneGadgetInfoGather(entity *Entity) *proto.SceneGadgetInfo {
gadgetEntity := entity.GetGadgetEntity()
gatherEntity := gadgetEntity.GetGadgetGatherEntity()
gather, ok := gdconf.CONF.GatherDataMap[int32(gatherEntity.GetGatherId())]
if !ok {
gatherDataConfig := gdconf.GetGatherDataById(int32(gatherEntity.GetGatherId()))
if gatherDataConfig == nil {
logger.Error("gather data error, gatherId: %v", gatherEntity.GetGatherId())
return new(proto.SceneGadgetInfo)
}
@@ -988,7 +960,7 @@ func (g *GameManager) PacketSceneGadgetInfoGather(entity *Entity) *proto.SceneGa
AuthorityPeerId: 1,
Content: &proto.SceneGadgetInfo_GatherGadget{
GatherGadget: &proto.GatherGadgetInfo{
ItemId: uint32(gather.ItemId),
ItemId: uint32(gatherDataConfig.ItemId),
IsForbidGuest: false,
},
},
@@ -1041,21 +1013,21 @@ func (g *GameManager) PacketDelTeamEntityNotify(scene *Scene, player *model.Play
func (g *GameManager) GetTempFightPropMap() map[uint32]float32 {
fpm := map[uint32]float32{
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP): float32(72.91699),
uint32(constant.FightPropertyConst.FIGHT_PROP_PHYSICAL_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_DEFENSE): float32(505.0),
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_ATTACK): float32(45.679916),
uint32(constant.FightPropertyConst.FIGHT_PROP_ICE_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_ATTACK): float32(45.679916),
uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP): float32(72.91699),
uint32(constant.FightPropertyConst.FIGHT_PROP_FIRE_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_ELEC_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_WIND_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_ROCK_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_GRASS_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_WATER_SUB_HURT): float32(0.1),
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP): float32(72.91699),
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_DEFENSE): float32(505.0),
uint32(constant.FIGHT_PROP_CUR_HP): float32(72.91699),
uint32(constant.FIGHT_PROP_PHYSICAL_SUB_HURT): float32(0.1),
uint32(constant.FIGHT_PROP_CUR_DEFENSE): float32(505.0),
uint32(constant.FIGHT_PROP_CUR_ATTACK): float32(45.679916),
uint32(constant.FIGHT_PROP_ICE_SUB_HURT): float32(0.1),
uint32(constant.FIGHT_PROP_BASE_ATTACK): float32(45.679916),
uint32(constant.FIGHT_PROP_MAX_HP): float32(72.91699),
uint32(constant.FIGHT_PROP_FIRE_SUB_HURT): float32(0.1),
uint32(constant.FIGHT_PROP_ELEC_SUB_HURT): float32(0.1),
uint32(constant.FIGHT_PROP_WIND_SUB_HURT): float32(0.1),
uint32(constant.FIGHT_PROP_ROCK_SUB_HURT): float32(0.1),
uint32(constant.FIGHT_PROP_GRASS_SUB_HURT): float32(0.1),
uint32(constant.FIGHT_PROP_WATER_SUB_HURT): float32(0.1),
uint32(constant.FIGHT_PROP_BASE_HP): float32(72.91699),
uint32(constant.FIGHT_PROP_BASE_DEFENSE): float32(505.0),
}
return fpm
}

View File

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

View File

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

View File

@@ -63,7 +63,7 @@ func (g *GameManager) HandleAbilityStamina(player *model.Player, entry *proto.Ab
}
// 根据ability name查找到对应的技能表里的技能配置
var avatarAbility *gdconf.AvatarSkillData = nil
for _, avatarSkillData := range gdconf.CONF.AvatarSkillDataMap {
for _, avatarSkillData := range gdconf.GetAvatarSkillDataMap() {
hashCode := endec.Hk4eAbilityHashCode(avatarSkillData.AbilityName)
if uint32(hashCode) == abilityNameHashCode {
avatarAbility = avatarSkillData
@@ -121,11 +121,11 @@ func (g *GameManager) SceneAvatarStaminaStepReq(player *model.Player, payloadMsg
// 倒三角 非常消耗体力
costRevise = -(angleRevise * 2) + 10
}
logger.Debug("stamina climbing, rotX: %v, costRevise: %v, cost: %v", req.Rot.X, costRevise, constant.StaminaCostConst.CLIMBING_BASE-costRevise)
g.UpdatePlayerStamina(player, 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.STAMINA_COST_CLIMBING_BASE-costRevise)
case proto.MotionState_MOTION_SWIM_MOVE:
// 缓慢游泳
g.UpdatePlayerStamina(player, constant.StaminaCostConst.SWIMMING)
g.UpdatePlayerStamina(player, constant.STAMINA_COST_SWIMMING)
}
// PacketSceneAvatarStaminaStepRsp
@@ -159,16 +159,16 @@ func (g *GameManager) ImmediateStamina(player *model.Player, motionState proto.M
switch motionState {
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:
// 冲刺
g.UpdatePlayerStamina(player, constant.StaminaCostConst.SPRINT)
g.UpdatePlayerStamina(player, constant.STAMINA_COST_SPRINT)
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:
// 快速游泳开始
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
// 读取技能配置表
avatarSkillConfig, ok := gdconf.CONF.AvatarSkillDataMap[int32(skillId)]
if !ok {
avatarSkillConfig := gdconf.GetAvatarSkillDataById(int32(skillId))
if avatarSkillConfig == nil {
logger.Error("avatarSkillConfig error, skillId: %v", skillId)
return
}
@@ -191,8 +191,8 @@ func (g *GameManager) SkillSustainStamina(player *model.Player, isSwim bool) {
return
}
// 获取现行角色的配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(worldAvatar.GetAvatarId())]
if !ok {
avatarDataConfig := gdconf.GetAvatarDataById(int32(worldAvatar.GetAvatarId()))
if avatarDataConfig == nil {
logger.Error("avatarDataConfig error, avatarId: %v", worldAvatar.GetAvatarId())
return
}
@@ -203,8 +203,8 @@ func (g *GameManager) SkillSustainStamina(player *model.Player, isSwim bool) {
// 如果为0代表使用默认值
if avatarSkillConfig.CostStamina == 0 {
// 大剑持续耐力消耗默认值
if avatarDataConfig.WeaponType == constant.WeaponTypeConst.WEAPON_CLAYMORE {
costStamina = constant.StaminaCostConst.FIGHT_CLAYMORE_PER
if avatarDataConfig.WeaponType == constant.WEAPON_TYPE_CLAYMORE {
costStamina = constant.STAMINA_COST_FIGHT_CLAYMORE_PER
}
} else {
costStamina = -(avatarSkillConfig.CostStamina * 100)
@@ -230,8 +230,8 @@ func (g *GameManager) ChargedAttackStamina(player *model.Player, worldAvatar *Wo
return
}
// 获取现行角色的配置表
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(worldAvatar.GetAvatarId())]
if !ok {
avatarDataConfig := gdconf.GetAvatarDataById(int32(worldAvatar.GetAvatarId()))
if avatarDataConfig == nil {
logger.Error("avatarDataConfig error, avatarId: %v", worldAvatar.GetAvatarId())
return
}
@@ -244,15 +244,15 @@ func (g *GameManager) ChargedAttackStamina(player *model.Player, worldAvatar *Wo
// 使用武器对应默认耐力消耗
// 双手剑为持续耐力消耗不在这里处理
switch avatarDataConfig.WeaponType {
case constant.WeaponTypeConst.WEAPON_SWORD_ONE_HAND:
case constant.WEAPON_TYPE_SWORD_ONE_HAND:
// 单手剑
costStamina = constant.StaminaCostConst.FIGHT_SWORD_ONE_HAND
case constant.WeaponTypeConst.WEAPON_POLE:
costStamina = constant.STAMINA_COST_FIGHT_SWORD_ONE_HAND
case constant.WEAPON_TYPE_POLE:
// 长枪
costStamina = constant.StaminaCostConst.FIGHT_POLE
case constant.WeaponTypeConst.WEAPON_CATALYST:
costStamina = constant.STAMINA_COST_FIGHT_POLE
case constant.WEAPON_TYPE_CATALYST:
// 法器
costStamina = constant.StaminaCostConst.FIGHT_CATALYST
costStamina = constant.STAMINA_COST_FIGHT_CATALYST
}
} else {
costStamina = -(skillData.CostStamina * 100)
@@ -268,17 +268,17 @@ func (g *GameManager) SkillStartStamina(player *model.Player, casterId uint32, s
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
// 上次触发的技能相同则每400ms触发一次消耗
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()
}
} else {
@@ -314,10 +314,10 @@ func (g *GameManager) VehicleRestoreStaminaHandler(player *model.Player) {
// 判断玩家处于载具中
if g.IsPlayerInVehicle(player, gadgetEntity.GetGadgetVehicleEntity()) {
// 角色回复耐力
g.UpdatePlayerStamina(player, constant.StaminaCostConst.IN_SKIFF)
g.UpdatePlayerStamina(player, constant.STAMINA_COST_IN_SKIFF)
} 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)
@@ -471,12 +471,12 @@ func (g *GameManager) DrownBackHandler(player *model.Player) {
// 先传送玩家再设置角色存活否则同时设置会传送前显示角色实体
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
} else if player.StaminaInfo.DrownBackDelay == 20 {
// TODO 队伍扣血
maxStamina := player.PropertiesMap[constant.PlayerPropertyConst.PROP_MAX_STAMINA]
maxStamina := player.PropertiesMap[constant.PLAYER_PROP_MAX_STAMINA]
// 设置玩家耐力为一半
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 {
@@ -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 {
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
}
@@ -553,7 +553,7 @@ func (g *GameManager) SetVehicleStamina(player *model.Player, vehicleEntity *Ent
// SetPlayerStamina 设置玩家耐力
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
// 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())
}
// add AbilityControlBlock
avatarDataConfig := gdconf.CONF.AvatarDataMap[int32(worldAvatar.GetAvatarId())]
acb := sceneTeamAvatar.AbilityControlBlock
embryoId := 0
// add avatar abilities
avatarDataConfig := gdconf.GetAvatarDataById(int32(worldAvatar.GetAvatarId()))
if avatarDataConfig != nil {
for _, abilityId := range avatarDataConfig.AbilityHashCodeList {
embryoId++
emb := &proto.AbilityEmbryo{
AbilityId: uint32(embryoId),
AbilityNameHash: uint32(abilityId),
AbilityOverrideNameHash: uint32(constant.GameConstantConst.DEFAULT_ABILITY_NAME),
AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
}
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
}
}
// add default abilities
for _, abilityId := range constant.GameConstantConst.DEFAULT_ABILITY_HASHES {
for _, abilityId := range constant.DEFAULT_ABILITY_HASHES {
embryoId++
emb := &proto.AbilityEmbryo{
AbilityId: uint32(embryoId),
AbilityNameHash: uint32(abilityId),
AbilityOverrideNameHash: uint32(constant.GameConstantConst.DEFAULT_ABILITY_NAME),
AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
}
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
}
@@ -280,14 +280,14 @@ func (g *GameManager) PacketSceneTeamUpdateNotify(world *World) *proto.SceneTeam
// acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
// }
// add skill depot abilities
skillDepot := gdconf.CONF.AvatarSkillDepotDataMap[int32(worldPlayerAvatar.SkillDepotId)]
skillDepot := gdconf.GetAvatarSkillDepotDataById(int32(worldPlayerAvatar.SkillDepotId))
if skillDepot != nil && len(skillDepot.AbilityHashCodeList) != 0 {
for _, id := range skillDepot.AbilityHashCodeList {
embryoId++
emb := &proto.AbilityEmbryo{
AbilityId: uint32(embryoId),
AbilityNameHash: uint32(id),
AbilityOverrideNameHash: uint32(constant.GameConstantConst.DEFAULT_ABILITY_NAME),
AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
}
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
}
@@ -298,7 +298,7 @@ func (g *GameManager) PacketSceneTeamUpdateNotify(world *World) *proto.SceneTeam
emb := &proto.AbilityEmbryo{
AbilityId: uint32(embryoId),
AbilityNameHash: uint32(endec.Hk4eAbilityHashCode(skill)),
AbilityOverrideNameHash: uint32(constant.GameConstantConst.DEFAULT_ABILITY_NAME),
AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
}
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
}

View File

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

View File

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

View File

@@ -1,16 +1,13 @@
package game
import (
"math"
"time"
"hk4e/common/constant"
"hk4e/common/mq"
"hk4e/gdconf"
"hk4e/gs/model"
"hk4e/pkg/alg"
"hk4e/pkg/logger"
"hk4e/protocol/cmd"
"hk4e/protocol/proto"
)
@@ -35,7 +32,7 @@ func NewWorldManager(snowflake *alg.SnowflakeWorker) (r *WorldManager) {
r.worldMap = make(map[uint32]*World)
r.snowflake = snowflake
r.sceneBlockAoiMap = make(map[uint32]*alg.AoiManager)
for _, sceneConfig := range gdconf.CONF.SceneMap {
for _, sceneConfig := range gdconf.GetSceneDetailMap() {
minX := int16(0)
maxX := int16(0)
minZ := int16(0)
@@ -172,7 +169,7 @@ func (w *WorldManager) CreateWorld(owner *model.Player) *World {
multiplayerTeam: CreateMultiplayerTeam(),
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
return world
}
@@ -221,8 +218,7 @@ func (w *WorldManager) GetMultiplayerWorldNum() uint32 {
return w.multiplayerWorldNum
}
// 世界数据结构
// World 世界数据结构
type World struct {
id uint32
owner *model.Player
@@ -482,7 +478,7 @@ func (w *World) GetPlayerTeamEntityId(player *model.Player) uint32 {
// InitPlayerTeamEntityId 初始化某玩家的本地队伍实体id
func (w *World) InitPlayerTeamEntityId(player *model.Player) {
w.multiplayerTeam.localTeamEntityMap[player.PlayerID] = w.GetNextWorldEntityId(constant.EntityIdTypeConst.TEAM)
w.multiplayerTeam.localTeamEntityMap[player.PlayerID] = w.GetNextWorldEntityId(constant.ENTITY_ID_TYPE_TEAM)
}
// GetPlayerWorldAvatarEntityId 获取某玩家在世界队伍中的某角色的实体id
@@ -749,670 +745,3 @@ func (w *World) GetSceneById(sceneId uint32) *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 初始化角色面板
func (p *Player) InitAvatarFightProp(avatar *Avatar) {
avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)]
if !ok {
avatarDataConfig := gdconf.GetAvatarDataById(int32(avatar.AvatarId))
if avatarDataConfig == nil {
logger.Error("avatarDataConfig error, avatarId: %v", avatar.AvatarId)
return
}
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.FightPropertyConst.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_ATTACK)] = float32(avatarDataConfig.GetBaseAttackByLevel(avatar.Level))
avatar.FightPropMap[uint32(constant.FIGHT_PROP_BASE_DEFENSE)] = float32(avatarDataConfig.GetBaseDefenseByLevel(avatar.Level))
avatar.FightPropMap[uint32(constant.FIGHT_PROP_BASE_HP)] = float32(avatarDataConfig.GetBaseHpByLevel(avatar.Level))
// 白字+绿字攻防血
avatar.FightPropMap[uint32(constant.FightPropertyConst.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.FightPropertyConst.FIGHT_PROP_MAX_HP)] = float32(avatarDataConfig.GetBaseHpByLevel(avatar.Level))
avatar.FightPropMap[uint32(constant.FIGHT_PROP_CUR_ATTACK)] = float32(avatarDataConfig.GetBaseAttackByLevel(avatar.Level))
avatar.FightPropMap[uint32(constant.FIGHT_PROP_CUR_DEFENSE)] = float32(avatarDataConfig.GetBaseDefenseByLevel(avatar.Level))
avatar.FightPropMap[uint32(constant.FIGHT_PROP_MAX_HP)] = float32(avatarDataConfig.GetBaseHpByLevel(avatar.Level))
// 当前血量
avatar.FightPropMap[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.FightPropertyConst.FIGHT_PROP_CRITICAL_HURT)] = float32(avatarDataConfig.CriticalHurt)
avatar.FightPropMap[uint32(constant.FIGHT_PROP_CRITICAL)] = float32(avatarDataConfig.Critical)
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)
}
@@ -89,8 +89,8 @@ func (p *Player) GetAvatarIdByGuid(guid uint64) uint32 {
}
func (p *Player) AddAvatar(avatarId uint32) {
avatarDataConfig, exist := gdconf.CONF.AvatarDataMap[int32(avatarId)]
if !exist {
avatarDataConfig := gdconf.GetAvatarDataById(int32(avatarId))
if avatarDataConfig == nil {
logger.Error("avatar data config is nil, avatarId: %v", avatarId)
return
}
@@ -103,14 +103,14 @@ func (p *Player) AddAvatar(avatarId uint32) {
} else {
skillDepotId = avatarDataConfig.SkillDepotId
}
avatarSkillDepotDataConfig, exist := gdconf.CONF.AvatarSkillDepotDataMap[skillDepotId]
if !exist {
avatarSkillDepotDataConfig := gdconf.GetAvatarSkillDepotDataById(skillDepotId)
if avatarSkillDepotDataConfig == nil {
logger.Error("avatar skill depot data config is nil, skillDepotId: %v", skillDepotId)
return
}
avatar := &Avatar{
AvatarId: avatarId,
LifeState: constant.LifeStateConst.LIFE_ALIVE,
LifeState: constant.LIFE_STATE_ALIVE,
Level: 1,
Exp: 0,
Promote: 0,
@@ -155,16 +155,16 @@ func (p *Player) AddAvatar(avatarId uint32) {
func (p *Player) SetCurrEnergy(avatar *Avatar, value float64, max bool) {
var avatarSkillDataConfig *gdconf.AvatarSkillData = nil
if avatar.AvatarId == 10000005 || avatar.AvatarId == 10000007 {
avatarSkillDepotDataConfig, exist := gdconf.CONF.AvatarSkillDepotDataMap[int32(avatar.SkillDepotId)]
if !exist {
avatarSkillDepotDataConfig := gdconf.GetAvatarSkillDepotDataById(int32(avatar.SkillDepotId))
if avatarSkillDepotDataConfig == nil {
return
}
avatarSkillDataConfig, exist = gdconf.CONF.AvatarSkillDataMap[avatarSkillDepotDataConfig.EnergySkill]
if !exist {
avatarSkillDataConfig = gdconf.GetAvatarSkillDataById(avatarSkillDepotDataConfig.EnergySkill)
if avatarSkillDataConfig == nil {
return
}
} else {
avatarSkillDataConfig = gdconf.CONF.GetAvatarEnergySkillConfig(avatar.AvatarId)
avatarSkillDataConfig = gdconf.GetAvatarEnergySkillConfig(avatar.AvatarId)
}
if avatarSkillDataConfig == nil {
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 {
prop, ok := constant.ItemConstantConst.VIRTUAL_ITEM_PROP[itemId]
prop, ok := constant.VIRTUAL_ITEM_PROP[itemId]
if ok {
value := p.PropertiesMap[prop]
return value

View File

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

View File

@@ -26,35 +26,35 @@ func (s *StaminaInfo) SetStaminaCost(state proto.MotionState) {
// 消耗耐力
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:
// 滑翔
s.CostStamina = constant.StaminaCostConst.FLY
s.CostStamina = constant.STAMINA_COST_FLY
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:
// 浪船加速
s.CostStamina = constant.StaminaCostConst.SKIFF_DASH
s.CostStamina = constant.STAMINA_COST_SKIFF_DASH
// 恢复耐力
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:
// 站立
s.CostStamina = constant.StaminaCostConst.STANDBY
s.CostStamina = constant.STAMINA_COST_STANDBY
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:
// 浪船正常移动或停下
s.CostStamina = constant.StaminaCostConst.SKIFF_NORMAL
s.CostStamina = constant.STAMINA_COST_SKIFF_NORMAL
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:
// 浪船加速 (风圈等)
s.CostStamina = constant.StaminaCostConst.POWERED_SKIFF
s.CostStamina = constant.STAMINA_COST_POWERED_SKIFF
// 缓慢动作将在客户端发送消息后消耗
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)
teamElementTypeCountMap := make(map[uint16]uint8)
for _, avatarId := range activeTeam.GetAvatarIdList() {
avatarSkillDataConfig := gdconf.CONF.GetAvatarEnergySkillConfig(avatarId)
avatarSkillDataConfig := gdconf.GetAvatarEnergySkillConfig(avatarId)
if avatarSkillDataConfig == nil {
logger.Error("get avatar energy skill is nil, avatarId: %v", avatarId)
continue

View File

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