mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-23 14:32:27 +08:00
大世界AOI广播域隔离
This commit is contained in:
@@ -3,24 +3,22 @@ package constant
|
|||||||
import "hk4e/pkg/endec"
|
import "hk4e/pkg/endec"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
DEFAULT_ABILITY_STRINGS []string
|
DEFAULT_ABILITY_HASH_CODE []int32
|
||||||
DEFAULT_ABILITY_HASHES []int32
|
|
||||||
DEFAULT_ABILITY_NAME int32
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
DEFAULT_ABILITY_STRINGS = []string{
|
defaultAbilityStringList := []string{
|
||||||
"Avatar_DefaultAbility_VisionReplaceDieInvincible",
|
"Avatar_DefaultAbility_VisionReplaceDieInvincible",
|
||||||
"Avatar_DefaultAbility_AvartarInShaderChange",
|
"Avatar_DefaultAbility_AvartarInShaderChange",
|
||||||
"Avatar_SprintBS_Invincible",
|
"Avatar_SprintBS_Invincible",
|
||||||
"Avatar_Freeze_Duration_Reducer",
|
"Avatar_Freeze_Duration_Reducer",
|
||||||
"Avatar_Attack_ReviveEnergy",
|
"Avatar_Attack_ReviveEnergy",
|
||||||
"Avatar_Component_Initializer",
|
"Avatar_Component_Initializer",
|
||||||
"Avatar_FallAnthem_Achievement_Listener",
|
"Avatar_HDMesh_Controller",
|
||||||
|
"Avatar_Trampoline_Jump_Controller",
|
||||||
}
|
}
|
||||||
DEFAULT_ABILITY_HASHES = make([]int32, 0)
|
DEFAULT_ABILITY_HASH_CODE = make([]int32, 0)
|
||||||
for _, v := range DEFAULT_ABILITY_STRINGS {
|
for _, defaultAbilityString := range defaultAbilityStringList {
|
||||||
DEFAULT_ABILITY_HASHES = append(DEFAULT_ABILITY_HASHES, endec.Hk4eAbilityHashCode(v))
|
DEFAULT_ABILITY_HASH_CODE = append(DEFAULT_ABILITY_HASH_CODE, endec.Hk4eAbilityHashCode(defaultAbilityString))
|
||||||
}
|
}
|
||||||
DEFAULT_ABILITY_NAME = endec.Hk4eAbilityHashCode("Default")
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,134 +1,49 @@
|
|||||||
package constant
|
package constant
|
||||||
|
|
||||||
import "hk4e/pkg/endec"
|
const (
|
||||||
|
ELEMENT_TYPE_FIRE = 1
|
||||||
|
ELEMENT_TYPE_WATER = 2
|
||||||
|
ELEMENT_TYPE_GRASS = 3
|
||||||
|
ELEMENT_TYPE_ELEC = 4
|
||||||
|
ELEMENT_TYPE_ICE = 5
|
||||||
|
ELEMENT_TYPE_WIND = 7
|
||||||
|
ELEMENT_TYPE_ROCK = 8
|
||||||
|
)
|
||||||
|
|
||||||
var ElementTypeConst *ElementType
|
type FightPropEnergy struct {
|
||||||
|
CurEnergy int
|
||||||
type ElementTypeValue struct {
|
MaxEnergy int
|
||||||
Value uint16
|
|
||||||
CurrEnergyProp uint16
|
|
||||||
MaxEnergyProp uint16
|
|
||||||
TeamResonanceId uint16
|
|
||||||
ConfigName string
|
|
||||||
ConfigHash int32
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ElementType struct {
|
var ELEMENT_TYPE_FIGHT_PROP_ENERGY_MAP map[int]*FightPropEnergy
|
||||||
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 init() {
|
func init() {
|
||||||
ElementTypeConst = new(ElementType)
|
ELEMENT_TYPE_FIGHT_PROP_ENERGY_MAP[ELEMENT_TYPE_FIRE] = &FightPropEnergy{
|
||||||
ElementTypeConst.None = &ElementTypeValue{
|
CurEnergy: FIGHT_PROP_CUR_FIRE_ENERGY,
|
||||||
0,
|
MaxEnergy: FIGHT_PROP_MAX_FIRE_ENERGY,
|
||||||
FIGHT_PROP_CUR_FIRE_ENERGY,
|
|
||||||
FIGHT_PROP_MAX_FIRE_ENERGY,
|
|
||||||
0,
|
|
||||||
"",
|
|
||||||
endec.Hk4eAbilityHashCode(""),
|
|
||||||
}
|
}
|
||||||
ElementTypeConst.Fire = &ElementTypeValue{
|
ELEMENT_TYPE_FIGHT_PROP_ENERGY_MAP[ELEMENT_TYPE_WATER] = &FightPropEnergy{
|
||||||
1,
|
CurEnergy: FIGHT_PROP_CUR_WATER_ENERGY,
|
||||||
FIGHT_PROP_CUR_FIRE_ENERGY,
|
MaxEnergy: FIGHT_PROP_MAX_WATER_ENERGY,
|
||||||
FIGHT_PROP_MAX_FIRE_ENERGY,
|
|
||||||
10101,
|
|
||||||
"TeamResonance_Fire_Lv2",
|
|
||||||
endec.Hk4eAbilityHashCode("TeamResonance_Fire_Lv2"),
|
|
||||||
}
|
}
|
||||||
ElementTypeConst.Water = &ElementTypeValue{
|
ELEMENT_TYPE_FIGHT_PROP_ENERGY_MAP[ELEMENT_TYPE_GRASS] = &FightPropEnergy{
|
||||||
2,
|
CurEnergy: FIGHT_PROP_CUR_GRASS_ENERGY,
|
||||||
FIGHT_PROP_CUR_WATER_ENERGY,
|
MaxEnergy: FIGHT_PROP_MAX_GRASS_ENERGY,
|
||||||
FIGHT_PROP_MAX_WATER_ENERGY,
|
|
||||||
10201,
|
|
||||||
"TeamResonance_Water_Lv2",
|
|
||||||
endec.Hk4eAbilityHashCode("TeamResonance_Water_Lv2"),
|
|
||||||
}
|
}
|
||||||
ElementTypeConst.Grass = &ElementTypeValue{
|
ELEMENT_TYPE_FIGHT_PROP_ENERGY_MAP[ELEMENT_TYPE_ELEC] = &FightPropEnergy{
|
||||||
3,
|
CurEnergy: FIGHT_PROP_CUR_ELEC_ENERGY,
|
||||||
FIGHT_PROP_CUR_GRASS_ENERGY,
|
MaxEnergy: FIGHT_PROP_MAX_ELEC_ENERGY,
|
||||||
FIGHT_PROP_MAX_GRASS_ENERGY,
|
|
||||||
0,
|
|
||||||
"",
|
|
||||||
endec.Hk4eAbilityHashCode(""),
|
|
||||||
}
|
}
|
||||||
ElementTypeConst.Electric = &ElementTypeValue{
|
ELEMENT_TYPE_FIGHT_PROP_ENERGY_MAP[ELEMENT_TYPE_ICE] = &FightPropEnergy{
|
||||||
4,
|
CurEnergy: FIGHT_PROP_CUR_ICE_ENERGY,
|
||||||
FIGHT_PROP_CUR_ELEC_ENERGY,
|
MaxEnergy: FIGHT_PROP_MAX_ICE_ENERGY,
|
||||||
FIGHT_PROP_MAX_ELEC_ENERGY,
|
|
||||||
10401,
|
|
||||||
"TeamResonance_Electric_Lv2",
|
|
||||||
endec.Hk4eAbilityHashCode("TeamResonance_Electric_Lv2"),
|
|
||||||
}
|
}
|
||||||
ElementTypeConst.Ice = &ElementTypeValue{
|
ELEMENT_TYPE_FIGHT_PROP_ENERGY_MAP[ELEMENT_TYPE_WIND] = &FightPropEnergy{
|
||||||
5,
|
CurEnergy: FIGHT_PROP_CUR_WIND_ENERGY,
|
||||||
FIGHT_PROP_CUR_ICE_ENERGY,
|
MaxEnergy: FIGHT_PROP_MAX_WIND_ENERGY,
|
||||||
FIGHT_PROP_MAX_ICE_ENERGY,
|
|
||||||
10601,
|
|
||||||
"TeamResonance_Ice_Lv2",
|
|
||||||
endec.Hk4eAbilityHashCode("TeamResonance_Ice_Lv2"),
|
|
||||||
}
|
}
|
||||||
ElementTypeConst.Frozen = &ElementTypeValue{
|
ELEMENT_TYPE_FIGHT_PROP_ENERGY_MAP[ELEMENT_TYPE_ROCK] = &FightPropEnergy{
|
||||||
6,
|
CurEnergy: FIGHT_PROP_CUR_ROCK_ENERGY,
|
||||||
FIGHT_PROP_CUR_ICE_ENERGY,
|
MaxEnergy: FIGHT_PROP_MAX_ROCK_ENERGY,
|
||||||
FIGHT_PROP_MAX_ICE_ENERGY,
|
|
||||||
0,
|
|
||||||
"",
|
|
||||||
endec.Hk4eAbilityHashCode(""),
|
|
||||||
}
|
}
|
||||||
ElementTypeConst.Wind = &ElementTypeValue{
|
|
||||||
7,
|
|
||||||
FIGHT_PROP_CUR_WIND_ENERGY,
|
|
||||||
FIGHT_PROP_MAX_WIND_ENERGY,
|
|
||||||
10301,
|
|
||||||
"TeamResonance_Wind_Lv2",
|
|
||||||
endec.Hk4eAbilityHashCode("TeamResonance_Wind_Lv2"),
|
|
||||||
}
|
|
||||||
ElementTypeConst.Rock = &ElementTypeValue{
|
|
||||||
8,
|
|
||||||
FIGHT_PROP_CUR_ROCK_ENERGY,
|
|
||||||
FIGHT_PROP_MAX_ROCK_ENERGY,
|
|
||||||
10701,
|
|
||||||
"TeamResonance_Rock_Lv2",
|
|
||||||
endec.Hk4eAbilityHashCode("TeamResonance_Rock_Lv2"),
|
|
||||||
}
|
|
||||||
ElementTypeConst.AntiFire = &ElementTypeValue{
|
|
||||||
9,
|
|
||||||
FIGHT_PROP_CUR_FIRE_ENERGY,
|
|
||||||
FIGHT_PROP_MAX_FIRE_ENERGY,
|
|
||||||
0,
|
|
||||||
"",
|
|
||||||
endec.Hk4eAbilityHashCode(""),
|
|
||||||
}
|
|
||||||
ElementTypeConst.Default = &ElementTypeValue{
|
|
||||||
255,
|
|
||||||
FIGHT_PROP_CUR_FIRE_ENERGY,
|
|
||||||
FIGHT_PROP_MAX_FIRE_ENERGY,
|
|
||||||
10801,
|
|
||||||
"TeamResonance_AllDifferent",
|
|
||||||
endec.Hk4eAbilityHashCode("TeamResonance_AllDifferent"),
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
ElementTypeConst.VALUE_MAP[3] = ElementTypeConst.Grass
|
|
||||||
ElementTypeConst.VALUE_MAP[4] = ElementTypeConst.Electric
|
|
||||||
ElementTypeConst.VALUE_MAP[5] = ElementTypeConst.Ice
|
|
||||||
ElementTypeConst.VALUE_MAP[6] = ElementTypeConst.Frozen
|
|
||||||
ElementTypeConst.VALUE_MAP[7] = ElementTypeConst.Wind
|
|
||||||
ElementTypeConst.VALUE_MAP[8] = ElementTypeConst.Rock
|
|
||||||
ElementTypeConst.VALUE_MAP[9] = ElementTypeConst.AntiFire
|
|
||||||
ElementTypeConst.VALUE_MAP[255] = ElementTypeConst.Default
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,17 +2,17 @@ package constant
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
// 虚拟物品
|
// 虚拟物品
|
||||||
ITEM_ID_HCOIN uint32 = 201 // 原石
|
ITEM_ID_HCOIN = 201 // 原石
|
||||||
ITEM_ID_SCOIN uint32 = 202 // 摩拉
|
ITEM_ID_SCOIN = 202 // 摩拉
|
||||||
ITEM_ID_MCOIN uint32 = 203 // 创世结晶
|
ITEM_ID_MCOIN = 203 // 创世结晶
|
||||||
ITEM_ID_RESIN uint32 = 106 // 树脂
|
ITEM_ID_RESIN = 106 // 树脂
|
||||||
ITEM_ID_LEGENDARY_KEY uint32 = 207 // 传说任务钥匙
|
ITEM_ID_LEGENDARY_KEY = 207 // 传说任务钥匙
|
||||||
ITEM_ID_HOME_COIN uint32 = 204 // 洞天宝钱
|
ITEM_ID_HOME_COIN = 204 // 洞天宝钱
|
||||||
ITEM_ID_PLAYER_EXP uint32 = 102 // 冒险阅历
|
ITEM_ID_PLAYER_EXP = 102 // 冒险阅历
|
||||||
// 武器强化物品
|
// 武器强化物品
|
||||||
ITEM_ID_WEAPON_UPGRADE_MAGIC uint32 = 104013 // 精锻用魔矿
|
ITEM_ID_WEAPON_UPGRADE_MAGIC = 104013 // 精锻用魔矿
|
||||||
ITEM_ID_WEAPON_UPGRADE_GOOD uint32 = 104012 // 精锻用良矿
|
ITEM_ID_WEAPON_UPGRADE_GOOD = 104012 // 精锻用良矿
|
||||||
ITEM_ID_WEAPON_UPGRADE_MOTLEY uint32 = 104011 // 精锻用杂矿
|
ITEM_ID_WEAPON_UPGRADE_MOTLEY = 104011 // 精锻用杂矿
|
||||||
)
|
)
|
||||||
|
|
||||||
// 虚拟物品对应玩家的属性
|
// 虚拟物品对应玩家的属性
|
||||||
|
|||||||
@@ -1,172 +1,172 @@
|
|||||||
package constant
|
package constant
|
||||||
|
|
||||||
const (
|
const (
|
||||||
OPEN_STATE_NONE uint16 = 0
|
OPEN_STATE_NONE = 0
|
||||||
OPEN_STATE_PAIMON uint16 = 1
|
OPEN_STATE_PAIMON = 1
|
||||||
OPEN_STATE_PAIMON_NAVIGATION uint16 = 2
|
OPEN_STATE_PAIMON_NAVIGATION = 2
|
||||||
OPEN_STATE_AVATAR_PROMOTE uint16 = 3
|
OPEN_STATE_AVATAR_PROMOTE = 3
|
||||||
OPEN_STATE_AVATAR_TALENT uint16 = 4
|
OPEN_STATE_AVATAR_TALENT = 4
|
||||||
OPEN_STATE_WEAPON_PROMOTE uint16 = 5
|
OPEN_STATE_WEAPON_PROMOTE = 5
|
||||||
OPEN_STATE_WEAPON_AWAKEN uint16 = 6
|
OPEN_STATE_WEAPON_AWAKEN = 6
|
||||||
OPEN_STATE_QUEST_REMIND uint16 = 7
|
OPEN_STATE_QUEST_REMIND = 7
|
||||||
OPEN_STATE_GAME_GUIDE uint16 = 8
|
OPEN_STATE_GAME_GUIDE = 8
|
||||||
OPEN_STATE_COOK uint16 = 9
|
OPEN_STATE_COOK = 9
|
||||||
OPEN_STATE_WEAPON_UPGRADE uint16 = 10
|
OPEN_STATE_WEAPON_UPGRADE = 10
|
||||||
OPEN_STATE_RELIQUARY_UPGRADE uint16 = 11
|
OPEN_STATE_RELIQUARY_UPGRADE = 11
|
||||||
OPEN_STATE_RELIQUARY_PROMOTE uint16 = 12
|
OPEN_STATE_RELIQUARY_PROMOTE = 12
|
||||||
OPEN_STATE_WEAPON_PROMOTE_GUIDE uint16 = 13
|
OPEN_STATE_WEAPON_PROMOTE_GUIDE = 13
|
||||||
OPEN_STATE_WEAPON_CHANGE_GUIDE uint16 = 14
|
OPEN_STATE_WEAPON_CHANGE_GUIDE = 14
|
||||||
OPEN_STATE_PLAYER_LVUP_GUIDE uint16 = 15
|
OPEN_STATE_PLAYER_LVUP_GUIDE = 15
|
||||||
OPEN_STATE_FRESHMAN_GUIDE uint16 = 16
|
OPEN_STATE_FRESHMAN_GUIDE = 16
|
||||||
OPEN_STATE_SKIP_FRESHMAN_GUIDE uint16 = 17
|
OPEN_STATE_SKIP_FRESHMAN_GUIDE = 17
|
||||||
OPEN_STATE_GUIDE_MOVE_CAMERA uint16 = 18
|
OPEN_STATE_GUIDE_MOVE_CAMERA = 18
|
||||||
OPEN_STATE_GUIDE_SCALE_CAMERA uint16 = 19
|
OPEN_STATE_GUIDE_SCALE_CAMERA = 19
|
||||||
OPEN_STATE_GUIDE_KEYBOARD uint16 = 20
|
OPEN_STATE_GUIDE_KEYBOARD = 20
|
||||||
OPEN_STATE_GUIDE_MOVE uint16 = 21
|
OPEN_STATE_GUIDE_MOVE = 21
|
||||||
OPEN_STATE_GUIDE_JUMP uint16 = 22
|
OPEN_STATE_GUIDE_JUMP = 22
|
||||||
OPEN_STATE_GUIDE_SPRINT uint16 = 23
|
OPEN_STATE_GUIDE_SPRINT = 23
|
||||||
OPEN_STATE_GUIDE_MAP uint16 = 24
|
OPEN_STATE_GUIDE_MAP = 24
|
||||||
OPEN_STATE_GUIDE_ATTACK uint16 = 25
|
OPEN_STATE_GUIDE_ATTACK = 25
|
||||||
OPEN_STATE_GUIDE_FLY uint16 = 26
|
OPEN_STATE_GUIDE_FLY = 26
|
||||||
OPEN_STATE_GUIDE_TALENT uint16 = 27
|
OPEN_STATE_GUIDE_TALENT = 27
|
||||||
OPEN_STATE_GUIDE_RELIC uint16 = 28
|
OPEN_STATE_GUIDE_RELIC = 28
|
||||||
OPEN_STATE_GUIDE_RELIC_PROM uint16 = 29
|
OPEN_STATE_GUIDE_RELIC_PROM = 29
|
||||||
OPEN_STATE_COMBINE uint16 = 30
|
OPEN_STATE_COMBINE = 30
|
||||||
OPEN_STATE_GACHA uint16 = 31
|
OPEN_STATE_GACHA = 31
|
||||||
OPEN_STATE_GUIDE_GACHA uint16 = 32
|
OPEN_STATE_GUIDE_GACHA = 32
|
||||||
OPEN_STATE_GUIDE_TEAM uint16 = 33
|
OPEN_STATE_GUIDE_TEAM = 33
|
||||||
OPEN_STATE_GUIDE_PROUD uint16 = 34
|
OPEN_STATE_GUIDE_PROUD = 34
|
||||||
OPEN_STATE_GUIDE_AVATAR_PROMOTE uint16 = 35
|
OPEN_STATE_GUIDE_AVATAR_PROMOTE = 35
|
||||||
OPEN_STATE_GUIDE_ADVENTURE_CARD uint16 = 36
|
OPEN_STATE_GUIDE_ADVENTURE_CARD = 36
|
||||||
OPEN_STATE_FORGE uint16 = 37
|
OPEN_STATE_FORGE = 37
|
||||||
OPEN_STATE_GUIDE_BAG uint16 = 38
|
OPEN_STATE_GUIDE_BAG = 38
|
||||||
OPEN_STATE_EXPEDITION uint16 = 39
|
OPEN_STATE_EXPEDITION = 39
|
||||||
OPEN_STATE_GUIDE_ADVENTURE_DAILYTASK uint16 = 40
|
OPEN_STATE_GUIDE_ADVENTURE_DAILYTASK = 40
|
||||||
OPEN_STATE_GUIDE_ADVENTURE_DUNGEON uint16 = 41
|
OPEN_STATE_GUIDE_ADVENTURE_DUNGEON = 41
|
||||||
OPEN_STATE_TOWER uint16 = 42
|
OPEN_STATE_TOWER = 42
|
||||||
OPEN_STATE_WORLD_STAMINA uint16 = 43
|
OPEN_STATE_WORLD_STAMINA = 43
|
||||||
OPEN_STATE_TOWER_FIRST_ENTER uint16 = 44
|
OPEN_STATE_TOWER_FIRST_ENTER = 44
|
||||||
OPEN_STATE_RESIN uint16 = 45
|
OPEN_STATE_RESIN = 45
|
||||||
OPEN_STATE_LIMIT_REGION_FRESHMEAT uint16 = 47
|
OPEN_STATE_LIMIT_REGION_FRESHMEAT = 47
|
||||||
OPEN_STATE_LIMIT_REGION_GLOBAL uint16 = 48
|
OPEN_STATE_LIMIT_REGION_GLOBAL = 48
|
||||||
OPEN_STATE_MULTIPLAYER uint16 = 49
|
OPEN_STATE_MULTIPLAYER = 49
|
||||||
OPEN_STATE_GUIDE_MOUSEPC uint16 = 50
|
OPEN_STATE_GUIDE_MOUSEPC = 50
|
||||||
OPEN_STATE_GUIDE_MULTIPLAYER uint16 = 51
|
OPEN_STATE_GUIDE_MULTIPLAYER = 51
|
||||||
OPEN_STATE_GUIDE_DUNGEONREWARD uint16 = 52
|
OPEN_STATE_GUIDE_DUNGEONREWARD = 52
|
||||||
OPEN_STATE_GUIDE_BLOSSOM uint16 = 53
|
OPEN_STATE_GUIDE_BLOSSOM = 53
|
||||||
OPEN_STATE_AVATAR_FASHION uint16 = 54
|
OPEN_STATE_AVATAR_FASHION = 54
|
||||||
OPEN_STATE_PHOTOGRAPH uint16 = 55
|
OPEN_STATE_PHOTOGRAPH = 55
|
||||||
OPEN_STATE_GUIDE_KSLQUEST uint16 = 56
|
OPEN_STATE_GUIDE_KSLQUEST = 56
|
||||||
OPEN_STATE_PERSONAL_LINE uint16 = 57
|
OPEN_STATE_PERSONAL_LINE = 57
|
||||||
OPEN_STATE_GUIDE_PERSONAL_LINE uint16 = 58
|
OPEN_STATE_GUIDE_PERSONAL_LINE = 58
|
||||||
OPEN_STATE_GUIDE_APPEARANCE uint16 = 59
|
OPEN_STATE_GUIDE_APPEARANCE = 59
|
||||||
OPEN_STATE_GUIDE_PROCESS uint16 = 60
|
OPEN_STATE_GUIDE_PROCESS = 60
|
||||||
OPEN_STATE_GUIDE_PERSONAL_LINE_KEY uint16 = 61
|
OPEN_STATE_GUIDE_PERSONAL_LINE_KEY = 61
|
||||||
OPEN_STATE_GUIDE_WIDGET uint16 = 62
|
OPEN_STATE_GUIDE_WIDGET = 62
|
||||||
OPEN_STATE_GUIDE_ACTIVITY_SKILL_ASTER uint16 = 63
|
OPEN_STATE_GUIDE_ACTIVITY_SKILL_ASTER = 63
|
||||||
OPEN_STATE_GUIDE_COLDCLIMATE uint16 = 64
|
OPEN_STATE_GUIDE_COLDCLIMATE = 64
|
||||||
OPEN_STATE_DERIVATIVE_MALL uint16 = 65
|
OPEN_STATE_DERIVATIVE_MALL = 65
|
||||||
OPEN_STATE_GUIDE_EXITMULTIPLAYER uint16 = 66
|
OPEN_STATE_GUIDE_EXITMULTIPLAYER = 66
|
||||||
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD uint16 = 67
|
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD = 67
|
||||||
OPEN_STATE_GUIDE_THEATREMACHANICUS_REBUILD uint16 = 68
|
OPEN_STATE_GUIDE_THEATREMACHANICUS_REBUILD = 68
|
||||||
OPEN_STATE_GUIDE_THEATREMACHANICUS_CARD uint16 = 69
|
OPEN_STATE_GUIDE_THEATREMACHANICUS_CARD = 69
|
||||||
OPEN_STATE_GUIDE_THEATREMACHANICUS_MONSTER uint16 = 70
|
OPEN_STATE_GUIDE_THEATREMACHANICUS_MONSTER = 70
|
||||||
OPEN_STATE_GUIDE_THEATREMACHANICUS_MISSION_CHECK uint16 = 71
|
OPEN_STATE_GUIDE_THEATREMACHANICUS_MISSION_CHECK = 71
|
||||||
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD_SELECT uint16 = 72
|
OPEN_STATE_GUIDE_THEATREMACHANICUS_BUILD_SELECT = 72
|
||||||
OPEN_STATE_GUIDE_THEATREMACHANICUS_CHALLENGE_START uint16 = 73
|
OPEN_STATE_GUIDE_THEATREMACHANICUS_CHALLENGE_START = 73
|
||||||
OPEN_STATE_GUIDE_CONVERT uint16 = 74
|
OPEN_STATE_GUIDE_CONVERT = 74
|
||||||
OPEN_STATE_GUIDE_THEATREMACHANICUS_MULTIPLAYER uint16 = 75
|
OPEN_STATE_GUIDE_THEATREMACHANICUS_MULTIPLAYER = 75
|
||||||
OPEN_STATE_GUIDE_COOP_TASK uint16 = 76
|
OPEN_STATE_GUIDE_COOP_TASK = 76
|
||||||
OPEN_STATE_GUIDE_HOMEWORLD_ADEPTIABODE uint16 = 77
|
OPEN_STATE_GUIDE_HOMEWORLD_ADEPTIABODE = 77
|
||||||
OPEN_STATE_GUIDE_HOMEWORLD_DEPLOY uint16 = 78
|
OPEN_STATE_GUIDE_HOMEWORLD_DEPLOY = 78
|
||||||
OPEN_STATE_GUIDE_CHANNELLERSLAB_EQUIP uint16 = 79
|
OPEN_STATE_GUIDE_CHANNELLERSLAB_EQUIP = 79
|
||||||
OPEN_STATE_GUIDE_CHANNELLERSLAB_MP_SOLUTION uint16 = 80
|
OPEN_STATE_GUIDE_CHANNELLERSLAB_MP_SOLUTION = 80
|
||||||
OPEN_STATE_GUIDE_CHANNELLERSLAB_POWER uint16 = 81
|
OPEN_STATE_GUIDE_CHANNELLERSLAB_POWER = 81
|
||||||
OPEN_STATE_GUIDE_HIDEANDSEEK_SKILL uint16 = 82
|
OPEN_STATE_GUIDE_HIDEANDSEEK_SKILL = 82
|
||||||
OPEN_STATE_GUIDE_HOMEWORLD_MAPLIST uint16 = 83
|
OPEN_STATE_GUIDE_HOMEWORLD_MAPLIST = 83
|
||||||
OPEN_STATE_GUIDE_RELICRESOLVE uint16 = 84
|
OPEN_STATE_GUIDE_RELICRESOLVE = 84
|
||||||
OPEN_STATE_GUIDE_GGUIDE uint16 = 85
|
OPEN_STATE_GUIDE_GGUIDE = 85
|
||||||
OPEN_STATE_GUIDE_GGUIDE_HINT uint16 = 86
|
OPEN_STATE_GUIDE_GGUIDE_HINT = 86
|
||||||
OPEN_STATE_CITY_REPUATION_MENGDE uint16 = 800
|
OPEN_STATE_CITY_REPUATION_MENGDE = 800
|
||||||
OPEN_STATE_CITY_REPUATION_LIYUE uint16 = 801
|
OPEN_STATE_CITY_REPUATION_LIYUE = 801
|
||||||
OPEN_STATE_CITY_REPUATION_UI_HINT uint16 = 802
|
OPEN_STATE_CITY_REPUATION_UI_HINT = 802
|
||||||
OPEN_STATE_CITY_REPUATION_INAZUMA uint16 = 803
|
OPEN_STATE_CITY_REPUATION_INAZUMA = 803
|
||||||
OPEN_STATE_SHOP_TYPE_MALL uint16 = 900
|
OPEN_STATE_SHOP_TYPE_MALL = 900
|
||||||
OPEN_STATE_SHOP_TYPE_RECOMMANDED uint16 = 901
|
OPEN_STATE_SHOP_TYPE_RECOMMANDED = 901
|
||||||
OPEN_STATE_SHOP_TYPE_GENESISCRYSTAL uint16 = 902
|
OPEN_STATE_SHOP_TYPE_GENESISCRYSTAL = 902
|
||||||
OPEN_STATE_SHOP_TYPE_GIFTPACKAGE uint16 = 903
|
OPEN_STATE_SHOP_TYPE_GIFTPACKAGE = 903
|
||||||
OPEN_STATE_SHOP_TYPE_PAIMON uint16 = 1001
|
OPEN_STATE_SHOP_TYPE_PAIMON = 1001
|
||||||
OPEN_STATE_SHOP_TYPE_CITY uint16 = 1002
|
OPEN_STATE_SHOP_TYPE_CITY = 1002
|
||||||
OPEN_STATE_SHOP_TYPE_BLACKSMITH uint16 = 1003
|
OPEN_STATE_SHOP_TYPE_BLACKSMITH = 1003
|
||||||
OPEN_STATE_SHOP_TYPE_GROCERY uint16 = 1004
|
OPEN_STATE_SHOP_TYPE_GROCERY = 1004
|
||||||
OPEN_STATE_SHOP_TYPE_FOOD uint16 = 1005
|
OPEN_STATE_SHOP_TYPE_FOOD = 1005
|
||||||
OPEN_STATE_SHOP_TYPE_SEA_LAMP uint16 = 1006
|
OPEN_STATE_SHOP_TYPE_SEA_LAMP = 1006
|
||||||
OPEN_STATE_SHOP_TYPE_VIRTUAL_SHOP uint16 = 1007
|
OPEN_STATE_SHOP_TYPE_VIRTUAL_SHOP = 1007
|
||||||
OPEN_STATE_SHOP_TYPE_LIYUE_GROCERY uint16 = 1008
|
OPEN_STATE_SHOP_TYPE_LIYUE_GROCERY = 1008
|
||||||
OPEN_STATE_SHOP_TYPE_LIYUE_SOUVENIR uint16 = 1009
|
OPEN_STATE_SHOP_TYPE_LIYUE_SOUVENIR = 1009
|
||||||
OPEN_STATE_SHOP_TYPE_LIYUE_RESTAURANT uint16 = 1010
|
OPEN_STATE_SHOP_TYPE_LIYUE_RESTAURANT = 1010
|
||||||
OPEN_STATE_SHOP_TYPE_INAZUMA_SOUVENIR uint16 = 1011
|
OPEN_STATE_SHOP_TYPE_INAZUMA_SOUVENIR = 1011
|
||||||
OPEN_STATE_SHOP_TYPE_NPC_TOMOKI uint16 = 1012
|
OPEN_STATE_SHOP_TYPE_NPC_TOMOKI = 1012
|
||||||
OPEN_ADVENTURE_MANUAL uint16 = 1100
|
OPEN_ADVENTURE_MANUAL = 1100
|
||||||
OPEN_ADVENTURE_MANUAL_CITY_MENGDE uint16 = 1101
|
OPEN_ADVENTURE_MANUAL_CITY_MENGDE = 1101
|
||||||
OPEN_ADVENTURE_MANUAL_CITY_LIYUE uint16 = 1102
|
OPEN_ADVENTURE_MANUAL_CITY_LIYUE = 1102
|
||||||
OPEN_ADVENTURE_MANUAL_MONSTER uint16 = 1103
|
OPEN_ADVENTURE_MANUAL_MONSTER = 1103
|
||||||
OPEN_ADVENTURE_MANUAL_BOSS_DUNGEON uint16 = 1104
|
OPEN_ADVENTURE_MANUAL_BOSS_DUNGEON = 1104
|
||||||
OPEN_STATE_ACTIVITY_SEALAMP uint16 = 1200
|
OPEN_STATE_ACTIVITY_SEALAMP = 1200
|
||||||
OPEN_STATE_ACTIVITY_SEALAMP_TAB2 uint16 = 1201
|
OPEN_STATE_ACTIVITY_SEALAMP_TAB2 = 1201
|
||||||
OPEN_STATE_ACTIVITY_SEALAMP_TAB3 uint16 = 1202
|
OPEN_STATE_ACTIVITY_SEALAMP_TAB3 = 1202
|
||||||
OPEN_STATE_BATTLE_PASS uint16 = 1300
|
OPEN_STATE_BATTLE_PASS = 1300
|
||||||
OPEN_STATE_BATTLE_PASS_ENTRY uint16 = 1301
|
OPEN_STATE_BATTLE_PASS_ENTRY = 1301
|
||||||
OPEN_STATE_ACTIVITY_CRUCIBLE uint16 = 1400
|
OPEN_STATE_ACTIVITY_CRUCIBLE = 1400
|
||||||
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_OPEN uint16 = 1401
|
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_OPEN = 1401
|
||||||
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_CLOSE uint16 = 1402
|
OPEN_STATE_ACTIVITY_NEWBEEBOUNS_CLOSE = 1402
|
||||||
OPEN_STATE_ACTIVITY_ENTRY_OPEN uint16 = 1403
|
OPEN_STATE_ACTIVITY_ENTRY_OPEN = 1403
|
||||||
OPEN_STATE_MENGDE_INFUSEDCRYSTAL uint16 = 1404
|
OPEN_STATE_MENGDE_INFUSEDCRYSTAL = 1404
|
||||||
OPEN_STATE_LIYUE_INFUSEDCRYSTAL uint16 = 1405
|
OPEN_STATE_LIYUE_INFUSEDCRYSTAL = 1405
|
||||||
OPEN_STATE_SNOW_MOUNTAIN_ELDER_TREE uint16 = 1406
|
OPEN_STATE_SNOW_MOUNTAIN_ELDER_TREE = 1406
|
||||||
OPEN_STATE_MIRACLE_RING uint16 = 1407
|
OPEN_STATE_MIRACLE_RING = 1407
|
||||||
OPEN_STATE_COOP_LINE uint16 = 1408
|
OPEN_STATE_COOP_LINE = 1408
|
||||||
OPEN_STATE_INAZUMA_INFUSEDCRYSTAL uint16 = 1409
|
OPEN_STATE_INAZUMA_INFUSEDCRYSTAL = 1409
|
||||||
OPEN_STATE_FISH uint16 = 1410
|
OPEN_STATE_FISH = 1410
|
||||||
OPEN_STATE_GUIDE_SUMO_TEAM_SKILL uint16 = 1411
|
OPEN_STATE_GUIDE_SUMO_TEAM_SKILL = 1411
|
||||||
OPEN_STATE_GUIDE_FISH_RECIPE uint16 = 1412
|
OPEN_STATE_GUIDE_FISH_RECIPE = 1412
|
||||||
OPEN_STATE_HOME uint16 = 1500
|
OPEN_STATE_HOME = 1500
|
||||||
OPEN_STATE_ACTIVITY_HOMEWORLD uint16 = 1501
|
OPEN_STATE_ACTIVITY_HOMEWORLD = 1501
|
||||||
OPEN_STATE_ADEPTIABODE uint16 = 1502
|
OPEN_STATE_ADEPTIABODE = 1502
|
||||||
OPEN_STATE_HOME_AVATAR uint16 = 1503
|
OPEN_STATE_HOME_AVATAR = 1503
|
||||||
OPEN_STATE_HOME_EDIT uint16 = 1504
|
OPEN_STATE_HOME_EDIT = 1504
|
||||||
OPEN_STATE_HOME_EDIT_TIPS uint16 = 1505
|
OPEN_STATE_HOME_EDIT_TIPS = 1505
|
||||||
OPEN_STATE_RELIQUARY_DECOMPOSE uint16 = 1600
|
OPEN_STATE_RELIQUARY_DECOMPOSE = 1600
|
||||||
OPEN_STATE_ACTIVITY_H5 uint16 = 1700
|
OPEN_STATE_ACTIVITY_H5 = 1700
|
||||||
OPEN_STATE_ORAIONOKAMI uint16 = 2000
|
OPEN_STATE_ORAIONOKAMI = 2000
|
||||||
OPEN_STATE_GUIDE_CHESS_MISSION_CHECK uint16 = 2001
|
OPEN_STATE_GUIDE_CHESS_MISSION_CHECK = 2001
|
||||||
OPEN_STATE_GUIDE_CHESS_BUILD uint16 = 2002
|
OPEN_STATE_GUIDE_CHESS_BUILD = 2002
|
||||||
OPEN_STATE_GUIDE_CHESS_WIND_TOWER_CIRCLE uint16 = 2003
|
OPEN_STATE_GUIDE_CHESS_WIND_TOWER_CIRCLE = 2003
|
||||||
OPEN_STATE_GUIDE_CHESS_CARD_SELECT uint16 = 2004
|
OPEN_STATE_GUIDE_CHESS_CARD_SELECT = 2004
|
||||||
OPEN_STATE_INAZUMA_MAINQUEST_FINISHED uint16 = 2005
|
OPEN_STATE_INAZUMA_MAINQUEST_FINISHED = 2005
|
||||||
OPEN_STATE_PAIMON_LVINFO uint16 = 2100
|
OPEN_STATE_PAIMON_LVINFO = 2100
|
||||||
OPEN_STATE_TELEPORT_HUD uint16 = 2101
|
OPEN_STATE_TELEPORT_HUD = 2101
|
||||||
OPEN_STATE_GUIDE_MAP_UNLOCK uint16 = 2102
|
OPEN_STATE_GUIDE_MAP_UNLOCK = 2102
|
||||||
OPEN_STATE_GUIDE_PAIMON_LVINFO uint16 = 2103
|
OPEN_STATE_GUIDE_PAIMON_LVINFO = 2103
|
||||||
OPEN_STATE_GUIDE_AMBORTRANSPORT uint16 = 2104
|
OPEN_STATE_GUIDE_AMBORTRANSPORT = 2104
|
||||||
OPEN_STATE_GUIDE_FLY_SECOND uint16 = 2105
|
OPEN_STATE_GUIDE_FLY_SECOND = 2105
|
||||||
OPEN_STATE_GUIDE_KAEYA_CLUE uint16 = 2106
|
OPEN_STATE_GUIDE_KAEYA_CLUE = 2106
|
||||||
OPEN_STATE_CAPTURE_CODEX uint16 = 2107
|
OPEN_STATE_CAPTURE_CODEX = 2107
|
||||||
OPEN_STATE_ACTIVITY_FISH_OPEN uint16 = 2200
|
OPEN_STATE_ACTIVITY_FISH_OPEN = 2200
|
||||||
OPEN_STATE_ACTIVITY_FISH_CLOSE uint16 = 2201
|
OPEN_STATE_ACTIVITY_FISH_CLOSE = 2201
|
||||||
OPEN_STATE_GUIDE_ROGUE_MAP uint16 = 2205
|
OPEN_STATE_GUIDE_ROGUE_MAP = 2205
|
||||||
OPEN_STATE_GUIDE_ROGUE_RUNE uint16 = 2206
|
OPEN_STATE_GUIDE_ROGUE_RUNE = 2206
|
||||||
OPEN_STATE_GUIDE_BARTENDER_FORMULA uint16 = 2210
|
OPEN_STATE_GUIDE_BARTENDER_FORMULA = 2210
|
||||||
OPEN_STATE_GUIDE_BARTENDER_MIX uint16 = 2211
|
OPEN_STATE_GUIDE_BARTENDER_MIX = 2211
|
||||||
OPEN_STATE_GUIDE_BARTENDER_CUP uint16 = 2212
|
OPEN_STATE_GUIDE_BARTENDER_CUP = 2212
|
||||||
OPEN_STATE_GUIDE_MAIL_FAVORITES uint16 = 2400
|
OPEN_STATE_GUIDE_MAIL_FAVORITES = 2400
|
||||||
OPEN_STATE_GUIDE_POTION_CONFIGURE uint16 = 2401
|
OPEN_STATE_GUIDE_POTION_CONFIGURE = 2401
|
||||||
OPEN_STATE_GUIDE_LANV2_FIREWORK uint16 = 2402
|
OPEN_STATE_GUIDE_LANV2_FIREWORK = 2402
|
||||||
OPEN_STATE_LOADINGTIPS_ENKANOMIYA uint16 = 2403
|
OPEN_STATE_LOADINGTIPS_ENKANOMIYA = 2403
|
||||||
OPEN_STATE_MICHIAE_CASKET uint16 = 2500
|
OPEN_STATE_MICHIAE_CASKET = 2500
|
||||||
OPEN_STATE_MAIL_COLLECT_UNLOCK_RED_POINT uint16 = 2501
|
OPEN_STATE_MAIL_COLLECT_UNLOCK_RED_POINT = 2501
|
||||||
OPEN_STATE_LUMEN_STONE uint16 = 2600
|
OPEN_STATE_LUMEN_STONE = 2600
|
||||||
OPEN_STATE_GUIDE_CRYSTALLINK_BUFF uint16 = 2601
|
OPEN_STATE_GUIDE_CRYSTALLINK_BUFF = 2601
|
||||||
)
|
)
|
||||||
|
|
||||||
var ALL_OPEN_STATE []uint16
|
var ALL_OPEN_STATE []uint16
|
||||||
|
|||||||
@@ -1,46 +1,46 @@
|
|||||||
package constant
|
package constant
|
||||||
|
|
||||||
const (
|
const (
|
||||||
PLAYER_PROP_EXP uint16 = 1001 // 角色经验
|
PLAYER_PROP_EXP = 1001 // 角色经验
|
||||||
PLAYER_PROP_BREAK_LEVEL uint16 = 1002 // 角色突破等阶
|
PLAYER_PROP_BREAK_LEVEL = 1002 // 角色突破等阶
|
||||||
PLAYER_PROP_SATIATION_VAL uint16 = 1003 // 角色饱食度
|
PLAYER_PROP_SATIATION_VAL = 1003 // 角色饱食度
|
||||||
PLAYER_PROP_SATIATION_PENALTY_TIME uint16 = 1004 // 角色饱食度溢出
|
PLAYER_PROP_SATIATION_PENALTY_TIME = 1004 // 角色饱食度溢出
|
||||||
PLAYER_PROP_LEVEL uint16 = 4001 // 角色等级
|
PLAYER_PROP_LEVEL = 4001 // 角色等级
|
||||||
PLAYER_PROP_LAST_CHANGE_AVATAR_TIME uint16 = 10001 // 上一次改变角色的时间 暂不确定
|
PLAYER_PROP_LAST_CHANGE_AVATAR_TIME = 10001 // 上一次改变角色的时间 暂不确定
|
||||||
PLAYER_PROP_MAX_SPRING_VOLUME uint16 = 10002 // 七天神像最大恢复血量 0-8500000
|
PLAYER_PROP_MAX_SPRING_VOLUME = 10002 // 七天神像最大恢复血量 0-8500000
|
||||||
PLAYER_PROP_CUR_SPRING_VOLUME uint16 = 10003 // 七天神像当前血量 0-PROP_MAX_SPRING_VOLUME
|
PLAYER_PROP_CUR_SPRING_VOLUME = 10003 // 七天神像当前血量 0-PROP_MAX_SPRING_VOLUME
|
||||||
PLAYER_PROP_IS_SPRING_AUTO_USE uint16 = 10004 // 是否开启靠近自动回血 0 1
|
PLAYER_PROP_IS_SPRING_AUTO_USE = 10004 // 是否开启靠近自动回血 0 1
|
||||||
PLAYER_PROP_SPRING_AUTO_USE_PERCENT uint16 = 10005 // 自动回血百分比 0-100
|
PLAYER_PROP_SPRING_AUTO_USE_PERCENT = 10005 // 自动回血百分比 0-100
|
||||||
PLAYER_PROP_IS_FLYABLE uint16 = 10006 // 禁止使用风之翼 0 1
|
PLAYER_PROP_IS_FLYABLE = 10006 // 禁止使用风之翼 0 1
|
||||||
PLAYER_PROP_IS_WEATHER_LOCKED uint16 = 10007 // 游戏内天气锁定
|
PLAYER_PROP_IS_WEATHER_LOCKED = 10007 // 游戏内天气锁定
|
||||||
PLAYER_PROP_IS_GAME_TIME_LOCKED uint16 = 10008 // 游戏内时间锁定
|
PLAYER_PROP_IS_GAME_TIME_LOCKED = 10008 // 游戏内时间锁定
|
||||||
PLAYER_PROP_IS_TRANSFERABLE uint16 = 10009 // 是否禁止传送 0 1
|
PLAYER_PROP_IS_TRANSFERABLE = 10009 // 是否禁止传送 0 1
|
||||||
PLAYER_PROP_MAX_STAMINA uint16 = 10010 // 最大体力 0-24000
|
PLAYER_PROP_MAX_STAMINA = 10010 // 最大体力 0-24000
|
||||||
PLAYER_PROP_CUR_PERSIST_STAMINA uint16 = 10011 // 当前体力 0-PROP_MAX_STAMINA
|
PLAYER_PROP_CUR_PERSIST_STAMINA = 10011 // 当前体力 0-PROP_MAX_STAMINA
|
||||||
PLAYER_PROP_CUR_TEMPORARY_STAMINA uint16 = 10012 // 当前临时体力 暂不确定
|
PLAYER_PROP_CUR_TEMPORARY_STAMINA = 10012 // 当前临时体力 暂不确定
|
||||||
PLAYER_PROP_PLAYER_LEVEL uint16 = 10013 // 冒险等级
|
PLAYER_PROP_PLAYER_LEVEL = 10013 // 冒险等级
|
||||||
PLAYER_PROP_PLAYER_EXP uint16 = 10014 // 冒险经验
|
PLAYER_PROP_PLAYER_EXP = 10014 // 冒险经验
|
||||||
PLAYER_PROP_PLAYER_HCOIN uint16 = 10015 // 原石 可以为负数
|
PLAYER_PROP_PLAYER_HCOIN = 10015 // 原石 可以为负数
|
||||||
PLAYER_PROP_PLAYER_SCOIN uint16 = 10016 // 摩拉
|
PLAYER_PROP_PLAYER_SCOIN = 10016 // 摩拉
|
||||||
PLAYER_PROP_PLAYER_MP_SETTING_TYPE uint16 = 10017 // 多人游戏世界权限 0禁止加入 1直接加入 2需要申请
|
PLAYER_PROP_PLAYER_MP_SETTING_TYPE = 10017 // 多人游戏世界权限 0禁止加入 1直接加入 2需要申请
|
||||||
PLAYER_PROP_IS_MP_MODE_AVAILABLE uint16 = 10018 // 玩家当前的世界是否可加入 0 1 例如任务中就不可加入
|
PLAYER_PROP_IS_MP_MODE_AVAILABLE = 10018 // 玩家当前的世界是否可加入 0 1 例如任务中就不可加入
|
||||||
PLAYER_PROP_PLAYER_WORLD_LEVEL uint16 = 10019 // 世界等级 0-8
|
PLAYER_PROP_PLAYER_WORLD_LEVEL = 10019 // 世界等级 0-8
|
||||||
PLAYER_PROP_PLAYER_RESIN uint16 = 10020 // 树脂 0-2000
|
PLAYER_PROP_PLAYER_RESIN = 10020 // 树脂 0-2000
|
||||||
PLAYER_PROP_PLAYER_WAIT_SUB_HCOIN uint16 = 10022 // 暂存的原石 暂不确定
|
PLAYER_PROP_PLAYER_WAIT_SUB_HCOIN = 10022 // 暂存的原石 暂不确定
|
||||||
PLAYER_PROP_PLAYER_WAIT_SUB_SCOIN uint16 = 10023 // 暂存的摩拉 暂不确定
|
PLAYER_PROP_PLAYER_WAIT_SUB_SCOIN = 10023 // 暂存的摩拉 暂不确定
|
||||||
PLAYER_PROP_IS_ONLY_MP_WITH_PS_PLAYER uint16 = 10024 // 当前玩家多人世界里是否有PS主机玩家 0 1
|
PLAYER_PROP_IS_ONLY_MP_WITH_PS_PLAYER = 10024 // 当前玩家多人世界里是否有PS主机玩家 0 1
|
||||||
PLAYER_PROP_PLAYER_MCOIN uint16 = 10025 // 创世结晶 可以为负数
|
PLAYER_PROP_PLAYER_MCOIN = 10025 // 创世结晶 可以为负数
|
||||||
PLAYER_PROP_PLAYER_WAIT_SUB_MCOIN uint16 = 10026 // 暂存的创世结晶 暂不确定
|
PLAYER_PROP_PLAYER_WAIT_SUB_MCOIN = 10026 // 暂存的创世结晶 暂不确定
|
||||||
PLAYER_PROP_PLAYER_LEGENDARY_KEY uint16 = 10027 // 传说任务钥匙
|
PLAYER_PROP_PLAYER_LEGENDARY_KEY = 10027 // 传说任务钥匙
|
||||||
PLAYER_PROP_IS_HAS_FIRST_SHARE uint16 = 10028 // 是否拥有抽卡结果首次分享奖励 暂不确定
|
PLAYER_PROP_IS_HAS_FIRST_SHARE = 10028 // 是否拥有抽卡结果首次分享奖励 暂不确定
|
||||||
PLAYER_PROP_PLAYER_FORGE_POINT uint16 = 10029 // 锻造相关
|
PLAYER_PROP_PLAYER_FORGE_POINT = 10029 // 锻造相关
|
||||||
PLAYER_PROP_CUR_CLIMATE_METER uint16 = 10035 // 天气相关
|
PLAYER_PROP_CUR_CLIMATE_METER = 10035 // 天气相关
|
||||||
PLAYER_PROP_CUR_CLIMATE_TYPE uint16 = 10036 // 天气相关
|
PLAYER_PROP_CUR_CLIMATE_TYPE = 10036 // 天气相关
|
||||||
PLAYER_PROP_CUR_CLIMATE_AREA_ID uint16 = 10037 // 天气相关
|
PLAYER_PROP_CUR_CLIMATE_AREA_ID = 10037 // 天气相关
|
||||||
PLAYER_PROP_CUR_CLIMATE_AREA_CLIMATE_TYPE uint16 = 10038 // 天气相关
|
PLAYER_PROP_CUR_CLIMATE_AREA_CLIMATE_TYPE = 10038 // 天气相关
|
||||||
PLAYER_PROP_PLAYER_WORLD_LEVEL_LIMIT uint16 = 10039 // 降低世界等级到此等级 暂不确定
|
PLAYER_PROP_PLAYER_WORLD_LEVEL_LIMIT = 10039 // 降低世界等级到此等级 暂不确定
|
||||||
PLAYER_PROP_PLAYER_WORLD_LEVEL_ADJUST_CD uint16 = 10040 // 降低世界等级的CD
|
PLAYER_PROP_PLAYER_WORLD_LEVEL_ADJUST_CD = 10040 // 降低世界等级的CD
|
||||||
PLAYER_PROP_PLAYER_LEGENDARY_DAILY_TASK_NUM uint16 = 10041 // 传说每日任务数量 暂不确定
|
PLAYER_PROP_PLAYER_LEGENDARY_DAILY_TASK_NUM = 10041 // 传说每日任务数量 暂不确定
|
||||||
PLAYER_PROP_PLAYER_HOME_COIN uint16 = 10042 // 洞天宝钱
|
PLAYER_PROP_PLAYER_HOME_COIN = 10042 // 洞天宝钱
|
||||||
PLAYER_PROP_PLAYER_WAIT_SUB_HOME_COIN uint16 = 10043 // 暂存的洞天宝钱 暂不确定
|
PLAYER_PROP_PLAYER_WAIT_SUB_HOME_COIN = 10043 // 暂存的洞天宝钱 暂不确定
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,24 +2,24 @@ package constant
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
// 消耗耐力
|
// 消耗耐力
|
||||||
STAMINA_COST_CLIMBING_BASE int32 = -100 // 缓慢攀爬基数
|
STAMINA_COST_CLIMBING_BASE = -100 // 缓慢攀爬基数
|
||||||
STAMINA_COST_CLIMB_START int32 = -500 // 攀爬开始
|
STAMINA_COST_CLIMB_START = -500 // 攀爬开始
|
||||||
STAMINA_COST_CLIMB_JUMP int32 = -2500 // 攀爬跳跃
|
STAMINA_COST_CLIMB_JUMP = -2500 // 攀爬跳跃
|
||||||
STAMINA_COST_DASH int32 = -360 // 快速跑步
|
STAMINA_COST_DASH = -360 // 快速跑步
|
||||||
STAMINA_COST_FLY int32 = -60 // 滑翔
|
STAMINA_COST_FLY = -60 // 滑翔
|
||||||
STAMINA_COST_SPRINT int32 = -1800 // 冲刺
|
STAMINA_COST_SPRINT = -1800 // 冲刺
|
||||||
STAMINA_COST_SWIM_DASH_START int32 = -200 // 快速游泳开始
|
STAMINA_COST_SWIM_DASH_START = -200 // 快速游泳开始
|
||||||
STAMINA_COST_SWIM_DASH int32 = -204 // 快速游泳
|
STAMINA_COST_SWIM_DASH = -204 // 快速游泳
|
||||||
STAMINA_COST_SWIMMING int32 = -400 // 缓慢游泳
|
STAMINA_COST_SWIMMING = -400 // 缓慢游泳
|
||||||
// 恢复耐力
|
// 恢复耐力
|
||||||
STAMINA_COST_POWERED_FLY int32 = 500 // 滑翔加速(风圈等)
|
STAMINA_COST_POWERED_FLY = 500 // 滑翔加速(风圈等)
|
||||||
STAMINA_COST_RUN int32 = 500 // 正常跑步
|
STAMINA_COST_RUN = 500 // 正常跑步
|
||||||
STAMINA_COST_STANDBY int32 = 500 // 站立
|
STAMINA_COST_STANDBY = 500 // 站立
|
||||||
STAMINA_COST_WALK int32 = 500 // 走路
|
STAMINA_COST_WALK = 500 // 走路
|
||||||
// 载具浪船
|
// 载具浪船
|
||||||
STAMINA_COST_SKIFF_DASH int32 = -204 // 浪船加速
|
STAMINA_COST_SKIFF_DASH = -204 // 浪船加速
|
||||||
STAMINA_COST_SKIFF_NORMAL int32 = 500 // 浪船正常移动 (回复耐力)
|
STAMINA_COST_SKIFF_NORMAL = 500 // 浪船正常移动 (回复耐力)
|
||||||
STAMINA_COST_POWERED_SKIFF int32 = 500 // 浪船加速(风圈等) (回复耐力)
|
STAMINA_COST_POWERED_SKIFF = 500 // 浪船加速(风圈等) (回复耐力)
|
||||||
STAMINA_COST_IN_SKIFF int32 = 500 // 处于浪船中回复角色耐力 (回复耐力)
|
STAMINA_COST_IN_SKIFF = 500 // 处于浪船中回复角色耐力 (回复耐力)
|
||||||
STAMINA_COST_SKIFF_NOBODY int32 = 500 // 浪船无人时回复载具耐力 (回复耐力)
|
STAMINA_COST_SKIFF_NOBODY = 500 // 浪船无人时回复载具耐力 (回复耐力)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -384,9 +384,15 @@ func ConvClientPbDataToServer(protoObj pb.Message, clientCmdProtoMap *client_pro
|
|||||||
ntf := protoObj.(*proto.AbilityInvocationsNotify)
|
ntf := protoObj.(*proto.AbilityInvocationsNotify)
|
||||||
for _, entry := range ntf.Invokes {
|
for _, entry := range ntf.Invokes {
|
||||||
switch entry.ArgumentType {
|
switch entry.ArgumentType {
|
||||||
|
case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_CHANGE:
|
||||||
|
serverProtoObj := new(proto.AbilityMetaModifierChange)
|
||||||
|
ConvClientPbDataToServerCore("AbilityMetaModifierChange", serverProtoObj, &entry.AbilityData, clientCmdProtoMap)
|
||||||
case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA:
|
case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA:
|
||||||
serverProtoObj := new(proto.AbilityMixinCostStamina)
|
serverProtoObj := new(proto.AbilityMixinCostStamina)
|
||||||
ConvClientPbDataToServerCore("AbilityMixinCostStamina", serverProtoObj, &entry.AbilityData, clientCmdProtoMap)
|
ConvClientPbDataToServerCore("AbilityMixinCostStamina", serverProtoObj, &entry.AbilityData, clientCmdProtoMap)
|
||||||
|
case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_DURABILITY_CHANGE:
|
||||||
|
serverProtoObj := new(proto.AbilityMetaModifierDurabilityChange)
|
||||||
|
ConvClientPbDataToServerCore("AbilityMetaModifierDurabilityChange", serverProtoObj, &entry.AbilityData, clientCmdProtoMap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case *proto.ClientAbilityChangeNotify:
|
case *proto.ClientAbilityChangeNotify:
|
||||||
@@ -429,9 +435,15 @@ func ConvServerPbDataToClient(protoObj pb.Message, clientCmdProtoMap *client_pro
|
|||||||
ntf := protoObj.(*proto.AbilityInvocationsNotify)
|
ntf := protoObj.(*proto.AbilityInvocationsNotify)
|
||||||
for _, entry := range ntf.Invokes {
|
for _, entry := range ntf.Invokes {
|
||||||
switch entry.ArgumentType {
|
switch entry.ArgumentType {
|
||||||
|
case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_CHANGE:
|
||||||
|
serverProtoObj := new(proto.AbilityMetaModifierChange)
|
||||||
|
ConvServerPbDataToClientCore("AbilityMetaModifierChange", serverProtoObj, &entry.AbilityData, clientCmdProtoMap)
|
||||||
case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA:
|
case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA:
|
||||||
serverProtoObj := new(proto.AbilityMixinCostStamina)
|
serverProtoObj := new(proto.AbilityMixinCostStamina)
|
||||||
ConvServerPbDataToClientCore("AbilityMixinCostStamina", serverProtoObj, &entry.AbilityData, clientCmdProtoMap)
|
ConvServerPbDataToClientCore("AbilityMixinCostStamina", serverProtoObj, &entry.AbilityData, clientCmdProtoMap)
|
||||||
|
case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_DURABILITY_CHANGE:
|
||||||
|
serverProtoObj := new(proto.AbilityMetaModifierDurabilityChange)
|
||||||
|
ConvServerPbDataToClientCore("AbilityMetaModifierDurabilityChange", serverProtoObj, &entry.AbilityData, clientCmdProtoMap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case *proto.ClientAbilityChangeNotify:
|
case *proto.ClientAbilityChangeNotify:
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ func UpdateFrame(rgb bool) {
|
|||||||
for _, v := range SCREEN_ENTITY_ID_LIST {
|
for _, v := range SCREEN_ENTITY_ID_LIST {
|
||||||
scene.DestroyEntity(v)
|
scene.DestroyEntity(v)
|
||||||
}
|
}
|
||||||
GAME.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_REMOVE, SCREEN_ENTITY_ID_LIST, false, nil)
|
GAME.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_REMOVE, SCREEN_ENTITY_ID_LIST, false, 0)
|
||||||
SCREEN_ENTITY_ID_LIST = make([]uint32, 0)
|
SCREEN_ENTITY_ID_LIST = make([]uint32, 0)
|
||||||
leftTopPos := &model.Vector{
|
leftTopPos := &model.Vector{
|
||||||
X: BASE_POS.X + float64(SCREEN_WIDTH)*SCREEN_DPI/2,
|
X: BASE_POS.X + float64(SCREEN_WIDTH)*SCREEN_DPI/2,
|
||||||
|
|||||||
@@ -375,9 +375,9 @@ func (g *Game) SendToWorldA(world *World, cmdId uint16, seq uint32, msg pb.Messa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendToWorldAEC 给世界内除某玩家(一般是自己)以外的所有玩家发消息
|
// SendToWorldAEC 给世界内除某玩家(一般是自己)以外的所有玩家发消息
|
||||||
func (g *Game) SendToWorldAEC(world *World, cmdId uint16, seq uint32, msg pb.Message, uid uint32) {
|
func (g *Game) SendToWorldAEC(world *World, cmdId uint16, seq uint32, msg pb.Message, aecUid uint32) {
|
||||||
for _, v := range world.GetAllPlayer() {
|
for _, v := range world.GetAllPlayer() {
|
||||||
if uid == v.PlayerID {
|
if aecUid == v.PlayerID {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
GAME.SendMsg(cmdId, v.PlayerID, seq, msg)
|
GAME.SendMsg(cmdId, v.PlayerID, seq, msg)
|
||||||
@@ -389,6 +389,44 @@ func (g *Game) SendToWorldH(world *World, cmdId uint16, seq uint32, msg pb.Messa
|
|||||||
GAME.SendMsg(cmdId, world.GetOwner().PlayerID, seq, msg)
|
GAME.SendMsg(cmdId, world.GetOwner().PlayerID, seq, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SendToSceneA 给场景内所有玩家发消息
|
||||||
|
func (g *Game) SendToSceneA(scene *Scene, cmdId uint16, seq uint32, msg pb.Message) {
|
||||||
|
world := scene.GetWorld()
|
||||||
|
if WORLD_MANAGER.IsBigWorld(world) {
|
||||||
|
bigWorldAoi := world.GetBigWorldAoi()
|
||||||
|
otherWorldAvatarMap := bigWorldAoi.GetObjectListByPos(float32(SELF.Pos.X), float32(SELF.Pos.Y), float32(SELF.Pos.Z))
|
||||||
|
for uid := range otherWorldAvatarMap {
|
||||||
|
GAME.SendMsg(cmdId, uint32(uid), seq, msg)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for _, v := range scene.GetAllPlayer() {
|
||||||
|
GAME.SendMsg(cmdId, v.PlayerID, seq, msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SendToSceneAEC 给场景内除某玩家(一般是自己)以外的所有玩家发消息
|
||||||
|
func (g *Game) SendToSceneAEC(scene *Scene, cmdId uint16, seq uint32, msg pb.Message, aecUid uint32) {
|
||||||
|
world := scene.GetWorld()
|
||||||
|
if WORLD_MANAGER.IsBigWorld(world) {
|
||||||
|
bigWorldAoi := world.GetBigWorldAoi()
|
||||||
|
otherWorldAvatarMap := bigWorldAoi.GetObjectListByPos(float32(SELF.Pos.X), float32(SELF.Pos.Y), float32(SELF.Pos.Z))
|
||||||
|
for uid := range otherWorldAvatarMap {
|
||||||
|
if aecUid == uint32(uid) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
GAME.SendMsg(cmdId, uint32(uid), seq, msg)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for _, v := range scene.GetAllPlayer() {
|
||||||
|
if aecUid == v.PlayerID {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
GAME.SendMsg(cmdId, v.PlayerID, seq, msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (g *Game) ReLoginPlayer(userId uint32, isQuitMp bool) {
|
func (g *Game) ReLoginPlayer(userId uint32, isQuitMp bool) {
|
||||||
reason := proto.ClientReconnectReason_CLIENT_RECONNNECT_NONE
|
reason := proto.ClientReconnectReason_CLIENT_RECONNNECT_NONE
|
||||||
if isQuitMp {
|
if isQuitMp {
|
||||||
|
|||||||
@@ -327,6 +327,10 @@ func (w *World) GetWorldPlayerNum() int {
|
|||||||
return len(w.playerMap)
|
return len(w.playerMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *World) GetBigWorldAoi() *alg.AoiManager {
|
||||||
|
return w.bigWorldAoi
|
||||||
|
}
|
||||||
|
|
||||||
func (w *World) AddPlayer(player *model.Player, sceneId uint32) {
|
func (w *World) AddPlayer(player *model.Player, sceneId uint32) {
|
||||||
w.peerList = append(w.peerList, player)
|
w.peerList = append(w.peerList, player)
|
||||||
w.playerMap[player.PlayerID] = player
|
w.playerMap[player.PlayerID] = player
|
||||||
@@ -714,6 +718,9 @@ func (w *World) UpdateMultiplayerTeam() {
|
|||||||
// 世界聊天
|
// 世界聊天
|
||||||
|
|
||||||
func (w *World) AddChat(chatInfo *proto.ChatInfo) {
|
func (w *World) AddChat(chatInfo *proto.ChatInfo) {
|
||||||
|
if len(w.chatMsgList) > 100 {
|
||||||
|
w.chatMsgList = w.chatMsgList[1:]
|
||||||
|
}
|
||||||
w.chatMsgList = append(w.chatMsgList, chatInfo)
|
w.chatMsgList = append(w.chatMsgList, chatInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -276,9 +276,7 @@ func (g *Game) AvatarWearFlycloakReq(player *model.Player, payloadMsg pb.Message
|
|||||||
AvatarGuid: req.AvatarGuid,
|
AvatarGuid: req.AvatarGuid,
|
||||||
FlycloakId: req.FlycloakId,
|
FlycloakId: req.FlycloakId,
|
||||||
}
|
}
|
||||||
for _, scenePlayer := range scene.GetAllPlayer() {
|
g.SendToSceneA(scene, cmd.AvatarFlycloakChangeNotify, player.ClientSeq, avatarFlycloakChangeNotify)
|
||||||
g.SendMsg(cmd.AvatarFlycloakChangeNotify, scenePlayer.PlayerID, scenePlayer.ClientSeq, avatarFlycloakChangeNotify)
|
|
||||||
}
|
|
||||||
|
|
||||||
avatarWearFlycloakRsp := &proto.AvatarWearFlycloakRsp{
|
avatarWearFlycloakRsp := &proto.AvatarWearFlycloakRsp{
|
||||||
AvatarGuid: req.AvatarGuid,
|
AvatarGuid: req.AvatarGuid,
|
||||||
@@ -338,9 +336,7 @@ func (g *Game) AvatarChangeCostumeReq(player *model.Player, payloadMsg pb.Messag
|
|||||||
} else {
|
} else {
|
||||||
avatarChangeCostumeNotify.EntityInfo = g.PacketSceneEntityInfoAvatar(scene, player, avatar.AvatarId)
|
avatarChangeCostumeNotify.EntityInfo = g.PacketSceneEntityInfoAvatar(scene, player, avatar.AvatarId)
|
||||||
}
|
}
|
||||||
for _, scenePlayer := range scene.GetAllPlayer() {
|
g.SendToSceneA(scene, cmd.AvatarChangeCostumeNotify, player.ClientSeq, avatarChangeCostumeNotify)
|
||||||
g.SendMsg(cmd.AvatarChangeCostumeNotify, scenePlayer.PlayerID, scenePlayer.ClientSeq, avatarChangeCostumeNotify)
|
|
||||||
}
|
|
||||||
|
|
||||||
avatarChangeCostumeRsp := &proto.AvatarChangeCostumeRsp{
|
avatarChangeCostumeRsp := &proto.AvatarChangeCostumeRsp{
|
||||||
AvatarGuid: req.AvatarGuid,
|
AvatarGuid: req.AvatarGuid,
|
||||||
|
|||||||
@@ -253,9 +253,7 @@ func (g *Game) PlayerChatReq(player *model.Player, payloadMsg pb.Message) {
|
|||||||
ChannelId: channelId,
|
ChannelId: channelId,
|
||||||
ChatInfo: sendChatInfo,
|
ChatInfo: sendChatInfo,
|
||||||
}
|
}
|
||||||
for _, worldPlayer := range world.GetAllPlayer() {
|
g.SendToWorldA(world, cmd.PlayerChatNotify, player.ClientSeq, playerChatNotify)
|
||||||
g.SendMsg(cmd.PlayerChatNotify, worldPlayer.PlayerID, player.ClientSeq, playerChatNotify)
|
|
||||||
}
|
|
||||||
|
|
||||||
g.SendMsg(cmd.PlayerChatRsp, player.PlayerID, player.ClientSeq, new(proto.PlayerChatRsp))
|
g.SendMsg(cmd.PlayerChatRsp, player.PlayerID, player.ClientSeq, new(proto.PlayerChatRsp))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ func (g *Game) ScenePlayerLocationNotify(world *World) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GAME.SendToWorldA(world, cmd.ScenePlayerLocationNotify, 0, scenePlayerLocationNotify)
|
GAME.SendToSceneA(scene, cmd.ScenePlayerLocationNotify, 0, scenePlayerLocationNotify)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ func DoForward[IET model.InvokeEntryType](player *model.Player, invokeHandler *m
|
|||||||
if world == nil {
|
if world == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
scene := world.GetSceneById(player.SceneId)
|
||||||
if srcNtf != nil && copyFieldList != nil {
|
if srcNtf != nil && copyFieldList != nil {
|
||||||
for _, fieldName := range copyFieldList {
|
for _, fieldName := range copyFieldList {
|
||||||
reflection.CopyStructField(newNtf, srcNtf, fieldName)
|
reflection.CopyStructField(newNtf, srcNtf, fieldName)
|
||||||
@@ -36,11 +37,11 @@ func DoForward[IET model.InvokeEntryType](player *model.Player, invokeHandler *m
|
|||||||
}
|
}
|
||||||
if invokeHandler.AllLen() > 0 {
|
if invokeHandler.AllLen() > 0 {
|
||||||
reflection.SetStructFieldValue(newNtf, forwardField, invokeHandler.EntryListForwardAll)
|
reflection.SetStructFieldValue(newNtf, forwardField, invokeHandler.EntryListForwardAll)
|
||||||
GAME.SendToWorldA(world, cmdId, player.ClientSeq, newNtf)
|
GAME.SendToSceneA(scene, cmdId, player.ClientSeq, newNtf)
|
||||||
}
|
}
|
||||||
if invokeHandler.AllExceptCurLen() > 0 {
|
if invokeHandler.AllExceptCurLen() > 0 {
|
||||||
reflection.SetStructFieldValue(newNtf, forwardField, invokeHandler.EntryListForwardAllExceptCur)
|
reflection.SetStructFieldValue(newNtf, forwardField, invokeHandler.EntryListForwardAllExceptCur)
|
||||||
GAME.SendToWorldAEC(world, cmdId, player.ClientSeq, newNtf, player.PlayerID)
|
GAME.SendToSceneAEC(scene, cmdId, player.ClientSeq, newNtf, player.PlayerID)
|
||||||
}
|
}
|
||||||
if invokeHandler.HostLen() > 0 {
|
if invokeHandler.HostLen() > 0 {
|
||||||
reflection.SetStructFieldValue(newNtf, forwardField, invokeHandler.EntryListForwardHost)
|
reflection.SetStructFieldValue(newNtf, forwardField, invokeHandler.EntryListForwardHost)
|
||||||
@@ -74,13 +75,9 @@ func (g *Game) MassiveEntityElementOpBatchNotify(player *model.Player, payloadMs
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
scene := world.GetSceneById(player.SceneId)
|
scene := world.GetSceneById(player.SceneId)
|
||||||
if scene == nil {
|
|
||||||
logger.Error("scene is nil, sceneId: %v", player.SceneId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
req.OpIdx = scene.GetMeeoIndex()
|
req.OpIdx = scene.GetMeeoIndex()
|
||||||
scene.SetMeeoIndex(scene.GetMeeoIndex() + 1)
|
scene.SetMeeoIndex(scene.GetMeeoIndex() + 1)
|
||||||
g.SendToWorldA(world, cmd.MassiveEntityElementOpBatchNotify, player.ClientSeq, req)
|
g.SendToSceneA(scene, cmd.MassiveEntityElementOpBatchNotify, player.ClientSeq, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Message) {
|
func (g *Game) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Message) {
|
||||||
@@ -120,7 +117,7 @@ func (g *Game) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Messa
|
|||||||
currHp = 0
|
currHp = 0
|
||||||
}
|
}
|
||||||
fightProp[constant.FIGHT_PROP_CUR_HP] = currHp
|
fightProp[constant.FIGHT_PROP_CUR_HP] = currHp
|
||||||
g.EntityFightPropUpdateNotifyBroadcast(world, target)
|
g.EntityFightPropUpdateNotifyBroadcast(scene, target)
|
||||||
switch target.GetEntityType() {
|
switch target.GetEntityType() {
|
||||||
case constant.ENTITY_TYPE_AVATAR:
|
case constant.ENTITY_TYPE_AVATAR:
|
||||||
case constant.ENTITY_TYPE_MONSTER:
|
case constant.ENTITY_TYPE_MONSTER:
|
||||||
@@ -135,13 +132,7 @@ func (g *Game) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Messa
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
logger.Debug("[EvtBeingHit] GadgetData: %+v, EntityId: %v, uid: %v", gadgetDataConfig, target.GetId(), player.PlayerID)
|
logger.Debug("[EvtBeingHit] GadgetData: %+v, EntityId: %v, uid: %v", gadgetDataConfig, target.GetId(), player.PlayerID)
|
||||||
// TODO 临时的解决方案
|
g.handleGadgetEntityBeHitLow(player, target, attackResult.ElementType)
|
||||||
if strings.Contains(gadgetDataConfig.ServerLuaScript, "SetGadgetState") {
|
|
||||||
g.ChangeGadgetState(player, target.GetId(), constant.GADGET_STATE_GEAR_START)
|
|
||||||
}
|
|
||||||
if strings.Contains(gadgetDataConfig.ServerLuaScript, "Controller") {
|
|
||||||
g.ChangeGadgetState(player, target.GetId(), constant.GADGET_STATE_GEAR_START)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
case proto.CombatTypeArgument_ENTITY_MOVE:
|
case proto.CombatTypeArgument_ENTITY_MOVE:
|
||||||
entityMoveInfo := new(proto.EntityMoveInfo)
|
entityMoveInfo := new(proto.EntityMoveInfo)
|
||||||
@@ -161,24 +152,21 @@ func (g *Game) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Messa
|
|||||||
}
|
}
|
||||||
if sceneEntity.GetEntityType() == constant.ENTITY_TYPE_AVATAR {
|
if sceneEntity.GetEntityType() == constant.ENTITY_TYPE_AVATAR {
|
||||||
// 玩家实体在移动
|
// 玩家实体在移动
|
||||||
g.AoiPlayerMove(player, player.Pos, &model.Vector{
|
g.SceneBlockAoiPlayerMove(player, world, scene, player.Pos,
|
||||||
X: float64(motionInfo.Pos.X),
|
&model.Vector{X: float64(motionInfo.Pos.X), Y: float64(motionInfo.Pos.Y), Z: float64(motionInfo.Pos.Z)},
|
||||||
Y: float64(motionInfo.Pos.Y),
|
)
|
||||||
Z: float64(motionInfo.Pos.Z),
|
if WORLD_MANAGER.IsBigWorld(world) {
|
||||||
})
|
g.BigWorldAoiPlayerMove(player, world, scene, player.Pos,
|
||||||
|
&model.Vector{X: float64(motionInfo.Pos.X), Y: float64(motionInfo.Pos.Y), Z: float64(motionInfo.Pos.Z)},
|
||||||
|
)
|
||||||
|
}
|
||||||
// 场景区域触发器检测
|
// 场景区域触发器检测
|
||||||
g.SceneRegionTriggerCheck(player, player.Pos, &model.Vector{
|
g.SceneRegionTriggerCheck(player, player.Pos,
|
||||||
X: float64(motionInfo.Pos.X),
|
&model.Vector{X: float64(motionInfo.Pos.X), Y: float64(motionInfo.Pos.Y), Z: float64(motionInfo.Pos.Z)},
|
||||||
Y: float64(motionInfo.Pos.Y),
|
sceneEntity.GetId())
|
||||||
Z: float64(motionInfo.Pos.Z),
|
|
||||||
}, sceneEntity.GetId())
|
|
||||||
// 更新玩家的位置信息
|
// 更新玩家的位置信息
|
||||||
player.Pos.X = float64(motionInfo.Pos.X)
|
player.Pos.X, player.Pos.Y, player.Pos.Z = float64(motionInfo.Pos.X), float64(motionInfo.Pos.Y), float64(motionInfo.Pos.Z)
|
||||||
player.Pos.Y = float64(motionInfo.Pos.Y)
|
player.Rot.X, player.Rot.Y, player.Rot.Z = float64(motionInfo.Rot.X), float64(motionInfo.Rot.Y), float64(motionInfo.Rot.Z)
|
||||||
player.Pos.Z = float64(motionInfo.Pos.Z)
|
|
||||||
player.Rot.X = float64(motionInfo.Rot.X)
|
|
||||||
player.Rot.Y = float64(motionInfo.Rot.Y)
|
|
||||||
player.Rot.Z = float64(motionInfo.Rot.Z)
|
|
||||||
// 玩家安全位置更新
|
// 玩家安全位置更新
|
||||||
switch motionInfo.State {
|
switch motionInfo.State {
|
||||||
case proto.MotionState_MOTION_DANGER_RUN,
|
case proto.MotionState_MOTION_DANGER_RUN,
|
||||||
@@ -192,9 +180,7 @@ func (g *Game) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Messa
|
|||||||
proto.MotionState_MOTION_WALK,
|
proto.MotionState_MOTION_WALK,
|
||||||
proto.MotionState_MOTION_DASH:
|
proto.MotionState_MOTION_DASH:
|
||||||
// 仅在陆地时更新玩家安全位置
|
// 仅在陆地时更新玩家安全位置
|
||||||
player.SafePos.X = player.Pos.X
|
player.SafePos.X, player.SafePos.Y, player.SafePos.Z = player.Pos.X, player.Pos.Y, player.Pos.Z
|
||||||
player.SafePos.Y = player.Pos.Y
|
|
||||||
player.SafePos.Z = player.Pos.Z
|
|
||||||
}
|
}
|
||||||
// 处理耐力消耗
|
// 处理耐力消耗
|
||||||
g.ImmediateStamina(player, motionInfo.State)
|
g.ImmediateStamina(player, motionInfo.State)
|
||||||
@@ -202,13 +188,9 @@ func (g *Game) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Messa
|
|||||||
// 非玩家实体在移动
|
// 非玩家实体在移动
|
||||||
// 更新场景实体的位置信息
|
// 更新场景实体的位置信息
|
||||||
pos := sceneEntity.GetPos()
|
pos := sceneEntity.GetPos()
|
||||||
pos.X = float64(motionInfo.Pos.X)
|
pos.X, pos.Y, pos.Z = float64(motionInfo.Pos.X), float64(motionInfo.Pos.Y), float64(motionInfo.Pos.Z)
|
||||||
pos.Y = float64(motionInfo.Pos.Y)
|
|
||||||
pos.Z = float64(motionInfo.Pos.Z)
|
|
||||||
rot := sceneEntity.GetRot()
|
rot := sceneEntity.GetRot()
|
||||||
rot.X = float64(motionInfo.Rot.X)
|
rot.X, rot.Y, rot.Z = float64(motionInfo.Rot.X), float64(motionInfo.Rot.Y), float64(motionInfo.Rot.Z)
|
||||||
rot.Y = float64(motionInfo.Rot.Y)
|
|
||||||
rot.Z = float64(motionInfo.Rot.Z)
|
|
||||||
if sceneEntity.GetEntityType() == constant.ENTITY_TYPE_GADGET {
|
if sceneEntity.GetEntityType() == constant.ENTITY_TYPE_GADGET {
|
||||||
// 载具耐力消耗
|
// 载具耐力消耗
|
||||||
gadgetEntity := sceneEntity.GetGadgetEntity()
|
gadgetEntity := sceneEntity.GetGadgetEntity()
|
||||||
@@ -249,13 +231,7 @@ func (g *Game) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Messa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) AoiPlayerMove(player *model.Player, oldPos *model.Vector, newPos *model.Vector) {
|
func (g *Game) SceneBlockAoiPlayerMove(player *model.Player, world *World, scene *Scene, oldPos *model.Vector, newPos *model.Vector) {
|
||||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
|
||||||
if world == nil {
|
|
||||||
logger.Error("get player world is nil, uid: %v", player.PlayerID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
scene := world.GetSceneById(player.SceneId)
|
|
||||||
sceneBlockAoiMap := WORLD_MANAGER.GetSceneBlockAoiMap()
|
sceneBlockAoiMap := WORLD_MANAGER.GetSceneBlockAoiMap()
|
||||||
aoiManager, exist := sceneBlockAoiMap[player.SceneId]
|
aoiManager, exist := sceneBlockAoiMap[player.SceneId]
|
||||||
if !exist {
|
if !exist {
|
||||||
@@ -328,18 +304,54 @@ func (g *Game) AoiPlayerMove(player *model.Player, oldPos *model.Vector, newPos
|
|||||||
if len(addEntityIdList) > 0 {
|
if len(addEntityIdList) > 0 {
|
||||||
g.AddSceneEntityNotify(player, proto.VisionType_VISION_MEET, addEntityIdList, false, false)
|
g.AddSceneEntityNotify(player, proto.VisionType_VISION_MEET, addEntityIdList, false, false)
|
||||||
}
|
}
|
||||||
if WORLD_MANAGER.IsBigWorld(world) {
|
}
|
||||||
oldGid := world.bigWorldAoi.GetGidByPos(float32(oldPos.X), float32(oldPos.Y), float32(oldPos.Z))
|
|
||||||
newGid := world.bigWorldAoi.GetGidByPos(float32(newPos.X), float32(newPos.Y), float32(newPos.Z))
|
func (g *Game) BigWorldAoiPlayerMove(player *model.Player, world *World, scene *Scene, oldPos *model.Vector, newPos *model.Vector) {
|
||||||
if oldGid != newGid {
|
bigWorldAoi := world.GetBigWorldAoi()
|
||||||
// 玩家跨越了格子
|
oldGid := bigWorldAoi.GetGidByPos(float32(oldPos.X), float32(oldPos.Y), float32(oldPos.Z))
|
||||||
logger.Debug("player cross big world aoi grid, oldGid: %v, newGid: %v, uid: %v", oldGid, newGid, player.PlayerID)
|
newGid := bigWorldAoi.GetGidByPos(float32(newPos.X), float32(newPos.Y), float32(newPos.Z))
|
||||||
// 老格子移除玩家 新格子添加玩家
|
if oldGid != newGid {
|
||||||
activeAvatarId := world.GetPlayerActiveAvatarId(player)
|
// 玩家跨越了格子
|
||||||
activeWorldAvatar := world.GetPlayerWorldAvatar(player, activeAvatarId)
|
logger.Debug("player cross big world aoi grid, oldGid: %v, newGid: %v, uid: %v", oldGid, newGid, player.PlayerID)
|
||||||
world.bigWorldAoi.RemoveObjectFromGrid(int64(player.PlayerID), oldGid)
|
// 找出本次移动所带来的消失和出现的格子
|
||||||
world.bigWorldAoi.AddObjectToGrid(int64(player.PlayerID), activeWorldAvatar, newGid)
|
oldGridList := bigWorldAoi.GetSurrGridListByGid(oldGid)
|
||||||
oldOtherWorldAvatarMap := world.bigWorldAoi.GetObjectListByPos(float32(oldPos.X), float32(oldPos.Y), float32(oldPos.Z))
|
newGridList := bigWorldAoi.GetSurrGridListByGid(newGid)
|
||||||
|
delGridIdList := make([]uint32, 0)
|
||||||
|
for _, oldGrid := range oldGridList {
|
||||||
|
exist := false
|
||||||
|
for _, newGrid := range newGridList {
|
||||||
|
if oldGrid.GetGid() == newGrid.GetGid() {
|
||||||
|
exist = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if exist {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
delGridIdList = append(delGridIdList, oldGrid.GetGid())
|
||||||
|
}
|
||||||
|
addGridIdList := make([]uint32, 0)
|
||||||
|
for _, newGrid := range newGridList {
|
||||||
|
exist := false
|
||||||
|
for _, oldGrid := range oldGridList {
|
||||||
|
if newGrid.GetGid() == oldGrid.GetGid() {
|
||||||
|
exist = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if exist {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
addGridIdList = append(addGridIdList, newGrid.GetGid())
|
||||||
|
}
|
||||||
|
activeAvatarId := world.GetPlayerActiveAvatarId(player)
|
||||||
|
activeWorldAvatar := world.GetPlayerWorldAvatar(player, activeAvatarId)
|
||||||
|
// 处理消失的格子
|
||||||
|
for _, delGridId := range delGridIdList {
|
||||||
|
// 老格子移除玩家
|
||||||
|
bigWorldAoi.RemoveObjectFromGrid(int64(player.PlayerID), delGridId)
|
||||||
|
// 通知自己 老格子里的其它玩家消失
|
||||||
|
oldOtherWorldAvatarMap := bigWorldAoi.GetObjectListByGid(delGridId)
|
||||||
delEntityIdList := make([]uint32, 0)
|
delEntityIdList := make([]uint32, 0)
|
||||||
for _, otherWorldAvatarAny := range oldOtherWorldAvatarMap {
|
for _, otherWorldAvatarAny := range oldOtherWorldAvatarMap {
|
||||||
otherWorldAvatar := otherWorldAvatarAny.(*WorldAvatar)
|
otherWorldAvatar := otherWorldAvatarAny.(*WorldAvatar)
|
||||||
@@ -348,19 +360,22 @@ func (g *Game) AoiPlayerMove(player *model.Player, oldPos *model.Vector, newPos
|
|||||||
}
|
}
|
||||||
delEntityIdList = append(delEntityIdList, otherWorldAvatar.GetAvatarEntityId())
|
delEntityIdList = append(delEntityIdList, otherWorldAvatar.GetAvatarEntityId())
|
||||||
}
|
}
|
||||||
// 通知自己 老格子里的其它玩家消失
|
|
||||||
g.RemoveSceneEntityNotifyToPlayer(player, proto.VisionType_VISION_MISS, delEntityIdList)
|
g.RemoveSceneEntityNotifyToPlayer(player, proto.VisionType_VISION_MISS, delEntityIdList)
|
||||||
|
// 通知老格子里的其它玩家 自己消失
|
||||||
for otherPlayerId := range oldOtherWorldAvatarMap {
|
for otherPlayerId := range oldOtherWorldAvatarMap {
|
||||||
if uint32(otherPlayerId) == player.PlayerID {
|
if uint32(otherPlayerId) == player.PlayerID {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
otherPlayer := USER_MANAGER.GetOnlineUser(uint32(otherPlayerId))
|
otherPlayer := USER_MANAGER.GetOnlineUser(uint32(otherPlayerId))
|
||||||
// 通知老格子里的其它玩家 自己消失
|
g.RemoveSceneEntityNotifyToPlayer(otherPlayer, proto.VisionType_VISION_MISS, []uint32{activeWorldAvatar.GetAvatarEntityId()})
|
||||||
g.RemoveSceneEntityNotifyToPlayer(otherPlayer, proto.VisionType_VISION_MISS, []uint32{
|
|
||||||
activeWorldAvatar.GetAvatarEntityId(),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
newOtherWorldAvatarMap := world.bigWorldAoi.GetObjectListByPos(float32(newPos.X), float32(newPos.Y), float32(newPos.Z))
|
}
|
||||||
|
// 处理出现的格子
|
||||||
|
for _, addGridId := range addGridIdList {
|
||||||
|
// 新格子添加玩家
|
||||||
|
bigWorldAoi.AddObjectToGrid(int64(player.PlayerID), activeWorldAvatar, addGridId)
|
||||||
|
// 通知自己 新格子里的其他玩家出现
|
||||||
|
newOtherWorldAvatarMap := bigWorldAoi.GetObjectListByGid(addGridId)
|
||||||
addEntityIdList := make([]uint32, 0)
|
addEntityIdList := make([]uint32, 0)
|
||||||
for _, otherWorldAvatarAny := range newOtherWorldAvatarMap {
|
for _, otherWorldAvatarAny := range newOtherWorldAvatarMap {
|
||||||
otherWorldAvatar := otherWorldAvatarAny.(*WorldAvatar)
|
otherWorldAvatar := otherWorldAvatarAny.(*WorldAvatar)
|
||||||
@@ -369,15 +384,14 @@ func (g *Game) AoiPlayerMove(player *model.Player, oldPos *model.Vector, newPos
|
|||||||
}
|
}
|
||||||
addEntityIdList = append(addEntityIdList, otherWorldAvatar.GetAvatarEntityId())
|
addEntityIdList = append(addEntityIdList, otherWorldAvatar.GetAvatarEntityId())
|
||||||
}
|
}
|
||||||
// 通知自己 新格子里的其他玩家出现
|
|
||||||
g.AddSceneEntityNotify(player, proto.VisionType_VISION_MEET, addEntityIdList, false, false)
|
g.AddSceneEntityNotify(player, proto.VisionType_VISION_MEET, addEntityIdList, false, false)
|
||||||
|
// 通知新格子里的其他玩家 自己出现
|
||||||
for otherPlayerId := range newOtherWorldAvatarMap {
|
for otherPlayerId := range newOtherWorldAvatarMap {
|
||||||
if uint32(otherPlayerId) == player.PlayerID {
|
if uint32(otherPlayerId) == player.PlayerID {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
otherPlayer := USER_MANAGER.GetOnlineUser(uint32(otherPlayerId))
|
otherPlayer := USER_MANAGER.GetOnlineUser(uint32(otherPlayerId))
|
||||||
sceneEntityInfoAvatar := g.PacketSceneEntityInfoAvatar(scene, player, world.GetPlayerActiveAvatarId(player))
|
sceneEntityInfoAvatar := g.PacketSceneEntityInfoAvatar(scene, player, world.GetPlayerActiveAvatarId(player))
|
||||||
// 通知新格子里的其他玩家 自己出现
|
|
||||||
g.AddSceneEntityNotifyToPlayer(otherPlayer, proto.VisionType_VISION_MEET, []*proto.SceneEntityInfo{sceneEntityInfoAvatar})
|
g.AddSceneEntityNotifyToPlayer(otherPlayer, proto.VisionType_VISION_MEET, []*proto.SceneEntityInfo{sceneEntityInfoAvatar})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -402,6 +416,7 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess
|
|||||||
// logger.Debug("EntityId: %v, ModifierChange: %v", entry.EntityId, modifierChange)
|
// logger.Debug("EntityId: %v, ModifierChange: %v", entry.EntityId, modifierChange)
|
||||||
// 处理耐力消耗
|
// 处理耐力消耗
|
||||||
g.HandleAbilityStamina(player, entry)
|
g.HandleAbilityStamina(player, entry)
|
||||||
|
g.handleGadgetEntityAbilityLow(player, entry.EntityId, entry.ArgumentType, modifierChange)
|
||||||
case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA:
|
case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA:
|
||||||
costStamina := new(proto.AbilityMixinCostStamina)
|
costStamina := new(proto.AbilityMixinCostStamina)
|
||||||
err := pb.Unmarshal(entry.AbilityData, costStamina)
|
err := pb.Unmarshal(entry.AbilityData, costStamina)
|
||||||
@@ -526,7 +541,11 @@ func (g *Game) EvtAvatarEnterFocusNotify(player *model.Player, payloadMsg pb.Mes
|
|||||||
}
|
}
|
||||||
// logger.Debug("EvtAvatarEnterFocusNotify: %v", req)
|
// logger.Debug("EvtAvatarEnterFocusNotify: %v", req)
|
||||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||||
g.SendToWorldA(world, cmd.EvtAvatarEnterFocusNotify, player.ClientSeq, req)
|
if world == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
scene := world.GetSceneById(player.SceneId)
|
||||||
|
g.SendToSceneA(scene, cmd.EvtAvatarEnterFocusNotify, player.ClientSeq, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) EvtAvatarUpdateFocusNotify(player *model.Player, payloadMsg pb.Message) {
|
func (g *Game) EvtAvatarUpdateFocusNotify(player *model.Player, payloadMsg pb.Message) {
|
||||||
@@ -536,7 +555,11 @@ func (g *Game) EvtAvatarUpdateFocusNotify(player *model.Player, payloadMsg pb.Me
|
|||||||
}
|
}
|
||||||
// logger.Debug("EvtAvatarUpdateFocusNotify: %v", req)
|
// logger.Debug("EvtAvatarUpdateFocusNotify: %v", req)
|
||||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||||
g.SendToWorldA(world, cmd.EvtAvatarUpdateFocusNotify, player.ClientSeq, req)
|
if world == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
scene := world.GetSceneById(player.SceneId)
|
||||||
|
g.SendToSceneA(scene, cmd.EvtAvatarUpdateFocusNotify, player.ClientSeq, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) EvtAvatarExitFocusNotify(player *model.Player, payloadMsg pb.Message) {
|
func (g *Game) EvtAvatarExitFocusNotify(player *model.Player, payloadMsg pb.Message) {
|
||||||
@@ -546,7 +569,11 @@ func (g *Game) EvtAvatarExitFocusNotify(player *model.Player, payloadMsg pb.Mess
|
|||||||
}
|
}
|
||||||
// logger.Debug("EvtAvatarExitFocusNotify: %v", req)
|
// logger.Debug("EvtAvatarExitFocusNotify: %v", req)
|
||||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||||
g.SendToWorldA(world, cmd.EvtAvatarExitFocusNotify, player.ClientSeq, req)
|
if world == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
scene := world.GetSceneById(player.SceneId)
|
||||||
|
g.SendToSceneA(scene, cmd.EvtAvatarExitFocusNotify, player.ClientSeq, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) EvtEntityRenderersChangedNotify(player *model.Player, payloadMsg pb.Message) {
|
func (g *Game) EvtEntityRenderersChangedNotify(player *model.Player, payloadMsg pb.Message) {
|
||||||
@@ -556,7 +583,11 @@ func (g *Game) EvtEntityRenderersChangedNotify(player *model.Player, payloadMsg
|
|||||||
}
|
}
|
||||||
// logger.Debug("EvtEntityRenderersChangedNotify: %v", req)
|
// logger.Debug("EvtEntityRenderersChangedNotify: %v", req)
|
||||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||||
g.SendToWorldA(world, cmd.EvtEntityRenderersChangedNotify, player.ClientSeq, req)
|
if world == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
scene := world.GetSceneById(player.SceneId)
|
||||||
|
g.SendToSceneA(scene, cmd.EvtEntityRenderersChangedNotify, player.ClientSeq, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) EvtCreateGadgetNotify(player *model.Player, payloadMsg pb.Message) {
|
func (g *Game) EvtCreateGadgetNotify(player *model.Player, payloadMsg pb.Message) {
|
||||||
@@ -599,7 +630,7 @@ func (g *Game) EvtDestroyGadgetNotify(player *model.Player, payloadMsg pb.Messag
|
|||||||
}
|
}
|
||||||
scene := world.GetSceneById(player.SceneId)
|
scene := world.GetSceneById(player.SceneId)
|
||||||
scene.DestroyEntity(req.EntityId)
|
scene.DestroyEntity(req.EntityId)
|
||||||
g.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_MISS, []uint32{req.EntityId}, false, nil)
|
g.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_MISS, []uint32{req.EntityId}, false, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) EvtAiSyncSkillCdNotify(player *model.Player, payloadMsg pb.Message) {
|
func (g *Game) EvtAiSyncSkillCdNotify(player *model.Player, payloadMsg pb.Message) {
|
||||||
@@ -609,7 +640,11 @@ func (g *Game) EvtAiSyncSkillCdNotify(player *model.Player, payloadMsg pb.Messag
|
|||||||
}
|
}
|
||||||
// logger.Debug("EvtAiSyncSkillCdNotify: %v", req)
|
// logger.Debug("EvtAiSyncSkillCdNotify: %v", req)
|
||||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||||
g.SendToWorldA(world, cmd.EvtAiSyncSkillCdNotify, player.ClientSeq, req)
|
if world == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
scene := world.GetSceneById(player.SceneId)
|
||||||
|
g.SendToSceneA(scene, cmd.EvtAiSyncSkillCdNotify, player.ClientSeq, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) EvtAiSyncCombatThreatInfoNotify(player *model.Player, payloadMsg pb.Message) {
|
func (g *Game) EvtAiSyncCombatThreatInfoNotify(player *model.Player, payloadMsg pb.Message) {
|
||||||
@@ -619,7 +654,11 @@ func (g *Game) EvtAiSyncCombatThreatInfoNotify(player *model.Player, payloadMsg
|
|||||||
}
|
}
|
||||||
// logger.Debug("EvtAiSyncCombatThreatInfoNotify: %v", req)
|
// logger.Debug("EvtAiSyncCombatThreatInfoNotify: %v", req)
|
||||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||||
g.SendToWorldA(world, cmd.EvtAiSyncCombatThreatInfoNotify, player.ClientSeq, req)
|
if world == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
scene := world.GetSceneById(player.SceneId)
|
||||||
|
g.SendToSceneA(scene, cmd.EvtAiSyncCombatThreatInfoNotify, player.ClientSeq, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) EntityConfigHashNotify(player *model.Player, payloadMsg pb.Message) {
|
func (g *Game) EntityConfigHashNotify(player *model.Player, payloadMsg pb.Message) {
|
||||||
@@ -651,3 +690,84 @@ func (g *Game) EntityAiSyncNotify(player *model.Player, payloadMsg pb.Message) {
|
|||||||
}
|
}
|
||||||
g.SendMsg(cmd.EntityAiSyncNotify, player.PlayerID, player.ClientSeq, entityAiSyncNotify)
|
g.SendMsg(cmd.EntityAiSyncNotify, player.PlayerID, player.ClientSeq, entityAiSyncNotify)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO 一些很low的解决方案 我本来是不想写的 有多low?要多low有多low!
|
||||||
|
|
||||||
|
func (g *Game) handleGadgetEntityBeHitLow(player *model.Player, entity *Entity, hitElementType uint32) {
|
||||||
|
if entity.GetEntityType() != constant.ENTITY_TYPE_GADGET {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
gadgetEntity := entity.GetGadgetEntity()
|
||||||
|
gadgetId := gadgetEntity.GetGadgetId()
|
||||||
|
gadgetDataConfig := gdconf.GetGadgetDataById(int32(gadgetId))
|
||||||
|
if gadgetDataConfig == nil {
|
||||||
|
logger.Error("get gadget data config is nil, gadgetId: %v", gadgetEntity.GetGadgetId())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if strings.Contains(gadgetDataConfig.Name, "火把") ||
|
||||||
|
strings.Contains(gadgetDataConfig.Name, "火盆") ||
|
||||||
|
strings.Contains(gadgetDataConfig.Name, "篝火") {
|
||||||
|
// 火把点燃
|
||||||
|
if hitElementType != constant.ELEMENT_TYPE_FIRE {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
g.ChangeGadgetState(player, entity.GetId(), constant.GADGET_STATE_GEAR_START)
|
||||||
|
} else if strings.Contains(gadgetDataConfig.ServerLuaScript, "Controller") {
|
||||||
|
// 元素方碑点亮
|
||||||
|
gadgetElementType := uint32(0)
|
||||||
|
if strings.Contains(gadgetDataConfig.ServerLuaScript, "Fire") {
|
||||||
|
gadgetElementType = constant.ELEMENT_TYPE_FIRE
|
||||||
|
} else if strings.Contains(gadgetDataConfig.ServerLuaScript, "Water") {
|
||||||
|
gadgetElementType = constant.ELEMENT_TYPE_WATER
|
||||||
|
} else if strings.Contains(gadgetDataConfig.ServerLuaScript, "Grass") {
|
||||||
|
gadgetElementType = constant.ELEMENT_TYPE_GRASS
|
||||||
|
} else if strings.Contains(gadgetDataConfig.ServerLuaScript, "Elec") {
|
||||||
|
gadgetElementType = constant.ELEMENT_TYPE_ELEC
|
||||||
|
} else if strings.Contains(gadgetDataConfig.ServerLuaScript, "Ice") {
|
||||||
|
gadgetElementType = constant.ELEMENT_TYPE_ICE
|
||||||
|
} else if strings.Contains(gadgetDataConfig.ServerLuaScript, "Wind") {
|
||||||
|
gadgetElementType = constant.ELEMENT_TYPE_WIND
|
||||||
|
} else if strings.Contains(gadgetDataConfig.ServerLuaScript, "Rock") {
|
||||||
|
gadgetElementType = constant.ELEMENT_TYPE_ROCK
|
||||||
|
}
|
||||||
|
if hitElementType != gadgetElementType {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
g.ChangeGadgetState(player, entity.GetId(), constant.GADGET_STATE_GEAR_START)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *Game) handleGadgetEntityAbilityLow(player *model.Player, entityId uint32, argument proto.AbilityInvokeArgument, entry pb.Message) {
|
||||||
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||||
|
if world == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
scene := world.GetSceneById(player.SceneId)
|
||||||
|
entity := scene.GetEntity(entityId)
|
||||||
|
switch argument {
|
||||||
|
case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_CHANGE:
|
||||||
|
// 物件破碎
|
||||||
|
modifierChange := entry.(*proto.AbilityMetaModifierChange)
|
||||||
|
if modifierChange.Action != proto.ModifierAction_REMOVED {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logger.Debug("物件破碎, entityId: %v, modifierChange: %v, uid: %v", entityId, modifierChange, player.PlayerID)
|
||||||
|
if entity.GetEntityType() != constant.ENTITY_TYPE_GADGET {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
gadgetEntity := entity.GetGadgetEntity()
|
||||||
|
gadgetId := gadgetEntity.GetGadgetId()
|
||||||
|
gadgetDataConfig := gdconf.GetGadgetDataById(int32(gadgetId))
|
||||||
|
if gadgetDataConfig == nil {
|
||||||
|
logger.Error("get gadget data config is nil, gadgetId: %v", gadgetEntity.GetGadgetId())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if strings.Contains(gadgetDataConfig.Name, "碎石堆") ||
|
||||||
|
strings.Contains(gadgetDataConfig.ServerLuaScript, "SubfieldDrop_WoodenObject_Broken") {
|
||||||
|
g.KillEntity(player, scene, entity.GetId(), proto.PlayerDieType_PLAYER_DIE_GM)
|
||||||
|
} else if strings.Contains(gadgetDataConfig.ServerLuaScript, "SubfieldDrop_Ore") {
|
||||||
|
g.KillEntity(player, scene, entity.GetId(), proto.PlayerDieType_PLAYER_DIE_GM)
|
||||||
|
g.CreateDropGadget(player, entity.GetPos(), 70900001, 233, 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -81,12 +81,8 @@ func (g *Game) JoinOtherWorld(player *model.Player, hostPlayer *model.Player) {
|
|||||||
player.SceneJump = true
|
player.SceneJump = true
|
||||||
player.SceneId = hostPlayer.SceneId
|
player.SceneId = hostPlayer.SceneId
|
||||||
player.SceneLoadState = model.SceneNone
|
player.SceneLoadState = model.SceneNone
|
||||||
player.Pos.X = hostPlayer.Pos.X
|
player.Pos.X, player.Pos.Y, player.Pos.Z = hostPlayer.Pos.X, hostPlayer.Pos.Y, hostPlayer.Pos.Z
|
||||||
player.Pos.Y = hostPlayer.Pos.Y
|
player.Rot.X, player.Rot.Y, player.Rot.Z = hostPlayer.Rot.X, hostPlayer.Rot.Y, hostPlayer.Rot.Z
|
||||||
player.Pos.Z = hostPlayer.Pos.Z
|
|
||||||
player.Rot.X = hostPlayer.Rot.X
|
|
||||||
player.Rot.Y = hostPlayer.Rot.Y
|
|
||||||
player.Rot.Z = hostPlayer.Rot.Z
|
|
||||||
g.UserWorldAddPlayer(hostWorld, player)
|
g.UserWorldAddPlayer(hostWorld, player)
|
||||||
|
|
||||||
playerEnterSceneNotify := g.PacketPlayerEnterSceneNotifyMp(
|
playerEnterSceneNotify := g.PacketPlayerEnterSceneNotifyMp(
|
||||||
@@ -415,7 +411,7 @@ func (g *Game) UserWorldRemovePlayer(world *World, player *model.Player) {
|
|||||||
g.SendMsg(cmd.PlayerQuitFromMpNotify, player.PlayerID, player.ClientSeq, playerQuitFromMpNotify)
|
g.SendMsg(cmd.PlayerQuitFromMpNotify, player.PlayerID, player.ClientSeq, playerQuitFromMpNotify)
|
||||||
|
|
||||||
activeAvatarId := world.GetPlayerActiveAvatarId(player)
|
activeAvatarId := world.GetPlayerActiveAvatarId(player)
|
||||||
g.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_REMOVE, []uint32{world.GetPlayerWorldAvatarEntityId(player, activeAvatarId)}, false, nil)
|
g.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_REMOVE, []uint32{world.GetPlayerWorldAvatarEntityId(player, activeAvatarId)}, false, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
world.RemovePlayer(player)
|
world.RemovePlayer(player)
|
||||||
|
|||||||
@@ -217,10 +217,17 @@ func (g *Game) SceneInitFinishReq(player *model.Player, payloadMsg pb.Message) {
|
|||||||
|
|
||||||
g.UpdateWorldScenePlayerInfo(player, world)
|
g.UpdateWorldScenePlayerInfo(player, world)
|
||||||
|
|
||||||
g.GCGTavernInit(player) // GCG酒馆信息通知
|
ctx := world.GetEnterSceneContextByToken(req.EnterSceneToken)
|
||||||
|
if ctx == nil {
|
||||||
g.SendMsg(cmd.DungeonWayPointNotify, player.PlayerID, player.ClientSeq, &proto.DungeonWayPointNotify{})
|
logger.Error("get enter scene context is nil, uid: %v", player.PlayerID)
|
||||||
g.SendMsg(cmd.DungeonDataNotify, player.PlayerID, player.ClientSeq, &proto.DungeonDataNotify{})
|
return
|
||||||
|
}
|
||||||
|
// 进入的场景是地牢副本发送相关的包
|
||||||
|
if ctx.OldDungeonPointId != 0 {
|
||||||
|
g.GCGTavernInit(player) // GCG酒馆信息通知
|
||||||
|
g.SendMsg(cmd.DungeonWayPointNotify, player.PlayerID, player.ClientSeq, &proto.DungeonWayPointNotify{})
|
||||||
|
g.SendMsg(cmd.DungeonDataNotify, player.PlayerID, player.ClientSeq, &proto.DungeonDataNotify{})
|
||||||
|
}
|
||||||
|
|
||||||
SceneInitFinishRsp := &proto.SceneInitFinishRsp{
|
SceneInitFinishRsp := &proto.SceneInitFinishRsp{
|
||||||
EnterSceneToken: req.EnterSceneToken,
|
EnterSceneToken: req.EnterSceneToken,
|
||||||
@@ -245,9 +252,7 @@ func (g *Game) EnterSceneDoneReq(player *model.Player, payloadMsg pb.Message) {
|
|||||||
|
|
||||||
activeAvatarId := world.GetPlayerActiveAvatarId(player)
|
activeAvatarId := world.GetPlayerActiveAvatarId(player)
|
||||||
activeWorldAvatar := world.GetPlayerWorldAvatar(player, activeAvatarId)
|
activeWorldAvatar := world.GetPlayerWorldAvatar(player, activeAvatarId)
|
||||||
g.AddSceneEntityNotify(player, visionType, []uint32{
|
g.AddSceneEntityNotify(player, visionType, []uint32{activeWorldAvatar.GetAvatarEntityId()}, true, false)
|
||||||
activeWorldAvatar.GetAvatarEntityId(),
|
|
||||||
}, true, false)
|
|
||||||
|
|
||||||
// 加载附近的group
|
// 加载附近的group
|
||||||
for _, groupConfig := range g.GetNeighborGroup(scene.GetId(), player.Pos) {
|
for _, groupConfig := range g.GetNeighborGroup(scene.GetId(), player.Pos) {
|
||||||
@@ -269,7 +274,8 @@ func (g *Game) EnterSceneDoneReq(player *model.Player, payloadMsg pb.Message) {
|
|||||||
}
|
}
|
||||||
g.AddSceneEntityNotify(player, visionType, entityIdList, false, false)
|
g.AddSceneEntityNotify(player, visionType, entityIdList, false, false)
|
||||||
if WORLD_MANAGER.IsBigWorld(world) {
|
if WORLD_MANAGER.IsBigWorld(world) {
|
||||||
otherWorldAvatarMap := world.bigWorldAoi.GetObjectListByPos(float32(player.Pos.X), float32(player.Pos.Y), float32(player.Pos.Z))
|
bigWorldAoi := world.GetBigWorldAoi()
|
||||||
|
otherWorldAvatarMap := bigWorldAoi.GetObjectListByPos(float32(player.Pos.X), float32(player.Pos.Y), float32(player.Pos.Z))
|
||||||
entityIdList := make([]uint32, 0)
|
entityIdList := make([]uint32, 0)
|
||||||
for _, otherWorldAvatarAny := range otherWorldAvatarMap {
|
for _, otherWorldAvatarAny := range otherWorldAvatarMap {
|
||||||
otherWorldAvatar := otherWorldAvatarAny.(*WorldAvatar)
|
otherWorldAvatar := otherWorldAvatarAny.(*WorldAvatar)
|
||||||
@@ -341,55 +347,53 @@ func (g *Game) SceneEntityDrownReq(player *model.Player, payloadMsg pb.Message)
|
|||||||
|
|
||||||
// AddSceneEntityNotifyToPlayer 添加的场景实体同步给玩家
|
// AddSceneEntityNotifyToPlayer 添加的场景实体同步给玩家
|
||||||
func (g *Game) AddSceneEntityNotifyToPlayer(player *model.Player, visionType proto.VisionType, entityList []*proto.SceneEntityInfo) {
|
func (g *Game) AddSceneEntityNotifyToPlayer(player *model.Player, visionType proto.VisionType, entityList []*proto.SceneEntityInfo) {
|
||||||
sceneEntityAppearNotify := &proto.SceneEntityAppearNotify{
|
ntf := &proto.SceneEntityAppearNotify{
|
||||||
AppearType: visionType,
|
AppearType: visionType,
|
||||||
EntityList: entityList,
|
EntityList: entityList,
|
||||||
}
|
}
|
||||||
g.SendMsg(cmd.SceneEntityAppearNotify, player.PlayerID, player.ClientSeq, sceneEntityAppearNotify)
|
logger.Debug("[SceneEntityAppearNotify UC], type: %v, len: %v, uid: %v", ntf.AppearType, len(ntf.EntityList), player.PlayerID)
|
||||||
logger.Debug("SceneEntityAppearNotify, uid: %v, type: %v, len: %v",
|
g.SendMsg(cmd.SceneEntityAppearNotify, player.PlayerID, player.ClientSeq, ntf)
|
||||||
player.PlayerID, sceneEntityAppearNotify.AppearType, len(sceneEntityAppearNotify.EntityList))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddSceneEntityNotifyBroadcast 添加的场景实体广播
|
// AddSceneEntityNotifyBroadcast 添加的场景实体广播
|
||||||
func (g *Game) AddSceneEntityNotifyBroadcast(scene *Scene, visionType proto.VisionType, entityList []*proto.SceneEntityInfo, aec bool, player *model.Player) {
|
func (g *Game) AddSceneEntityNotifyBroadcast(scene *Scene, visionType proto.VisionType, entityList []*proto.SceneEntityInfo, aec bool, aecUid uint32) {
|
||||||
sceneEntityAppearNotify := &proto.SceneEntityAppearNotify{
|
ntf := &proto.SceneEntityAppearNotify{
|
||||||
AppearType: visionType,
|
AppearType: visionType,
|
||||||
EntityList: entityList,
|
EntityList: entityList,
|
||||||
}
|
}
|
||||||
for _, scenePlayer := range scene.GetAllPlayer() {
|
world := scene.GetWorld()
|
||||||
if aec && scenePlayer.PlayerID == player.PlayerID {
|
owner := world.GetOwner()
|
||||||
continue
|
logger.Debug("[SceneEntityAppearNotify BC], type: %v, len: %v, uid: %v, aec: %v", ntf.AppearType, len(ntf.EntityList), owner.PlayerID, aec)
|
||||||
}
|
if aec {
|
||||||
g.SendMsg(cmd.SceneEntityAppearNotify, scenePlayer.PlayerID, scenePlayer.ClientSeq, sceneEntityAppearNotify)
|
g.SendToSceneAEC(scene, cmd.SceneEntityAppearNotify, owner.ClientSeq, ntf, aecUid)
|
||||||
logger.Debug("SceneEntityAppearNotify, uid: %v, type: %v, len: %v",
|
} else {
|
||||||
scenePlayer.PlayerID, sceneEntityAppearNotify.AppearType, len(sceneEntityAppearNotify.EntityList))
|
g.SendToSceneA(scene, cmd.SceneEntityAppearNotify, owner.ClientSeq, ntf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveSceneEntityNotifyToPlayer 移除的场景实体同步给玩家
|
// RemoveSceneEntityNotifyToPlayer 移除的场景实体同步给玩家
|
||||||
func (g *Game) RemoveSceneEntityNotifyToPlayer(player *model.Player, visionType proto.VisionType, entityIdList []uint32) {
|
func (g *Game) RemoveSceneEntityNotifyToPlayer(player *model.Player, visionType proto.VisionType, entityIdList []uint32) {
|
||||||
sceneEntityDisappearNotify := &proto.SceneEntityDisappearNotify{
|
ntf := &proto.SceneEntityDisappearNotify{
|
||||||
EntityList: entityIdList,
|
EntityList: entityIdList,
|
||||||
DisappearType: visionType,
|
DisappearType: visionType,
|
||||||
}
|
}
|
||||||
g.SendMsg(cmd.SceneEntityDisappearNotify, player.PlayerID, player.ClientSeq, sceneEntityDisappearNotify)
|
logger.Debug("[SceneEntityDisappearNotify UC], type: %v, len: %v, uid: %v", ntf.DisappearType, len(ntf.EntityList), player.PlayerID)
|
||||||
logger.Debug("SceneEntityDisappearNotify, uid: %v, type: %v, len: %v",
|
g.SendMsg(cmd.SceneEntityDisappearNotify, player.PlayerID, player.ClientSeq, ntf)
|
||||||
player.PlayerID, sceneEntityDisappearNotify.DisappearType, len(sceneEntityDisappearNotify.EntityList))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveSceneEntityNotifyBroadcast 移除的场景实体广播
|
// RemoveSceneEntityNotifyBroadcast 移除的场景实体广播
|
||||||
func (g *Game) RemoveSceneEntityNotifyBroadcast(scene *Scene, visionType proto.VisionType, entityIdList []uint32, aec bool, player *model.Player) {
|
func (g *Game) RemoveSceneEntityNotifyBroadcast(scene *Scene, visionType proto.VisionType, entityIdList []uint32, aec bool, aecUid uint32) {
|
||||||
sceneEntityDisappearNotify := &proto.SceneEntityDisappearNotify{
|
ntf := &proto.SceneEntityDisappearNotify{
|
||||||
EntityList: entityIdList,
|
EntityList: entityIdList,
|
||||||
DisappearType: visionType,
|
DisappearType: visionType,
|
||||||
}
|
}
|
||||||
for _, scenePlayer := range scene.GetAllPlayer() {
|
world := scene.GetWorld()
|
||||||
if aec && scenePlayer.PlayerID == player.PlayerID {
|
owner := world.GetOwner()
|
||||||
continue
|
logger.Debug("[SceneEntityDisappearNotify BC], type: %v, len: %v, uid: %v, aec: %v", ntf.DisappearType, len(ntf.EntityList), owner.PlayerID, aec)
|
||||||
}
|
if aec {
|
||||||
g.SendMsg(cmd.SceneEntityDisappearNotify, scenePlayer.PlayerID, scenePlayer.ClientSeq, sceneEntityDisappearNotify)
|
g.SendToSceneAEC(scene, cmd.SceneEntityDisappearNotify, owner.ClientSeq, ntf, aecUid)
|
||||||
logger.Debug("SceneEntityDisappearNotify, uid: %v, type: %v, len: %v",
|
} else {
|
||||||
scenePlayer.PlayerID, sceneEntityDisappearNotify.DisappearType, len(sceneEntityDisappearNotify.EntityList))
|
g.SendToSceneA(scene, cmd.SceneEntityDisappearNotify, owner.ClientSeq, ntf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,7 +449,7 @@ func (g *Game) AddSceneEntityNotify(player *model.Player, visionType proto.Visio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if broadcast {
|
if broadcast {
|
||||||
g.AddSceneEntityNotifyBroadcast(scene, visionType, entityList, aec, player)
|
g.AddSceneEntityNotifyBroadcast(scene, visionType, entityList, aec, player.PlayerID)
|
||||||
} else {
|
} else {
|
||||||
g.AddSceneEntityNotifyToPlayer(player, visionType, entityList)
|
g.AddSceneEntityNotifyToPlayer(player, visionType, entityList)
|
||||||
}
|
}
|
||||||
@@ -453,12 +457,12 @@ func (g *Game) AddSceneEntityNotify(player *model.Player, visionType proto.Visio
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EntityFightPropUpdateNotifyBroadcast 场景实体战斗属性变更通知广播
|
// EntityFightPropUpdateNotifyBroadcast 场景实体战斗属性变更通知广播
|
||||||
func (g *Game) EntityFightPropUpdateNotifyBroadcast(world *World, entity *Entity) {
|
func (g *Game) EntityFightPropUpdateNotifyBroadcast(scene *Scene, entity *Entity) {
|
||||||
ntf := &proto.EntityFightPropUpdateNotify{
|
ntf := &proto.EntityFightPropUpdateNotify{
|
||||||
FightPropMap: entity.GetFightProp(),
|
FightPropMap: entity.GetFightProp(),
|
||||||
EntityId: entity.GetId(),
|
EntityId: entity.GetId(),
|
||||||
}
|
}
|
||||||
g.SendToWorldA(world, cmd.EntityFightPropUpdateNotify, 0, ntf)
|
g.SendToSceneA(scene, cmd.EntityFightPropUpdateNotify, 0, ntf)
|
||||||
}
|
}
|
||||||
|
|
||||||
// KillPlayerAvatar 杀死玩家活跃角色实体
|
// KillPlayerAvatar 杀死玩家活跃角色实体
|
||||||
@@ -514,7 +518,7 @@ func (g *Game) RevivePlayerAvatar(player *model.Player) {
|
|||||||
avatar.LifeState = constant.LIFE_STATE_ALIVE
|
avatar.LifeState = constant.LIFE_STATE_ALIVE
|
||||||
// 设置血量
|
// 设置血量
|
||||||
avatar.FightPropMap[constant.FIGHT_PROP_CUR_HP] = 110
|
avatar.FightPropMap[constant.FIGHT_PROP_CUR_HP] = 110
|
||||||
g.EntityFightPropUpdateNotifyBroadcast(world, avatarEntity)
|
g.EntityFightPropUpdateNotifyBroadcast(scene, avatarEntity)
|
||||||
|
|
||||||
avatarEntity.lifeState = constant.LIFE_STATE_REVIVE
|
avatarEntity.lifeState = constant.LIFE_STATE_REVIVE
|
||||||
|
|
||||||
@@ -536,7 +540,7 @@ func (g *Game) KillEntity(player *model.Player, scene *Scene, entityId uint32, d
|
|||||||
if entity.GetEntityType() == constant.ENTITY_TYPE_MONSTER {
|
if entity.GetEntityType() == constant.ENTITY_TYPE_MONSTER {
|
||||||
// 设置血量
|
// 设置血量
|
||||||
entity.fightProp[constant.FIGHT_PROP_CUR_HP] = 0
|
entity.fightProp[constant.FIGHT_PROP_CUR_HP] = 0
|
||||||
g.EntityFightPropUpdateNotifyBroadcast(scene.world, entity)
|
g.EntityFightPropUpdateNotifyBroadcast(scene, entity)
|
||||||
// 随机掉落
|
// 随机掉落
|
||||||
g.monsterDrop(player, entity)
|
g.monsterDrop(player, entity)
|
||||||
}
|
}
|
||||||
@@ -547,8 +551,8 @@ func (g *Game) KillEntity(player *model.Player, scene *Scene, entityId uint32, d
|
|||||||
DieType: dieType,
|
DieType: dieType,
|
||||||
MoveReliableSeq: entity.GetLastMoveReliableSeq(),
|
MoveReliableSeq: entity.GetLastMoveReliableSeq(),
|
||||||
}
|
}
|
||||||
g.SendToWorldA(scene.world, cmd.LifeStateChangeNotify, 0, ntf)
|
g.SendToSceneA(scene, cmd.LifeStateChangeNotify, 0, ntf)
|
||||||
g.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_DIE, []uint32{entity.GetId()}, false, nil)
|
g.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_DIE, []uint32{entity.GetId()}, false, 0)
|
||||||
// 删除实体
|
// 删除实体
|
||||||
scene.DestroyEntity(entity.GetId())
|
scene.DestroyEntity(entity.GetId())
|
||||||
group := scene.GetGroupById(entity.GetGroupId())
|
group := scene.GetGroupById(entity.GetGroupId())
|
||||||
|
|||||||
@@ -54,9 +54,7 @@ func (g *Game) ChangeAvatarReq(player *model.Player, payloadMsg pb.Message) {
|
|||||||
DisappearType: proto.VisionType_VISION_REPLACE,
|
DisappearType: proto.VisionType_VISION_REPLACE,
|
||||||
EntityList: []uint32{oldAvatarEntity.GetId()},
|
EntityList: []uint32{oldAvatarEntity.GetId()},
|
||||||
}
|
}
|
||||||
for _, scenePlayer := range scene.GetAllPlayer() {
|
g.SendToSceneA(scene, cmd.SceneEntityDisappearNotify, player.ClientSeq, sceneEntityDisappearNotify)
|
||||||
g.SendMsg(cmd.SceneEntityDisappearNotify, scenePlayer.PlayerID, scenePlayer.ClientSeq, sceneEntityDisappearNotify)
|
|
||||||
}
|
|
||||||
|
|
||||||
newAvatarId := world.GetPlayerActiveAvatarId(player)
|
newAvatarId := world.GetPlayerActiveAvatarId(player)
|
||||||
newAvatarEntity := g.PacketSceneEntityInfoAvatar(scene, player, newAvatarId)
|
newAvatarEntity := g.PacketSceneEntityInfoAvatar(scene, player, newAvatarId)
|
||||||
@@ -65,9 +63,7 @@ func (g *Game) ChangeAvatarReq(player *model.Player, payloadMsg pb.Message) {
|
|||||||
Param: oldAvatarEntity.GetId(),
|
Param: oldAvatarEntity.GetId(),
|
||||||
EntityList: []*proto.SceneEntityInfo{newAvatarEntity},
|
EntityList: []*proto.SceneEntityInfo{newAvatarEntity},
|
||||||
}
|
}
|
||||||
for _, scenePlayer := range scene.GetAllPlayer() {
|
g.SendToSceneA(scene, cmd.SceneEntityAppearNotify, player.ClientSeq, sceneEntityAppearNotify)
|
||||||
g.SendMsg(cmd.SceneEntityAppearNotify, scenePlayer.PlayerID, scenePlayer.ClientSeq, sceneEntityAppearNotify)
|
|
||||||
}
|
|
||||||
|
|
||||||
changeAvatarRsp := &proto.ChangeAvatarRsp{
|
changeAvatarRsp := &proto.ChangeAvatarRsp{
|
||||||
CurGuid: targetAvatarGuid,
|
CurGuid: targetAvatarGuid,
|
||||||
@@ -214,10 +210,8 @@ func (g *Game) ChangeMpTeamAvatarReq(player *model.Player, payloadMsg pb.Message
|
|||||||
newAvatarIndex := world.GetPlayerAvatarIndexByAvatarId(player, currAvatarId)
|
newAvatarIndex := world.GetPlayerAvatarIndexByAvatarId(player, currAvatarId)
|
||||||
world.SetPlayerAvatarIndex(player, newAvatarIndex)
|
world.SetPlayerAvatarIndex(player, newAvatarIndex)
|
||||||
|
|
||||||
for _, worldPlayer := range world.GetAllPlayer() {
|
sceneTeamUpdateNotify := g.PacketSceneTeamUpdateNotify(world, player)
|
||||||
sceneTeamUpdateNotify := g.PacketSceneTeamUpdateNotify(world, player)
|
g.SendToWorldA(world, cmd.SceneTeamUpdateNotify, player.ClientSeq, sceneTeamUpdateNotify)
|
||||||
g.SendMsg(cmd.SceneTeamUpdateNotify, worldPlayer.PlayerID, worldPlayer.ClientSeq, sceneTeamUpdateNotify)
|
|
||||||
}
|
|
||||||
|
|
||||||
changeMpTeamAvatarRsp := &proto.ChangeMpTeamAvatarRsp{
|
changeMpTeamAvatarRsp := &proto.ChangeMpTeamAvatarRsp{
|
||||||
CurAvatarGuid: req.CurAvatarGuid,
|
CurAvatarGuid: req.CurAvatarGuid,
|
||||||
@@ -278,65 +272,47 @@ func (g *Game) PacketSceneTeamUpdateNotify(world *World, player *model.Player) *
|
|||||||
sceneTeamAvatar.AvatarInfo = g.PacketAvatarInfo(worldPlayerAvatar)
|
sceneTeamAvatar.AvatarInfo = g.PacketAvatarInfo(worldPlayerAvatar)
|
||||||
sceneTeamAvatar.SceneAvatarInfo = g.PacketSceneAvatarInfo(worldPlayerScene, worldPlayer, worldAvatar.GetAvatarId())
|
sceneTeamAvatar.SceneAvatarInfo = g.PacketSceneAvatarInfo(worldPlayerScene, worldPlayer, worldAvatar.GetAvatarId())
|
||||||
}
|
}
|
||||||
// add AbilityControlBlock
|
// 角色的ability控制块
|
||||||
acb := sceneTeamAvatar.AbilityControlBlock
|
acb := sceneTeamAvatar.AbilityControlBlock
|
||||||
embryoId := 0
|
abilityId := 0
|
||||||
// add avatar abilities
|
// 默认ability
|
||||||
|
for _, abilityHashCode := range constant.DEFAULT_ABILITY_HASH_CODE {
|
||||||
|
abilityId++
|
||||||
|
ae := &proto.AbilityEmbryo{
|
||||||
|
AbilityId: uint32(abilityId),
|
||||||
|
AbilityNameHash: uint32(abilityHashCode),
|
||||||
|
AbilityOverrideNameHash: uint32(endec.Hk4eAbilityHashCode("Default")),
|
||||||
|
}
|
||||||
|
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, ae)
|
||||||
|
}
|
||||||
|
// 角色ability
|
||||||
avatarDataConfig := gdconf.GetAvatarDataById(int32(worldAvatar.GetAvatarId()))
|
avatarDataConfig := gdconf.GetAvatarDataById(int32(worldAvatar.GetAvatarId()))
|
||||||
if avatarDataConfig != nil {
|
if avatarDataConfig != nil {
|
||||||
for _, abilityId := range avatarDataConfig.AbilityHashCodeList {
|
for _, abilityHashCode := range avatarDataConfig.AbilityHashCodeList {
|
||||||
embryoId++
|
abilityId++
|
||||||
emb := &proto.AbilityEmbryo{
|
ae := &proto.AbilityEmbryo{
|
||||||
AbilityId: uint32(embryoId),
|
AbilityId: uint32(abilityId),
|
||||||
AbilityNameHash: uint32(abilityId),
|
AbilityNameHash: uint32(abilityHashCode),
|
||||||
AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
|
AbilityOverrideNameHash: uint32(endec.Hk4eAbilityHashCode("Default")),
|
||||||
}
|
}
|
||||||
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
|
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, ae)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// add default abilities
|
// 技能库ability
|
||||||
for _, abilityId := range constant.DEFAULT_ABILITY_HASHES {
|
|
||||||
embryoId++
|
|
||||||
emb := &proto.AbilityEmbryo{
|
|
||||||
AbilityId: uint32(embryoId),
|
|
||||||
AbilityNameHash: uint32(abilityId),
|
|
||||||
AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
|
|
||||||
}
|
|
||||||
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
|
|
||||||
}
|
|
||||||
// // add team resonances
|
|
||||||
// for id := range worldPlayer.TeamConfig.TeamResonancesConfig {
|
|
||||||
// embryoId++
|
|
||||||
// emb := &proto.AbilityEmbryo{
|
|
||||||
// AbilityId: uint32(embryoId),
|
|
||||||
// AbilityNameHash: uint32(id),
|
|
||||||
// AbilityOverrideNameHash: uint32(constant.GameConstantConst.DEFAULT_ABILITY_NAME),
|
|
||||||
// }
|
|
||||||
// acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
|
|
||||||
// }
|
|
||||||
// add skill depot abilities
|
|
||||||
skillDepot := gdconf.GetAvatarSkillDepotDataById(int32(worldPlayerAvatar.SkillDepotId))
|
skillDepot := gdconf.GetAvatarSkillDepotDataById(int32(worldPlayerAvatar.SkillDepotId))
|
||||||
if skillDepot != nil && len(skillDepot.AbilityHashCodeList) != 0 {
|
if skillDepot != nil && len(skillDepot.AbilityHashCodeList) != 0 {
|
||||||
for _, id := range skillDepot.AbilityHashCodeList {
|
for _, abilityHashCode := range skillDepot.AbilityHashCodeList {
|
||||||
embryoId++
|
abilityId++
|
||||||
emb := &proto.AbilityEmbryo{
|
ae := &proto.AbilityEmbryo{
|
||||||
AbilityId: uint32(embryoId),
|
AbilityId: uint32(abilityId),
|
||||||
AbilityNameHash: uint32(id),
|
AbilityNameHash: uint32(abilityHashCode),
|
||||||
AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
|
AbilityOverrideNameHash: uint32(endec.Hk4eAbilityHashCode("Default")),
|
||||||
}
|
}
|
||||||
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
|
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, ae)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// add equip abilities
|
// TODO 队伍ability
|
||||||
for skill := range worldPlayerAvatar.ExtraAbilityEmbryos {
|
// TODO 装备ability
|
||||||
embryoId++
|
|
||||||
emb := &proto.AbilityEmbryo{
|
|
||||||
AbilityId: uint32(embryoId),
|
|
||||||
AbilityNameHash: uint32(endec.Hk4eAbilityHashCode(skill)),
|
|
||||||
AbilityOverrideNameHash: uint32(constant.DEFAULT_ABILITY_NAME),
|
|
||||||
}
|
|
||||||
acb.AbilityEmbryoList = append(acb.AbilityEmbryoList, emb)
|
|
||||||
}
|
|
||||||
sceneTeamUpdateNotify.SceneTeamAvatarList = append(sceneTeamUpdateNotify.SceneTeamAvatarList, sceneTeamAvatar)
|
sceneTeamUpdateNotify.SceneTeamAvatarList = append(sceneTeamUpdateNotify.SceneTeamAvatarList, sceneTeamAvatar)
|
||||||
}
|
}
|
||||||
return sceneTeamUpdateNotify
|
return sceneTeamUpdateNotify
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ func (g *Game) DestroyVehicleEntity(player *model.Player, scene *Scene, vehicleI
|
|||||||
}
|
}
|
||||||
// 删除已创建的载具
|
// 删除已创建的载具
|
||||||
scene.DestroyEntity(entity.GetId())
|
scene.DestroyEntity(entity.GetId())
|
||||||
g.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_MISS, []uint32{entity.GetId()}, false, nil)
|
g.RemoveSceneEntityNotifyBroadcast(scene, proto.VisionType_VISION_MISS, []uint32{entity.GetId()}, false, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnterVehicle 进入载具
|
// EnterVehicle 进入载具
|
||||||
|
|||||||
@@ -501,11 +501,7 @@ func (g *Game) TeleportPlayer(
|
|||||||
// 传送玩家
|
// 传送玩家
|
||||||
newSceneId := sceneId
|
newSceneId := sceneId
|
||||||
oldSceneId := player.SceneId
|
oldSceneId := player.SceneId
|
||||||
oldPos := &model.Vector{
|
oldPos := &model.Vector{X: player.Pos.X, Y: player.Pos.Y, Z: player.Pos.Z}
|
||||||
X: player.Pos.X,
|
|
||||||
Y: player.Pos.Y,
|
|
||||||
Z: player.Pos.Z,
|
|
||||||
}
|
|
||||||
jumpScene := false
|
jumpScene := false
|
||||||
if newSceneId != oldSceneId {
|
if newSceneId != oldSceneId {
|
||||||
jumpScene = true
|
jumpScene = true
|
||||||
@@ -518,7 +514,7 @@ func (g *Game) TeleportPlayer(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
activeAvatarId := world.GetPlayerActiveAvatarId(player)
|
activeAvatarId := world.GetPlayerActiveAvatarId(player)
|
||||||
g.RemoveSceneEntityNotifyBroadcast(oldScene, proto.VisionType_VISION_REMOVE, []uint32{world.GetPlayerWorldAvatarEntityId(player, activeAvatarId)}, false, nil)
|
g.RemoveSceneEntityNotifyBroadcast(oldScene, proto.VisionType_VISION_REMOVE, []uint32{world.GetPlayerWorldAvatarEntityId(player, activeAvatarId)}, false, 0)
|
||||||
if jumpScene {
|
if jumpScene {
|
||||||
delTeamEntityNotify := g.PacketDelTeamEntityNotify(oldScene, player)
|
delTeamEntityNotify := g.PacketDelTeamEntityNotify(oldScene, player)
|
||||||
g.SendMsg(cmd.DelTeamEntityNotify, player.PlayerID, player.ClientSeq, delTeamEntityNotify)
|
g.SendMsg(cmd.DelTeamEntityNotify, player.PlayerID, player.ClientSeq, delTeamEntityNotify)
|
||||||
@@ -533,12 +529,8 @@ func (g *Game) TeleportPlayer(
|
|||||||
newScene.AddPlayer(player)
|
newScene.AddPlayer(player)
|
||||||
}
|
}
|
||||||
player.SceneLoadState = model.SceneNone
|
player.SceneLoadState = model.SceneNone
|
||||||
player.Pos.X = pos.X
|
player.Pos.X, player.Pos.Y, player.Pos.Z = pos.X, pos.Y, pos.Z
|
||||||
player.Pos.Y = pos.Y
|
player.Rot.X, player.Rot.Y, player.Rot.Z = rot.X, rot.Y, rot.Z
|
||||||
player.Pos.Z = pos.Z
|
|
||||||
player.Rot.X = rot.X
|
|
||||||
player.Rot.Y = rot.Y
|
|
||||||
player.Rot.Z = rot.Z
|
|
||||||
|
|
||||||
var enterType proto.EnterType
|
var enterType proto.EnterType
|
||||||
if jumpScene {
|
if jumpScene {
|
||||||
|
|||||||
@@ -23,30 +23,29 @@ func (p *Player) GetDbAvatar() *DbAvatar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Avatar struct {
|
type Avatar struct {
|
||||||
AvatarId uint32 // 角色id
|
AvatarId uint32 // 角色id
|
||||||
LifeState uint16 // 存活状态
|
LifeState uint16 // 存活状态
|
||||||
Level uint8 // 等级
|
Level uint8 // 等级
|
||||||
Exp uint32 // 经验值
|
Exp uint32 // 经验值
|
||||||
Promote uint8 // 突破等阶
|
Promote uint8 // 突破等阶
|
||||||
Satiation uint32 // 饱食度
|
Satiation uint32 // 饱食度
|
||||||
SatiationPenalty uint32 // 饱食度溢出
|
SatiationPenalty uint32 // 饱食度溢出
|
||||||
CurrHP float64 // 当前生命值
|
CurrHP float64 // 当前生命值
|
||||||
CurrEnergy float64 // 当前元素能量值
|
CurrEnergy float64 // 当前元素能量值
|
||||||
FetterList []uint32 // 资料解锁条目
|
FetterList []uint32 // 资料解锁条目
|
||||||
SkillLevelMap map[uint32]uint32 // 技能等级数据
|
SkillLevelMap map[uint32]uint32 // 技能等级数据
|
||||||
SkillDepotId uint32 // 技能库id
|
SkillDepotId uint32 // 技能库id
|
||||||
FlyCloak uint32 // 当前风之翼
|
FlyCloak uint32 // 当前风之翼
|
||||||
Costume uint32 // 当前衣装
|
Costume uint32 // 当前衣装
|
||||||
BornTime int64 // 获得时间
|
BornTime int64 // 获得时间
|
||||||
FetterLevel uint8 // 好感度等级
|
FetterLevel uint8 // 好感度等级
|
||||||
FetterExp uint32 // 好感度经验
|
FetterExp uint32 // 好感度经验
|
||||||
PromoteRewardMap map[uint32]bool // 突破奖励 map[突破等级]是否已被领取
|
PromoteRewardMap map[uint32]bool // 突破奖励 map[突破等级]是否已被领取
|
||||||
Guid uint64 `bson:"-" msgpack:"-"`
|
Guid uint64 `bson:"-" msgpack:"-"`
|
||||||
EquipGuidMap map[uint64]uint64 `bson:"-" msgpack:"-"`
|
EquipGuidMap map[uint64]uint64 `bson:"-" msgpack:"-"`
|
||||||
EquipWeapon *Weapon `bson:"-" msgpack:"-"`
|
EquipWeapon *Weapon `bson:"-" msgpack:"-"`
|
||||||
EquipReliquaryMap map[uint8]*Reliquary `bson:"-" msgpack:"-"`
|
EquipReliquaryMap map[uint8]*Reliquary `bson:"-" msgpack:"-"`
|
||||||
FightPropMap map[uint32]float32 `bson:"-" msgpack:"-"`
|
FightPropMap map[uint32]float32 `bson:"-" msgpack:"-"`
|
||||||
ExtraAbilityEmbryos map[string]bool `bson:"-" msgpack:"-"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *DbAvatar) InitAllAvatar(player *Player) {
|
func (a *DbAvatar) InitAllAvatar(player *Player) {
|
||||||
@@ -115,30 +114,29 @@ func (a *DbAvatar) AddAvatar(player *Player, avatarId uint32) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
avatar := &Avatar{
|
avatar := &Avatar{
|
||||||
AvatarId: avatarId,
|
AvatarId: avatarId,
|
||||||
LifeState: constant.LIFE_STATE_ALIVE,
|
LifeState: constant.LIFE_STATE_ALIVE,
|
||||||
Level: 1,
|
Level: 1,
|
||||||
Exp: 0,
|
Exp: 0,
|
||||||
Promote: 0,
|
Promote: 0,
|
||||||
Satiation: 0,
|
Satiation: 0,
|
||||||
SatiationPenalty: 0,
|
SatiationPenalty: 0,
|
||||||
CurrHP: 0,
|
CurrHP: 0,
|
||||||
CurrEnergy: 0,
|
CurrEnergy: 0,
|
||||||
FetterList: make([]uint32, 0),
|
FetterList: make([]uint32, 0),
|
||||||
SkillLevelMap: make(map[uint32]uint32),
|
SkillLevelMap: make(map[uint32]uint32),
|
||||||
SkillDepotId: uint32(skillDepotId),
|
SkillDepotId: uint32(skillDepotId),
|
||||||
FlyCloak: 140001,
|
FlyCloak: 140001,
|
||||||
Costume: 0,
|
Costume: 0,
|
||||||
BornTime: time.Now().Unix(),
|
BornTime: time.Now().Unix(),
|
||||||
FetterLevel: 1,
|
FetterLevel: 1,
|
||||||
FetterExp: 0,
|
FetterExp: 0,
|
||||||
Guid: 0,
|
Guid: 0,
|
||||||
EquipGuidMap: nil,
|
EquipGuidMap: nil,
|
||||||
EquipWeapon: nil,
|
EquipWeapon: nil,
|
||||||
EquipReliquaryMap: nil,
|
EquipReliquaryMap: nil,
|
||||||
FightPropMap: nil,
|
FightPropMap: nil,
|
||||||
ExtraAbilityEmbryos: make(map[string]bool),
|
PromoteRewardMap: make(map[uint32]bool, len(avatarDataConfig.PromoteRewardMap)),
|
||||||
PromoteRewardMap: make(map[uint32]bool, len(avatarDataConfig.PromoteRewardMap)),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 元素爆发1级
|
// 元素爆发1级
|
||||||
@@ -176,16 +174,12 @@ func (a *DbAvatar) SetCurrEnergy(avatar *Avatar, value float64, max bool) {
|
|||||||
logger.Error("get avatar energy skill is nil, avatarId: %v", avatar.AvatarId)
|
logger.Error("get avatar energy skill is nil, avatarId: %v", avatar.AvatarId)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
elementType := constant.ElementTypeConst.VALUE_MAP[uint16(avatarSkillDataConfig.CostElemType)]
|
fightPropEnergy := constant.ELEMENT_TYPE_FIGHT_PROP_ENERGY_MAP[int(avatarSkillDataConfig.CostElemType)]
|
||||||
if elementType == nil {
|
avatar.FightPropMap[uint32(fightPropEnergy.MaxEnergy)] = float32(avatarSkillDataConfig.CostElemVal)
|
||||||
logger.Error("get element type const is nil, value: %v", avatarSkillDataConfig.CostElemType)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
avatar.FightPropMap[uint32(elementType.MaxEnergyProp)] = float32(avatarSkillDataConfig.CostElemVal)
|
|
||||||
if max {
|
if max {
|
||||||
avatar.FightPropMap[uint32(elementType.CurrEnergyProp)] = float32(avatarSkillDataConfig.CostElemVal)
|
avatar.FightPropMap[uint32(fightPropEnergy.CurEnergy)] = float32(avatarSkillDataConfig.CostElemVal)
|
||||||
} else {
|
} else {
|
||||||
avatar.FightPropMap[uint32(elementType.CurrEnergyProp)] = float32(value)
|
avatar.FightPropMap[uint32(fightPropEnergy.CurEnergy)] = float32(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
|
||||||
"hk4e/common/constant"
|
|
||||||
"hk4e/gdconf"
|
|
||||||
"hk4e/pkg/logger"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Team struct {
|
type Team struct {
|
||||||
Name string
|
Name string
|
||||||
AvatarIdList []uint32
|
AvatarIdList []uint32
|
||||||
@@ -61,40 +55,6 @@ func NewDbTeam() (r *DbTeam) {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *DbTeam) UpdateTeam() {
|
|
||||||
activeTeam := t.GetActiveTeam()
|
|
||||||
// TODO 队伍元素共鸣
|
|
||||||
t.TeamResonances = make(map[uint16]bool)
|
|
||||||
t.TeamResonancesConfig = make(map[int32]bool)
|
|
||||||
teamElementTypeCountMap := make(map[uint16]uint8)
|
|
||||||
for _, avatarId := range activeTeam.GetAvatarIdList() {
|
|
||||||
avatarSkillDataConfig := gdconf.GetAvatarEnergySkillConfig(avatarId)
|
|
||||||
if avatarSkillDataConfig == nil {
|
|
||||||
logger.Error("get avatar energy skill is nil, avatarId: %v", avatarId)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
elementType := constant.ElementTypeConst.VALUE_MAP[uint16(avatarSkillDataConfig.CostElemType)]
|
|
||||||
if elementType == nil {
|
|
||||||
logger.Error("get element type const is nil, value: %v", avatarSkillDataConfig.CostElemType)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
teamElementTypeCountMap[elementType.Value] += 1
|
|
||||||
}
|
|
||||||
for k, v := range teamElementTypeCountMap {
|
|
||||||
if v >= 2 {
|
|
||||||
element := constant.ElementTypeConst.VALUE_MAP[k]
|
|
||||||
if element.TeamResonanceId != 0 {
|
|
||||||
t.TeamResonances[element.TeamResonanceId] = true
|
|
||||||
t.TeamResonancesConfig[element.ConfigHash] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(t.TeamResonances) == 0 {
|
|
||||||
t.TeamResonances[constant.ElementTypeConst.Default.TeamResonanceId] = true
|
|
||||||
t.TeamResonancesConfig[int32(constant.ElementTypeConst.Default.TeamResonanceId)] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *DbTeam) GetActiveTeamId() uint8 {
|
func (t *DbTeam) GetActiveTeamId() uint8 {
|
||||||
return t.CurrTeamIndex + 1
|
return t.CurrTeamIndex + 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -244,6 +244,11 @@ func NewGrid(gid uint32, minX, maxX, minY, maxY, minZ, maxZ int16) (r *Grid) {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetGid 获取格子id
|
||||||
|
func (g *Grid) GetGid() uint32 {
|
||||||
|
return g.gid
|
||||||
|
}
|
||||||
|
|
||||||
// AddObject 向格子中添加一个对象
|
// AddObject 向格子中添加一个对象
|
||||||
func (g *Grid) AddObject(objectId int64, object any) {
|
func (g *Grid) AddObject(objectId int64, object any) {
|
||||||
g.objectMap[objectId] = object
|
g.objectMap[objectId] = object
|
||||||
|
|||||||
Reference in New Issue
Block a user