diff --git a/server/wheelserver/model/buff.go b/server/wheelserver/model/buff.go index 24295283..45af6c36 100644 --- a/server/wheelserver/model/buff.go +++ b/server/wheelserver/model/buff.go @@ -45,3 +45,13 @@ func (this *Buff) FindByBuffUniId(accountId string, buffUniId int64) (error, boo return nil, result.RowsAffected > 0 } } + +func (this *Buff) FindByBuffId(accountId string, buffId int32) (error, bool) { + if result := f5.GetApp().GetOrmDb(constant.WHEEL_DB).Table(this.TableName()).Take( + this, "account_id = ? and buff_id = ?", accountId, buffId); result.Error != nil && + !errors.Is(result.Error, gorm.ErrRecordNotFound) { + return result.Error, false + } else { + return nil, result.RowsAffected > 0 + } +} diff --git a/server/wheelserver/service/buff.go b/server/wheelserver/service/buff.go index 7a08af5a..8d7bc562 100644 --- a/server/wheelserver/service/buff.go +++ b/server/wheelserver/service/buff.go @@ -30,7 +30,15 @@ func (this *buff) Add(accountId string, buffList []int32) { buffMeta := mt.Table.Buff.GetById(int64(buffId)) if buffMeta != nil { buffModel := new(model.Buff) - if buffMeta.GetCanStack() == 0 { + isCreate := false + if buffMeta.GetCanStack() == 1 { + if err, found := buffModel.FindByBuffId(accountId, buffMeta.GetBuffId()); err == nil { + isCreate = !found + } else { + continue + } + } + if isCreate { buffModel.AccountId = accountId buffModel.BuffId = buffMeta.GetBuffId() buffModel.StartTime = nowTime