Files
bl/modules/player/controller/app/cdk.go
昔念 f95fd49efd
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
```
feat(fight): 新增疲惫状态并优化睡眠状态机制

- 实现疲惫状态(StatusTired),仅限制攻击技能,允许属性技能正常使用
- 重构睡眠状态,改为在被攻击且未miss时立即解除,而非技能使用后
- 修复寄生种子效果触发时机,改为回合开始时触发
- 调整寄生效果的目标为技能施放者而非
2026-04-13 21:06:45 +08:00

166 lines
5.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package app
import (
"blazing/cool"
configservice "blazing/modules/config/service"
playerservice "blazing/modules/player/service"
"context"
"strings"
"time"
"github.com/gogf/gf/v2/frame/g"
)
type CdkController struct {
*cool.Controller
}
// init 注册用户态CDK相关Web接口。
func init() {
controller := &CdkController{
&cool.Controller{
Prefix: "/seer/game/cdk",
Api: []string{},
Service: configservice.NewCdkService(),
},
}
cool.RegisterController(controller)
}
type DonationServerListReq struct {
g.Meta `path:"/donation/serverIds" method:"GET"`
}
type DonationCurrentReq struct {
g.Meta `path:"/donation/current" method:"GET"`
}
type DonationServerInfoReq struct {
g.Meta `path:"/donation/serverInfo" method:"GET"`
ServerID uint32 `json:"server_id" v:"required|min:1#服务器ID不能为空|服务器ID非法"`
}
type DonationServerInfoRes struct {
ServerID uint32 `json:"server_id"`
ServerName string `json:"server_name"`
Remark string `json:"remark"`
}
type DonationRedeemReq struct {
g.Meta `path:"/donation/redeem" method:"POST"`
CDKCode string `json:"cdk_code" v:"required#CDK不能为空"`
ServerID uint32 `json:"server_id" v:"required|min:1#服务器ID不能为空|服务器ID非法"`
ServerName string `json:"server_name" v:"required#服务器名称不能为空"`
}
type DonationRedeemRes struct {
ServerID uint32 `json:"server_id"`
ServerName string `json:"server_name"`
OwnerID uint32 `json:"owner_id"`
ServerExpireTime time.Time `json:"server_expire_time"`
}
// DonationServerIDs 查询当前可用于服务器绑定CDK的服务器ID列表。
func (c *CdkController) DonationServerIDs(ctx context.Context, req *DonationServerListReq) (res *cool.BaseRes, err error) {
admin := cool.GetAdmin(ctx)
if admin == nil || admin.UserId == 0 {
return cool.Fail("未登录或登录已失效"), nil
}
return cool.Ok(g.Map{
"server_ids": configservice.NewServerService().GetDonationAvailableServerIDs(),
}), nil
}
// DonationCurrent 查询当前账号名下仍在有效期内的服务器冠名信息。
func (c *CdkController) DonationCurrent(ctx context.Context, req *DonationCurrentReq) (res *cool.BaseRes, err error) {
admin := cool.GetAdmin(ctx)
if admin == nil || admin.UserId == 0 {
return cool.Fail("未登录或登录已失效"), nil
}
return cool.Ok(g.Map{
"list": configservice.NewServerService().GetOwnerActiveDonationServers(uint32(admin.UserId)),
}), nil
}
// DonationServerInfo 查询冠名兑换前展示的服务器名称与备注。
func (c *CdkController) DonationServerInfo(ctx context.Context, req *DonationServerInfoReq) (res *cool.BaseRes, err error) {
if err = g.Validator().Data(req).Run(ctx); err != nil {
return cool.Fail(err.Error()), nil
}
admin := cool.GetAdmin(ctx)
if admin == nil || admin.UserId == 0 {
return cool.Fail("未登录或登录已失效"), nil
}
server := configservice.NewServerService().GetServerID(req.ServerID)
if server.OnlineID == 0 {
return cool.Fail("服务器不存在"), nil
}
return cool.Ok(&DonationServerInfoRes{
ServerID: server.OnlineID,
ServerName: server.Name,
Remark: server.Desc,
}), nil
}
// DonationRedeem 兑换服务器绑定类型CDK并完成冠名写入。
func (c *CdkController) DonationRedeem(ctx context.Context, req *DonationRedeemReq) (res *cool.BaseRes, err error) {
if err = g.Validator().Data(req).Run(ctx); err != nil {
return cool.Fail(err.Error()), nil
}
admin := cool.GetAdmin(ctx)
if admin == nil || admin.UserId == 0 {
return cool.Fail("未登录或登录已失效"), nil
}
ownerID := uint32(admin.UserId)
cdkCode := strings.TrimSpace(req.CDKCode)
if cdkCode == "" {
return cool.Fail("CDK不能为空"), nil
}
serverName := strings.TrimSpace(req.ServerName)
serverName = strings.Trim(cool.Filter.Replace(serverName, '*'), "*")
if serverName == "" {
return cool.Fail("服务器名称不能为空"), nil
}
cdkService := configservice.NewCdkService()
cdkInfo := cdkService.Get(cdkCode)
if cdkInfo == nil {
return cool.Fail("CDK不存在或已被使用"), nil
}
if cdkInfo.Type != configservice.CDKTypeServerNaming {
return cool.Fail("当前页面仅支持服务器冠名CDK请确认输入的是服务器冠名类型"), nil
}
if cdkInfo.BindUserId != 0 && cdkInfo.BindUserId != ownerID {
return cool.Fail("CDK已绑定其他用户"), nil
}
if !cdkInfo.ValidEndTime.IsZero() && cdkInfo.ValidEndTime.Before(time.Now()) {
return cool.Fail("CDK已过期"), nil
}
playerCdkService := playerservice.NewCdkService(ownerID)
if !playerCdkService.CanGet(uint32(cdkInfo.ID)) {
return cool.Fail("CDK已领取"), nil
}
serverInfo, useErr := cdkService.UseServerNamingCDK(ctx, cdkCode, ownerID, req.ServerID, serverName)
if useErr != nil {
return cool.Fail(useErr.Error()), nil
}
playerCdkService.Log(uint32(cdkInfo.ID))
return cool.Ok(&DonationRedeemRes{
ServerID: serverInfo.ServerID,
ServerName: serverInfo.ServerName,
OwnerID: serverInfo.OwnerID,
ServerExpireTime: serverInfo.ServerExpireTime,
}), nil
}