Merge branch 'meixiongfeng' of http://git.legu.cc/liwei_3d/go_dreamfactory into dev
This commit is contained in:
commit
fb17cad095
@ -1,11 +1,11 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"quantity": 5
|
||||
"quantity": 8
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"quantity": 20
|
||||
"quantity": 10
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
@ -13,18 +13,22 @@
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"quantity": 1020
|
||||
"quantity": 20
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"quantity": 980
|
||||
"quantity": 1020
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"quantity": 5
|
||||
"quantity": 980
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"quantity": 5
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"quantity": 1500
|
||||
}
|
||||
]
|
@ -412,6 +412,8 @@ const (
|
||||
const (
|
||||
TrollBuyCount int32 = iota + 1 // 单日最大交易次数
|
||||
|
||||
TrollAIBuyCount //离线最多交易次数
|
||||
|
||||
TrollItemCount //货物最大存储上限
|
||||
|
||||
TrollGridCount //背包格子
|
||||
|
@ -55,7 +55,9 @@ func (this *apiComp) BuyOrSell(session comm.IUserSession, req *pb.TrollBuyOrSell
|
||||
trolltrain.Items[k] += v
|
||||
}
|
||||
if _, ok := trolltrain.Shop[k]; !ok {
|
||||
trolltrain.Shop[k] = v
|
||||
if v > 0 {
|
||||
trolltrain.Shop[k] = v // 限购
|
||||
}
|
||||
} else {
|
||||
if v > 0 {
|
||||
trolltrain.Shop[k] += v // 限购
|
||||
@ -145,6 +147,7 @@ func (this *apiComp) BuyOrSell(session comm.IUserSession, req *pb.TrollBuyOrSell
|
||||
update["totalEarn"] = trolltrain.TotalEarn
|
||||
|
||||
update["gridNum"] = trolltrain.GridNum
|
||||
update["shop"] = trolltrain.Shop
|
||||
this.module.ModifyTrollData(session.GetUserId(), update)
|
||||
session.SendMsg(string(this.module.GetType()), TrollBuyOrSellResp, &pb.TrollBuyOrSellResp{Data: trolltrain})
|
||||
return
|
||||
|
@ -38,9 +38,12 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.TrollGetListReq)
|
||||
return
|
||||
}
|
||||
|
||||
// 测试代码=====================
|
||||
//this.module.TrollAI(session, trolltrain)
|
||||
//===========================
|
||||
aiCount := this.configure.GetTrollRule(comm.TrollAIBuyCount)
|
||||
if trolltrain.AiCount <= aiCount { // 小于离线挂机次数可执行
|
||||
this.module.TrollAI(session, trolltrain, aiCount)
|
||||
update["aiCount"] = trolltrain.AiCount
|
||||
}
|
||||
|
||||
maxCoefficient = this.configure.GetTrollMaxCoefficientNux() // 增长幅度的最大值
|
||||
if maxCoefficient == 0 {
|
||||
code = pb.ErrorCode_ConfigNoFound
|
||||
@ -49,7 +52,9 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.TrollGetListReq)
|
||||
// 跨天 则清除 每日交易次数
|
||||
if !utils.IsToday(trolltrain.RefreshTime) {
|
||||
trolltrain.SellCount = 0
|
||||
update["sellCount"] = trolltrain.SellCount
|
||||
update["sellCount"] = trolltrain.SellCount // 重置每日交易次数
|
||||
trolltrain.AiCount = 0
|
||||
update["aiCount"] = trolltrain.AiCount // 重置ai 交易次数
|
||||
this.module.ModifyTrollData(session.GetUserId(), update)
|
||||
}
|
||||
|
||||
@ -90,14 +95,17 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.TrollGetListReq)
|
||||
trolltrain.RangeId += index
|
||||
trolltrain.RangeId = (trolltrain.RangeId % maxCoefficient) + 1
|
||||
trolltrain.TarinPos = (trolltrain.TarinPos % trainNum) + 1
|
||||
update["refreshTime"] = trolltrain.RefreshTime
|
||||
update["tarinPos"] = trolltrain.TarinPos
|
||||
update["rangeId"] = trolltrain.RangeId
|
||||
break
|
||||
}
|
||||
index += 1
|
||||
leftTime -= v
|
||||
}
|
||||
update["refreshTime"] = trolltrain.RefreshTime
|
||||
update["tarinPos"] = trolltrain.TarinPos
|
||||
update["rangeId"] = trolltrain.RangeId
|
||||
update["shop"] = trolltrain.Shop
|
||||
update["items"] = trolltrain.Items
|
||||
update["price"] = trolltrain.Price
|
||||
this.module.ModifyTrollData(session.GetUserId(), update)
|
||||
session.SendMsg(string(this.module.GetType()), TrollGetListResp, &pb.TrollGetListResp{Data: trolltrain})
|
||||
return
|
||||
|
@ -115,10 +115,12 @@ func (this *configureComp) GetTrollLv(id int32) (data *cfg.GameTrollLvData) {
|
||||
}
|
||||
|
||||
func (this *configureComp) GetTrollAllTrain() (data []int32) {
|
||||
data = make([]int32, 0)
|
||||
if v, err := this.GetConfigure(game_trolltrain); err == nil {
|
||||
if configure, ok := v.(*cfg.GameTrollTrain); ok {
|
||||
for _, v := range configure.GetDataList() {
|
||||
data = append(data, v.Time)
|
||||
time := v.Time
|
||||
data = append(data, time)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@ -50,105 +50,134 @@ func (this *Troll) ModifyTrollData(uid string, data map[string]interface{}) (cod
|
||||
return
|
||||
}
|
||||
|
||||
// AI 玩法
|
||||
func (this *Troll) TrollAI(session comm.IUserSession, troll *pb.DBTrollTrain) (code pb.ErrorCode) {
|
||||
func (this *Troll) TrollAI(session comm.IUserSession, troll *pb.DBTrollTrain, aiCount int32) (code pb.ErrorCode) {
|
||||
var (
|
||||
trainCount int32 // 车站数量
|
||||
fTime []int32 //每个车站货物刷新的时间
|
||||
index int32 // 当前位置索引
|
||||
crossTime int32 // 经过的时间
|
||||
girdNum int32 // 格子数量
|
||||
leftGirdNum int32 // 购买后剩余格子数量
|
||||
// 购买的货物
|
||||
bugItem map[int32]int32 // 购买的数据
|
||||
bugItemPrice map[int32]int32
|
||||
constGold int32
|
||||
curRangeId int32
|
||||
t int64 // 上一次刷新的时间
|
||||
sellPrice map[int32]int32 // 出售货物价格
|
||||
totalGold int32
|
||||
pos int32
|
||||
)
|
||||
if troll.Buy != 0 && troll.Sell != 0 {
|
||||
return
|
||||
}
|
||||
bugItem = make(map[int32]int32, 0)
|
||||
bugItemPrice = make(map[int32]int32, 0)
|
||||
troll.Buy = 840
|
||||
girdNum = troll.GridNum
|
||||
maxGirdNum := this.configure.GetTrollRule(comm.TrollGridCount) // 获取背包最大格子数量
|
||||
maxgoods := this.configure.GetTrollRule(comm.TrollItemCount) // 获取单个物品最大上限
|
||||
trainCount = this.configure.GetTrollMaxTraintNum()
|
||||
leftGirdNum = maxGirdNum - girdNum
|
||||
fTime = make([]int32, trainCount)
|
||||
for i := 0; i < int(trainCount); i++ {
|
||||
if conf := this.configure.GetTrollTrain(int32(i) + 1); conf != nil {
|
||||
fTime[i] = conf.Time
|
||||
}
|
||||
}
|
||||
curRangeId = troll.RangeId
|
||||
// 计算时间差
|
||||
crossTime = int32(time.Now().Unix() - troll.RefreshTime)
|
||||
if crossTime < 10 {
|
||||
sellPrice = make(map[int32]int32)
|
||||
t = troll.RefreshTime
|
||||
now := time.Now().Unix()
|
||||
trainNum := this.configure.GetTrollMaxTraintNum()
|
||||
maxCoefficient := this.configure.GetTrollMaxCoefficientNux() // 增长幅度的最大值
|
||||
if maxCoefficient == 0 {
|
||||
code = pb.ErrorCode_ConfigNoFound
|
||||
return
|
||||
}
|
||||
MaxRangeId := this.configure.GetTrollMaxCoefficientNux() // 随机增幅最大值
|
||||
for i := 0; ; i++ {
|
||||
index = (int32(i) % trainCount)
|
||||
if crossTime > fTime[index] { // 获取
|
||||
crossTime -= fTime[index]
|
||||
if crossTime < 0 {
|
||||
break
|
||||
}
|
||||
curRangeId += 1
|
||||
curRangeId = curRangeId%int32(MaxRangeId) + 1
|
||||
if _d := this.configure.GetTrollCoefficient(curRangeId); _d != nil {
|
||||
if troll.Buy <= int32(_d.Coefficient) { // 可以购买 那就尽最大的数量去买
|
||||
goods := this.configure.GetTrollAllGoods() // 获取所有的货物信息
|
||||
goods := this.configure.GetTrollAllGoods()
|
||||
for _, v := range goods {
|
||||
if leftGirdNum > 0 { // 剩余可购买格子数量
|
||||
bugItemPrice[v.Id] = v.Goodsprice * _d.Coefficient / 1000 // 货物买入的价格
|
||||
if troll.Items[v.Id] < v.Max { // 还可以购买的数量
|
||||
// 先把这个格子填满
|
||||
rd := troll.Items[v.Id] % maxgoods
|
||||
buyN := v.Max - troll.Items[v.Id]
|
||||
if buyN >= rd && rd != 0 { // 只能买这么多 那就全买了
|
||||
troll.Items[v.Id] += rd
|
||||
buyN -= rd
|
||||
bugItem[v.Id] += rd
|
||||
sellPrice[v.Id] = v.Goodsprice
|
||||
}
|
||||
for {
|
||||
if buyN >= maxgoods {
|
||||
leftGirdNum -= 1
|
||||
troll.Items[v.Id] += maxgoods
|
||||
bugItem[v.Id] += maxgoods
|
||||
if troll.Items[v.Id] >= v.Max {
|
||||
break
|
||||
}
|
||||
}
|
||||
if leftGirdNum <= 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // 补齐没有满的货物
|
||||
rd := troll.Items[v.Id] % maxgoods
|
||||
if rd != 0 {
|
||||
troll.Items[v.Id] += (maxgoods - rd)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for k, v := range bugItem {
|
||||
constGold += bugItemPrice[k] * v
|
||||
}
|
||||
code = this.ModuleUser.AddAttributeValue(session, comm.ResGold, -int32(constGold), true)
|
||||
if code != pb.ErrorCode_Success { // 金币不足
|
||||
code = pb.ErrorCode_GoldNoEnough
|
||||
sz := this.configure.GetTrollAllTrain()
|
||||
if len(sz) == 0 {
|
||||
return
|
||||
}
|
||||
iCount := this.configure.GetTrollRule(comm.TrollSurprise)
|
||||
for {
|
||||
pos++
|
||||
if pos > iCount {
|
||||
break
|
||||
}
|
||||
index := int32(pos) % trainNum
|
||||
if int32(len(sz)) <= index {
|
||||
break
|
||||
}
|
||||
t += int64(sz[index])
|
||||
if now < t {
|
||||
troll.RangeId++
|
||||
troll.TarinPos++
|
||||
troll.RangeId = (troll.RangeId % maxCoefficient) + 1
|
||||
troll.TarinPos = (troll.TarinPos % trainNum) + 1
|
||||
coefficient := this.configure.GetTrollCoefficient(troll.RangeId)
|
||||
if coefficient == nil {
|
||||
return
|
||||
}
|
||||
if troll.Sell >= coefficient.Coefficient { // 可以出售
|
||||
for _, v := range goods {
|
||||
sellPrice[v.Id] = v.Goodsprice * coefficient.Coefficient
|
||||
}
|
||||
|
||||
totalGold += this.SellAllItem(troll, sellPrice)
|
||||
troll.AiCount++
|
||||
if troll.AiCount > aiCount { //达到最大交易次数
|
||||
troll.RefreshTime = t // 设置上次刷新的时间
|
||||
break
|
||||
}
|
||||
}
|
||||
if troll.Buy >= coefficient.Coefficient { // 可以购买
|
||||
for _, v := range goods {
|
||||
sellPrice[v.Id] = v.Goodsprice * coefficient.Coefficient
|
||||
}
|
||||
troll.Shop = make(map[int32]int32) // 买之前清除购买上限
|
||||
totalGold += this.BuyAllItem(session.GetUserId(), troll, sellPrice)
|
||||
}
|
||||
} else { // 超过当前时间
|
||||
troll.RefreshTime = t
|
||||
break
|
||||
}
|
||||
}
|
||||
this.ModuleUser.AddAttributeValue(session, comm.ResGold, totalGold, true)
|
||||
|
||||
// 计算价格
|
||||
return
|
||||
}
|
||||
|
||||
// 出售所有货物
|
||||
func (this *Troll) SellAllItem(troll *pb.DBTrollTrain, price map[int32]int32) (gold int32) {
|
||||
for k, v := range troll.Items {
|
||||
if _, ok := price[k]; ok {
|
||||
gold += price[k] * v
|
||||
}
|
||||
delete(troll.Items, k) // 清除数据
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 可以购买商品
|
||||
func (this *Troll) BuyAllItem(uid string, troll *pb.DBTrollTrain, price map[int32]int32) (gold int32) {
|
||||
var (
|
||||
box map[int32]int32 // 盒子 存放可购买的物品
|
||||
leftGirdNum int32 // 剩余可购买格子数量
|
||||
costGold int32
|
||||
)
|
||||
|
||||
maxGirdNum := this.configure.GetTrollRule(comm.TrollGridCount) // 获取背包最大格子数量
|
||||
maxgoods := this.configure.GetTrollRule(comm.TrollItemCount) // 获取单个物品最大上限 20个
|
||||
|
||||
leftGirdNum = maxGirdNum - troll.GridNum
|
||||
box = make(map[int32]int32, 0)
|
||||
goods := this.configure.GetTrollAllGoods()
|
||||
for _, v := range goods {
|
||||
if leftGirdNum > 0 && troll.Shop[v.Id] < v.Max {
|
||||
leftGirdNum--
|
||||
troll.Items[v.Id] += maxgoods
|
||||
troll.Shop[v.Id] += maxgoods
|
||||
box[v.Id] += maxgoods // 加入篮子
|
||||
}
|
||||
// 检查该位置的格子没有补满
|
||||
full := (troll.Items[v.Id] + box[v.Id]) % maxgoods
|
||||
if full != 0 {
|
||||
box[v.Id] += (maxgoods - full) // 格子补满
|
||||
}
|
||||
}
|
||||
// 通过金币来校验哪些物品可以买
|
||||
curGold := this.ModuleUser.QueryAttributeValue(uid, comm.ResGold)
|
||||
for k, v := range box {
|
||||
for i := 0; i < int(v); i++ { //0 1 2 3
|
||||
curGold -= int64(price[k])
|
||||
costGold -= price[k]
|
||||
if curGold < 0 {
|
||||
box[k] = int32(i)
|
||||
costGold += price[k] // 返还之前扣的
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
troll.Items = box
|
||||
gold = costGold
|
||||
return
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user