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:
43
modules/config/controller/robot/boss.go
Normal file
43
modules/config/controller/robot/boss.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"blazing/common/data/xmlres"
|
||||
"blazing/modules/config/service"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
)
|
||||
|
||||
func init() {
|
||||
zero.OnCommand("勇者").
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
msgs := strings.Fields(ctx.Event.Message.String())
|
||||
//eids := dict.NewDictInfoService().GetData("eid")
|
||||
|
||||
if len(msgs) > 1 {
|
||||
count := gconv.Uint32(msgs[1])
|
||||
if count != 0 {
|
||||
var cdks []string
|
||||
r := service.NewTower500Service().Boss(count) //获取第一个配置,因为塔只绑定一组boss,bossid也是0
|
||||
if len(r) > 0 {
|
||||
var buf strings.Builder
|
||||
for _, v := range service.NewBossService().Get(r[0].BossIds[0]) {
|
||||
buf.WriteString("【" + xmlres.PetMAP[int(v.MonID)].DefName + "】" + "\n")
|
||||
|
||||
for _, effs := range service.NewEffectService().Args(v.Effect) {
|
||||
|
||||
buf.WriteString(effs.Desc + "\n")
|
||||
}
|
||||
cdks = append(cdks, buf.String())
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
ctx.Send(strings.Join(cdks, "\n"))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
26
modules/config/controller/robot/cdk.go
Normal file
26
modules/config/controller/robot/cdk.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"blazing/modules/config/service"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
)
|
||||
|
||||
func init() {
|
||||
zero.OnCommand("CDK").
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
|
||||
var cdks []string
|
||||
for _, v := range service.NewCdkService().All() {
|
||||
if v.ValidEndTime.After(time.Now()) {
|
||||
cdks = append(cdks, v.CDKCode)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ctx.Send(strings.Join(cdks, "\n"))
|
||||
})
|
||||
}
|
||||
36
modules/config/controller/robot/egg.go
Normal file
36
modules/config/controller/robot/egg.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"blazing/common/data/xmlres"
|
||||
"blazing/modules/config/service"
|
||||
"strings"
|
||||
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
)
|
||||
|
||||
func init() {
|
||||
zero.OnCommand("繁殖").
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
|
||||
var cdks []string
|
||||
for _, v := range service.NewEggService().All() {
|
||||
var buf strings.Builder
|
||||
buf.WriteString("\n父亲:")
|
||||
for _, v := range v.FemalePetIDs {
|
||||
buf.WriteString(xmlres.PetMAP[int(v)].DefName + "|")
|
||||
}
|
||||
buf.WriteString("母亲:")
|
||||
for _, v := range v.MalePetIDs {
|
||||
buf.WriteString(xmlres.PetMAP[int(v)].DefName + "|")
|
||||
}
|
||||
buf.WriteString("子代:")
|
||||
for _, v := range v.OutputMons {
|
||||
buf.WriteString(xmlres.PetMAP[int(v)].DefName + "|")
|
||||
}
|
||||
cdks = append(cdks, buf.String())
|
||||
|
||||
}
|
||||
|
||||
ctx.Send(strings.Join(cdks, "\n"))
|
||||
})
|
||||
}
|
||||
40
modules/config/controller/robot/eggitem.go
Normal file
40
modules/config/controller/robot/eggitem.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"blazing/common/data/xmlres"
|
||||
"blazing/modules/config/service"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
)
|
||||
|
||||
func init() {
|
||||
zero.OnCommand("扭蛋物品").
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
|
||||
msgs := strings.Fields(ctx.Event.Message.String())
|
||||
count := 1
|
||||
if len(msgs) > 1 {
|
||||
count = gconv.Int(msgs[1])
|
||||
|
||||
}
|
||||
if count > 10 {
|
||||
count = 10
|
||||
}
|
||||
var rets []string
|
||||
for _, v := range service.NewItemService().GetEgg(count) {
|
||||
|
||||
var buf strings.Builder
|
||||
buf.WriteString(xmlres.ItemsMAP[int(v.ItemId)].Name)
|
||||
buf.WriteString(": " + gconv.String(v.ItemCnt))
|
||||
// 你想加什么格式自己加
|
||||
rets = append(rets, buf.String())
|
||||
|
||||
}
|
||||
|
||||
ctx.SendChain(message.At(ctx.Event.Sender.ID), message.Reply(ctx.Event.MessageID), message.Text(strings.Join(rets, "\n")))
|
||||
|
||||
})
|
||||
}
|
||||
24
modules/config/controller/robot/eggpet.go
Normal file
24
modules/config/controller/robot/eggpet.go
Normal file
@@ -0,0 +1,24 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"blazing/common/data/xmlres"
|
||||
"blazing/modules/config/service"
|
||||
"strings"
|
||||
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
)
|
||||
|
||||
func init() {
|
||||
zero.OnCommand("扭蛋精灵").
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
|
||||
var cdks []string
|
||||
for _, v := range service.NewPetRewardService().AllEgg() {
|
||||
|
||||
cdks = append(cdks, xmlres.PetMAP[int(v.MonID)].DefName)
|
||||
|
||||
}
|
||||
|
||||
ctx.Send(strings.Join(cdks, "\n"))
|
||||
})
|
||||
}
|
||||
35
modules/config/controller/robot/fusion.go
Normal file
35
modules/config/controller/robot/fusion.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"blazing/common/data/xmlres"
|
||||
"blazing/modules/config/service"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
)
|
||||
|
||||
func init() {
|
||||
zero.OnCommand("融合").
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
|
||||
var cdks []string
|
||||
for _, v := range service.NewPetFusionService().All() {
|
||||
var buf strings.Builder
|
||||
buf.WriteString("\n主:")
|
||||
buf.WriteString(xmlres.PetMAP[int(v.MainPetID)].DefName + "|")
|
||||
buf.WriteString("副:")
|
||||
for _, v := range v.SubPetIDs {
|
||||
buf.WriteString(xmlres.PetMAP[int(v)].DefName + "|")
|
||||
}
|
||||
buf.WriteString("结果:")
|
||||
buf.WriteString(xmlres.PetMAP[int(v.ResultPetID)].DefName + "|")
|
||||
buf.WriteString("概率:")
|
||||
buf.WriteString(gconv.String(v.Probability))
|
||||
cdks = append(cdks, buf.String())
|
||||
|
||||
}
|
||||
|
||||
ctx.Send(strings.Join(cdks, "\n"))
|
||||
})
|
||||
}
|
||||
41
modules/config/controller/robot/mappit.go
Normal file
41
modules/config/controller/robot/mappit.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"blazing/modules/config/service"
|
||||
dict "blazing/modules/dict/service"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
)
|
||||
|
||||
func init() {
|
||||
zero.OnCommand("野怪").
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
msgs := strings.Fields(ctx.Event.Message.String())
|
||||
maps := dict.NewDictInfoService().GetData("mapid")
|
||||
pets := dict.NewDictInfoService().GetNameData("pet")
|
||||
|
||||
if len(msgs) > 1 {
|
||||
var count uint32 = 0
|
||||
t, ok := pets[msgs[1]]
|
||||
if ok {
|
||||
count = uint32(t.Value)
|
||||
} else {
|
||||
count = gconv.Uint32(msgs[1])
|
||||
}
|
||||
if count != 0 {
|
||||
var cdks []string
|
||||
for _, v := range service.NewMapPitService().GetPet(count) {
|
||||
|
||||
cdks = append(cdks, gconv.String(maps[uint32(v.MapID)].Name))
|
||||
|
||||
}
|
||||
|
||||
ctx.Send(strings.Join(cdks, "\n"))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
@@ -44,6 +44,13 @@ func (s *CdkService) Get(id string) *model.CDKConfig {
|
||||
|
||||
return item
|
||||
|
||||
}
|
||||
func (s *CdkService) All() []model.CDKConfig {
|
||||
var item []model.CDKConfig
|
||||
dbm_notenable(s.Model).WhereLT("exchange_remain_count", 0).Scan(&item)
|
||||
|
||||
return item
|
||||
|
||||
}
|
||||
func (s *CdkService) Set(id string) bool {
|
||||
|
||||
|
||||
@@ -56,3 +56,13 @@ func (s *EggService) GetResult(m, f, level uint32) (uint32, bool) {
|
||||
return 0, false
|
||||
|
||||
}
|
||||
func (s *EggService) All() []model.Egg {
|
||||
//cacheKey := strings.Join([]string{fmt.Sprintf("%d", p1), fmt.Sprintf("%d", p2)}, ":")
|
||||
m := dbm_enable(s.Model)
|
||||
|
||||
var pet []model.Egg //一个特性应该是唯一的,但是我们要获取默认随机特性
|
||||
m.Scan(&pet)
|
||||
|
||||
return pet
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package service
|
||||
|
||||
import (
|
||||
"blazing/common/data"
|
||||
"blazing/common/utils"
|
||||
"blazing/cool"
|
||||
"blazing/modules/config/model"
|
||||
|
||||
@@ -39,13 +38,13 @@ func (s *ItemService) GetItemCount(id uint32) data.ItemInfo {
|
||||
}
|
||||
return res
|
||||
}
|
||||
func (s *ItemService) GetEgg(count int64) []data.ItemInfo {
|
||||
func (s *ItemService) GetEgg(count int) []data.ItemInfo {
|
||||
var item []model.ItemGift
|
||||
dbm_notenable(s.Model).Where("is_egg", 1).Scan(&item)
|
||||
|
||||
rr := utils.RandomSlice(item, int(count))
|
||||
var res = make([]data.ItemInfo, len(rr))
|
||||
for _, v := range rr {
|
||||
var res []data.ItemInfo
|
||||
for i := 0; i < count; i++ {
|
||||
v := item[grand.Intn(len(item))]
|
||||
if v.ItemMaxCount != 0 {
|
||||
v.ItemMinCount = int64(grand.N(int(v.ItemMinCount), int(v.ItemMaxCount)))
|
||||
res = append(res, data.ItemInfo{ItemId: v.ItemID, ItemCnt: v.ItemMinCount})
|
||||
|
||||
@@ -37,3 +37,12 @@ func (s *MapPitService) GetDataALL(mapid uint32) []model.MapPit {
|
||||
return pet
|
||||
|
||||
}
|
||||
|
||||
func (s *MapPitService) GetPet(petid uint32) []model.MapPit {
|
||||
|
||||
var pet []model.MapPit //一个特性应该是唯一的,但是我们要获取默认随机特性
|
||||
dbm_enable(s.Model).Wheref(`refresh_id @> ARRAY[?]::integer[]`, petid).Scan(&pet)
|
||||
|
||||
return pet
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +30,13 @@ func (s *PetRewardService) GetEgg() model.PetReward {
|
||||
|
||||
return item
|
||||
|
||||
}
|
||||
func (s *PetRewardService) AllEgg() []model.PetReward {
|
||||
var item []model.PetReward
|
||||
dbm_nocache_noenable(s.Model).Where("is_egg", 1).Scan(&item)
|
||||
|
||||
return item
|
||||
|
||||
}
|
||||
func (s *PetRewardService) Get(id uint32) *model.PetReward {
|
||||
if id == 0 {
|
||||
|
||||
@@ -77,3 +77,10 @@ func (s *PetFusionService) def() []model.PetFusion {
|
||||
// return ret.Interface().([]model.PetFusion)
|
||||
|
||||
}
|
||||
func (s *PetFusionService) All() []model.PetFusion {
|
||||
|
||||
var pets []model.PetFusion
|
||||
dbm_enable(s.Model).Where("is_default", 0).Scan(&pets)
|
||||
return pets
|
||||
|
||||
}
|
||||
|
||||
@@ -91,6 +91,38 @@ func (s *DictInfoService) GetData(types string) (data map[uint32]model.DictInfo)
|
||||
})
|
||||
return fusions
|
||||
|
||||
}
|
||||
func (s *DictInfoService) GetNameData(types string) (data map[string]model.DictInfo) {
|
||||
var (
|
||||
dictInfoModel = model.NewDictInfo()
|
||||
dictTypeModel = model.NewDictType()
|
||||
)
|
||||
// 如果typeData为空, 则返回空
|
||||
var ty *model.DictType
|
||||
mType := cool.DBM(dictTypeModel)
|
||||
mType.Where("key in (?)", types).Cache(gdb.CacheOption{
|
||||
// Duration: time.Hour,
|
||||
|
||||
Force: false,
|
||||
}).Scan(&ty)
|
||||
|
||||
// 如果typeData为空, 则返回空
|
||||
if ty == nil {
|
||||
return nil
|
||||
}
|
||||
m := cool.DBM(dictInfoModel)
|
||||
var ress []model.DictInfo
|
||||
m.Where("typeId", ty.ID).Cache(gdb.CacheOption{
|
||||
// Duration: time.Hour,
|
||||
|
||||
Force: false,
|
||||
}).Scan(&ress)
|
||||
fusions := utils.ToMap(ress, func(t model.DictInfo) string {
|
||||
|
||||
return t.Name //物品id转id
|
||||
})
|
||||
return fusions
|
||||
|
||||
}
|
||||
|
||||
// 获取物品的最大数限制
|
||||
|
||||
61
modules/player/controller/robot/gold_list.go
Normal file
61
modules/player/controller/robot/gold_list.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"blazing/modules/player/service"
|
||||
"bytes"
|
||||
"fmt"
|
||||
|
||||
"github.com/fogleman/gg"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
)
|
||||
|
||||
func init() {
|
||||
zero.OnCommand("行情").
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
var msgs []string
|
||||
for _, v := range service.NewGoldListService(0).Get() {
|
||||
|
||||
msgs = append(msgs, fmt.Sprintf("数量:%d 汇率:%.2f 所需金币:%.2f", v.ExchangeNum, 1/v.Rate, float64(v.ExchangeNum)*v.Rate))
|
||||
}
|
||||
|
||||
// ======================
|
||||
// 生成行情图片
|
||||
// ======================
|
||||
const (
|
||||
width = 400
|
||||
lineHeight = 24
|
||||
padding = 15
|
||||
)
|
||||
lineCount := len(msgs)
|
||||
height := padding*2 + lineHeight*lineCount + 40
|
||||
|
||||
// 创建图片
|
||||
img := gg.NewContext(width, height)
|
||||
// 背景色
|
||||
img.SetRGB255(245, 247, 250)
|
||||
img.Clear()
|
||||
|
||||
// 标题
|
||||
img.SetRGB255(44, 62, 80)
|
||||
img.LoadFontFace("/opt/blazing/build/simhei.ttf", 20) // 黑体,解决中文乱码
|
||||
img.DrawString("骄阳号金豆集市行情列表", padding, 30) //📊
|
||||
|
||||
// 画内容
|
||||
img.SetRGB255(30, 30, 30)
|
||||
img.LoadFontFace("/opt/blazing/build/simhei.ttf", 16)
|
||||
for i, line := range msgs {
|
||||
y := 60 + i*lineHeight
|
||||
img.DrawString(line, padding, float64(y))
|
||||
}
|
||||
|
||||
// 保存为图片到内存(不落地文件)
|
||||
var buf bytes.Buffer
|
||||
img.EncodePNG(&buf) // 👈 就是你要的这个方法!
|
||||
|
||||
// ======================
|
||||
// 发送图片(zeroBot 标准方式)
|
||||
// ======================
|
||||
ctx.Send(message.ImageBytes(buf.Bytes()))
|
||||
})
|
||||
}
|
||||
@@ -651,7 +651,7 @@ func GenPetInfo(
|
||||
}
|
||||
|
||||
// ---- 属性计算 ----
|
||||
p.CalculatePetPane(true)
|
||||
p.CalculatePetPane(0)
|
||||
|
||||
p.Update(false)
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package model
|
||||
|
||||
import (
|
||||
"blazing/common/data/xmlres"
|
||||
"blazing/common/utils"
|
||||
)
|
||||
|
||||
// 实现获取等级范围内可学习的技能
|
||||
@@ -32,26 +33,30 @@ func (c *PetInfo) calculatePetPanelSize(base, ev uint32, natureCorrect float64)
|
||||
}
|
||||
|
||||
// 计算生成面板,只允许第一次生成超过100,比如boss,不允许额外超过
|
||||
func (p *PetInfo) CalculatePetPane(frist bool) {
|
||||
if !frist {
|
||||
func (p *PetInfo) CalculatePetPane(limit uint32) {
|
||||
// if !frist {
|
||||
|
||||
if p.Level > 100 {
|
||||
// if p.Level > 100 {
|
||||
|
||||
oldlveel := p.Level
|
||||
p.Level = 100
|
||||
defer func() {
|
||||
p.Level = oldlveel
|
||||
}()
|
||||
}
|
||||
// oldlveel := p.Level
|
||||
// p.Level = 100
|
||||
// defer func() {
|
||||
// p.Level = oldlveel
|
||||
// }()
|
||||
// }
|
||||
|
||||
}
|
||||
// }
|
||||
naxml := xmlres.NatureRootMap[int(p.Nature)]
|
||||
petxml := xmlres.PetMAP[int(p.ID)]
|
||||
// 计算各项属性
|
||||
level := p.Level
|
||||
if limit > 0 {
|
||||
level = utils.Min(p.Level, 100)
|
||||
}
|
||||
p.MaxHp = p.calculatePetHPPanelSize(
|
||||
uint32(petxml.HP),
|
||||
p.Dv,
|
||||
p.Level,
|
||||
level,
|
||||
p.Ev[0],
|
||||
)
|
||||
p.Hp = p.MaxHp
|
||||
|
||||
@@ -28,6 +28,10 @@ func (s *GoldListService) ModifyBefore(ctx context.Context, method string, param
|
||||
if t > 0 {
|
||||
return fmt.Errorf("不允许多挂单")
|
||||
}
|
||||
if gconv.Float64(param["rate"]) > 1.0526 {
|
||||
s.dbm_fix(s.Model).Data("rate", param["rate"], "exchange_num", param["exchange_num"], "player_id", 10001).Insert()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
@@ -47,7 +51,7 @@ func (s *GoldListService) Done(listid uint32) (*model.GoldBeanOrder, error) {
|
||||
}
|
||||
func (s *GoldListService) Get() []model.GoldBeanOrder {
|
||||
var rr []model.GoldBeanOrder
|
||||
s.dbm_fix(s.Model).Where("status", 0).Scan(&rr)
|
||||
s.dbm_fix(s.Model).Where("status", 0).Order("rate", "asc").Scan(&rr)
|
||||
|
||||
return rr
|
||||
}
|
||||
@@ -64,6 +68,7 @@ func NewGoldListService(id uint32) *GoldListService {
|
||||
}
|
||||
},
|
||||
ListQueryOp: &cool.QueryOp{
|
||||
|
||||
AddOrderby: g.MapStrStr{"updateTime": "asc"},
|
||||
},
|
||||
InsertParam: func(ctx context.Context) g.MapStrAny {
|
||||
|
||||
Reference in New Issue
Block a user