123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- package gm_services
- import (
- "encoding/json"
- "errors"
- "gadmin/internal/admin/forms"
- "github.com/gin-gonic/gin"
- "io/ioutil"
- "os"
- "sort"
- )
- // 等级信息
- type CharacterInfo struct {
- ID int `json:"ID"`
- Name string `json:"Name"`
- Role int `json:"Role"`
- Star int `json:"Star"`
- MaxStar int `json:"MaxStar"`
- Level int `json:"Level"`
- }
- type LevelInfo struct {
- Level int `json:"level"`
- ID int `json:"id"`
- }
- type StarInfo struct {
- Star int `json:"star"`
- Levels []LevelInfo `json:"levels"`
- }
- // UpgradeRole 升级角色
- func UpgradeRole(ctx *gin.Context, params forms.UpgradeRoleReq) (err error) {
- /*if params.UserId == 0 {
- return errNoUser
- }
- DB, err := player.GetDBByUserId(params.UserId)
- if err != nil {
- return
- }
- //newRoleId, err := replaceDigits(params.RoleId, params.NewRoleId)
- if err != nil {
- return err
- }
- if params.RoleId >= params.NewRoleId {
- return errors.New("升级角色匹配有误,请输入角色ID")
- }
- msg := msg2.GmUpdateRole{
- MsgId: character.GenerateMsgId(),
- PlayerID: params.UserId,
- RoleID: params.RoleId,
- NewRoleID: params.NewRoleId,
- OperatorId: token.GetUID(ctx),
- }
- //err = gate.SendToWorld(0, &msg)
- //if err == nil {
- //
- //}
- rpc_share.MsgMap[msg.MsgId] = fmt.Sprintf("%s,GM给玩家[%d]的角色[%d]升级至[%d]",
- utility.FormatSecond(time.Now()),
- params.UserId,
- params.RoleId, params.NewRoleId)
- var resp *msg2.ResponseGmUpdateRole
- res, err := config.GmNats.GmRequest(DB, "GmUpdateRole", msg)
- if err != nil {
- return
- }
- if err = json.Unmarshal(res, &resp); err != nil {
- return
- }
- rpc_share.LogChan <- rpc_share.LogMsg{
- MsgID: msg.MsgId,
- Data: resp,
- }*/
- return
- }
- func GetRoleLevel(ctx *gin.Context, params forms.GetRoleLevelReq) (starInfoList []StarInfo, err error) {
- filePath := os.Getenv("ROLE_JSON")
- data, err := ioutil.ReadFile(filePath)
- if err != nil {
- err = errors.New("无法读取JSON文件")
- return
- }
- var characters map[string]CharacterInfo
- err = json.Unmarshal(data, &characters)
- if err != nil {
- err = errors.New("Json转换失败")
- return
- }
- // 定义一个 map,用于按 Star 分组 Level 和 ID
- groupedCharacters := make(map[int]map[int][]int)
- keys := make([]string, 0, len(characters))
- for key := range characters {
- keys = append(keys, key)
- }
- sort.Strings(keys)
- // 定义一个切片,用于存储 StarInfo
- //var starInfoList []StarInfo
- // 遍历 characters
- for _, key := range keys {
- info := characters[key]
- if info.Name == params.RoleName {
- star := info.Star
- level := info.Level
- id := info.ID
- // 初始化 map
- if _, ok := groupedCharacters[star]; !ok {
- groupedCharacters[star] = make(map[int][]int)
- }
- // 添加 Level 和 ID 到 map
- if _, ok := groupedCharacters[star][level]; !ok {
- groupedCharacters[star][level] = []int{}
- }
- groupedCharacters[star][level] = append(groupedCharacters[star][level], id)
- }
- }
- // 遍历 groupedCharacters 构建 StarInfo
- for star, levels := range groupedCharacters {
- var levelInfoList []LevelInfo
- // 获取 levels 的 key(即 level)并排序
- var levelKeys []int
- for level := range levels {
- levelKeys = append(levelKeys, level)
- }
- sort.Ints(levelKeys)
- // 遍历排序后的 level
- for _, level := range levelKeys {
- ids := levels[level]
- // 对 ids 切片进行排序
- sort.Ints(ids)
- // 构建 LevelInfo
- levelInfo := LevelInfo{
- Level: level,
- ID: ids[0],
- }
- levelInfoList = append(levelInfoList, levelInfo)
- }
- // 构建 StarInfo
- starInfo := StarInfo{
- Star: star,
- Levels: levelInfoList,
- }
- starInfoList = append(starInfoList, starInfo)
- }
- // 对 starInfoList 进行排序
- sort.Slice(starInfoList, func(i, j int) bool {
- return starInfoList[i].Star < starInfoList[j].Star
- })
- // 转换为 JSON 格式并打印
- //jsonData, err := json.Marshal(starInfoList)
- //if err != nil {
- // log.Fatal("Error encoding JSON:", err)
- // return
- //}
- return
- }
|