mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 14:22:26 +08:00
场景LUA触发器
This commit is contained in:
@@ -16,11 +16,11 @@ import (
|
||||
// AvatarData 角色配置表
|
||||
type AvatarData struct {
|
||||
AvatarId int32 `csv:"AvatarId"` // ID
|
||||
HpBase float64 `csv:"HpBase,omitempty"` // 基础生命值
|
||||
AttackBase float64 `csv:"AttackBase,omitempty"` // 基础攻击力
|
||||
DefenseBase float64 `csv:"DefenseBase,omitempty"` // 基础防御力
|
||||
Critical float64 `csv:"Critical,omitempty"` // 暴击率
|
||||
CriticalHurt float64 `csv:"CriticalHurt,omitempty"` // 暴击伤害
|
||||
HpBase float32 `csv:"HpBase,omitempty"` // 基础生命值
|
||||
AttackBase float32 `csv:"AttackBase,omitempty"` // 基础攻击力
|
||||
DefenseBase float32 `csv:"DefenseBase,omitempty"` // 基础防御力
|
||||
Critical float32 `csv:"Critical,omitempty"` // 暴击率
|
||||
CriticalHurt float32 `csv:"CriticalHurt,omitempty"` // 暴击伤害
|
||||
QualityType int32 `csv:"QualityType,omitempty"` // 角色品质
|
||||
ConfigJson string `csv:"ConfigJson,omitempty"` // 战斗config
|
||||
InitialWeapon int32 `csv:"InitialWeapon,omitempty"` // 初始武器
|
||||
@@ -107,14 +107,14 @@ func GetAvatarDataMap() map[int32]*AvatarData {
|
||||
|
||||
// TODO 成长属性要读表
|
||||
|
||||
func (a *AvatarData) GetBaseHpByLevel(level uint8) float64 {
|
||||
return a.HpBase * float64(level)
|
||||
func (a *AvatarData) GetBaseHpByLevel(level uint8) float32 {
|
||||
return a.HpBase * float32(level)
|
||||
}
|
||||
|
||||
func (a *AvatarData) GetBaseAttackByLevel(level uint8) float64 {
|
||||
return a.AttackBase * float64(level)
|
||||
func (a *AvatarData) GetBaseAttackByLevel(level uint8) float32 {
|
||||
return a.AttackBase * float32(level)
|
||||
}
|
||||
|
||||
func (a *AvatarData) GetBaseDefenseByLevel(level uint8) float64 {
|
||||
return a.DefenseBase * float64(level)
|
||||
func (a *AvatarData) GetBaseDefenseByLevel(level uint8) float32 {
|
||||
return a.DefenseBase * float32(level)
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"time"
|
||||
|
||||
"hk4e/common/config"
|
||||
"hk4e/common/constant"
|
||||
"hk4e/pkg/logger"
|
||||
|
||||
lua "github.com/yuin/gopher-lua"
|
||||
@@ -172,18 +173,22 @@ func RegScriptLib(fnName string, fn lua.LGFunction) {
|
||||
func initLuaState(luaState *lua.LState) {
|
||||
eventType := luaState.NewTable()
|
||||
luaState.SetGlobal("EventType", eventType)
|
||||
luaState.SetField(eventType, "NONE", lua.LNumber(0))
|
||||
luaState.SetField(eventType, "EVENT_ENTER_REGION", lua.LNumber(1))
|
||||
luaState.SetField(eventType, "EVENT_NONE", lua.LNumber(constant.LUA_EVENT_NONE))
|
||||
luaState.SetField(eventType, "EVENT_ENTER_REGION", lua.LNumber(constant.LUA_EVENT_ENTER_REGION))
|
||||
luaState.SetField(eventType, "EVENT_LEAVE_REGION", lua.LNumber(constant.LUA_EVENT_LEAVE_REGION))
|
||||
|
||||
entityType := luaState.NewTable()
|
||||
luaState.SetGlobal("EntityType", entityType)
|
||||
luaState.SetField(entityType, "NONE", lua.LNumber(0))
|
||||
luaState.SetField(entityType, "AVATAR", lua.LNumber(1))
|
||||
luaState.SetField(entityType, "NONE", lua.LNumber(constant.ENTITY_TYPE_NONE))
|
||||
luaState.SetField(entityType, "AVATAR", lua.LNumber(constant.ENTITY_TYPE_AVATAR))
|
||||
|
||||
regionShape := luaState.NewTable()
|
||||
luaState.SetGlobal("RegionShape", regionShape)
|
||||
luaState.SetField(regionShape, "NONE", lua.LNumber(0))
|
||||
luaState.SetField(regionShape, "SPHERE", lua.LNumber(1))
|
||||
luaState.SetField(regionShape, "NONE", lua.LNumber(constant.REGION_SHAPE_NONE))
|
||||
luaState.SetField(regionShape, "SPHERE", lua.LNumber(constant.REGION_SHAPE_SPHERE))
|
||||
luaState.SetField(regionShape, "CUBIC", lua.LNumber(constant.REGION_SHAPE_CUBIC))
|
||||
luaState.SetField(regionShape, "CYLINDER", lua.LNumber(constant.REGION_SHAPE_CYLINDER))
|
||||
luaState.SetField(regionShape, "POLYGON", lua.LNumber(constant.REGION_SHAPE_POLYGON))
|
||||
|
||||
questState := luaState.NewTable()
|
||||
luaState.SetGlobal("QuestState", questState)
|
||||
|
||||
@@ -62,7 +62,7 @@ func (g *GameDataConfig) loadItemData() {
|
||||
itemData.SkillAffix = append(itemData.SkillAffix, itemData.SkillAffix2)
|
||||
}
|
||||
// 武器精炼摩拉消耗列表读取转换
|
||||
if itemData.Type == int32(constant.ITEM_TYPE_WEAPON) && itemData.AwakenCoinCostStr != "" {
|
||||
if itemData.Type == constant.ITEM_TYPE_WEAPON && itemData.AwakenCoinCostStr != "" {
|
||||
tempCostList := strings.Split(strings.ReplaceAll(itemData.AwakenCoinCostStr, " ", ""), "#")
|
||||
itemData.AwakenCoinCostList = make([]uint32, 0, len(tempCostList))
|
||||
for _, s := range tempCostList {
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"os"
|
||||
"strconv"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
||||
"hk4e/pkg/logger"
|
||||
|
||||
@@ -16,6 +17,8 @@ const (
|
||||
SceneGroupLoaderLimit = 4 // 加载文件的并发数 此操作很耗内存 调大之前请确保你的机器内存足够
|
||||
)
|
||||
|
||||
var OBJECT_ID_COUNTER uint64
|
||||
|
||||
type SceneLuaConfig struct {
|
||||
Id int32
|
||||
SceneConfig *SceneConfig // 地图配置
|
||||
@@ -54,14 +57,15 @@ type Group struct {
|
||||
RefreshId int32 `json:"refresh_id"`
|
||||
Area int32 `json:"area"`
|
||||
Pos *Vector `json:"pos"`
|
||||
DynamicLoad bool `json:"dynamic_load"`
|
||||
IsReplaceable *Replaceable `json:"is_replaceable"`
|
||||
MonsterList []*Monster `json:"monsters"` // 怪物
|
||||
NpcList []*Npc `json:"npcs"` // NPC
|
||||
GadgetList []*Gadget `json:"gadgets"` // 物件
|
||||
RegionList []*Region `json:"regions"`
|
||||
TriggerList []*Trigger `json:"triggers"`
|
||||
LuaStr string
|
||||
LuaState *lua.LState
|
||||
LuaStr string `json:"-"`
|
||||
LuaState *lua.LState `json:"-"`
|
||||
}
|
||||
|
||||
type Replaceable struct {
|
||||
@@ -77,6 +81,7 @@ type Monster struct {
|
||||
Rot *Vector `json:"rot"`
|
||||
Level int32 `json:"level"`
|
||||
AreaId int32 `json:"area_id"`
|
||||
ObjectId uint64 `json:"-"`
|
||||
}
|
||||
|
||||
type Npc struct {
|
||||
@@ -85,6 +90,7 @@ type Npc struct {
|
||||
Pos *Vector `json:"pos"`
|
||||
Rot *Vector `json:"rot"`
|
||||
AreaId int32 `json:"area_id"`
|
||||
ObjectId uint64 `json:"-"`
|
||||
}
|
||||
|
||||
type Gadget struct {
|
||||
@@ -95,15 +101,18 @@ type Gadget struct {
|
||||
Level int32 `json:"level"`
|
||||
AreaId int32 `json:"area_id"`
|
||||
PointType int32 `json:"point_type"` // 关联GatherData表
|
||||
ObjectId uint64 `json:"-"`
|
||||
}
|
||||
|
||||
type Region struct {
|
||||
ConfigId int32 `json:"config_id"`
|
||||
Shape int32 `json:"shape"`
|
||||
Radius float32 `json:"radius"`
|
||||
Size *Vector `json:"size"`
|
||||
Pos *Vector `json:"pos"`
|
||||
AreaId int32 `json:"area_id"`
|
||||
ConfigId int32 `json:"config_id"`
|
||||
Shape int32 `json:"shape"`
|
||||
Radius float32 `json:"radius"`
|
||||
Size *Vector `json:"size"`
|
||||
Pos *Vector `json:"pos"`
|
||||
Height float32 `json:"height"`
|
||||
PointArray []*Vector `json:"point_array"`
|
||||
AreaId int32 `json:"area_id"`
|
||||
}
|
||||
|
||||
type Trigger struct {
|
||||
@@ -136,6 +145,9 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
|
||||
logger.Error("get monsters object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId)
|
||||
return
|
||||
}
|
||||
for _, monster := range group.MonsterList {
|
||||
monster.ObjectId = atomic.AddUint64(&OBJECT_ID_COUNTER, 1)
|
||||
}
|
||||
// npcs
|
||||
group.NpcList = make([]*Npc, 0)
|
||||
ok = parseLuaTableToObject[*[]*Npc](luaState, "npcs", &group.NpcList)
|
||||
@@ -143,6 +155,9 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
|
||||
logger.Error("get npcs object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId)
|
||||
return
|
||||
}
|
||||
for _, npc := range group.NpcList {
|
||||
npc.ObjectId = atomic.AddUint64(&OBJECT_ID_COUNTER, 1)
|
||||
}
|
||||
// gadgets
|
||||
group.GadgetList = make([]*Gadget, 0)
|
||||
ok = parseLuaTableToObject[*[]*Gadget](luaState, "gadgets", &group.GadgetList)
|
||||
@@ -150,6 +165,9 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
|
||||
logger.Error("get gadgets object error, sceneId: %v, blockId: %v, groupId: %v", sceneId, blockId, groupId)
|
||||
return
|
||||
}
|
||||
for _, gadget := range group.GadgetList {
|
||||
gadget.ObjectId = atomic.AddUint64(&OBJECT_ID_COUNTER, 1)
|
||||
}
|
||||
// regions
|
||||
group.RegionList = make([]*Region, 0)
|
||||
ok = parseLuaTableToObject[*[]*Region](luaState, "regions", &group.RegionList)
|
||||
@@ -170,6 +188,7 @@ func (g *GameDataConfig) loadGroup(group *Group, block *Block, sceneId int32, bl
|
||||
}
|
||||
|
||||
func (g *GameDataConfig) loadSceneLuaConfig() {
|
||||
OBJECT_ID_COUNTER = 0
|
||||
g.SceneLuaConfigMap = make(map[int32]*SceneLuaConfig)
|
||||
sceneLuaPrefix := g.luaPrefix + "scene/"
|
||||
for _, sceneData := range g.SceneDataMap {
|
||||
|
||||
Reference in New Issue
Block a user