修复棋子商店bug, 发射器退役优化
This commit is contained in:
parent
417024ce88
commit
3e809a4e7d
@ -56,6 +56,20 @@ func RandSliceNum(slice []int, num int) []int {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RandSliceNum2(slice []interface{}, num int) []interface{} {
|
||||||
|
r := make([]interface{}, 0, num)
|
||||||
|
if num <= 0 || len(slice) < num {
|
||||||
|
return slice
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < num; i++ {
|
||||||
|
Id := GetRand().Intn(len(slice))
|
||||||
|
r = append(r, slice[Id])
|
||||||
|
slice = append(slice[0:Id], slice[Id+1:]...)
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
func RandSliceNumNonAdjacent(slice []int, num int) []int {
|
func RandSliceNumNonAdjacent(slice []int, num int) []int {
|
||||||
if len(slice) < 2*num {
|
if len(slice) < 2*num {
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -9,9 +9,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CFG_NAME = "MergeData"
|
CFG_NAME = "MergeData"
|
||||||
CONST_NAME = "MergeDataConst"
|
CONST_NAME = "MergeDataConst"
|
||||||
CFG_MERGE_EMIT = "MergeDataEmit"
|
CFG_MERGE_EMIT = "MergeDataEmit"
|
||||||
|
CFG_MERGE_EMIT_TYPE = "MergeDataEmitType"
|
||||||
|
|
||||||
// 棋子类型
|
// 棋子类型
|
||||||
CHESS_PRODUCT_MAIN_TYPE = 1 // 主产物
|
CHESS_PRODUCT_MAIN_TYPE = 1 // 主产物
|
||||||
@ -23,6 +24,25 @@ func init() {
|
|||||||
gamedata.InitCfg(CFG_NAME)
|
gamedata.InitCfg(CFG_NAME)
|
||||||
gamedata.InitCfg(CONST_NAME)
|
gamedata.InitCfg(CONST_NAME)
|
||||||
gamedata.InitCfg(CFG_MERGE_EMIT)
|
gamedata.InitCfg(CFG_MERGE_EMIT)
|
||||||
|
gamedata.InitCfg(CFG_MERGE_EMIT_TYPE)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetEmitTypeProduce(EmitType string) []string {
|
||||||
|
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT_TYPE, EmitType)
|
||||||
|
if err != nil {
|
||||||
|
log.Debug("GetEmitTypeProduce GetOne EmitType:%s not found", EmitType)
|
||||||
|
return []string{}
|
||||||
|
}
|
||||||
|
return strings.Split(gamedata.GetStringValue(data, "Produce"), ",")
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetEmitType2(EmitType string) int {
|
||||||
|
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT_TYPE, EmitType)
|
||||||
|
if err != nil {
|
||||||
|
log.Debug("GetEmitTypeProduce GetOne EmitType:%s not found", EmitType)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return gamedata.GetIntValue(data, "Type2")
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetEmitProduce(EmitType string) []string {
|
func GetEmitProduce(EmitType string) []string {
|
||||||
@ -82,7 +102,7 @@ func GetChessIdByLvAndColor(Lv int, Color string) int {
|
|||||||
}
|
}
|
||||||
data, err := gamedata.GetData(CFG_NAME)
|
data, err := gamedata.GetData(CFG_NAME)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debug("MergeDataCfg GetChessIdByLvAndColor lv:%v Color:%v not found", Lv, Color)
|
// log.Debug("MergeDataCfg GetChessIdByLvAndColor lv:%v Color:%v not found", Lv, Color)
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
for k, v := range data {
|
for k, v := range data {
|
||||||
@ -93,7 +113,7 @@ func GetChessIdByLvAndColor(Lv int, Color string) int {
|
|||||||
return Id
|
return Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.Debug("MergeDataCfg GetChessIdByLvAndColor lv:%v Color:%v not found", Lv, Color)
|
// log.Debug("MergeDataCfg GetChessIdByLvAndColor lv:%v Color:%v not found", Lv, Color)
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -562,7 +562,7 @@ func PlayroomVisit(p *Player, Uid int) {
|
|||||||
Items := make(map[int32]*proto.ItemInfo, 0)
|
Items := make(map[int32]*proto.ItemInfo, 0)
|
||||||
for k, v := range PlayroomMod.GameReward {
|
for k, v := range PlayroomMod.GameReward {
|
||||||
Items[int32(k)] = &proto.ItemInfo{
|
Items[int32(k)] = &proto.ItemInfo{
|
||||||
Id: int32(k),
|
Id: int32(v.Id),
|
||||||
Num: int32(v.Num),
|
Num: int32(v.Num),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -679,6 +679,9 @@ func EmitRetireTrigger2(p *Player) {
|
|||||||
}
|
}
|
||||||
RetireEmit := ChessMod.GetRetireEmit()
|
RetireEmit := ChessMod.GetRetireEmit()
|
||||||
for k, v := range RetireEmit {
|
for k, v := range RetireEmit {
|
||||||
|
if k == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if v != 1 {
|
if v != 1 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -694,6 +697,9 @@ func EmitRetireTrigger2(p *Player) {
|
|||||||
}
|
}
|
||||||
RetireEmit1 := ChessMod.GetRetireEmit()
|
RetireEmit1 := ChessMod.GetRetireEmit()
|
||||||
for k, v := range RetireEmit1 {
|
for k, v := range RetireEmit1 {
|
||||||
|
if k == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if v != 2 {
|
if v != 2 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2872,7 +2872,7 @@ func ReqPlayroomGame(args []interface{}) error {
|
|||||||
ItemsMsg := make(map[int32]*msg.ItemInfo, 0)
|
ItemsMsg := make(map[int32]*msg.ItemInfo, 0)
|
||||||
for k, v := range PlayroomMod.GameReward {
|
for k, v := range PlayroomMod.GameReward {
|
||||||
ItemsMsg[int32(k)] = &msg.ItemInfo{
|
ItemsMsg[int32(k)] = &msg.ItemInfo{
|
||||||
Id: int32(k),
|
Id: int32(v.Id),
|
||||||
Num: int32(v.Num),
|
Num: int32(v.Num),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,6 +59,8 @@ func UnitOrder(p *Player) error {
|
|||||||
|
|
||||||
func UnitChess(p *Player) error {
|
func UnitChess(p *Player) error {
|
||||||
ChessMod := p.PlayMod.getChessMod()
|
ChessMod := p.PlayMod.getChessMod()
|
||||||
ChessMod.RetireOrder("A")
|
Emit := ChessMod.GetEmitList()
|
||||||
|
ChargeMod := p.PlayMod.getChargeMod()
|
||||||
|
ChargeMod.InitChessShop(Emit)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package charge
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
|
||||||
"server/GoUtil"
|
"server/GoUtil"
|
||||||
chargeCfg "server/conf/charge"
|
chargeCfg "server/conf/charge"
|
||||||
mergeDataCfg "server/conf/mergeData"
|
mergeDataCfg "server/conf/mergeData"
|
||||||
@ -41,9 +40,17 @@ type SepcialShop struct {
|
|||||||
Count int
|
Count int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ChessDiamondCfg = map[int]int{
|
||||||
|
1: 5,
|
||||||
|
2: 10,
|
||||||
|
3: 20,
|
||||||
|
4: 50,
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SPECIAL_TYPE_1 = 1 // 特惠礼包1
|
SPECIAL_TYPE_1 = 1 // 特惠礼包1
|
||||||
SPECIAL_TYPE_2 = 2 // 特惠礼包2
|
SPECIAL_TYPE_2 = 2 // 特惠礼包2
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *ChargeMod) InitData() {
|
func (c *ChargeMod) InitData() {
|
||||||
@ -228,39 +235,53 @@ func (c *ChargeMod) InitChessShop(Emit []int) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.ChessShop = make(map[int]*ChessShop)
|
c.ChessShop = make(map[int]*ChessShop)
|
||||||
list := make([]int, 0)
|
EmitColor := make(map[string]int)
|
||||||
for _, v := range Emit {
|
for _, v := range Emit {
|
||||||
n := 6
|
Color := mergeDataCfg.GetColorById(v)
|
||||||
ProductColor := mergeDataCfg.GetEmitProduceChessType(v)
|
ProduceList := mergeDataCfg.GetEmitTypeProduce(Color)
|
||||||
if len(ProductColor) == 0 {
|
Type2 := mergeDataCfg.GetEmitType2(Color)
|
||||||
continue
|
for _, Produce := range ProduceList {
|
||||||
}
|
if _, ok := EmitColor[Produce]; ok {
|
||||||
if len(ProductColor) == 1 {
|
continue
|
||||||
n = 5
|
|
||||||
}
|
|
||||||
for _, color := range ProductColor {
|
|
||||||
for i := n; i <= 10; i++ {
|
|
||||||
Id := mergeDataCfg.GetChessIdByLvAndColor(i, color)
|
|
||||||
if Id == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
list = append(list, Id)
|
|
||||||
}
|
}
|
||||||
n--
|
EmitColor[Produce] = Type2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
list1 := GoUtil.RandSliceNum(list, 5)
|
type Rand struct {
|
||||||
for k, v := range list1 {
|
ChessId int
|
||||||
PType := mergeDataCfg.GetProductType(v)
|
Diamond int
|
||||||
Lv := mergeDataCfg.GetLvById(v)
|
}
|
||||||
Diamond := int(math.Ceil(math.Pow(2, float64(Lv-1)/2.5)))
|
RandList := make([]interface{}, 0)
|
||||||
switch PType {
|
for k, v := range EmitColor {
|
||||||
case mergeDataCfg.CHESS_PRODUCT_SUB_TYPE:
|
for i := 1; i <= 99; i++ {
|
||||||
Diamond += 15
|
ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, k)
|
||||||
case mergeDataCfg.CHESS_PRODUCT_SUB_EMIT_TYPE:
|
if ChessId == 0 {
|
||||||
Diamond *= 2
|
break
|
||||||
|
}
|
||||||
|
ChessType := mergeDataCfg.GetTypeById(ChessId)
|
||||||
|
if ChessType == "Emitter" {
|
||||||
|
RandList = append(RandList, Rand{
|
||||||
|
ChessId: ChessId,
|
||||||
|
Diamond: ChessDiamondCfg[i],
|
||||||
|
})
|
||||||
|
if i >= 4 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Diamond := GetChessDiamond(i, v)
|
||||||
|
RandList = append(RandList, Rand{
|
||||||
|
ChessId: ChessId,
|
||||||
|
Diamond: Diamond,
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
c.ChessShop[k+1] = &ChessShop{Diamond: Diamond, Count: 5, Id: v}
|
}
|
||||||
|
|
||||||
|
L := GoUtil.RandSliceNum2(RandList, 5)
|
||||||
|
for k, v := range L {
|
||||||
|
Diamond := v.(Rand).Diamond
|
||||||
|
ChessId := v.(Rand).ChessId
|
||||||
|
c.ChessShop[k+1] = &ChessShop{Diamond: Diamond, Count: 5, Id: ChessId}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
20
src/server/game/mod/charge/ChargeFunc.go
Normal file
20
src/server/game/mod/charge/ChargeFunc.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package charge
|
||||||
|
|
||||||
|
import "math"
|
||||||
|
|
||||||
|
func GetChessDiamond(Lv, Type int) int {
|
||||||
|
Diamond := 0.0
|
||||||
|
if Type == 1 {
|
||||||
|
Diamond = 0.27 * math.Exp(float64(Lv)*0.56)
|
||||||
|
} else {
|
||||||
|
Diamond = 3.25 * math.Exp(float64(Lv)*0.65)
|
||||||
|
}
|
||||||
|
d := int(Diamond)
|
||||||
|
if d > 10 {
|
||||||
|
r := d % 10
|
||||||
|
if r > 3 {
|
||||||
|
return d - r
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return max(1, d)
|
||||||
|
}
|
||||||
@ -166,7 +166,7 @@ func (o *OrderMod) CreatePriorityOrder(lv int, Emit []int) bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for v := range Emit {
|
for v := range Emit {
|
||||||
Produce := mergeDataCfg.GetEmitProduceType(v)
|
Produce := mergeDataCfg.GetEmitProduceChessType(v)
|
||||||
if len(Produce) < 2 {
|
if len(Produce) < 2 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -397,7 +397,7 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int) bool
|
|||||||
Emit_Id := mergeDataCfg.GetEmitId(v)
|
Emit_Id := mergeDataCfg.GetEmitId(v)
|
||||||
_, ok := GetExtraEmitId[Emit_Id]
|
_, ok := GetExtraEmitId[Emit_Id]
|
||||||
_, ok1 := o.EimtOrder[Emit_Id]
|
_, ok1 := o.EimtOrder[Emit_Id]
|
||||||
ChessColor := mergeDataCfg.GetEmitProduceType(v)
|
ChessColor := mergeDataCfg.GetEmitProduceChessType(v)
|
||||||
if ok && !ok1 && len(ChessColor) > 0 {
|
if ok && !ok1 && len(ChessColor) > 0 {
|
||||||
b1 = true
|
b1 = true
|
||||||
OrderEmit = v
|
OrderEmit = v
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user