更新时间🕦 2024年6月2日23:25:03
游戏名称-我的王国(my-kingdom)
角色🤖
系别
在中国传统文化中,五行(金、木、水、火、土)是一个非常重要的概念,它们之间存在着相生和相克的关系。
相生:
- 金生水:金属能够熔化形成水,也象征金属工具可以挖井取水。
- 水生木:水能够滋养树木,使其生长。
- 木生火:木材是火的燃料,能够助火燃烧。
- 火生土:火燃烧后形成灰烬,化为土壤。
- 土生金:土壤中可以提炼出金属。
相克:
- 金克木:金属制成的工具可以砍伐树木。
- 木克土:树木的根能够深入土壤,稳固土壤,防止水土流失,但树木过多也会吸收土壤中的养分,导致土壤贫瘠。
- 土克水:土壤能够阻挡水的流动,有收水、防水的作用。
- 水克火:水能灭火。
- 火克金:火可以熔化金属。
铭文系统
属性
属性加成与调整
阵营
系别
名称
用户ID
等级
铭文
皮肤
装备
基础属性
下一等级所需经验值:距离下等级所需要的经验值
当前经验值:当前所有的经验值
最大生命:决定了英雄的生命值上限,影响着英雄的生存能力。
最大法力(仅限法师类英雄):决定了英雄的法力值上限,影响法师英雄的技能释放次数。
物理攻击:决定了英雄的物理伤害输出能力。
法术攻击(仅限法师类英雄):决定了英雄的法术伤害输出能力。
物理防御:决定了英雄抵抗物理伤害的能力。
法术防御:决定了英雄抵抗法术伤害的能力。
移速:决定了英雄的移动速度,影响着英雄的机动性和追击/逃跑能力。
其他属性
回血:英雄在非战斗状态下自动恢复生命值的速度。
回蓝(仅限法师类英雄):英雄在非战斗状态下自动恢复法力值的速度。
暴击率:影响英雄普通攻击触发暴击的概率,通常与射手类英雄关联较大。
暴击效果:英雄触发暴击时,额外造成的伤害比例。
攻击速度:影响英雄普通攻击的频率,对射手类英雄尤为重要。
属性与英雄定位的关系
战士类英雄:通常具有较高的物理攻击和生命值,擅长近战和生存。
坦克类英雄:具有较高的生命值和防御能力,主要负责承受伤害和保护队友。
刺客类英雄:具有高爆发和高机动性,擅长快速切入和撤离战场。
射手类英雄:具有远程物理攻击能力,擅长持续输出和风筝战术。
法师类英雄:拥有强大的远程魔法攻击能力,擅长造成范围伤害和控制战场。
辅助类英雄:主要负责支援队友,提供增益效果和控制能力。
Json数据
{
"camp": 0,
"attribute": "",
"name": "",
"skin": "",
"rune": {
"name": "",
"id": 0,
"description": "",
"equip": false,
"effectDataInfo": null,
"redRuneMap": null,
"greenRuneMap": null,
"blueRuneMap": null
},
"equipments": [],
"dataInfo": {
"level": 1,
"maxLevel": 0,
"currentXp": 0,
"xpToNextLevel": 0,
"currentHealth": 0,
"maxHealth": 0,
"currentMana": 0,
"maxMana": 0,
"currentMoveSpeed": 0,
"maxMoveSpeed": 0,
"currentDefence": 0,
"maxDefence": 0,
"physicalDefence": 0,
"MagicDefence": 0,
"currentAttack": 0,
"maxAttack": 0,
"physicalAttack": 0,
"magicAttack": 0,
"healthRegen": 0,
"manaRegen": 0,
"criticalHitRate": 0,
"attackSpeed": 0
}
}
Hero结构体
package hero
import (
"Gin-Server-01/com/server/core/tools/jsonTool"
)
type HeroRule interface {
Harm()
}
// Hero
//
// @Description: 英雄
type Hero struct {
HeroRule `json:"-"`
Camp uint64 `json:"camp"` //阵营
Attribute AttributeEnum `json:"attribute"` //属性
Name string `json:"name"` //英雄名称
Skin string `json:"skin"` //皮肤
Rune Rune `json:"rune"` //符文
Equipments *[]Equipment `json:"equipments"` //装备
DataInfo *DataInfo `json:"dataInfo"` //数据信息
}
func NewHero() *Hero {
h := &Hero{
Camp: 0,
Attribute: "",
Name: "",
Skin: "",
Equipments: &[]Equipment{},
DataInfo: &DataInfo{
Level: 1,
},
}
return h
}
// Builder
// @Summary:
// @Description: 正式创建
// @Receiver: h
// @Return: *Hero
//
func (h Hero) Builder() *Hero {
//符文的影响
if &h.Rune != nil {
}
//装备的影响
return &h
}
func (h Hero) JsonStringImpl() string {
return jsonTool.JsonFormatString(h)
}
//=========================================================================================================
//=========================================================================================================
// DataInfo
//
// @Description: 数据信息
type DataInfo struct {
Level uint64 `json:"level"` //等级
MaxLevel uint64 `json:"maxLevel"` //满级
CurrentXp float64 `json:"currentXp"` //当前经验值
XpToNextLevel float64 `json:"xpToNextLevel"` //下一等级所需经验值
CurrentHealth float64 `json:"currentHealth"` //当前健康值
MaxHealth float64 `json:"maxHealth"` //最大健康值
CurrentMana float64 `json:"currentMana"` //当前法力
MaxMana float64 `json:"maxMana"` //最大法力
CurrentMoveSpeed float64 `json:"currentMoveSpeed"` //当前移动速度
MaxMoveSpeed float64 `json:"maxMoveSpeed"` //最大移动速度
CurrentDefence float64 `json:"currentDefence"` //当前防御力
MaxDefence float64 `json:"maxDefence"` //最大防御力
PhysicalDefence float64 `json:"physicalDefence"` //物理防御
MagicDefence float64 `json:"MagicDefence"` //魔法防御
CurrentAttack float64 `json:"currentAttack"` //当前攻击力
MaxAttack float64 `json:"maxAttack"` //最大攻击力
PhysicalAttack float64 `json:"physicalAttack"` //物攻
MagicAttack float64 `json:"magicAttack"` //法攻
HealthRegen float64 `json:"healthRegen"` //健康值恢复
ManaRegen float64 `json:"manaRegen"` //法力恢复
CriticalHitRate float64 `json:"criticalHitRate"` //暴击率
AttackSpeed float64 `json:"attackSpeed"` //攻速
}
func (d *DataInfo) SetLevel(Level uint64) {
d.Level = Level
}
// AddDataInfo
// @Summary:
// @Description: 和另一个结构体合成新的
// @Param: b
//
func (d *DataInfo) AddDataInfo(b *DataInfo) {
//当为空
if b == nil {
return
}
d.Level += b.Level
d.MaxLevel += b.MaxLevel
d.CurrentXp += b.CurrentXp
d.XpToNextLevel += b.XpToNextLevel
d.CurrentHealth += b.CurrentHealth
d.MaxHealth += b.MaxHealth
d.CurrentMana += b.CurrentMana
d.MaxMana += b.MaxMana
d.CurrentMoveSpeed += b.CurrentMoveSpeed
d.MaxMoveSpeed += b.MaxMoveSpeed
d.CurrentDefence += b.CurrentDefence
d.MaxDefence += b.MaxDefence
d.PhysicalDefence += b.PhysicalDefence
d.MagicDefence += b.MagicDefence
d.CurrentAttack += b.CurrentAttack
d.MaxAttack += b.MaxAttack
d.PhysicalAttack += b.PhysicalAttack
d.MagicAttack += b.MagicAttack
d.HealthRegen += b.HealthRegen
d.ManaRegen += b.ManaRegen
d.CriticalHitRate += b.CriticalHitRate
d.AttackSpeed += b.AttackSpeed
}
//=========================================================================================================
// Equipment
//
// @Description: 装备
type Equipment struct {
Owner *Hero `json:"owner"` //拥有者
Name string `json:"name"` //名称
Description string `json:"description"` //描述
}
//=========================================================================================================
// Rune
//
// @Description: 符文
type Rune struct {
Name string `json:"name"` //名称
Id uint64 `json:"id"` //唯一id
Description string `json:"description"` //描述
Equip bool `json:"equip"` //是否装备
EffectDataInfo *DataInfo `json:"effectDataInfo"` //效果数据信息
RedRuneMap map[string]*Rune `json:"redRuneMap"` //红色铭文-主要是攻击方面
GreenRuneMap map[string]*Rune `json:"greenRuneMap"` //绿色铭文-主要是生命方面
BlueRuneMap map[string]*Rune `json:"blueRuneMap"` //蓝色符文-主要是防御方面
}
// RecursionGetBlueRuneMapDataInfo
//
// @Summary:
// @Description: 递归对蓝色符文的数据累加
// @Receiver: rune
// @Param: owner 操作的对象
func (rune *Rune) RecursionGetBlueRuneMapDataInfo(owner *Hero) {
//就一层
if rune.BlueRuneMap == nil && rune.Equip {
owner.DataInfo.AddDataInfo(rune.EffectDataInfo)
return
}
//二层以上
for _, fatherRune := range rune.BlueRuneMap {
//只要装备时
if fatherRune.Equip == true {
owner.DataInfo.AddDataInfo(fatherRune.EffectDataInfo)
//将添加的置空防止重复添加
fatherRune.EffectDataInfo = nil
fatherRune.RecursionGetBlueRuneMapDataInfo(owner)
}
}
}
// RecursionGetGreenRuneMapDataInfo
//
// @Summary:
// @Description: 递归对绿色符文的数据累加
// @Receiver: rune
// @Param: owner 操作的对象
func (rune *Rune) RecursionGetGreenRuneMapDataInfo(owner *Hero) {
//就一层
if rune.GreenRuneMap == nil && rune.Equip {
owner.DataInfo.AddDataInfo(rune.EffectDataInfo)
return
}
//二层以上
for _, fatherRune := range rune.GreenRuneMap {
//只要装备时
if fatherRune.Equip == true {
owner.DataInfo.AddDataInfo(fatherRune.EffectDataInfo)
//将添加的置空防止重复添加
fatherRune.EffectDataInfo = nil
fatherRune.RecursionGetGreenRuneMapDataInfo(owner)
}
}
}
// RecursionGetRedRuneMapDataInfo
//
// @Summary:
// @Description: 递归对红色符文的数据累加
// @Receiver: rune
// @Param: owner 操作的对象
func (rune *Rune) RecursionGetRedRuneMapDataInfo(owner *Hero) {
//就一层
if rune.RedRuneMap == nil && rune.Equip {
owner.DataInfo.AddDataInfo(rune.EffectDataInfo)
return
}
//二层以上
for _, fatherRune := range rune.RedRuneMap {
//只要装备时
if fatherRune.Equip == true {
owner.DataInfo.AddDataInfo(fatherRune.EffectDataInfo)
//将添加的置空防止重复添加
fatherRune.EffectDataInfo = nil
fatherRune.RecursionGetRedRuneMapDataInfo(owner)
}
}
}
// AddRedRuneMap
//
// @Summary:
// @Description: 红色铭文-主要是攻击方面
// @Param: owner 拥有者
// @Param: keyName 名称
// @Param: attackRune 攻击符文树
func (rune *Rune) AddRedRuneMap(owner *Hero, keyName string, attackRune Rune) {
//符文对象对子符文扩展
if rune.RedRuneMap == nil {
rune.RedRuneMap = make(map[string]*Rune)
}
//添加到子符文数据结构中
rune.RedRuneMap[keyName] = &attackRune
//数据生效-递归
rune.RecursionGetRedRuneMapDataInfo(owner)
}
// AddGreenRuneMap
//
// @Summary:
// @Description: 绿色铭文-主要是生命方面
// @Receiver: rune
// @Param: key
// @Param: healthRune
func (rune *Rune) AddGreenRuneMap(owner *Hero, keyName string, attackRune Rune) {
//符文对象对子符文扩展
if rune.GreenRuneMap == nil {
rune.GreenRuneMap = make(map[string]*Rune)
}
//添加到子符文数据结构中
rune.GreenRuneMap[keyName] = &attackRune
//数据生效-递归
rune.RecursionGetGreenRuneMapDataInfo(owner)
}
// AddBlueRuneMap
//
// @Summary:
// @Description: 蓝色符文-主要是防御方面
// @Receiver: rune
// @Param: key
// @Param: defenceRune
func (rune *Rune) AddBlueRuneMap(owner *Hero, keyName string, attackRune Rune) {
//符文对象对子符文扩展
if rune.BlueRuneMap == nil {
rune.BlueRuneMap = make(map[string]*Rune)
}
//添加到子符文数据结构中
rune.BlueRuneMap[keyName] = &attackRune
//数据生效-递归
rune.RecursionGetBlueRuneMapDataInfo(owner)
}