跑商ai自动交易卖出货物后清除单价

This commit is contained in:
meixiongfeng 2022-11-07 11:18:50 +08:00
parent 0ab84c742d
commit 6c80440450
9 changed files with 73 additions and 112 deletions

View File

@ -4,20 +4,20 @@
"name": "右屏商人", "name": "右屏商人",
"information": "这是一位熊猫商人", "information": "这是一位熊猫商人",
"ico": "action_11001", "ico": "action_11001",
"time": 300 "time": 10
}, },
{ {
"id": 2, "id": 2,
"name": "上屏商人", "name": "上屏商人",
"information": "这是一位波比商人再此", "information": "这是一位波比商人再此",
"ico": "action_11003", "ico": "action_11003",
"time": 300 "time": 10
}, },
{ {
"id": 3, "id": 3,
"name": "左屏商人", "name": "左屏商人",
"information": "这是一位滑板鞋王子", "information": "这是一位滑板鞋王子",
"ico": "ytx_js_14007", "ico": "ytx_js_14007",
"time": 300 "time": 10
} }
] ]

View File

@ -68,9 +68,10 @@ const (
ModuleTroll core.M_Modules = "troll" //巨怪商队 ModuleTroll core.M_Modules = "troll" //巨怪商队
ModuleHoroscope core.M_Modules = "horoscope" //星座图 ModuleHoroscope core.M_Modules = "horoscope" //星座图
//ModuleFetter core.M_Modules = "herofetter" //好友模块 //ModuleFetter core.M_Modules = "herofetter" //好友模块
ModuleSociaty core.M_Modules = "sociaty" //公会 ModuleSociaty core.M_Modules = "sociaty" //公会
ModulePay core.M_Modules = "pay" //支付 ModulePay core.M_Modules = "pay" //支付
ModuleAlliance core.M_Modules = "alliance" //联盟学院 ModuleAlliance core.M_Modules = "alliance" //联盟学院
ModulePrivilege core.M_Modules = "privilege" //特权
) )
//数据表名定义处 //数据表名定义处
@ -185,6 +186,9 @@ const (
TablePayDaily = "paydaily" TablePayDaily = "paydaily"
// 巨怪列车收益记录 // 巨怪列车收益记录
TableTrollRecord = "trollrecord" TableTrollRecord = "trollrecord"
// 特权
TablePrivilege = "privilege"
) )
//RPC服务接口定义处 //RPC服务接口定义处

View File

@ -38,7 +38,7 @@ func (this *configureComp) GetPrivilegeCard(id int32) (configure *cfg.GamePrivil
return return
} else { } else {
if configure, ok = v.(*cfg.GamePrivilegeCard).GetDataMap()[id]; !ok { if configure, ok = v.(*cfg.GamePrivilegeCard).GetDataMap()[id]; !ok {
err = fmt.Errorf("ShopConfigure not found:%d ", id) err = fmt.Errorf("GamePrivilegeCardData not found:%d ", id)
this.module.Errorf("err:%v", err) this.module.Errorf("err:%v", err)
return return
} }
@ -57,7 +57,7 @@ func (this *configureComp) GetPrivilegeData(id int32) (result *cfg.GamePrivilege
return return
} else { } else {
if result, ok = v.(*cfg.GamePrivilege).GetDataMap()[id]; !ok { if result, ok = v.(*cfg.GamePrivilege).GetDataMap()[id]; !ok {
err = fmt.Errorf("ShopConfigure not found:%d ", id) err = fmt.Errorf("GamePrivilegeData not found:%d ", id)
this.module.Errorf("err:%v", err) this.module.Errorf("err:%v", err)
return return
} }

View File

@ -19,7 +19,7 @@ type ModelPrivilege struct {
func (this *ModelPrivilege) Init(service core.IService, module core.IModule, comp core.IModuleComp, opt core.IModuleOptions) (err error) { func (this *ModelPrivilege) Init(service core.IService, module core.IModule, comp core.IModuleComp, opt core.IModuleOptions) (err error) {
this.MCompModel.Init(service, module, comp, opt) this.MCompModel.Init(service, module, comp, opt)
this.module = module.(*Privilege) this.module = module.(*Privilege)
this.TableName = comm.TableShop this.TableName = comm.TablePrivilege
//创建uid索引 //创建uid索引
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},

View File

@ -26,7 +26,7 @@ type Privilege struct {
//模块名 //模块名
func (this *Privilege) GetType() core.M_Modules { func (this *Privilege) GetType() core.M_Modules {
return comm.ModuleShop return comm.ModulePrivilege
} }
//模块初始化接口 注册用户创建角色事件 //模块初始化接口 注册用户创建角色事件

View File

@ -1,93 +0,0 @@
package privilege_test
import (
"context"
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/lego"
"go_dreamfactory/lego/base/rpcx"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules/equipment"
"go_dreamfactory/modules/hero"
"go_dreamfactory/modules/items"
"go_dreamfactory/modules/shop"
"go_dreamfactory/modules/user"
"go_dreamfactory/pb"
"go_dreamfactory/services"
"go_dreamfactory/sys/configure"
"go_dreamfactory/sys/db"
"os"
"testing"
"time"
"github.com/golang/protobuf/ptypes"
)
func newService(ops ...rpcx.Option) core.IService {
s := new(TestService)
s.Configure(ops...)
return s
}
//梦工厂基础服务对象
type TestService struct {
rpcx.RPCXService
}
//初始化相关系统
func (this *TestService) InitSys() {
this.RPCXService.InitSys()
if err := db.OnInit(this.GetSettings().Sys["db"]); err != nil {
panic(fmt.Sprintf("init sys.db err: %s", err.Error()))
} else {
log.Infof("init sys.db success!")
}
if err := configure.OnInit(this.GetSettings().Sys["configure"], configure.SetConfigPath("F:/work/go/go_dreamfactory/bin/json")); err != nil {
panic(fmt.Sprintf("init sys.configure err: %s", err.Error()))
} else {
log.Infof("init sys.configure success!")
}
}
var service core.IService
var s_gateComp comm.ISC_GateRouteComp = services.NewGateRouteComp()
var module = new(shop.Shop)
//测试环境下初始化db和cache 系统
func TestMain(m *testing.M) {
service = newService(
rpcx.SetConfPath("../../bin/conf/worker_1.yaml"),
rpcx.SetVersion("1.0.0.0"),
)
service.OnInstallComp( //装备组件
s_gateComp, //此服务需要接受用户的消息 需要装备网关组件
)
go func() {
lego.Run(service, //运行模块
module,
hero.NewModule(),
user.NewModule(),
items.NewModule(),
equipment.NewModule(),
)
}()
time.Sleep(time.Second * 3)
defer os.Exit(m.Run())
}
//测试api_getlist
func Test_Module_APIGetList(t *testing.T) {
data, _ := ptypes.MarshalAny(&pb.ShopGetListReq{SType: pb.ShopType_GoldShop, IsManualRefresh: false})
reply := &pb.RPCMessageReply{}
s_gateComp.ReceiveMsg(context.Background(), &pb.AgentMessage{UserId: "0_62b16dda909b2f8faeff788d", MainType: "shop", SubType: "getlist", Message: data}, reply)
log.Debugf("reply:%v", reply)
}
//测试api_buy
func Test_Module_APIBuy(t *testing.T) {
data, _ := ptypes.MarshalAny(&pb.ShopBuyReq{GoodsId: 7})
reply := &pb.RPCMessageReply{}
s_gateComp.ReceiveMsg(context.Background(), &pb.AgentMessage{UserId: "0_62b16dda909b2f8faeff788d", MainType: "shop", SubType: "buy", Message: data}, reply)
log.Debugf("reply:%v", reply)
}

View File

@ -1,6 +1,7 @@
package timer package timer
import ( import (
"context"
"fmt" "fmt"
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/modules" "go_dreamfactory/modules"
@ -14,6 +15,7 @@ import (
"go_dreamfactory/lego/core/cbase" "go_dreamfactory/lego/core/cbase"
"go_dreamfactory/lego/sys/cron" "go_dreamfactory/lego/sys/cron"
"go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/log"
"go_dreamfactory/lego/sys/redis/pipe"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson/primitive"
@ -21,7 +23,8 @@ import (
) )
var ( var (
game_seasonloop = "game_seasonloop.json" game_seasonloop = "game_seasonloop.json"
game_seasonreward = "game_pagodaseasonreward.json"
) )
type SeasonPagoda struct { type SeasonPagoda struct {
@ -30,6 +33,7 @@ type SeasonPagoda struct {
modules.MCompModel modules.MCompModel
service core.IService service core.IService
module *Timer module *Timer
mail comm.Imail
} }
//组件初始化接口 //组件初始化接口
@ -39,6 +43,11 @@ func (this *SeasonPagoda) Init(service core.IService, module core.IModule, comp
this.MCompModel.Init(service, module, comp, options) this.MCompModel.Init(service, module, comp, options)
this.service = service this.service = service
this.module = module.(*Timer) this.module = module.(*Timer)
if module1, err := this.service.GetModule(comm.ModuleMail); err == nil {
this.mail = module1.(comm.Imail)
}
return return
} }
@ -46,6 +55,7 @@ func (this *SeasonPagoda) Start() (err error) {
err = this.MCompModel.Start() err = this.MCompModel.Start()
err = this.MCompConfigure.Start() err = this.MCompConfigure.Start()
configure.RegisterConfigure(game_seasonloop, cfg.NewGameSeasonLoop, nil) configure.RegisterConfigure(game_seasonloop, cfg.NewGameSeasonLoop, nil)
configure.RegisterConfigure(game_seasonreward, cfg.NewGamePagodaSeasonReward, nil)
cron.AddFunc("0 0 23 L * ?", this.TimerSeasonOver) //每月最后一天23点执行一次 cron.AddFunc("0 0 23 L * ?", this.TimerSeasonOver) //每月最后一天23点执行一次
cron.AddFunc("0 0 5 /* * ?", this.TimerSeasonStar) //每月第一天5点执行一次 cron.AddFunc("0 0 5 /* * ?", this.TimerSeasonStar) //每月第一天5点执行一次
@ -63,7 +73,21 @@ func (this *SeasonPagoda) CreatTestData(index int) {
return return
} }
} }
func (this *SeasonPagoda) GetSeasonReward() []int32 {
sz := make([]int32, 0)
if v, err := this.GetConfigure(game_seasonreward); err != nil {
log.Errorf("get global conf err:%v", err)
return sz
} else {
if configure, ok := v.(*cfg.GamePagodaSeasonReward); ok {
for _, v := range configure.GetDataList() {
sz = append(sz, v.Ranking[0])
}
}
log.Errorf("%T no is *cfg.Game_global", v)
return sz
}
}
func (this *SeasonPagoda) GetSeasonLoop(id int32) *cfg.GameSeasonLoopData { func (this *SeasonPagoda) GetSeasonLoop(id int32) *cfg.GameSeasonLoopData {
if v, err := this.GetConfigure(game_seasonloop); err != nil { if v, err := this.GetConfigure(game_seasonloop); err != nil {
@ -82,6 +106,27 @@ func (this *SeasonPagoda) GetSeasonLoop(id int32) *cfg.GameSeasonLoopData {
func (this *SeasonPagoda) TimerSeasonOver() { func (this *SeasonPagoda) TimerSeasonOver() {
this.module.Debugf("TimerSeasonOver:%d", time.Now().Unix()) this.module.Debugf("TimerSeasonOver:%d", time.Now().Unix())
if conn, err := db.Cross(); err == nil {
var (
pipe *pipe.RedisPipe = conn.Redis.RedisPipe(context.TODO())
)
rd := pipe.ZRange("pagodaSeasonRank", 0, 50)
if _, err = pipe.Exec(); err != nil {
this.module.Errorln(err)
return
}
_data3 := rd.Val()
this.module.Debugf("%v", _data3)
//sz := this.GetSeasonReward()
// this.mail.SendNewMail(&pb.DBMailData{
// CreateTime: uint64(time.Now().Unix()),
// Items: nil,
// }, _data3...)
}
if db.IsCross() { if db.IsCross() {
if conn, err := db.Cross(); err == nil { if conn, err := db.Cross(); err == nil {
if rst := conn.Mgo.FindOne(comm.TableServerData, bson.M{}); rst != nil { if rst := conn.Mgo.FindOne(comm.TableServerData, bson.M{}); rst != nil {

View File

@ -152,6 +152,9 @@ func (this *apiComp) BuyOrSell(session comm.IUserSession, req *pb.TrollBuyOrSell
for k, v := range trolltrain.Items { for k, v := range trolltrain.Items {
if v == 0 { if v == 0 {
delete(trolltrain.Items, k) delete(trolltrain.Items, k)
if _, ok := trolltrain.Price[k]; ok {
delete(trolltrain.Price, k) // 清除价格
}
} }
} }
trolltrain.TotalEarn += -int64(earn) // 累计获得的金币 trolltrain.TotalEarn += -int64(earn) // 累计获得的金币

View File

@ -204,7 +204,6 @@ func (this *Troll) BuyAllItem(uid string, troll *pb.DBTrollTrain, price map[int3
for { for {
if leftGirdNum > 0 && troll.Shop[v.Id] < v.Max { if leftGirdNum > 0 && troll.Shop[v.Id] < v.Max {
leftGirdNum-- leftGirdNum--
//troll.Items[v.Id] += maxgoods
troll.Shop[v.Id] += maxgoods troll.Shop[v.Id] += maxgoods
box[v.Id] += maxgoods // 加入篮子 box[v.Id] += maxgoods // 加入篮子
} else { } else {
@ -216,11 +215,7 @@ func (this *Troll) BuyAllItem(uid string, troll *pb.DBTrollTrain, price map[int3
if full != 0 { if full != 0 {
box[v.Id] += (maxgoods - full) // 格子补满 box[v.Id] += (maxgoods - full) // 格子补满
} }
g := troll.Items[v.Id] * troll.Price[v.Id]
g += box[v.Id] * price[v.Id]
if (troll.Items[v.Id] + box[v.Id]) != 0 {
troll.Price[v.Id] = g / (troll.Items[v.Id] + box[v.Id])
}
} }
// 通过金币来校验哪些物品可以买 // 通过金币来校验哪些物品可以买
@ -240,8 +235,15 @@ func (this *Troll) BuyAllItem(uid string, troll *pb.DBTrollTrain, price map[int3
if len(buyBox) == 0 { if len(buyBox) == 0 {
return // 没有可购买的直接返回 return // 没有可购买的直接返回
} }
for _, v := range goods { for _, v := range goods { // 计算购买后的平均价格
g := troll.Items[v.Id] * troll.Price[v.Id]
g += buyBox[v.Id] * price[v.Id]
troll.Items[v.Id] += buyBox[v.Id] troll.Items[v.Id] += buyBox[v.Id]
if troll.Items[v.Id] != 0 {
troll.Price[v.Id] = g / troll.Items[v.Id]
}
} }
gold = costGold gold = costGold
// 统计格子 // 统计格子