diff --git a/app/controller/dyPushController.go b/app/controller/dyPushController.go
index 55e4d3e3cfee6028768728499d9b1cb17d84a4c7..b77ef08071ad998e9b9aa401d1ebd036bfee6439 100644
--- a/app/controller/dyPushController.go
+++ b/app/controller/dyPushController.go
@@ -10,6 +10,7 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
+ "regexp"
"strconv"
)
@@ -130,7 +131,7 @@ func (h *dyPushController) dyPushPingLun(c *gin.Context) {
var req []models.CommentOneRequest
if err := c.ShouldBindJSON(&req); err != nil {
- c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request format"})
+ c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request format " + err.Error()})
return
}
@@ -256,6 +257,67 @@ func (h *dyPushController) dyPushPingLun(c *gin.Context) {
}
+ // 处理除加入外的互动
+ actRegexArray := []*regexp.Regexp{
+ regexp.MustCompile(`^6+$`), // 匹配任意长度的全6字符串(如"6", "666"),代表加油
+ }
+
+ // finalComments = finalComments[:0] 后,切片可继续存储的元素数量上限为原容量值,超出时会按 Go 的规则自动扩容(无固定限制,但受内存约束)。复用切片时,此操作是高性能最佳实践
+ finalComments = finalComments[:0]
+
+ var actMsgList []struct {
+ MsgID string `json:"msg_id"`
+ SecOpenID string `json:"sec_openid"`
+ Content string `json:"content"`
+ AvatarURL string `json:"avatar_url"`
+ Nickname string `json:"nickname"`
+ Timestamp int64 `json:"timestamp"`
+ }
+
+ // 遍历 req.Arr,筛选符合条件的评论
+ for _, item := range req {
+ // 检查 Content 是否在 matchStrArray 中
+ for _, reg := range actRegexArray {
+ if reg.MatchString(item.Content) {
+ // 检查是否已经存在该 SecOpenID 的评论
+ actMsgList = append(actMsgList, struct {
+ MsgID string `json:"msg_id"`
+ SecOpenID string `json:"sec_openid"`
+ Content string `json:"content"`
+ AvatarURL string `json:"avatar_url"`
+ Nickname string `json:"nickname"`
+ Timestamp int64 `json:"timestamp"`
+ }{
+ MsgID: item.MsgID,
+ SecOpenID: item.SecOpenID,
+ Content: item.Content,
+ AvatarURL: item.AvatarURL,
+ Nickname: item.Nickname,
+ Timestamp: item.Timestamp,
+ })
+ break
+ }
+ }
+ }
+
+ // 处理非加入轨道类互动评论
+ for _, item := range actMsgList {
+ if actRegexArray[0].MatchString(item.Content) {
+ if err := manager.Get().UserManager().InitializeUser(
+ item.SecOpenID,
+ item.Nickname,
+ item.AvatarURL,
+ 1, // 初始等级
+ ); err != nil {
+
+ }
+ // 匹配并赠送666字符串的加速
+ err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, "4", 1)
+ if err != nil {
+ }
+ }
+ }
+
fmt.Println("dyPushPingLun 处理一批评论成功")
// 返回处理结果(根据业务需求调整返回结构)
@@ -310,6 +372,14 @@ func (h *dyPushController) dyPushGift(c *gin.Context) {
}
for _, item := range req {
+ if err := manager.Get().UserManager().InitializeUser(
+ item.SecOpenID,
+ item.Nickname,
+ item.AvatarURL,
+ 1, // 初始等级
+ ); err != nil {
+
+ }
err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID,
item.SecGiftId, item.GiftNum)
if err != nil {
@@ -366,6 +436,14 @@ func (h *dyPushController) dyPushZan(c *gin.Context) {
}
for _, item := range req {
+ if err := manager.Get().UserManager().InitializeUser(
+ item.SecOpenID,
+ item.Nickname,
+ item.AvatarURL,
+ 1, // 初始等级
+ ); err != nil {
+
+ }
err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID,
"1", item.LikeNum)
if err != nil {
@@ -432,6 +510,14 @@ func (h *dyPushController) dyPushFans(c *gin.Context) {
// 代表加入粉丝团
+ if err := manager.Get().UserManager().InitializeUser(
+ item.SecOpenID,
+ item.Nickname,
+ item.AvatarURL,
+ 1, // 初始等级
+ ); err != nil {
+
+ }
err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID,
giftId, 1)
if err != nil {
diff --git a/app/controller/httpController.go b/app/controller/httpController.go
index a17d1ed320af886897174556a061975d4027e6ed..8083de9051676d61102700ef36214732b1e06efb 100644
--- a/app/controller/httpController.go
+++ b/app/controller/httpController.go
@@ -10,6 +10,7 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
+ "regexp"
"strconv"
"sync"
"time"
@@ -708,7 +709,7 @@ func (h *HttpController) GetPingLun(c *gin.Context) {
/* 处理评论数据 */
// 筛选出加入赛道的数据
- matchStrArray := []string{"1", "2", "3"}
+ joinMatchStrArray := []string{"1", "2", "3"}
// 用于存储最终筛选结果(保留最早时间的评论)
// 定义一个新的切片,保持和原始结构相同的结构
@@ -734,7 +735,7 @@ func (h *HttpController) GetPingLun(c *gin.Context) {
// 遍历 req.Arr,筛选符合条件的评论
for _, item := range req.Arr {
// 检查 Content 是否在 matchStrArray 中
- for _, matchStr := range matchStrArray {
+ for _, matchStr := range joinMatchStrArray {
if item.Content == matchStr {
// 检查是否已经存在该 SecOpenID 的评论
if existingItem, exists := secOpenIDMap[item.SecOpenID]; !exists || item.Timestamp < existingItem.Timestamp {
@@ -778,6 +779,67 @@ func (h *HttpController) GetPingLun(c *gin.Context) {
}
+ // 处理除加入外的互动
+ actRegexArray := []*regexp.Regexp{
+ regexp.MustCompile(`^6+$`), // 匹配任意长度的全6字符串(如"6", "666"),代表加油
+ }
+
+ // finalComments = finalComments[:0] 后,切片可继续存储的元素数量上限为原容量值,超出时会按 Go 的规则自动扩容(无固定限制,但受内存约束)。复用切片时,此操作是高性能最佳实践
+ finalComments = finalComments[:0]
+
+ var actMsgList []struct {
+ MsgID string `json:"msg_id"`
+ SecOpenID string `json:"sec_openid"`
+ Content string `json:"content"`
+ AvatarURL string `json:"avatar_url"`
+ Nickname string `json:"nickname"`
+ Timestamp int64 `json:"timestamp"`
+ }
+
+ // 遍历 req.Arr,筛选符合条件的评论
+ for _, item := range req.Arr {
+ // 检查 Content 是否在 matchStrArray 中
+ for _, reg := range actRegexArray {
+ if reg.MatchString(item.Content) {
+ // 检查是否已经存在该 SecOpenID 的评论
+ actMsgList = append(actMsgList, struct {
+ MsgID string `json:"msg_id"`
+ SecOpenID string `json:"sec_openid"`
+ Content string `json:"content"`
+ AvatarURL string `json:"avatar_url"`
+ Nickname string `json:"nickname"`
+ Timestamp int64 `json:"timestamp"`
+ }{
+ MsgID: item.MsgID,
+ SecOpenID: item.SecOpenID,
+ Content: item.Content,
+ AvatarURL: item.AvatarURL,
+ Nickname: item.Nickname,
+ Timestamp: item.Timestamp,
+ })
+ break
+ }
+ }
+ }
+
+ // 处理非加入轨道类互动评论
+ for _, item := range actMsgList {
+ if actRegexArray[0].MatchString(item.Content) {
+ if err := manager.Get().UserManager().InitializeUser(
+ item.SecOpenID,
+ item.Nickname,
+ item.AvatarURL,
+ 1, // 初始等级
+ ); err != nil {
+
+ }
+ // 匹配并赠送666字符串的加速
+ err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, "4", 1)
+ if err != nil {
+ }
+ }
+ }
+
// 返回处理结果(根据业务需求调整返回结构)
c.JSON(http.StatusOK, gin.H{
"code": 0,
@@ -936,6 +998,14 @@ func (h *HttpController) GetLikeRequest(c *gin.Context) {
}
for _, item := range req.Arr {
+ if err := manager.Get().UserManager().InitializeUser(
+ item.SecOpenID,
+ item.Nickname,
+ item.AvatarURL,
+ 1, // 初始等级
+ ); err != nil {
+
+ }
err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID,
"1", item.LikeNum)
if err != nil {
@@ -967,6 +1037,14 @@ func (h *HttpController) GetGiftRequest(c *gin.Context) {
}
for _, item := range req.Arr {
+ if err := manager.Get().UserManager().InitializeUser(
+ item.SecOpenID,
+ item.Nickname,
+ item.AvatarURL,
+ 1, // 初始等级
+ ); err != nil {
+
+ }
err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID,
item.SecGiftId, item.GiftNum)
if err != nil {
diff --git a/app/manager/gift_manager.go b/app/manager/gift_manager.go
index a22109ef5a9592ef75dd2bf616dfe652872c4778..f711de6fbefa2781b2f9912ee7bd6b4dcb29bb55 100644
--- a/app/manager/gift_manager.go
+++ b/app/manager/gift_manager.go
@@ -21,6 +21,7 @@ var giftList = []Gift{
{ID: "1", Name: "点赞", Value: 0, Score: 1, UpgradeLimit: 999999},
{ID: "2", Name: "加入粉丝团", Value: 10, Score: 75, UpgradeLimit: 999999},
{ID: "3", Name: "粉丝团升级", Value: 100, Score: 750, UpgradeLimit: 999999},
+ {ID: "4", Name: "666", Value: 0, Score: 2, UpgradeLimit: 999999},
{ID: "n1/Dg1905sj1FyoBlQBvmbaDZFBNaKuKZH6zxHkv8Lg5x2cRfrKUTb8gzMs=", Name: "仙女棒", Value: 10, Score: 75, UpgradeLimit: 66},
{ID: "eplFUy7i0B0fiv0Iym1MpOZa5XmUE8g/WUAyJ6Tc+UJJDpcs7pzclNOz/WM=", Name: "黄色仙女棒", Value: 10, Score: 75, UpgradeLimit: 66},
{ID: "4I66OIE1HKWfM7PNvAHtAgYUSNlggSEgcpo3ai8GYQXAWqjrDuH8NtjsWEQ=", Name: "蓝色仙女棒", Value: 10, Score: 75, UpgradeLimit: 66},
diff --git a/app/manager/live_room_mamanger.go b/app/manager/live_room_mamanger.go
index eac9293c2154dadacd0d5fdb96549da3bcd73863..168b9d48fa98497aa8a9c2751c8f39ddd634cde7 100644
--- a/app/manager/live_room_mamanger.go
+++ b/app/manager/live_room_mamanger.go
@@ -310,6 +310,8 @@ func (lrm *LiveRoomManager) BatchInsertLiveRoomResults(results []models.LiveRoom
Mileage: result.Mileage,
JumpHeight: result.JumpHeight,
FinishTime: result.FinishTime,
+ FinishTime1: result.FinishTime1,
+ FinishTime2: result.FinishTime2,
FastestSpeed: result.FastestSpeed,
AttackPower: result.AttackPower,
ExpireAt: result.ExpireAt,
diff --git a/app/manager/live_room_mysql_storage.go b/app/manager/live_room_mysql_storage.go
index 6258c849c2e3407dae37742db47edb5f93442517..2221b1e7a2edc06ab5283650c612e15ddf7257cd 100644
--- a/app/manager/live_room_mysql_storage.go
+++ b/app/manager/live_room_mysql_storage.go
@@ -73,6 +73,8 @@ type LiveRoomResultMysqlInfo struct {
Mileage int `db:"mileage"`
JumpHeight float32 `db:"jump_height"`
FinishTime int `db:"jump_height"`
+ FinishTime1 int `db:"jump_height1"`
+ FinishTime2 int `db:"jump_height2"`
FastestSpeed int `db:"jump_height"`
AttackPower int `db:"attack_power"`
ExpireAt sql.NullTime `db:"expire_at"`
@@ -402,9 +404,9 @@ func (lrm *LiveRoomMysqlStorage) BatchInsertLiveRoomResults(results []LiveRoomRe
stmt, err := db.GetDB().Prepare(`INSERT INTO live_room_result (
live_room_id, times, user_id, game_score, track, job, is_champion, is_finish, is_biggest, gift_value, gift_score,
get_score, has_done, user_name, head_img, user_level, user_score, target_level, target_score,
- mileage, jump_height, finish_time, fastest_speed, attack_power,
+ mileage, jump_height, finish_time, finish_time1, finish_time2, fastest_speed, attack_power,
expire_at, create_at, update_at
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`)
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`)
if err != nil {
return fmt.Errorf("prepare statement error: %v", err)
}
@@ -416,7 +418,7 @@ func (lrm *LiveRoomMysqlStorage) BatchInsertLiveRoomResults(results []LiveRoomRe
result.IsChampion, result.IsFinish, result.IsBiggest, result.GiftValue, result.GiftScore, result.GetScore,
result.HasDone, result.UserName, result.HeadImg, result.UserLevel, result.UserScore,
result.TargetLevel, result.TargetScore, result.Mileage, result.JumpHeight,
- result.FinishTime, result.FastestSpeed, result.AttackPower,
+ result.FinishTime, result.FinishTime1, result.FinishTime2, result.FastestSpeed, result.AttackPower,
result.ExpireAt,
)
if err != nil {
diff --git a/app/manager/user_mysql_storage.go b/app/manager/user_mysql_storage.go
index 05a90b69face9211158dea2538a45c6e86689bc0..8472b501dadcf9550f6727b9b3a09917c4f9e8ec 100644
--- a/app/manager/user_mysql_storage.go
+++ b/app/manager/user_mysql_storage.go
@@ -333,7 +333,7 @@ func (um *userMySQLStorage) GetRanks() (*models.RankInfos, error) {
// 获取用户信息
func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) {
- var fastestSpeed, finishTime, jumpHeight, attackPower = 0, 0, float32(0.0), 0
+ var fastestSpeed, finishTime, finishTime1, finishTime2, jumpHeight, attackPower = 0, 0, 0, 0, float32(0.0), 0
// 获取最快速度
err := db.GetDB().QueryRow(`
select MAX(fastest_speed) from live_room_result
@@ -345,11 +345,12 @@ func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) {
if err == sql.ErrNoRows {
} else {
// 记录日志
- return nil, err
+ fmt.Println("GetWorldRecords fastestSpeed sql error : ", err)
+ //return nil, err
}
}
- // 获取最短完成时间
+ // 获取最短完成时间 模式1
err = db.GetDB().QueryRow(`
select Min(finish_time) from live_room_result
where finish_time > 0
@@ -361,7 +362,42 @@ func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) {
if err == sql.ErrNoRows {
} else {
// 记录日志
- return nil, err
+ fmt.Println("GetWorldRecords finishTime sql error : ", err)
+ //return nil, err
+ }
+ }
+
+ // 获取最短完成时间 模式2
+ err = db.GetDB().QueryRow(`
+ select Min(finish_time1) from live_room_result
+ where finish_time1 > 0
+ `).Scan(
+ &finishTime1,
+ )
+
+ if err != nil {
+ if err == sql.ErrNoRows {
+ } else {
+ // 记录日志
+ fmt.Println("GetWorldRecords finishTime1 sql error : ", err)
+ //return nil, err
+ }
+ }
+
+ // 获取最短完成时间 模式3
+ err = db.GetDB().QueryRow(`
+ select Min(finish_time2) from live_room_result
+ where finish_time2 > 0
+ `).Scan(
+ &finishTime2,
+ )
+
+ if err != nil {
+ if err == sql.ErrNoRows {
+ } else {
+ // 记录日志
+ fmt.Println("GetWorldRecords finish_time2 sql error : ", err)
+ //return nil, err
}
}
@@ -377,7 +413,8 @@ func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) {
return nil, err
}
// 记录日志
- return nil, err
+ fmt.Println("GetWorldRecords jumpHeight sql error : ", err)
+ //return nil, err
}
// 最强攻击
@@ -392,12 +429,15 @@ func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) {
return nil, err
}
// 记录日志
- return nil, err
+ fmt.Println("GetWorldRecords attackPower sql error : ", err)
+ //return nil, err
}
worldRecods := models.WorldRecods{
FastestSpeed: fastestSpeed,
FinishTime: finishTime,
+ FinishTime1: finishTime1,
+ FinishTime2: finishTime2,
JumpHeight: jumpHeight,
AttackPower: attackPower,
}
diff --git a/app/models/models.go b/app/models/models.go
index 91c88333d7fb61cd58232092d3ebb7391a4e01bf..2062a1a2e608641812c97b57e2bf76c95ca52153 100644
--- a/app/models/models.go
+++ b/app/models/models.go
@@ -49,7 +49,7 @@ type FinishTrackInfo struct {
FinishTime int `json:"finish_time"` //完成时间(s)
FastestSpeed int `json:"fastest_speed"` //最快速度
AttackPower int `json:"attack_power"` //当局的导弹次数
-
+ GameMode int `json:"game_mode"` //当局的游戏类型,从1开始
}
// LiveRoomResult 表示 live_room_result 表的结构
@@ -76,6 +76,8 @@ type LiveRoomResult struct {
Mileage int `json:"mileage"`
JumpHeight float32 `json:"jump_height"`
FinishTime int `json:"finish_time"`
+ FinishTime1 int `json:"finish_time1"`
+ FinishTime2 int `json:"finish_time2"`
FastestSpeed int `json:"fastest_speed"`
AttackPower int `json:"attack_power"`
ExpireAt sql.NullTime `json:"expire_at"`
@@ -101,6 +103,8 @@ type RankInfos struct {
type WorldRecods struct {
FastestSpeed int `json:"fastest_speed"`
FinishTime int `json:"finish_time"`
+ FinishTime1 int `json:"finish_time1"`
+ FinishTime2 int `json:"finish_time2"`
JumpHeight float32 `json:"jump_height"`
AttackPower int `json:"attack_power"`
}
diff --git a/app/service/douyin_service.go b/app/service/douyin_service.go
index 3938e2bc2b57dd1e8f00f160bda929e1fd433eca..82dfefe4f262253db5856a5f58fbacdb9cbcfc24 100644
--- a/app/service/douyin_service.go
+++ b/app/service/douyin_service.go
@@ -373,6 +373,14 @@ func (ls DouYinService) DealDouYinAllGiftFailedData() error {
// 处理新数据
for _, giftRecord := range newFailGiftRecodArr {
+ if err := manager.Get().UserManager().InitializeUser(
+ giftRecord.SecOpenID,
+ giftRecord.Nickname,
+ giftRecord.AvatarURL,
+ 1, // 初始等级
+ ); err != nil {
+
+ }
err = LiveRoomService{}.OneUserSendGift(giftRecord.MsgID, info.LiveRoomId, giftRecord.SecOpenID, giftRecord.SecGiftId, giftRecord.GiftNum)
// TODO 标记已经处理的数据
setStatus := "success"
diff --git a/app/service/live_room_service.go b/app/service/live_room_service.go
index b9bdfc0c4637c243164832364b3a3456ab0823a3..f77704cf223ea1e617e28b40265b3c3448e1b5ec 100644
--- a/app/service/live_room_service.go
+++ b/app/service/live_room_service.go
@@ -177,7 +177,18 @@ func (ls LiveRoomService) OneUserSendGift(msgID string, liveRoomID string, userI
userLiveTrack, err := manager.Get().LiveRoomManager().GetLiveTrackByUserId(liveRoomID, userId)
if err != nil {
- return fmt.Errorf("error: user does not join live room game, %v", err)
+ userInfo, err := manager.Get().UserManager().GetUser(userId)
+ if err != nil {
+ }
+
+ track, _ := utils.GetRandomTeamId()
+ job, _ := utils.GetRandomJobId()
+
+ ls.OneUserJoinTrack(liveRoomID, userId, userInfo.UserName, userInfo.HeadImg, track, job)
+ fmt.Printf("用户id : %s, 暂未加入直播间: %s, 阵营却送了礼物,自动加入阵营: %d, 职业: %d",
+ userId, liveRoomID, track, job)
+
+ userLiveTrack, err = manager.Get().LiveRoomManager().GetLiveTrackByUserId(liveRoomID, userId)
}
track := userLiveTrack.Track
@@ -580,12 +591,21 @@ func (ls LiveRoomService) FinishGame(msgID string, liveRoomId string, finishTrac
mileage := 0
jumpHeight := float32(0)
finishTime := 0
+ finishTime1 := 0
+ finishTime2 := 0
fastestSpeed := 0
attackPower := 0
for _, info := range finishTrackInfos {
if scoreRecord.Track == info.Track {
mileage = info.Mileage
- finishTime = info.FinishTime
+ if info.GameMode == 1 || info.GameMode == 0 {
+ finishTime = info.FinishTime
+ } else if info.GameMode == 2 {
+ finishTime1 = info.FinishTime
+ } else if info.GameMode == 3 {
+ finishTime2 = info.FinishTime
+ }
+
fastestSpeed = info.FastestSpeed
attackPower = info.AttackPower
}
@@ -617,6 +637,8 @@ func (ls LiveRoomService) FinishGame(msgID string, liveRoomId string, finishTrac
Mileage: mileage,
JumpHeight: jumpHeight,
FinishTime: finishTime,
+ FinishTime1: finishTime1,
+ FinishTime2: finishTime2,
FastestSpeed: fastestSpeed,
AttackPower: attackPower,
ExpireAt: sql.NullTime{
diff --git a/app/utils/game.go b/app/utils/game.go
new file mode 100644
index 0000000000000000000000000000000000000000..9a13b4a65cf6f03938956f1cfb6fe4e33d6885ca
--- /dev/null
+++ b/app/utils/game.go
@@ -0,0 +1,85 @@
+// app/utils/utils.go
+package utils
+
+import (
+ "BlazeRider-backend/config"
+ "fmt"
+ "math/rand"
+ "strconv"
+ "strings"
+ "time"
+)
+
+// GetTeamArr 获取config配置中的team对应的数字
+func GetTeamArr() ([]int, error) {
+ teamSetString := config.Get().Game.Team
+ // 将字符串分割
+ strArr := strings.Split(teamSetString, ",") // ["1", "2", "3"]
+
+ // 将team字符串 转换为整型数组
+ var intArr []int
+
+ for _, s := range strArr {
+ num, err := strconv.Atoi(strings.TrimSpace(s)) // 去除空格并转换
+ if err != nil {
+ fmt.Printf("转换失败: %s\n", s)
+ continue // 跳过无效值
+ }
+ intArr = append(intArr, num) // 添加到整型数组
+ }
+ return intArr, nil
+}
+
+// GetRandomTeamId 获取config配置中的team中的随机一个id
+func GetRandomTeamId() (int, error) {
+ teamArr, err := GetTeamArr()
+ if err != nil {
+ return 0, err
+ }
+ // 3. 随机选择一个数字
+ if len(teamArr) == 0 {
+ fmt.Println("配置中的数组为空,无法选择队伍id")
+ }
+
+ rand.Seed(time.Now().UnixNano()) // 初始化随机种子
+ randomIndex := rand.Intn(len(teamArr)) // 生成随机索引
+ track := teamArr[randomIndex] // 获取随机值
+ return track, nil
+}
+
+// GetJobArr 获取config配置中的GetJobArr对应的数字
+func GetJobArr() ([]int, error) {
+ teamSetString := config.Get().Game.Job
+ // 将字符串分割
+ strArr := strings.Split(teamSetString, ",") // ["1", "2", "3"]
+
+ // 将team字符串 转换为整型数组
+ var intArr []int
+
+ for _, s := range strArr {
+ num, err := strconv.Atoi(strings.TrimSpace(s)) // 去除空格并转换
+ if err != nil {
+ fmt.Printf("转换失败: %s\n", s)
+ continue // 跳过无效值
+ }
+ intArr = append(intArr, num) // 添加到整型数组
+ }
+ return intArr, nil
+}
+
+// GetRandomJobId 获取config配置中的job中的随机id
+func GetRandomJobId() (int, error) {
+ jobArr, err := GetJobArr()
+ if err != nil {
+ return 0, err
+ }
+ // 3. 随机选择一个数字
+ if len(jobArr) == 0 {
+ return 0, nil
+ }
+
+ rand.Seed(time.Now().UnixNano()) // 初始化随机种子
+ randomIndex := rand.Intn(len(jobArr)) // 生成随机索引
+ track := jobArr[randomIndex] // 获取随机值
+ return track, nil
+}
diff --git a/config/config.go b/config/config.go
index 61033b034d994aec67710ed8581d2eb9abc34f40..46d73c376f5a7658fe28f3769df256d7beca43ca 100644
--- a/config/config.go
+++ b/config/config.go
@@ -33,10 +33,16 @@ type DouyinConfig struct {
APIWebcastBaseURL string `yaml:"api_webcast_base_url"`
}
+type GameConfig struct {
+ Team string `yaml:"team"`
+ Job string `yaml:"job"`
+}
+
type Config struct {
App AppConfig `yaml:"app"`
Database DatabaseConfig `yaml:"database"`
Douyin DouyinConfig `yaml:"douyin"`
+ Game GameConfig `yaml:"game"`
}
var globalConfig *Config
@@ -124,6 +130,7 @@ func mergeConfigs(base, override *Config) *Config {
App: mergeAppConfig(base.App, override.App),
Database: mergeDBConfig(base.Database, override.Database),
Douyin: mergeDouyinConfig(base.Douyin, override.Douyin),
+ Game: mergeGameConfig(base.Game, override.Game),
}
}
@@ -237,3 +244,13 @@ func mergeDouyinConfig(base, override DouyinConfig) DouyinConfig {
}
return base
}
+
+func mergeGameConfig(base, override GameConfig) GameConfig {
+ if override.Team != "" {
+ base.Team = override.Team
+ }
+ if override.Job != "" {
+ base.Job = override.Job
+ }
+ return base
+}
diff --git a/configs/config.dev.yaml b/configs/config.dev.yaml
index e4fee0afb9e712541db51e4493d87906a83ca73d..c1c6f92fa68f2d70419109ed5ae9d7620dd919d5 100644
--- a/configs/config.dev.yaml
+++ b/configs/config.dev.yaml
@@ -8,4 +8,6 @@ database:
max_open_conns: 100
max_idle_conns: 20
-douyin:
+game:
+ team: "1,2,3"
+ job: ""
diff --git a/configs/config.prod.yaml b/configs/config.prod.yaml
index 80e6e3ee843cb76797ffa0b1229452c737294a43..4a9b1d278c68db70efcc6bfa5f85c6d8e553ad5d 100644
--- a/configs/config.prod.yaml
+++ b/configs/config.prod.yaml
@@ -12,4 +12,6 @@ database:
max_open_conns: 100
max_idle_conns: 20
-douyin:
+game:
+ team: "1,2,3"
+ job: ""
\ No newline at end of file
diff --git a/templates/index.html b/templates/index.html
index 39c0cd64bcb76e83d5aab08989685058ae57a9e9..e6eb3551cf1f4c49d4aafee64d36b3c76ebc7258 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -50,9 +50,11 @@
+
+
-
+
@@ -98,6 +100,11 @@
+
+
+
+
+
@@ -238,7 +245,7 @@
value: 100,
},
{
- id: 11,
+ id: 13,
giftId : "fJs8HKQ0xlPRixn8JAUiL2gFRiLD9S6IFCFdvZODSnhyo9YN8q7xUuVVyZI=",
name: "魔法镜",
value: 190,
@@ -1162,9 +1169,10 @@
"is_finish": 1,
"mileage": 100,
"jump_height": 8.5,
- "finish_time": 52, //完成时间
+ "finish_time": 105, //完成时间
"fastest_speed": 20, // 当局最快速度
"attack_power": 3, // 当局的导弹次数
+ "game_mode": 3, // 当局的游戏类型,从1开始
},
{
"track": 2,
@@ -1172,9 +1180,10 @@
"is_finish": 1,
"mileage": 100,
"jump_height": 3.65,
- "finish_time": 68, //完成时间
+ "finish_time": 0, //完成时间
"fastest_speed": 22, // 当局最快速度
"attack_power": 1, // 当局的导弹次数
+ "game_mode": 3, // 当局的游戏类型,从1开始
},
{
"track": 3,
@@ -1182,9 +1191,10 @@
"is_finish": 0,
"mileage": 70,
"jump_height": 5,
- "finish_time": 0, //完成时间
+ "finish_time": 180, //完成时间
"fastest_speed": 15, // 当局最快速度
"attack_power": 10, // 当局的导弹次数
+ "game_mode": 3, // 当局的游戏类型,从1开始
},
], // 阵营完成信息
"timestamp":1649068664, // 评论毫秒级时间戳
@@ -1266,10 +1276,12 @@
console.log("sendGetRanksRequest function res 222 : ", resdata.data, typeof resdata.data)
let fastest_speed = resdata.data.records.fastest_speed
let finish_time = resdata.data.records.finish_time
+ let finish_time1 = resdata.data.records.finish_time1
+ let finish_time2 = resdata.data.records.finish_time2
let jump_height = resdata.data.records.jump_height
let attack_power = resdata.data.records.attack_power
- console.log("sendGetWorldRecordsRequest 4 num : ", fastest_speed
- , finish_time, jump_height, attack_power
+ console.log("sendGetWorldRecordsRequest 6 num : ", fastest_speed
+ , finish_time, finish_time1, finish_time2, jump_height, attack_power
)
});
}