Merge branch 'main' of https://cnb.cool/blzing/blazing
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
This commit is contained in:
@@ -22,16 +22,16 @@ func (r *RPCfight) join(pvp info.RPCFightinfo) {
|
||||
ret := service.NewPVPService(pvp.PlayerID).Get(pvp.PlayerID)
|
||||
score := 800
|
||||
if ret != nil {
|
||||
score = int(ret.RankInfo.Score)
|
||||
score = int(ret.RankInfo[len(ret.RankInfo)-1].Score)
|
||||
}
|
||||
r.zs.Add(pvp.PlayerID,
|
||||
ret)
|
||||
if r.zs.Length() > 2 {
|
||||
u, s := r.zs.FindPrev(func(i *model.PVP) bool { return i.RankInfo.Score > score })
|
||||
u, s := r.zs.FindPrev(func(i *model.PVP) bool { return i.RankInfo[len(ret.RankInfo)-1].Score > score })
|
||||
|
||||
diff := s - score
|
||||
// 等待越久,允许区间越大
|
||||
wait := time.Now().Sub(u.RankInfo.LastMatchTime.Time).Seconds()
|
||||
wait := time.Now().Sub(u.RankInfo[len(ret.RankInfo)-1].LastMatchTime.Time).Seconds()
|
||||
maxAllow := 100 + int(wait)*10
|
||||
if diff < maxAllow {
|
||||
//找到上一个,如果区间分数少于一定,
|
||||
|
||||
@@ -6,10 +6,26 @@ import (
|
||||
"math/rand/v2"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/gogf/gf/v2/util/grand"
|
||||
)
|
||||
|
||||
// IsToday 判断给定时间是否是今天
|
||||
func IsToday(t1 *gtime.Time) bool {
|
||||
if t1 == nil {
|
||||
return false
|
||||
}
|
||||
t := t1.Time
|
||||
|
||||
// 获取当前时间
|
||||
now := time.Now()
|
||||
|
||||
// 比较年、月、日是否相同
|
||||
return t.Year() == now.Year() &&
|
||||
t.Month() == now.Month() &&
|
||||
t.Day() == now.Day()
|
||||
}
|
||||
func FindWithIndex[T any](slice []T, predicate func(item T) bool) (int, *T, bool) {
|
||||
for i := range slice {
|
||||
if predicate(slice[i]) {
|
||||
|
||||
37
logic/service/fight/effect/1146.go
Normal file
37
logic/service/fight/effect/1146.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package effect
|
||||
|
||||
import (
|
||||
"blazing/logic/service/fight/info"
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
)
|
||||
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 1146, &Effect1146{})
|
||||
|
||||
}
|
||||
|
||||
type Effect1146 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect1146) OnSkill() bool {
|
||||
// 1. 命中判定失败,不触发
|
||||
count := 0
|
||||
for _, v := range e.Ctx().Opp.Prop[:] {
|
||||
if v > 0 {
|
||||
count++
|
||||
}
|
||||
|
||||
}
|
||||
if count < e.SideEffectArgs[0] {
|
||||
return true
|
||||
}
|
||||
|
||||
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
|
||||
Type: info.DamageType.Fixed,
|
||||
Damage: e.Args()[1],
|
||||
})
|
||||
|
||||
return true
|
||||
}
|
||||
@@ -36,6 +36,6 @@ func (e *Effect430) Skill_Use() bool {
|
||||
}
|
||||
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 184, &Effect184{})
|
||||
input.InitEffect(input.EffectType.Skill, 430, &Effect430{})
|
||||
|
||||
}
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
package effect
|
||||
|
||||
import "blazing/logic/service/fight/node"
|
||||
|
||||
// 445 - 使用后在战斗结束时可以获得500赛尔豆,每日上限5000
|
||||
type Effect445 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
// func (e *Effect445) OnSkill() bool {
|
||||
// // 这个效果需要在战斗结束后执行,暂时记录奖励
|
||||
// e.Ctx().Our.EndReward = 500
|
||||
// return true
|
||||
// }
|
||||
39
logic/service/fight/effect/446_626.go
Normal file
39
logic/service/fight/effect/446_626.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package effect
|
||||
|
||||
import (
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
|
||||
"github.com/gogf/gf/v2/util/grand"
|
||||
)
|
||||
|
||||
// "id": 446,
|
||||
// "argsNum": 0,
|
||||
// "info": "随机自身3项属性+1"
|
||||
|
||||
// {
|
||||
// "id": 626,
|
||||
// "argsNum": 2,
|
||||
// "info": "随机使自己{0}项能力+{1}"
|
||||
// },
|
||||
//
|
||||
// 626 - 消除对手能力强化状态,若消除状态成功,则自身XX等级m
|
||||
type Effect626 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect626) Skill_Use() bool {
|
||||
|
||||
for i := 0; i < e.SideEffectArgs[0]; i++ {
|
||||
e.Ctx().Our.SetProp(e.Ctx().Our, int8(grand.Intn(6)), int8(e.SideEffectArgs[1]))
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 626, &Effect626{})
|
||||
t := &Effect626{}
|
||||
t.SideEffectArgs = []int{3, 1}
|
||||
input.InitEffect(input.EffectType.Skill, 446, t)
|
||||
}
|
||||
@@ -34,5 +34,33 @@ func (e *Effect469) SetArgs(t *input.Input, a ...int) {
|
||||
}
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 469, &Effect469{})
|
||||
|
||||
input.InitEffect(input.EffectType.Skill, 526, &Effect526{})
|
||||
}
|
||||
|
||||
// {
|
||||
// "id": 526,
|
||||
// "argsNum": 2,
|
||||
// "info": "{0}回合内若对手成功使用属性技能则受到{1}点固定伤害"
|
||||
// },
|
||||
//
|
||||
// 469 - m回合内若对手使用属性技能则n%几率另对手XX
|
||||
type Effect526 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect526) Skill_Use_ex() bool {
|
||||
if e.Ctx().SkillEntity != nil && e.Ctx().SkillEntity.Category() == info.Category.STATUS {
|
||||
|
||||
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
|
||||
Type: info.DamageType.Fixed,
|
||||
Damage: e.Args()[0],
|
||||
})
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (e *Effect526) SetArgs(t *input.Input, a ...int) {
|
||||
e.EffectNode.SetArgs(t, a...)
|
||||
e.EffectNode.Duration(a[0]) // 持续m回合
|
||||
}
|
||||
|
||||
@@ -33,6 +33,6 @@ func (e *Effect470) SetArgs(t *input.Input, a ...int) {
|
||||
e.EffectNode.Duration(a[0]) // 持续n回合
|
||||
}
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 513, &Effect513{})
|
||||
input.InitEffect(input.EffectType.Skill, 470, &Effect470{})
|
||||
|
||||
}
|
||||
|
||||
@@ -38,5 +38,30 @@ func (e *Effect513) SkillHit() bool {
|
||||
}
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 513, &Effect513{})
|
||||
|
||||
input.InitEffect(input.EffectType.Skill, 544, &Effect544{})
|
||||
}
|
||||
|
||||
type Effect544 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect544) Skill_Use() bool {
|
||||
if e.Ctx().SkillEntity == nil {
|
||||
return true
|
||||
}
|
||||
stas := []info.EnumPetStatus{
|
||||
info.PetStatus.Burned,
|
||||
info.PetStatus.Poisoned,
|
||||
info.PetStatus.Frozen,
|
||||
}
|
||||
|
||||
for _, sta := range stas {
|
||||
if e.Ctx().Our.StatEffect_Exist(sta) {
|
||||
|
||||
r := e.Ctx().Our.GetEffect(input.EffectType.Status, int(sta))
|
||||
r.Alive(false)
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
40
logic/service/fight/effect/542.go
Normal file
40
logic/service/fight/effect/542.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package effect
|
||||
|
||||
import (
|
||||
"blazing/logic/service/fight/info"
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
|
||||
"github.com/alpacahq/alpacadecimal"
|
||||
)
|
||||
|
||||
// {
|
||||
// "id": 542,
|
||||
// "argsNum": 1,
|
||||
// "info": "对手每处于一种能力下降状态时附加{0}点固定伤害"
|
||||
// },
|
||||
type Effect542 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect542) Skill_Use() bool {
|
||||
|
||||
r := alpacadecimal.Zero
|
||||
for _, v := range e.Ctx().Opp.Prop[:] {
|
||||
if v < 0 {
|
||||
r.Add(alpacadecimal.NewFromInt(1))
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
|
||||
Type: info.DamageType.Fixed,
|
||||
Damage: e.Args()[0].Mul(r),
|
||||
})
|
||||
|
||||
return true
|
||||
}
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 542, &Effect542{})
|
||||
|
||||
}
|
||||
@@ -4,8 +4,6 @@ import (
|
||||
"blazing/logic/service/fight/info"
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
|
||||
"github.com/alpacahq/alpacadecimal"
|
||||
)
|
||||
|
||||
// -----------------------------------------------------------
|
||||
@@ -68,11 +66,9 @@ func (e *EffectConditionalAddDamage) OnSkill() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// 4. 附加固定伤害(从SideEffectArgs[0]获取伤害值)
|
||||
damageValue := alpacadecimal.NewFromInt(int64(e.SideEffectArgs[0]))
|
||||
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
|
||||
Type: info.DamageType.Fixed,
|
||||
Damage: damageValue,
|
||||
Damage: e.Args()[0],
|
||||
})
|
||||
|
||||
return true
|
||||
@@ -105,10 +101,6 @@ func conditionIsAbnormal(e *EffectConditionalAddDamage) bool {
|
||||
|
||||
// conditionPropDown:判断对方是否处于能力下降状态
|
||||
func conditionPropDown(e *EffectConditionalAddDamage) bool {
|
||||
for _, v := range e.Ctx().Opp.Prop {
|
||||
if v < 0 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
|
||||
return e.Ctx().Opp.HasPropSub()
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 497, &Effect429{
|
||||
ispower: true,
|
||||
})
|
||||
input.InitEffect(input.EffectType.Skill, 497, &Effect429{})
|
||||
input.InitEffect(input.EffectType.Skill, 429, &Effect429{})
|
||||
}
|
||||
|
||||
// 497 - 附加m点固定伤害,每次使用额外附加n点,最高k点,遇到天敌时效果翻倍
|
||||
@@ -150,6 +150,10 @@ func (e *Effect181) Skill_Use() bool {
|
||||
|
||||
return true
|
||||
}
|
||||
func init() {
|
||||
|
||||
input.InitEffect(input.EffectType.Skill, 441, &Effect441{})
|
||||
}
|
||||
|
||||
// 441 - 每次攻击提升n%的致命几率,最高提升m%
|
||||
type Effect441 struct {
|
||||
@@ -171,6 +175,10 @@ func (e *Effect441) ActionStart(a, b *action.SelectSkillAction) bool {
|
||||
|
||||
return true
|
||||
}
|
||||
func init() {
|
||||
|
||||
input.InitEffect(input.EffectType.Skill, 465, &Effect465{})
|
||||
}
|
||||
|
||||
// 465 - m%令对手疲惫n回合,每次使用几率提升x%,最高y%
|
||||
type Effect465 struct {
|
||||
@@ -1,9 +1,25 @@
|
||||
package effect
|
||||
|
||||
import (
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
)
|
||||
|
||||
// 445 - 使用后在战斗结束时可以获得500赛尔豆,每日上限5000
|
||||
type Effect445 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
// func (e *Effect445) OnSkill() bool {
|
||||
// // 这个效果需要在战斗结束后执行,暂时记录奖励
|
||||
// e.Ctx().Our.EndReward = 500
|
||||
// return true
|
||||
// }
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 445, &Effect445{})
|
||||
|
||||
}
|
||||
|
||||
// 201 - 组队时恢复己方1/n的体力
|
||||
type Effect201 struct {
|
||||
node.EffectNode
|
||||
@@ -25,5 +41,9 @@ type Effect201 struct {
|
||||
// }
|
||||
// }
|
||||
|
||||
// return true
|
||||
// }
|
||||
// return true
|
||||
// }
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 201, &Effect201{})
|
||||
|
||||
}
|
||||
@@ -90,12 +90,13 @@ func (e *Effect71) ActionStart(a, b *action.SelectSkillAction) bool {
|
||||
if e.Ctx().SkillEntity.Category() == info.Category.STATUS {
|
||||
return true
|
||||
}
|
||||
|
||||
e.Ctx().SkillEntity.XML.CritRate = 16
|
||||
e.count--
|
||||
if e.count <= 0 {
|
||||
e.Alive(false)
|
||||
}
|
||||
e.count--
|
||||
e.Ctx().SkillEntity.XML.CritRate = 16
|
||||
|
||||
}
|
||||
return true
|
||||
}
|
||||
func init() {
|
||||
|
||||
@@ -109,7 +109,10 @@ func (e *EffectNode) Duration(t ...int) int {
|
||||
// 设置参数,加上设置输入源
|
||||
func (e *EffectNode) SetArgs(t *input.Input, a ...int) {
|
||||
e.Input = t
|
||||
e.SideEffectArgs = a
|
||||
if len(a)>0 {
|
||||
e.SideEffectArgs = a
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
func (e *EffectNode) Args() []alpacadecimal.Decimal {
|
||||
|
||||
@@ -42,6 +42,7 @@ func init() {
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
// fight.TestSKill()
|
||||
// // 初始化根结构体
|
||||
// var root Root
|
||||
|
||||
@@ -15,10 +15,8 @@ const TableNamePlayerPVP = "player_pvp"
|
||||
type PVP struct {
|
||||
*cool.Model
|
||||
PlayerID uint64 `gorm:"not null;index:idx_pvp_player_id;comment:'所属玩家ID'" json:"player_id"`
|
||||
|
||||
SeasonData []PVPRankInfo `gorm:"type:jsonb;not null;comment:'赛季核心数据'" json:"season_data"`
|
||||
|
||||
RankInfo PVPRankInfo `gorm:"type:jsonb;not null;comment:'本赛季排名信息'" json:"rank_info"`
|
||||
//本赛季排名信息'通过下标来确认当前赛季
|
||||
RankInfo []PVPRankInfo `gorm:"type:jsonb;not null;comment:'赛季核心数据'" json:"season_data"`
|
||||
}
|
||||
|
||||
func (u *PVP) Key() uint32 {
|
||||
@@ -27,10 +25,10 @@ func (u *PVP) Key() uint32 {
|
||||
|
||||
// 如果分数不对的话,就按时间排序
|
||||
func (u *PVP) Less(than *PVP) bool {
|
||||
if u.RankInfo.Score == than.RankInfo.Score {
|
||||
return u.RankInfo.LastMatchTime.Unix() < than.RankInfo.LastMatchTime.Unix()
|
||||
if u.RankInfo[len(u.RankInfo)-1].Score == than.RankInfo[len(u.RankInfo)-1].Score {
|
||||
return u.RankInfo[len(u.RankInfo)-1].LastMatchTime.Unix() < than.RankInfo[len(u.RankInfo)-1].LastMatchTime.Unix()
|
||||
}
|
||||
return u.RankInfo.Score < than.RankInfo.Score
|
||||
return u.RankInfo[len(u.RankInfo)-1].Score < than.RankInfo[len(u.RankInfo)-1].Score
|
||||
}
|
||||
func NewPVP() *PVP {
|
||||
return &PVP{
|
||||
|
||||
@@ -2,6 +2,7 @@ package service
|
||||
|
||||
import (
|
||||
"blazing/common/data/share"
|
||||
"blazing/common/utils"
|
||||
"blazing/cool"
|
||||
"blazing/modules/config/service"
|
||||
"blazing/modules/player/model"
|
||||
@@ -93,7 +94,7 @@ func (s *InfoService) GetLogin() *model.PlayerInfo {
|
||||
|
||||
}
|
||||
|
||||
if !IsToday(tt.LastResetTime) && cool.Config.ServerInfo.IsVip == 0 { //判断是否是今天
|
||||
if !utils.IsToday(tt.LastResetTime) && cool.Config.ServerInfo.IsVip == 0 { //判断是否是今天
|
||||
|
||||
//每天login时候检查重置时间,然后把电池,任务,挖矿重置
|
||||
//挖矿需要单独存,因为防止多开挖矿
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"blazing/common/utils"
|
||||
"blazing/cool"
|
||||
basemodel "blazing/modules/base/model"
|
||||
"blazing/modules/base/service"
|
||||
@@ -56,7 +57,11 @@ func (s *PetService) UPdatePrice(ctime uint32, Price uint32, is_sale uint32) err
|
||||
return fmt.Errorf("精灵数量已满")
|
||||
}
|
||||
}
|
||||
|
||||
var p model.Pet
|
||||
s.dbm(s.Model).Where("catch_time", ctime).Scan(&p)
|
||||
if p.SalePrice!=0&&p.SalePrice != Price && utils.IsToday(p.UpdateTime) { //说明要修改价格
|
||||
return fmt.Errorf("一天只允许改价一次")
|
||||
}
|
||||
res0, err := s.dbm(s.Model).
|
||||
Where("catch_time", ctime). // 限定 ctime,避免全表更新
|
||||
Where("sale_price = ?", 0). // 只筛选 sale_price=0 的记录
|
||||
@@ -147,6 +152,7 @@ RETURNING max_ts;
|
||||
player.Data = tt.Data
|
||||
player.CatchTime = tt.CatchTime
|
||||
player.Free = 0
|
||||
player.SalePrice = tt.SalePrice
|
||||
player.SaleCount = tt.SaleCount + 1
|
||||
player.IsVip = cool.Config.ServerInfo.IsVip
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"blazing/common/utils"
|
||||
"blazing/cool"
|
||||
config "blazing/modules/config/service"
|
||||
"blazing/modules/player/model"
|
||||
@@ -35,7 +36,7 @@ func (s *TalkService) Cheak(mapid uint32, flag int) (int, bool) {
|
||||
}
|
||||
|
||||
//因为这个是挖一次更新一次,而且是实时更新的,如果更新日期是今天,那么就可以确认不用再重置,否则就需要重置挖矿记录
|
||||
if !IsToday(talks.UpdateTime) {
|
||||
if !utils.IsToday(talks.UpdateTime) {
|
||||
|
||||
talks.Count = 0
|
||||
m1.Save(talks)
|
||||
|
||||
@@ -65,21 +65,6 @@ func (s *TaskService) Exec(id uint32, t func(*model.Task) bool) {
|
||||
|
||||
}
|
||||
|
||||
// IsToday 判断给定时间是否是今天
|
||||
func IsToday(t1 *gtime.Time) bool {
|
||||
if t1 == nil {
|
||||
return false
|
||||
}
|
||||
t := t1.Time
|
||||
|
||||
// 获取当前时间
|
||||
now := time.Now()
|
||||
|
||||
// 比较年、月、日是否相同
|
||||
return t.Year() == now.Year() &&
|
||||
t.Month() == now.Month() &&
|
||||
t.Day() == now.Day()
|
||||
}
|
||||
func IsWEEK(t1 *gtime.Time) bool {
|
||||
if t1 == nil {
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user