player.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. package model
  2. import (
  3. "fmt"
  4. "strconv"
  5. "time"
  6. "leafstalk/otherutils/deepcopy"
  7. "xorm.io/xorm"
  8. )
  9. type LoginToken struct {
  10. AccId int64
  11. OpenId string
  12. Token string
  13. NickName string
  14. ImgUrl string
  15. GdtVid string // 进入所点击广告ID
  16. AdId string
  17. AdSrc string
  18. Flag int //用户标志
  19. Plat string
  20. }
  21. type PlayerSummary struct {
  22. LineId int `json:"serverId"`
  23. Level int `json:"level"`
  24. }
  25. // Player 玩家信息
  26. type Player struct {
  27. Id int64
  28. AccId int64 `xorm:"BIGINT index 'accId'"`
  29. OpenID string `xorm:"varchar(255) index 'openid'"`
  30. NickName string `xorm:"varchar(255) 'nickname'" json:"nickName"`
  31. AvatarURL string `xorm:"varchar(512) 'avatar'" json:"avatarUrl"` // 目前由world维护 login储存
  32. Account string `xorm:"varchar(255) 'account'"`
  33. Passwod string `xorm:"varchar(255) 'password'" json:"-"`
  34. Inviter int64 `xorm:"BIGINT 'inviter'"`
  35. PlatOpenID string `xorm:"varchar(255) 'platopenid'"`
  36. Unionid string `xorm:"varchar(255) 'unionid'"`
  37. Plat int `xorm:"int 'plat'"`
  38. SessionKey string `xorm:"varchar(512) 'sessionkey'"`
  39. SelectServer int `xorm:"int 'server'"` // 选择登录线
  40. Summary []*PlayerSummary `xorm:"varchar(1024) json 'summary'"` // 玩家在各服的档案信息
  41. Ban int `xorm:"int 'ban'"`
  42. Flag int `xorm:"default 0 int 'flag'"` //用户标记,老用户为0,新用户根据openid计算,奇数为1,偶数为0
  43. IDCard string `xorm:"varchar(255) 'idcard'"`
  44. RealName string `xorm:"varchar(255) 'name'"`
  45. BornTime int64 `xorm:"BIGINT 'borntime'"`
  46. GameTime int64 `xorm:"BIGINT 'gametime'"`
  47. GameTimeLen int `xorm:"int 'gametimelen'"`
  48. ClickId string `xorm:"varchar(255) 'clickId'"` // 进入所点击广告ID
  49. AdId string `xorm:"varchar(128) 'aId'"` //广告ID
  50. AdSrc string `xorm:"varchar(128) 'adSrc'"` //广告来源
  51. UpdateTime int64 `xorm:"'updated' updated"`
  52. CreateTime int64 `xorm:"'createtime' created" json:"createtime"`
  53. ClientVersion string `xorm:"varchar(255) 'clientVersion'"` // 客户端储存的验证版本相关信息 服务器只做储存 客户端不会发 ;
  54. TableNo int `xorm:"-"`
  55. }
  56. // TableName 表名
  57. func (player *Player) TableName() string {
  58. if player.TableNo > 0 {
  59. return fmt.Sprintf("user_account_%v", player.TableNo)
  60. }
  61. return "user_account"
  62. }
  63. func (p *Player) GlobalId() int64 {
  64. return p.AccId
  65. }
  66. func (p *Player) Key() string {
  67. if len(p.OpenID) > 0 {
  68. return p.OpenID
  69. }
  70. if len(p.Account) > 0 {
  71. return fmt.Sprintf("%v@%v", p.Account, LoginPlatAccount)
  72. }
  73. return fmt.Sprintf("%v@%v", "test", LoginPlatAccount)
  74. }
  75. // 成长性英雄
  76. type GrowableHero struct {
  77. // ID int64 `json:"id"`
  78. Level int64 `json:"level"`
  79. Skin int64 `json:"wear"`
  80. }
  81. // // 要塞时装(皮肤)
  82. // type FortSkin struct {
  83. // Wear int64 `json:"wear"`
  84. // Skins map[int64]struct{} `json:"skins"` //皮肤星级id:
  85. // }
  86. // func (fs *GrowableFort) FindStarSkinByModeId(modelId int64) int64 {
  87. // for starId := range fs.Skins {
  88. // if starId/100 == modelId {
  89. // return starId
  90. // }
  91. // }
  92. // return 0
  93. // }
  94. // func (fs *GrowableFort) HasStarSkin(skinId int64) bool {
  95. // _, ok := fs.Skins[skinId]
  96. // return ok
  97. // }
  98. // func (fs *GrowableFort) GetSkinModeIds() []int64 {
  99. // var lst []int64
  100. // for starId, _ := range fs.Skins {
  101. // lst = append(lst, starId/100)
  102. // }
  103. // return lst
  104. // }
  105. func FortSkinStarIdToSkinId(skinStarId int64) int64 {
  106. return skinStarId / 100
  107. }
  108. func FortSkinIdToStarId(skinId int64, level int64) int64 {
  109. return (skinId*100 + level)
  110. }
  111. // 要塞部位
  112. type FortPart struct {
  113. Level int64 `json:"level,omitempty"` //部位等级
  114. // Rune int64 `json:"rune"` //部位镶嵌的符文
  115. // Wear int64 `json:"wear"` // 穿戴位置
  116. }
  117. // 要塞
  118. type GrowableFort struct {
  119. Level int64 `json:"level"` //等级
  120. Parts [6]*FortPart `json:"parts"` //部位
  121. TalentTree [2]int64 `json:"talents"` //天赋树
  122. WearSkin int64 `json:"wear"`
  123. Skins map[int64]int64 `json:"skins"` //皮肤id:星级
  124. SkillIds [3]int64 `json:"skill"` //技能
  125. // Skin *FortSkin `json:"skin"` //皮肤
  126. }
  127. // type DropMaterial struct {
  128. // MaterialData map[int64]*MaterialData `json:"materialData"`
  129. // }
  130. type HeadFrame struct {
  131. HeadId int64 `json:"headId"` // 头像 -1 代表使用 AvatarURL 微信授权头像
  132. FrameId int64 `json:"frameId"` // 头像框
  133. HIdEndTs int64 `json:"hEndTs"` // 头像结束时间 -1 无限制
  134. FIdEndTs int64 `json:"fEndTs"` // 头像框结束时间
  135. }
  136. // 符文
  137. type BagRune struct {
  138. ModeId int64
  139. Attrs [][]float64
  140. Wear int64 `json:"wear,omitempty"` // 穿戴位置
  141. }
  142. type ChapterProcess struct {
  143. Id int64 `json:"id"` //关卡ID
  144. WaveNum int64 `json:"wave"` //通过波数
  145. Reward []int64 `json:"reward"` //领取前几波的奖励
  146. IsPass int64 `json:"pass"` //是否通关
  147. }
  148. // 宝物
  149. type GrowableTreasure struct {
  150. Level int64 `json:"level"` // 等级
  151. Star int64 `json:"star"` // 星级
  152. }
  153. type GrowableRecruit struct {
  154. HeroNum int64 `json:"heroNum"` // 英雄招募次数(暗保底使用,触发暗保底后会清0)
  155. TreasureNum [2]int64 `json:"treasureNum"` // 宝物招募次数(暗保底使用,触发暗保底后会清0) 10次保底和500次保底
  156. EpigraphNum int64 `json:"epigraphNum"` // 铭文招募次数(暗保底使用,触发暗保底后会清0)
  157. }
  158. type GamePlayer struct {
  159. Id int64 //`xorm:"BIGINT pk autoincr 'id'"`
  160. PlayerId int64 `xorm:"BIGINT index 'playerid'"`
  161. AccId int64 `xorm:"BIGINT index(serveracc) 'accId'"`
  162. LineId int64 `xorm:"int index(serveracc) 'line'"`
  163. Level int64 `xorm:"int 'level'"`
  164. Exp int64 `xorm:"BIGINT 'exp'"`
  165. LastLoginTick int64 `xorm:"BIGINT 'lastlogintick'"`
  166. LastLogoutTick int64 `xorm:"BIGINT 'lastlogouttick'"`
  167. OpenId string `xorm:"VARCHAR(255) 'openId'"`
  168. NickName string `xorm:"VARCHAR(255) index 'nickName'"`
  169. ImgUrl string `xorm:"VARCHAR(512) 'imgUrl'"`
  170. HeadImg HeadFrame `xorm:"Text json 'headImg'"`
  171. CreateTime time.Time `xorm:"created"`
  172. Ban int `xorm:"int 'ban'"`
  173. AdId string `xorm:"VARCHAR(128) 'adId'"`
  174. ClickId string `xorm:"VARCHAR(255) 'clickId'"`
  175. AdSrc string `xorm:"VARCHAR(128) 'adSrc'"`
  176. Plat string `xorm:"VARCHAR(20) 'plat'"` // wx tt
  177. SubPlat int `xorm:"int default 0 subPlat"` // 1 抖音; 2 抖音极速
  178. Flag int `xorm:"int 'flag'"` //标记
  179. GateId int64 `xorm:"-"` // 所在网关
  180. Online bool `xorm:"-"` // 在线状态
  181. Materials map[int64]int64 `xorm:"Text 'materials'"` // 道具
  182. Heros map[int64]*GrowableHero `xorm:"Text json 'heros'"` // 英雄
  183. HeroSkins map[int64]struct{} `xorm:"Text json 'heroSkins'"` // 英雄皮肤,玩家可以不拥有英雄却拥有皮肤。所以单独记录。
  184. Fort *GrowableFort `xorm:"Text json 'fort'"` //时装
  185. Runes map[int64]*BagRune `xorm:"Text 'runes'"` //符文
  186. Chapters map[int64]*ChapterProcess `xorm:"Text 'chapters'"` //章节进度
  187. Treasures map[int64]*GrowableTreasure `xorm:"Text json 'treasures'"` // 宝物
  188. Recruit *GrowableRecruit `xorm:"Text json 'recruit'"` // 招募
  189. // Coin int64 `xorm:"BIGINT 'coin'"`
  190. // Diamond int `xorm:"int 'diamond'"`
  191. // Stamina int `xorm:"int 'stamina'"` // 体力
  192. // LastStamTick int64 `xorm:"BIGINT 'lastStamTick'"`
  193. // Exterior *Exterior `xorm:"Text json 'exterior'"` // 外观
  194. // CombatEffe int64 `xorm:"BIGINT default 0 combatEffe"`
  195. // MaxCombatEffe int64 `xorm:"BIGINT default 0 maxCombatEffe"`
  196. // HeadFrames *DropedHeadFrame `xorm:"Text json 'headFrames'"` // 头像
  197. // Heros *DropedHero `xorm:"Text json 'heros'"` // 英雄
  198. // PassRoom *PassRoom `xorm:"Text json 'passRoom'"` // 关卡数据
  199. // Fortress *DropedFortress `xorm:"Text json 'fortress'"` // 要塞
  200. // Fashion *DropedFashion `xorm:"Text json 'fashion'"` // 时装
  201. // New bool `xorm:"-"` // 新注册玩家
  202. }
  203. func (m GamePlayer) TableName() string {
  204. return "player_attr"
  205. }
  206. // 需要保存的数据需确保在这里能复制到new1 中
  207. func (m *GamePlayer) DeepCopy() interface{} {
  208. new1 := new(GamePlayer)
  209. *new1 = *m
  210. return new1
  211. }
  212. func (m *GamePlayer) QueryExist(eng *xorm.Engine) (bool, error) {
  213. player := new(GamePlayer)
  214. player.PlayerId = m.PlayerId
  215. return eng.Exist(player)
  216. }
  217. func (m *GamePlayer) UpdateDB(eng *xorm.Engine) (int64, error) {
  218. return eng.Where("playerid=?", m.PlayerId).MustCols("stamina", "lastStamTick").Update(m)
  219. }
  220. func (m *GamePlayer) GetUniqueKey() string {
  221. //return m.UserId
  222. return strconv.FormatInt(m.PlayerId, 10)
  223. }
  224. // 实现DeepCopy接口
  225. func CopyGamePlayer(old *GamePlayer) *GamePlayer {
  226. new2 := deepcopy.Copy(old).(*GamePlayer)
  227. return new2
  228. }