Files
bl/logic/controller/user_action.go
xinian d83cf365ac
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed
更新说明
2026-04-05 23:13:06 +08:00

207 lines
6.2 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 controller
import (
"blazing/common/data/xmlres"
"blazing/common/socket/errorcode"
"blazing/common/utils"
"blazing/cool"
"blazing/logic/service/item"
"blazing/logic/service/player"
"blazing/logic/service/user"
"blazing/modules/player/model"
"strings"
)
// PlayerAim 玩家射击操作
// data: 包含射击信息的输入数据
// player: 当前玩家对象
// 返回: 射击结果和错误码
func (h Controller) PlayerAim(data *AimatInboundInfo, player *player.Player) (result *user.AimatOutboundInfo, err errorcode.ErrorCode) {
result = &user.AimatOutboundInfo{
ItemId: data.ItemId,
Point: data.Point,
ShootType: data.ShootType,
UserId: player.Info.UserID,
}
player.GetSpace().Broadcast(player, data.Head.CMD, result)
return
}
// PlayerChat 玩家聊天功能
// data: 包含聊天消息的输入数据
// player: 当前玩家对象
// 返回: 聊天结果和错误码
func (h Controller) PlayerChat(data *ChatInboundInfo, player *player.Player) (result *user.ChatOutboundInfo, err errorcode.ErrorCode) {
result = &user.ChatOutboundInfo{
Message: utils.RemoveLast(data.Message),
SenderNickname: player.Info.Nick,
SenderId: player.Info.UserID,
}
result.Message = cool.Filter.Replace(result.Message, '*')
player.GetSpace().Broadcast(player, data.Head.CMD, result)
return
}
// ChangePlayerColor 修改玩家颜色消耗50赛尔豆
// data: 包含颜色信息的输入数据
// player: 当前玩家对象
// 返回: 颜色更改结果和错误码
func (h Controller) ChangePlayerColor(data *ChangeColorInboundInfo, player *player.Player) (result *user.ChangeColorOutboundInfo, err errorcode.ErrorCode) {
const changeColorCost = 50
if !player.GetCoins(changeColorCost) {
return nil, errorcode.ErrorCodes.ErrSunDouInsufficient10016
}
player.Info.Coins -= changeColorCost
player.Info.Color = data.Color
player.Info.Texture = 0
result = &user.ChangeColorOutboundInfo{
UserId: player.Info.UserID,
Color: data.Color,
Coins: player.Info.Coins,
Texture: player.Info.Texture,
}
player.GetSpace().Broadcast(player, data.Head.CMD, result)
return
}
// ChangePlayerDoodle 修改玩家涂鸦消耗50赛尔豆
// data: 包含涂鸦信息的输入数据
// player: 当前玩家对象
// 返回: 涂鸦更改结果和错误码
func (h Controller) ChangePlayerDoodle(data *ChangeDoodleInboundInfo, player *player.Player) (result *user.ChangeDoodleOutboundInfo, err errorcode.ErrorCode) {
const changeDoodleCost = 50
if !player.GetCoins(changeDoodleCost) {
return nil, errorcode.ErrorCodes.ErrSunDouInsufficient10016
}
player.Info.Coins -= changeDoodleCost
info, ok := xmlres.ItemsMAP[int(data.Id)]
if !ok {
return nil, errorcode.ErrorCodes.ErrSystemBusy
}
player.Info.Texture = uint32(info.Texture)
player.Info.Color = uint32(info.Texture)
result = &user.ChangeDoodleOutboundInfo{
UserId: player.Info.UserID,
Color: player.Info.Color,
Coins: player.Info.Coins,
Texture: player.Info.Texture,
}
player.GetSpace().Broadcast(player, data.Head.CMD, result)
return
}
// ChangeNONOColor 修改NONO颜色
// data: 包含NONO颜色信息的输入数据
// player: 当前玩家对象
// 返回: NONO颜色更改结果和错误码
func (h Controller) ChangeNONOColor(data *ChangeNONOColorInboundInfo, player *player.Player) (result *user.ChangeNONOColorOutboundInfo, err errorcode.ErrorCode) {
//player.Info.Coins -= 200
player.Info.NONO.NonoColor = data.Color
result = &user.ChangeNONOColorOutboundInfo{
UserID: player.Info.UserID,
Color: player.Info.Color,
}
player.GetSpace().Broadcast(player, data.Head.CMD, result)
return
}
// DanceAction 跳舞动作
// data: 包含跳舞类型信息的输入数据
// player: 当前玩家对象
// 返回: 跳舞动作结果和错误码
func (h Controller) DanceAction(data *C2SDanceAction, player *player.Player) (result *user.S2CDanceAction, err errorcode.ErrorCode) {
result = &user.S2CDanceAction{
Type: data.Type,
UserID: player.Info.UserID,
}
player.GetSpace().Broadcast(player, data.Head.CMD, result)
return
}
// PeopleTransform 人物变形
// data: 包含变形信息的输入数据
// player: 当前玩家对象
// 返回: 变形结果和错误码
func (h Controller) PeopleTransform(data *C2SPEOPLE_TRANSFROM, player *player.Player) (result *user.S2CPEOPLE_TRANSFROM, err errorcode.ErrorCode) {
result = &user.S2CPEOPLE_TRANSFROM{
SuitID: data.SuitID,
UserID: player.Info.UserID,
}
player.GetSpace().Broadcast(player, data.Head.CMD, result)
return
}
// ChangePlayerCloth 更换玩家服装
// data: 包含服装信息的输入数据
// player: 当前玩家对象
// 返回: 服装更改结果和错误码
func (h Controller) ChangePlayerCloth(data *ChangePlayerClothInboundInfo, player *player.Player) (result *item.ChangePlayerClothOutboundInfo, err errorcode.ErrorCode) {
result = &item.ChangePlayerClothOutboundInfo{
UserID: player.Info.UserID,
ClothList: make([]model.PeopleItemInfo, 0),
}
for _, clothID := range data.ClothList {
if player.Service.Item.Exist(clothID) {
result.ClothList = append(result.ClothList, model.PeopleItemInfo{ID: clothID, Level: 1})
}
}
player.Info.Clothes = result.ClothList
player.GetSpace().Broadcast(player, data.Head.CMD, result)
return
}
// ChangePlayerName 处理控制器请求。
func (h Controller) ChangePlayerName(data *ChangePlayerNameInboundInfo, c *player.Player) (result *user.ChangePlayerNameOutboundInfo, err errorcode.ErrorCode) {
newNickname := cool.Filter.Replace(strings.Trim(data.Nickname, "\x00"), '*')
c.Info.Nick = newNickname
result = &user.ChangePlayerNameOutboundInfo{
Nickname: newNickname,
UserID: c.Info.UserID,
}
c.GetSpace().Broadcast(c, data.Head.CMD, result)
return result, 0
}
// ChangeTile 处理控制器请求。
func (h Controller) ChangeTile(data *ChangeTitleInboundInfo, c *player.Player) (result *user.ChangeTitleOutboundInfo, err errorcode.ErrorCode) {
result = &user.ChangeTitleOutboundInfo{
UserID: c.Info.UserID,
}
if data.TileID == 0 {
return result, 0
}
if !c.Service.Title.Can(data.TileID) {
return nil, errorcode.ErrorCodes.ErrSystemError
}
c.Info.Title = data.TileID
result.TileID = data.TileID
c.GetSpace().Broadcast(c, data.Head.CMD, result)
return result, 0
}