feat(fight): 新增疲惫状态并优化睡眠状态机制 - 实现疲惫状态(StatusTired),仅限制攻击技能,允许属性技能正常使用 - 重构睡眠状态,改为在被攻击且未miss时立即解除,而非技能使用后 - 修复寄生种子效果触发时机,改为回合开始时触发 - 调整寄生效果的目标为技能施放者而非
This commit is contained in:
@@ -35,6 +35,13 @@ type ServerShowInfo struct {
|
||||
ServerShow *model.ServerShow `json:"servershow,omitempty"`
|
||||
}
|
||||
|
||||
type DonationOwnedServerInfo struct {
|
||||
ServerID uint32 `json:"server_id"`
|
||||
ServerName string `json:"server_name"`
|
||||
Remark string `json:"remark"`
|
||||
ExpireTime time.Time `json:"expire_time"`
|
||||
}
|
||||
|
||||
func NewServerService() *ServerService {
|
||||
cf := &ServerService{
|
||||
Service: &cool.Service{
|
||||
@@ -188,6 +195,73 @@ func (s *ServerService) GetDonationAvailableServerIDs() []uint32 {
|
||||
return ids
|
||||
}
|
||||
|
||||
func (s *ServerService) GetOwnerActiveDonationServers(ownerID uint32) []DonationOwnedServerInfo {
|
||||
if ownerID == 0 {
|
||||
return []DonationOwnedServerInfo{}
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
|
||||
var shows []model.ServerShow
|
||||
dbm_nocache_noenable(model.NewServerShow()).Where("owner", ownerID).Scan(&shows)
|
||||
if len(shows) == 0 {
|
||||
return []DonationOwnedServerInfo{}
|
||||
}
|
||||
|
||||
serverIDs := make([]uint32, 0, len(shows))
|
||||
for i := range shows {
|
||||
if !s.isActiveServerShow(&shows[i], now) {
|
||||
continue
|
||||
}
|
||||
serverIDs = append(serverIDs, shows[i].ServerID)
|
||||
}
|
||||
if len(serverIDs) == 0 {
|
||||
return []DonationOwnedServerInfo{}
|
||||
}
|
||||
|
||||
var servers []model.ServerList
|
||||
dbm_nocache_noenable(s.Model).WhereIn("online_id", serverIDs).Scan(&servers)
|
||||
|
||||
serverMap := make(map[uint32]model.ServerList, len(servers))
|
||||
for i := range servers {
|
||||
serverMap[servers[i].OnlineID] = servers[i]
|
||||
}
|
||||
|
||||
items := make([]DonationOwnedServerInfo, 0, len(serverIDs))
|
||||
for i := range shows {
|
||||
show := &shows[i]
|
||||
if !s.isActiveServerShow(show, now) {
|
||||
continue
|
||||
}
|
||||
|
||||
server, ok := serverMap[show.ServerID]
|
||||
if !ok || show.ServerID == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
serverName := show.Name
|
||||
if serverName == "" {
|
||||
serverName = server.Name
|
||||
}
|
||||
|
||||
items = append(items, DonationOwnedServerInfo{
|
||||
ServerID: show.ServerID,
|
||||
ServerName: serverName,
|
||||
Remark: server.Desc,
|
||||
ExpireTime: show.ExpireTime,
|
||||
})
|
||||
}
|
||||
|
||||
sort.Slice(items, func(i, j int) bool {
|
||||
if !items[i].ExpireTime.Equal(items[j].ExpireTime) {
|
||||
return items[i].ExpireTime.After(items[j].ExpireTime)
|
||||
}
|
||||
return items[i].ServerID < items[j].ServerID
|
||||
})
|
||||
|
||||
return items
|
||||
}
|
||||
|
||||
// CanUseDonationName 校验目标服务器在当前时间点是否允许被冠名。
|
||||
func (s *ServerService) CanUseDonationName(server model.ServerList, ownerID uint32, now time.Time) bool {
|
||||
return server.OnlineID != 0
|
||||
|
||||
Reference in New Issue
Block a user