Merge branch 'develop' into sdk
This commit is contained in:
commit
c5de7434f5
@ -235,33 +235,6 @@ func CreateCardId(From, To, CardId int) string {
|
|||||||
return fmt.Sprintf("%d_%d_%d_%d_%s", From, To, CardId, Now(), RandString(3))
|
return fmt.Sprintf("%d_%d_%d_%d_%s", From, To, CardId, Now(), RandString(3))
|
||||||
}
|
}
|
||||||
|
|
||||||
func PlayroomTrigger(Time int64, Num int) (int64, int) {
|
|
||||||
if Num == 0 {
|
|
||||||
return 0, 0
|
|
||||||
}
|
|
||||||
Now := Now()
|
|
||||||
if Time > Now {
|
|
||||||
return Time, Num
|
|
||||||
}
|
|
||||||
var Duration int64
|
|
||||||
for {
|
|
||||||
if Num > 50 {
|
|
||||||
Duration = 1200
|
|
||||||
|
|
||||||
} else {
|
|
||||||
Duration = 3600
|
|
||||||
}
|
|
||||||
if Time+Duration > Now {
|
|
||||||
return Time + Duration, Num
|
|
||||||
}
|
|
||||||
Time += Duration
|
|
||||||
Num -= 10
|
|
||||||
if Num <= 0 {
|
|
||||||
return 0, 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func SplitInt(str, sep string) []int {
|
func SplitInt(str, sep string) []int {
|
||||||
var ret []int
|
var ret []int
|
||||||
for _, v := range strings.Split(str, sep) {
|
for _, v := range strings.Split(str, sep) {
|
||||||
|
|||||||
75
src/server/GoUtil/feishu.go
Normal file
75
src/server/GoUtil/feishu.go
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
package GoUtil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"server/conf"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
FEISHU_WEBHOOK = "https://open.feishu.cn/open-apis/bot/v2/hook/70e24a79-b019-434a-b4d1-4592bbf7c311"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SendFeishuMsg(msg string) error {
|
||||||
|
// 创建请求体
|
||||||
|
payload := map[string]interface{}{
|
||||||
|
"msg_type": "post",
|
||||||
|
"content": map[string]interface{}{
|
||||||
|
"post": map[string]interface{}{
|
||||||
|
"zh_cn": map[string]interface{}{
|
||||||
|
"title": "服务器报错提醒",
|
||||||
|
"content": [][]map[string]interface{}{
|
||||||
|
{
|
||||||
|
{
|
||||||
|
"tag": "text",
|
||||||
|
"text": fmt.Sprintf("AppName:%s", conf.Server.GameName),
|
||||||
|
// "style": []string{"bold", "lineThrough"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{
|
||||||
|
"tag": "text",
|
||||||
|
"text": fmt.Sprintf("ServerName:%s", conf.Server.ServerName),
|
||||||
|
// "style": []string{"bold", "lineThrough"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{
|
||||||
|
"tag": "text",
|
||||||
|
"text": msg,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
payloadBytes, err := json.Marshal(payload)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建HTTP请求
|
||||||
|
req, err := http.NewRequest("POST", FEISHU_WEBHOOK, bytes.NewBuffer(payloadBytes))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
// 发送请求
|
||||||
|
client := &http.Client{}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// 检查响应状态码
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@ -54,3 +54,11 @@ func GetMaxEnergyMul(Lv int, Energy int) int {
|
|||||||
}
|
}
|
||||||
return Mul
|
return Mul
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetLimitEnergyMul(Lv int) int {
|
||||||
|
data, err := gamedata.GetDataByIntKey(ENERGY_CFG, Lv+1)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return gamedata.GetIntValue(data, "Limit")
|
||||||
|
}
|
||||||
|
|||||||
@ -40,6 +40,14 @@ func GetStarById(Id int) int {
|
|||||||
return gamedata.GetIntValue(data, "Star")
|
return gamedata.GetIntValue(data, "Star")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetRoundById(Id int) int {
|
||||||
|
data, err := gamedata.GetDataByIntKey(CARD_DETAIL_CFG_NAME, Id)
|
||||||
|
if err != nil {
|
||||||
|
log.Debug("GetRoundById data not found")
|
||||||
|
}
|
||||||
|
return gamedata.GetIntValue(data, "Round")
|
||||||
|
}
|
||||||
|
|
||||||
// 获取开启卡包获得的卡牌数量
|
// 获取开启卡包获得的卡牌数量
|
||||||
func GetPackRewardCnt(Star int) int {
|
func GetPackRewardCnt(Star int) int {
|
||||||
data, err := gamedata.GetDataByIntKey(CARD_PACK_CFG_NAME, Star)
|
data, err := gamedata.GetDataByIntKey(CARD_PACK_CFG_NAME, Star)
|
||||||
|
|||||||
@ -7,15 +7,19 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CFG_PLAYROOM_CONST = "PlayroomConst"
|
CFG_PLAYROOM_CONST = "PlayroomConst"
|
||||||
CFG_PLAYROOM_DECORATE = "PlayroomDecorate"
|
CFG_PLAYROOM_DECORATE = "PlayroomDecorate"
|
||||||
CFG_PLAYROOM_MOOD = "PlayroomMood"
|
CFG_PLAYROOM_MOOD = "PlayroomMood"
|
||||||
|
CFG_PLAYROOM_PHYSIOLOGY = "PlayroomPhysiology"
|
||||||
|
CFG_PLAYROOM_PHYSIOLOGY_TYPE = "PlayroomPhysiologyType"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
gamedata.InitCfg(CFG_PLAYROOM_CONST)
|
gamedata.InitCfg(CFG_PLAYROOM_CONST)
|
||||||
gamedata.InitCfg(CFG_PLAYROOM_DECORATE)
|
gamedata.InitCfg(CFG_PLAYROOM_DECORATE)
|
||||||
gamedata.InitCfg(CFG_PLAYROOM_MOOD)
|
gamedata.InitCfg(CFG_PLAYROOM_MOOD)
|
||||||
|
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY)
|
||||||
|
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY_TYPE)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetUnLockLv() int {
|
func GetUnLockLv() int {
|
||||||
@ -26,6 +30,14 @@ func GetUnLockLv() int {
|
|||||||
return gamedata.GetIntValue(data, "Value")
|
return gamedata.GetIntValue(data, "Value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetGameOutline() int {
|
||||||
|
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "GameOutline")
|
||||||
|
if err != nil {
|
||||||
|
return 999
|
||||||
|
}
|
||||||
|
return gamedata.GetIntValue(data, "Value")
|
||||||
|
}
|
||||||
|
|
||||||
func GetOrderStar() int {
|
func GetOrderStar() int {
|
||||||
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Star")
|
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Star")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -42,6 +54,14 @@ func GetRewardStar() int {
|
|||||||
return gamedata.GetIntValue(data, "Value")
|
return gamedata.GetIntValue(data, "Value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetTriggerCd() int {
|
||||||
|
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "CD")
|
||||||
|
if err != nil {
|
||||||
|
return 1000
|
||||||
|
}
|
||||||
|
return gamedata.GetIntValue(data, "Value")
|
||||||
|
}
|
||||||
|
|
||||||
func GetNormalItem() (int, int) {
|
func GetNormalItem() (int, int) {
|
||||||
data1, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "NormalFoodId")
|
data1, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "NormalFoodId")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -108,6 +128,14 @@ func GetInteract(Id, Type int) (int, []*item.Item, int) {
|
|||||||
return gamedata.GetIntValue(data, "Type"), gamedata.GetItemList(data, "Cost2"), gamedata.GetIntValue(data, "Effect")
|
return gamedata.GetIntValue(data, "Type"), gamedata.GetItemList(data, "Cost2"), gamedata.GetIntValue(data, "Effect")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetInteractPhysiology(Id int) (int, int) {
|
||||||
|
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_MOOD, Id)
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0
|
||||||
|
}
|
||||||
|
return gamedata.GetIntValue(data, "PType"), gamedata.GetIntValue(data, "PEffect")
|
||||||
|
}
|
||||||
|
|
||||||
func GetInitDecorate() []int {
|
func GetInitDecorate() []int {
|
||||||
r := make([]int, 0)
|
r := make([]int, 0)
|
||||||
data, err := gamedata.GetData(CFG_PLAYROOM_DECORATE)
|
data, err := gamedata.GetData(CFG_PLAYROOM_DECORATE)
|
||||||
@ -141,3 +169,38 @@ func GetBuyItem(Id int) ([]*item.Item, []*item.Item) {
|
|||||||
}
|
}
|
||||||
return gamedata.GetItemList(data, "Cost2"), gamedata.GetItemList(data, "Buy")
|
return gamedata.GetItemList(data, "Cost2"), gamedata.GetItemList(data, "Buy")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetPhysiologyMax(Id int) int {
|
||||||
|
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_PHYSIOLOGY_TYPE, Id)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return gamedata.GetIntValue(data, "Max")
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetPhysiologyDuration(Id int, Num int) int {
|
||||||
|
data, err := gamedata.GetData(CFG_PLAYROOM_PHYSIOLOGY)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
for _, v := range data {
|
||||||
|
Type := gamedata.GetIntValue(v, "Type")
|
||||||
|
if Type != Id {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
Min := gamedata.GetIntValue(v, "Min")
|
||||||
|
Max := gamedata.GetIntValue(v, "Max")
|
||||||
|
if Num >= Min && Num <= Max {
|
||||||
|
return gamedata.GetIntValue(v, "Per")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetMoodEffect(Id int) (int, int) {
|
||||||
|
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_PHYSIOLOGY_TYPE, Id)
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0
|
||||||
|
}
|
||||||
|
return gamedata.GetIntValue(data, "MType"), gamedata.GetIntValue(data, "MEffect")
|
||||||
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
"ServerName": "Merge_Pet",
|
"ServerName": "Merge_Pet",
|
||||||
"ServerStatus" : 1,
|
"ServerStatus" : 1,
|
||||||
"ServerCenter" : 1,
|
"ServerCenter" : 1,
|
||||||
|
"GameConfPath": "F:/Github/pet_home_server/src/server/gamedata/config/",
|
||||||
|
|
||||||
"RedisAddr":"127.0.0.1",
|
"RedisAddr":"127.0.0.1",
|
||||||
"RedisPort" :"6379",
|
"RedisPort" :"6379",
|
||||||
|
|||||||
@ -481,6 +481,7 @@ type SqlServerMailStruct struct {
|
|||||||
End_time int64 `db:"end_time"`
|
End_time int64 `db:"end_time"`
|
||||||
Mail_type int `db:"mail_type"`
|
Mail_type int `db:"mail_type"`
|
||||||
To_uids string `db:"to_uids"`
|
To_uids string `db:"to_uids"`
|
||||||
|
CreateTime int64 `db:"create_time"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SqlChargeOrderStruct struct {
|
type SqlChargeOrderStruct struct {
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
package game
|
package game
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/gob"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"server/GoUtil"
|
"server/GoUtil"
|
||||||
"server/conf"
|
"server/conf"
|
||||||
cardCfg "server/conf/card"
|
cardCfg "server/conf/card"
|
||||||
@ -169,6 +171,11 @@ func ReqGmCommand(args []interface{}) error {
|
|||||||
OrderMod.EimtOrder = make(map[string]struct{})
|
OrderMod.EimtOrder = make(map[string]struct{})
|
||||||
HandbookMod := player.PlayMod.getHandbookMod()
|
HandbookMod := player.PlayMod.getHandbookMod()
|
||||||
delete(HandbookMod.BookList, 125)
|
delete(HandbookMod.BookList, 125)
|
||||||
|
case "deleteOrder":
|
||||||
|
Id, _ := strconv.Atoi(arg[1])
|
||||||
|
OrderMod := player.PlayMod.getOrderMod()
|
||||||
|
delete(OrderMod.OrderList, Id)
|
||||||
|
player.PushClientRes(OrderMod.BackData())
|
||||||
case "miningReload":
|
case "miningReload":
|
||||||
MiningMod := player.PlayMod.getMiningMod()
|
MiningMod := player.PlayMod.getMiningMod()
|
||||||
MiningMod.ZeroUpdate(-1)
|
MiningMod.ZeroUpdate(-1)
|
||||||
@ -247,6 +254,34 @@ func ReqGmCommand(args []interface{}) error {
|
|||||||
case "resetCardSeasonFirst":
|
case "resetCardSeasonFirst":
|
||||||
CardMod := player.PlayMod.getCardMod()
|
CardMod := player.PlayMod.getCardMod()
|
||||||
CardMod.SeasonFirst = false
|
CardMod.SeasonFirst = false
|
||||||
|
case "addPhysiology":
|
||||||
|
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||||
|
Type, _ := strconv.Atoi(arg[1])
|
||||||
|
Num, _ := strconv.Atoi(arg[2])
|
||||||
|
PlayroomMod.AddPhysiology(Type, Num)
|
||||||
|
case "resetTriggerTime":
|
||||||
|
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||||
|
PlayroomMod.TriggerTime = 0
|
||||||
|
case "recoverUser":
|
||||||
|
file, err := os.OpenFile(conf.Server.GameConfPath+"user.info", os.O_RDWR|os.O_CREATE, 0666)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Failed to open user.info file: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// file.Write(buf.Bytes())
|
||||||
|
defer file.Close()
|
||||||
|
Uid := player.M_DwUin
|
||||||
|
file.Seek(0, 0)
|
||||||
|
decoder := gob.NewDecoder(file)
|
||||||
|
modList := PlayerModList{}
|
||||||
|
err = decoder.Decode(&modList)
|
||||||
|
player.PlayMod.mod_list = modList
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Failed to decode user.info file: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
BaseMod := player.PlayMod.getBaseMod()
|
||||||
|
BaseMod.Uid = Uid
|
||||||
}
|
}
|
||||||
player.PlayMod.save()
|
player.PlayMod.save()
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -5,11 +5,13 @@ import (
|
|||||||
"math"
|
"math"
|
||||||
"server/GoUtil"
|
"server/GoUtil"
|
||||||
baseCfg "server/conf/base"
|
baseCfg "server/conf/base"
|
||||||
|
playroomCfg "server/conf/playroom"
|
||||||
userCfg "server/conf/user"
|
userCfg "server/conf/user"
|
||||||
"server/game/mod/card"
|
"server/game/mod/card"
|
||||||
"server/game/mod/item"
|
"server/game/mod/item"
|
||||||
"server/game/mod/limitedTimeEvent"
|
"server/game/mod/limitedTimeEvent"
|
||||||
MsgMod "server/game/mod/msg" // Ensure this package exists and is correctly referenced
|
MsgMod "server/game/mod/msg" // Ensure this package exists and is correctly referenced
|
||||||
|
"server/game/mod/playroom"
|
||||||
"server/msg"
|
"server/msg"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -137,17 +139,34 @@ func LimitedTimeCardTrigger(p *Player) {
|
|||||||
}, "LimitedTimeCard")
|
}, "LimitedTimeCard")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func LimitedTimePlayroomTrigger(p *Player) {
|
||||||
func LimitedTimePlayroomTrigger(p *Player, Id int) {
|
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||||
|
for k, v := range PlayroomMod.Physiology {
|
||||||
|
if v.Time > 0 {
|
||||||
|
LimitedTimePlayroomTrigger_(p, k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p.PushClientRes(PlayroomMod.NotifyMood())
|
||||||
|
}
|
||||||
|
func LimitedTimePlayroomTrigger_(p *Player, Id int) {
|
||||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||||
Now := GoUtil.Now()
|
Now := GoUtil.Now()
|
||||||
MoodInfo := PlayroomMod.GetMoodInfo(Id)
|
Physiology := PlayroomMod.GetPhysiology(Id)
|
||||||
if MoodInfo == nil {
|
if Physiology == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
NewTime, Num := GoUtil.PlayroomTrigger(MoodInfo.Time, MoodInfo.Num)
|
NewTime, Num := PlayroomTrigger(Physiology.Id, Physiology.Time, Physiology.Num)
|
||||||
MoodInfo.Time = NewTime
|
Physiology.Time = NewTime
|
||||||
MoodInfo.Num = Num
|
DiffValue := Physiology.Num - Num
|
||||||
|
MType, MEffect := playroomCfg.GetMoodEffect(Physiology.Id)
|
||||||
|
CleanMood := PlayroomMod.GetMoodInfo(playroom.MOOD_TYPE_CLEAN)
|
||||||
|
// 上厕所数值为0 且清洁度大于50时,清洁度降至50
|
||||||
|
if Id == playroom.PHYSIOLOGY_TYPE_TOLIET && Num == 0 && CleanMood.Num > 50 {
|
||||||
|
CleanMood.Num = 50
|
||||||
|
} else {
|
||||||
|
PlayroomMod.AddMood(MType, -MEffect*DiffValue)
|
||||||
|
}
|
||||||
|
Physiology.Num = Num
|
||||||
p.PlayMod.save()
|
p.PlayMod.save()
|
||||||
PlayroomBackData(p)
|
PlayroomBackData(p)
|
||||||
NextSecond := NewTime - Now
|
NextSecond := NewTime - Now
|
||||||
@ -155,12 +174,42 @@ func LimitedTimePlayroomTrigger(p *Player, Id int) {
|
|||||||
p.CallEvent(time.Duration(NextSecond)*time.Second, func() {
|
p.CallEvent(time.Duration(NextSecond)*time.Second, func() {
|
||||||
p.lock.Lock()
|
p.lock.Lock()
|
||||||
defer p.lock.Unlock()
|
defer p.lock.Unlock()
|
||||||
LimitedTimePlayroomTrigger(p, Id)
|
LimitedTimePlayroomTrigger_(p, Id)
|
||||||
p.SendClientRes()
|
p.SendClientRes()
|
||||||
}, fmt.Sprintf("Playroom_%d", Id))
|
}, fmt.Sprintf("Playroom_%d", Id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PlayroomTrigger(Id int, Time int64, Num int) (int64, int) {
|
||||||
|
if Num == 0 {
|
||||||
|
return 0, 0
|
||||||
|
}
|
||||||
|
Now := GoUtil.Now()
|
||||||
|
if Time > Now {
|
||||||
|
return Time, Num
|
||||||
|
}
|
||||||
|
if Time == Now {
|
||||||
|
NeedDuration := playroomCfg.GetPhysiologyDuration(Id, Num)
|
||||||
|
return Time + int64(NeedDuration), Num
|
||||||
|
}
|
||||||
|
n := 0
|
||||||
|
for {
|
||||||
|
if n > 100 {
|
||||||
|
return 0, 0
|
||||||
|
}
|
||||||
|
Num--
|
||||||
|
NeedDuration := playroomCfg.GetPhysiologyDuration(Id, Num)
|
||||||
|
Time += int64(NeedDuration)
|
||||||
|
if Time > Now {
|
||||||
|
return Time, Num
|
||||||
|
}
|
||||||
|
if Num == 0 {
|
||||||
|
return 0, 0
|
||||||
|
}
|
||||||
|
n++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func LimitedTimePlayroomWorkTrigger(p *Player) {
|
func LimitedTimePlayroomWorkTrigger(p *Player) {
|
||||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||||
EndTime := PlayroomMod.Endtime
|
EndTime := PlayroomMod.Endtime
|
||||||
|
|||||||
@ -9,6 +9,11 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
MAIL_TYPE_SERVER = 1
|
||||||
|
MAIL_TYPE_USER = 2
|
||||||
|
)
|
||||||
|
|
||||||
type MailMgr struct {
|
type MailMgr struct {
|
||||||
*ServerMod
|
*ServerMod
|
||||||
list map[int]*ServerMail
|
list map[int]*ServerMail
|
||||||
@ -38,10 +43,18 @@ func (m *MailMgr) Init() {
|
|||||||
m.list = make(map[int]*ServerMail)
|
m.list = make(map[int]*ServerMail)
|
||||||
// 注册处理函数
|
// 注册处理函数
|
||||||
m.init()
|
m.init()
|
||||||
m.LoadMail()
|
m.LoadMail(nil)
|
||||||
|
m.RegisterHandler(msg.HANDLE_TYPE_MAIL_ADD, m.AddMail)
|
||||||
|
m.RegisterHandler(msg.HANDLE_TYPE_MAIL_RELOAD, m.LoadMail)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *MailMgr) LoadMail() {
|
func (m *MailMgr) AddMail(msg *msg.Msg) (interface{}, error) {
|
||||||
|
ServerMail := msg.Extra.(*ServerMail)
|
||||||
|
m.list[ServerMail.Id] = ServerMail
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *MailMgr) LoadMail(msg *msg.Msg) (interface{}, error) {
|
||||||
// 从数据库加载邮件
|
// 从数据库加载邮件
|
||||||
data := make([]*db.SqlServerMailStruct, 0)
|
data := make([]*db.SqlServerMailStruct, 0)
|
||||||
db.GetServerMailData(&data)
|
db.GetServerMailData(&data)
|
||||||
@ -65,8 +78,30 @@ func (r *MailMgr) LoadMail() {
|
|||||||
To_uids: Uids,
|
To_uids: Uids,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *MailMgr) Sync() {
|
func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail {
|
||||||
G_GameLogicPtr.NotifyAll(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL, Extra: r.list[1]})
|
// 同步邮件
|
||||||
|
Now := GoUtil.Now()
|
||||||
|
list := make([]ServerMail, 0)
|
||||||
|
for _, v := range r.list {
|
||||||
|
if v.Start_time > 0 && v.Start_time > Now {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if v.End_time > 0 && v.End_time < Now {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if v.Register_time > 0 && v.Register_time < Register {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if v.Mail_type == MAIL_TYPE_SERVER { //全服邮件
|
||||||
|
list = append(list, *v)
|
||||||
|
} else {
|
||||||
|
if GoUtil.InArray(Uid, v.To_uids) {
|
||||||
|
list = append(list, *v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list
|
||||||
}
|
}
|
||||||
|
|||||||
@ -340,33 +340,19 @@ func (p *Player) Login() {
|
|||||||
LimitedTimeEventTrigger(p, 0)
|
LimitedTimeEventTrigger(p, 0)
|
||||||
// 猪猪银行触发
|
// 猪猪银行触发
|
||||||
LimitedTimePiggyBankTrigger(p)
|
LimitedTimePiggyBankTrigger(p)
|
||||||
// playroom触发
|
|
||||||
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_ENTER)
|
|
||||||
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_FOOD)
|
|
||||||
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_CLEAN)
|
|
||||||
LimitedTimePlayroomWorkTrigger(p)
|
|
||||||
LimitedTimeEnergyAdd(p)
|
|
||||||
ActivityLogin(p)
|
|
||||||
LoignBack(p)
|
|
||||||
BaseMod := p.PlayMod.getBaseMod()
|
BaseMod := p.PlayMod.getBaseMod()
|
||||||
|
// playroom触发
|
||||||
|
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||||
|
PlayroomMod.UnLock(BaseMod.GetLevel())
|
||||||
|
LimitedTimePlayroomTrigger(p) // playroom数值变化
|
||||||
|
LimitedTimePlayroomWorkTrigger(p) // playroom打工
|
||||||
|
LimitedTimeEnergyAdd(p) // 能量定时处理
|
||||||
|
ActivityLogin(p) // 活动登录
|
||||||
|
LoignBack(p) // 登录返回数据
|
||||||
|
SyncMailMsg(p) // 同步邮件
|
||||||
BaseMod.Login()
|
BaseMod.Login()
|
||||||
p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
|
HandbookItem := p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
|
||||||
if p.PlayerBaseMod.Data.UserName == "388faebe29ffe56666a04ea22b902b0f" {
|
p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String())
|
||||||
VarMod := p.PlayMod.getVarMod()
|
|
||||||
Mail1, _ := VarMod.GetVar(2)
|
|
||||||
if Mail1 != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
VarMod.SetVar(2, 1)
|
|
||||||
Items := make([]*item.Item, 0)
|
|
||||||
Items = append(Items, &item.Item{Id: item.ITEM_ENERGY_ID, Num: 500})
|
|
||||||
MailMod := p.PlayMod.getMailMod()
|
|
||||||
MailMod.Send("Game Bug Report Handling & Compensation",
|
|
||||||
`We sincerely apologize for this issue that has affected your experience.
|
|
||||||
One of our collleague will contact you soon, and we kindly ask for your cooperation with the QA process.
|
|
||||||
As a token of our appreciation, here is 500 Energy for your trouble.
|
|
||||||
Once again, we deeply regret any trouble this may have caused and thank you for your understanding and support.`, Items)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Player) Outline() {
|
func (p *Player) Outline() {
|
||||||
@ -379,6 +365,7 @@ func (p *Player) Outline() {
|
|||||||
BaseMod := p.PlayMod.getBaseMod()
|
BaseMod := p.PlayMod.getBaseMod()
|
||||||
BaseMod.Outline(int(Cacumulative))
|
BaseMod.Outline(int(Cacumulative))
|
||||||
p.PlayMod.save()
|
p.PlayMod.save()
|
||||||
|
p.UpdateUserInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 离线 保存数据
|
// 离线 保存数据
|
||||||
@ -739,6 +726,7 @@ func (p *Player) GetSimpleData(Uid int, simple *PlayerSimpleData) error {
|
|||||||
func (p *Player) UpdateUserInfo() {
|
func (p *Player) UpdateUserInfo() {
|
||||||
simple := &PlayerSimpleData{}
|
simple := &PlayerSimpleData{}
|
||||||
Base := p.GetPlayerBaseMod()
|
Base := p.GetPlayerBaseMod()
|
||||||
|
BaseMod := p.PlayMod.getBaseMod()
|
||||||
simple.Name = p.PlayMod.getBaseMod().NickName
|
simple.Name = p.PlayMod.getBaseMod().NickName
|
||||||
simple.Avatar = p.PlayMod.getAvatarMod().SetId
|
simple.Avatar = p.PlayMod.getAvatarMod().SetId
|
||||||
simple.Uid = int(p.M_DwUin)
|
simple.Uid = int(p.M_DwUin)
|
||||||
@ -746,8 +734,8 @@ func (p *Player) UpdateUserInfo() {
|
|||||||
simple.Face = p.PlayMod.getFaceMod().SetId
|
simple.Face = p.PlayMod.getFaceMod().SetId
|
||||||
simple.Level = p.GetPlayerBaseMod().GetLevel()
|
simple.Level = p.GetPlayerBaseMod().GetLevel()
|
||||||
simple.Decorate = p.PlayMod.getDecorateMod().DecorateNum
|
simple.Decorate = p.PlayMod.getDecorateMod().DecorateNum
|
||||||
simple.Login = int64(Base.Data.LoginTime)
|
simple.Login = int64(BaseMod.LoginTime)
|
||||||
simple.Loginout = int64(Base.Data.LogoutTime)
|
simple.Loginout = int64(BaseMod.LogoutTime)
|
||||||
simple.FaceBook = Base.Data.FaceBookId
|
simple.FaceBook = Base.Data.FaceBookId
|
||||||
simple.FaceBookPic = p.PlayMod.getBaseMod().FacebookUrl
|
simple.FaceBookPic = p.PlayMod.getBaseMod().FacebookUrl
|
||||||
simple.Playroom = p.PlayMod.getPlayroomMod().Room
|
simple.Playroom = p.PlayMod.getPlayroomMod().Room
|
||||||
|
|||||||
@ -426,6 +426,10 @@ func (p *PlayerBaseData) ClearData() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PlayerBaseData) GetRegisterTime() int64 {
|
||||||
|
return int64(p.Data.Rolecreatetime)
|
||||||
|
}
|
||||||
|
|
||||||
// 增加减少体力
|
// 增加减少体力
|
||||||
func (p *PlayerBaseData) AddEnergy(player *Player, cnt int) error {
|
func (p *PlayerBaseData) AddEnergy(player *Player, cnt int) error {
|
||||||
BaseMod := p.p.PlayMod.getBaseMod()
|
BaseMod := p.p.PlayMod.getBaseMod()
|
||||||
@ -435,6 +439,8 @@ func (p *PlayerBaseData) AddEnergy(player *Player, cnt int) error {
|
|||||||
}
|
}
|
||||||
if cnt < 0 {
|
if cnt < 0 {
|
||||||
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_ENERGY, A: []interface{}{-cnt}})
|
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_ENERGY, A: []interface{}{-cnt}})
|
||||||
|
BaseMod.FormatEnergyMul(NewEnergy)
|
||||||
|
p.p.PushClientRes(BaseMod.BackData())
|
||||||
}
|
}
|
||||||
if BaseMod.Energy >= p.GetMaxEnergy() && NewEnergy < p.GetMaxEnergy() {
|
if BaseMod.Energy >= p.GetMaxEnergy() && NewEnergy < p.GetMaxEnergy() {
|
||||||
Recover := userCfg.GetRecover(int(BaseMod.Level))
|
Recover := userCfg.GetRecover(int(BaseMod.Level))
|
||||||
@ -523,9 +529,10 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int) (int, error) {
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||||
|
PlayroomMod.UnLock(int(BaseMod.Level))
|
||||||
player.PushClientRes(p.BackAsset())
|
player.PushClientRes(p.BackAsset())
|
||||||
return upLv, nil
|
return upLv, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PlayerBaseData) GetLevel() int {
|
func (p *PlayerBaseData) GetLevel() int {
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"server/GoUtil"
|
"server/GoUtil"
|
||||||
|
"server/conf"
|
||||||
mergeDataCfg "server/conf/mergeData"
|
mergeDataCfg "server/conf/mergeData"
|
||||||
orderCfg "server/conf/order"
|
orderCfg "server/conf/order"
|
||||||
"server/game/mod/item"
|
"server/game/mod/item"
|
||||||
@ -113,9 +114,9 @@ func (p *PlayerChessData) UpdateChessData(player *Player, MChessData map[string]
|
|||||||
|
|
||||||
// 检查棋子数据是否一致
|
// 检查棋子数据是否一致
|
||||||
func (p *PlayerChessData) checkChessEqual(player *Player) bool {
|
func (p *PlayerChessData) checkChessEqual(player *Player) bool {
|
||||||
// if len(p.Data.MChessData) == 0 {
|
if len(p.Data.MChessData) == 0 && conf.Server.GameName == "Merge_Pet_Local" {
|
||||||
// return true
|
return true
|
||||||
// }
|
}
|
||||||
ChessList := player.PlayMod.getChessMod().GetChessList()
|
ChessList := player.PlayMod.getChessMod().GetChessList()
|
||||||
if len(ChessList) != len(p.Data.MChessData) {
|
if len(ChessList) != len(p.Data.MChessData) {
|
||||||
return false
|
return false
|
||||||
@ -197,9 +198,9 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
|
|||||||
itemList = append(itemList, &item.Item{Id: item.ITEM_STAR_ID, Num: int(-loseGold)})
|
itemList = append(itemList, &item.Item{Id: item.ITEM_STAR_ID, Num: int(-loseGold)})
|
||||||
case msg.HANDLE_TYPE_SELL: //出售棋子
|
case msg.HANDLE_TYPE_SELL: //出售棋子
|
||||||
items, err := ChessMod.SellChess(ChessId)
|
items, err := ChessMod.SellChess(ChessId)
|
||||||
// if checkChess(ChessId, BaseMod.GetEnergyMul(), ChessMod.GetEmitList()) { // 在订单中无法生成的棋子 出售获得原价宠物币
|
if checkChess(ChessId, BaseMod.GetEnergyMul(), ChessMod.GetEmitList()) { // 在订单中无法生成的棋子 出售获得原价宠物币
|
||||||
// items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: mergeDataCfg.GetStarById(ChessId)}}
|
items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: mergeDataCfg.GetStarById(ChessId)}}
|
||||||
// }
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -241,7 +242,14 @@ func (p *PlayerChessData) ClearData() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func checkChess(ChessId, EnergyMul int, Emit []int) bool {
|
func checkChess(ChessId, EnergyMul int, Emit []int) bool {
|
||||||
|
if len(Emit) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
ChessIdLv := mergeDataCfg.GetLvById(ChessId)
|
ChessIdLv := mergeDataCfg.GetLvById(ChessId)
|
||||||
|
ChessIdType := mergeDataCfg.GetTypeById(ChessId)
|
||||||
|
if ChessIdType != "Product" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
ChessIdColor := mergeDataCfg.GetColorById(ChessId)
|
ChessIdColor := mergeDataCfg.GetColorById(ChessId)
|
||||||
if ChessIdColor == "Star" || ChessIdColor == "Energy" || ChessIdColor == "Diamond" {
|
if ChessIdColor == "Star" || ChessIdColor == "Energy" || ChessIdColor == "Diamond" {
|
||||||
return false
|
return false
|
||||||
@ -254,12 +262,9 @@ func checkChess(ChessId, EnergyMul int, Emit []int) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Min, Max := getChesslvRange(EmitId, EnergyMul)
|
_, Max := getChesslvRange(EmitId, EnergyMul)
|
||||||
Adjust := mergeDataCfg.GetAdjust(EmitId, ChessIdColor)
|
Adjust := mergeDataCfg.GetAdjust(EmitId, ChessIdColor)
|
||||||
if ChessIdLv < Min-Adjust || ChessIdLv > Max-Adjust {
|
return ChessIdLv > Max-Adjust
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getChesslvRange(Emit int, EnergyMul int) (int, int) {
|
func getChesslvRange(Emit int, EnergyMul int) (int, int) {
|
||||||
@ -275,11 +280,14 @@ func getChesslvRange(Emit int, EnergyMul int) (int, int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func triggerComposeChess(player *Player, ChessId, EnergyMul int, Emit []int) {
|
func triggerComposeChess(player *Player, ChessId, EnergyMul int, Emit []int) {
|
||||||
return //TODO 暂时不用
|
return
|
||||||
|
OrderMod := player.PlayMod.getOrderMod()
|
||||||
|
if OrderMod.Step != 12 {
|
||||||
|
return
|
||||||
|
}
|
||||||
if !checkChess(ChessId, EnergyMul, Emit) {
|
if !checkChess(ChessId, EnergyMul, Emit) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
OrderMod := player.PlayMod.getOrderMod()
|
|
||||||
OrderMod.CreateCleanOrder2([]int{ChessId})
|
OrderMod.CreateCleanOrder2([]int{ChessId})
|
||||||
player.PushClientRes(OrderMod.BackData())
|
player.PushClientRes(OrderMod.BackData())
|
||||||
}
|
}
|
||||||
|
|||||||
@ -191,28 +191,7 @@ func handle(p *Player, m *msg.Msg) error {
|
|||||||
case msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY: // # 锦标赛排名变动通知
|
case msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY: // # 锦标赛排名变动通知
|
||||||
BackChampship(p)
|
BackChampship(p)
|
||||||
case msg.HANDLE_TYPE_MAIL: // 邮件操作
|
case msg.HANDLE_TYPE_MAIL: // 邮件操作
|
||||||
MailMod := p.PlayMod.getMailMod()
|
SyncMailMsg(p)
|
||||||
if m.Extra == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
mail := m.Extra.(*ServerMail)
|
|
||||||
Now := GoUtil.Now()
|
|
||||||
if mail.Mail_type == 1 {
|
|
||||||
if mail.Start_time > 0 && mail.Start_time > Now {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if mail.End_time > 0 && mail.End_time < Now {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
MailId := MailMod.Send(mail.Title, mail.Content, mail.Items)
|
|
||||||
p.PushClientRes(MailMod.NotifyMail(MailId))
|
|
||||||
} else if mail.Mail_type == 2 {
|
|
||||||
if GoUtil.InArray(int(p.M_DwUin), mail.To_uids) {
|
|
||||||
MailId := MailMod.Send(mail.Title, mail.Content, mail.Items)
|
|
||||||
p.PushClientRes(MailMod.NotifyMail(MailId))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case msg.HANDLE_TYPE_PLAYROOM_LOSE: // # 玩家输了
|
case msg.HANDLE_TYPE_PLAYROOM_LOSE: // # 玩家输了
|
||||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||||
Items := make([]*item.Item, 0)
|
Items := make([]*item.Item, 0)
|
||||||
@ -322,6 +301,18 @@ func SyncFriendMsg(p *Player) {
|
|||||||
p.PlayMod.save()
|
p.PlayMod.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SyncMailMsg(p *Player) {
|
||||||
|
ServerMailList := G_GameLogicPtr.MailMgr.Sync(int(p.M_DwUin), p.GetPlayerBaseMod().GetRegisterTime())
|
||||||
|
MailMod := p.PlayMod.getMailMod()
|
||||||
|
for _, v := range ServerMailList {
|
||||||
|
if GoUtil.InArray(v.Id, MailMod.ServerMail) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
MailMod.ServerMail = append(MailMod.ServerMail, v.Id)
|
||||||
|
MailMod.Send(v.Title, v.Content, v.Items)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 返回好友信息
|
// 返回好友信息
|
||||||
func FriendListBackData(p *Player) {
|
func FriendListBackData(p *Player) {
|
||||||
FriendMod := p.PlayMod.getFriendMod()
|
FriendMod := p.PlayMod.getFriendMod()
|
||||||
@ -534,6 +525,12 @@ func BackChampship(p *Player) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func PlayroomOrderTrigger(p *Player) error {
|
func PlayroomOrderTrigger(p *Player) error {
|
||||||
|
CD := playroomCfg.GetTriggerCd()
|
||||||
|
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||||
|
Now := GoUtil.Now()
|
||||||
|
if PlayroomMod.TriggerTime+int64(CD) > Now {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
PlayroomUnlockLv := playroomCfg.GetUnLockLv()
|
PlayroomUnlockLv := playroomCfg.GetUnLockLv()
|
||||||
if p.GetPlayerBaseMod().GetLevel() < PlayroomUnlockLv {
|
if p.GetPlayerBaseMod().GetLevel() < PlayroomUnlockLv {
|
||||||
return nil
|
return nil
|
||||||
@ -547,7 +544,6 @@ func PlayroomOrderTrigger(p *Player) error {
|
|||||||
log.Debug("uid : %d, PlayroomOrderTrigger, err : %s", p.M_DwUin, err)
|
log.Debug("uid : %d, PlayroomOrderTrigger, err : %s", p.M_DwUin, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
|
||||||
PlayroomMod.CreateOrderReward(Star, p.PlayMod.getItemMod())
|
PlayroomMod.CreateOrderReward(Star, p.PlayMod.getItemMod())
|
||||||
PlayroomBackData(p)
|
PlayroomBackData(p)
|
||||||
p.PlayMod.save()
|
p.PlayMod.save()
|
||||||
@ -606,6 +602,7 @@ func PlayroomBackData(p *Player) {
|
|||||||
r.WorkStatus = int32(PlayroomMod.WorkStatus)
|
r.WorkStatus = int32(PlayroomMod.WorkStatus)
|
||||||
r.Playroom = GoUtil.MapIntToInt32(PlayroomMod.GetRoom())
|
r.Playroom = GoUtil.MapIntToInt32(PlayroomMod.GetRoom())
|
||||||
r.Mood = GoUtil.MapIntToInt32(PlayroomMod.GetMood())
|
r.Mood = GoUtil.MapIntToInt32(PlayroomMod.GetMood())
|
||||||
|
r.Physiology = GoUtil.MapIntToInt32(PlayroomMod.GetPhysiologyList())
|
||||||
r.AllMood = int32(PlayroomMod.AllMood)
|
r.AllMood = int32(PlayroomMod.AllMood)
|
||||||
r.Jackpot = int32(PlayroomMod.JackpotNum)
|
r.Jackpot = int32(PlayroomMod.JackpotNum)
|
||||||
p.PushClientRes(r)
|
p.PushClientRes(r)
|
||||||
|
|||||||
@ -184,10 +184,10 @@ func ReqRewardOrder(args []interface{}) error {
|
|||||||
proto.Unmarshal(buf, req)
|
proto.Unmarshal(buf, req)
|
||||||
OrderMod := player.PlayMod.getOrderMod()
|
OrderMod := player.PlayMod.getOrderMod()
|
||||||
ChessMod := player.PlayMod.getChessMod()
|
ChessMod := player.PlayMod.getChessMod()
|
||||||
|
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||||
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
|
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
|
||||||
Item, mergeList, OrderType, Star, err := OrderMod.RewardOrder(int(req.OrderId))
|
Item, mergeList, OrderType, Star, err := OrderMod.RewardOrder(int(req.OrderId))
|
||||||
if OrderType == order.Trigger_type { // playroom触发式订单获取额外道具
|
if OrderType == order.Trigger_type { // playroom触发式订单获取额外道具
|
||||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
|
||||||
Item1 := PlayroomMod.GetReward()
|
Item1 := PlayroomMod.GetReward()
|
||||||
Item = item.Merge(Item, Item1)
|
Item = item.Merge(Item, Item1)
|
||||||
P1, P2 := playroomCfg.GetPremiumItem()
|
P1, P2 := playroomCfg.GetPremiumItem()
|
||||||
@ -196,6 +196,10 @@ func ReqRewardOrder(args []interface{}) error {
|
|||||||
} else {
|
} else {
|
||||||
Star = int(math.Ceil(float64(Star) * 0.6))
|
Star = int(math.Ceil(float64(Star) * 0.6))
|
||||||
}
|
}
|
||||||
|
Target := GetVisitorPlayer(player)
|
||||||
|
PlayroomMod.Target = Target
|
||||||
|
PlayroomMod.Status = playroom.STATUS_VISIT
|
||||||
|
PlayroomBackData(player)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !OrderMod.CheckSuperOrder() {
|
if !OrderMod.CheckSuperOrder() {
|
||||||
@ -887,7 +891,7 @@ func ReqExStarReward(args []interface{}) error {
|
|||||||
func ReqAllCollectReward(args []interface{}) error {
|
func ReqAllCollectReward(args []interface{}) error {
|
||||||
_, player, _ := ParseArgs(args)
|
_, player, _ := ParseArgs(args)
|
||||||
CardMod := player.PlayMod.getCardMod()
|
CardMod := player.PlayMod.getCardMod()
|
||||||
itemList, err := CardMod.AllCollectReward()
|
itemList, itemList2, err := CardMod.AllCollectReward()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
player.SendErrClienRes(&msg.ResAllCollectReward{
|
player.SendErrClienRes(&msg.ResAllCollectReward{
|
||||||
Code: msg.RES_CODE_FAIL,
|
Code: msg.RES_CODE_FAIL,
|
||||||
@ -904,6 +908,14 @@ func ReqAllCollectReward(args []interface{}) error {
|
|||||||
})
|
})
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
err = player.HandleItem(itemList2, msg.ITEM_POP_LABEL_AllCollectRewardHB.String())
|
||||||
|
if err != nil {
|
||||||
|
player.SendErrClienRes(&msg.ResAllCollectReward{
|
||||||
|
Code: msg.RES_CODE_FAIL,
|
||||||
|
Msg: err.Error(),
|
||||||
|
})
|
||||||
|
return err
|
||||||
|
}
|
||||||
player.PlayMod.save()
|
player.PlayMod.save()
|
||||||
player.PushClientRes(CardMod.NotifyCard())
|
player.PushClientRes(CardMod.NotifyCard())
|
||||||
player.PushClientRes(&msg.ResAllCollectReward{
|
player.PushClientRes(&msg.ResAllCollectReward{
|
||||||
@ -2929,7 +2941,8 @@ func ReqPlayroomInfo(args []interface{}) error {
|
|||||||
}
|
}
|
||||||
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Targer)
|
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Targer)
|
||||||
PlayroomMod.SetTarget(Targer)
|
PlayroomMod.SetTarget(Targer)
|
||||||
if PlayerData.Loginout < GoUtil.Now()-300 { // todo DEBUG
|
if PlayerData.Loginout > 0 && PlayerData.Loginout < GoUtil.Now()-int64(playroomCfg.GetGameOutline()) { // todo DEBUG
|
||||||
|
log.Debug("ReqPlayroomInfo PlayerData.Loginout:%v, %v", PlayerData.Loginout, playroomCfg.GetGameOutline())
|
||||||
PlayroomMod.SetGameId(1)
|
PlayroomMod.SetGameId(1)
|
||||||
Star := min(500, max(PlayerData.Star/10, 10))
|
Star := min(500, max(PlayerData.Star/10, 10))
|
||||||
ChessMod := player.PlayMod.getChessMod()
|
ChessMod := player.PlayMod.getChessMod()
|
||||||
@ -2959,7 +2972,7 @@ func ReqPlayroomInfo(args []interface{}) error {
|
|||||||
PlayroomMod.SetGameId(2)
|
PlayroomMod.SetGameId(2)
|
||||||
PlayroomMod.SetGameRewardFlip(int(float64(PlayerData.Star)*0.03), int(float64(PlayerData.Star)*0.05), int(float64(PlayerData.Star)*0.1))
|
PlayroomMod.SetGameRewardFlip(int(float64(PlayerData.Star)*0.03), int(float64(PlayerData.Star)*0.05), int(float64(PlayerData.Star)*0.1))
|
||||||
}
|
}
|
||||||
|
player.PlayMod.save()
|
||||||
PlayroomVisit(player, Targer)
|
PlayroomVisit(player, Targer)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -2970,7 +2983,7 @@ func ReqPlayroomInteract(args []interface{}) error {
|
|||||||
req := &msg.ReqPlayroomInteract{}
|
req := &msg.ReqPlayroomInteract{}
|
||||||
proto.Unmarshal(buf, req)
|
proto.Unmarshal(buf, req)
|
||||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||||
Items, MoodType, err := PlayroomMod.Interact(int(req.Id), int(req.Type))
|
Items, _, err := PlayroomMod.Interact(int(req.Id), int(req.Type))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
player.SendErrClienRes(&msg.ResPlayroomInteract{
|
player.SendErrClienRes(&msg.ResPlayroomInteract{
|
||||||
Code: msg.RES_CODE_FAIL,
|
Code: msg.RES_CODE_FAIL,
|
||||||
@ -2987,7 +3000,7 @@ func ReqPlayroomInteract(args []interface{}) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
player.PlayMod.save()
|
player.PlayMod.save()
|
||||||
LimitedTimePlayroomTrigger(player, MoodType)
|
LimitedTimePlayroomTrigger(player)
|
||||||
player.PushClientRes(PlayroomMod.NotifyMood())
|
player.PushClientRes(PlayroomMod.NotifyMood())
|
||||||
player.PushClientRes(&msg.ResPlayroomInteract{
|
player.PushClientRes(&msg.ResPlayroomInteract{
|
||||||
Code: msg.RES_CODE_SUCCESS,
|
Code: msg.RES_CODE_SUCCESS,
|
||||||
|
|||||||
@ -180,3 +180,11 @@ func UnitOrder2(p *Player, Lv, EnergyMul int) float64 {
|
|||||||
}
|
}
|
||||||
return Energy / float64(5000)
|
return Energy / float64(5000)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UnitPlayroom(p *Player) error {
|
||||||
|
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||||
|
PlayroomMod.Physiology[1].Num = 10
|
||||||
|
PlayroomMod.Physiology[1].Time = 1738978968
|
||||||
|
LimitedTimePlayroomTrigger(p)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@ -3,6 +3,8 @@ package game
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"server/GoUtil"
|
"server/GoUtil"
|
||||||
|
Msg "server/game/mod/msg"
|
||||||
|
"server/gamedata"
|
||||||
"server/msg"
|
"server/msg"
|
||||||
"server/pkg/github.com/name5566/leaf/gate"
|
"server/pkg/github.com/name5566/leaf/gate"
|
||||||
"server/pkg/github.com/name5566/leaf/log"
|
"server/pkg/github.com/name5566/leaf/log"
|
||||||
@ -11,8 +13,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var AdminFuncMap = map[string]func([]interface{}) error{
|
var AdminFuncMap = map[string]func([]interface{}) error{
|
||||||
"ReqAdminInfo": AdminPlayerInfo,
|
"ReqAdminInfo": AdminPlayerInfo,
|
||||||
"ReqServerInfo": ReqServerInfo,
|
"ReqServerInfo": ReqServerInfo,
|
||||||
|
"ReqReloadServerMail": ReqReloadServerMail,
|
||||||
|
"ReqReload": ReqReload,
|
||||||
}
|
}
|
||||||
|
|
||||||
func AdminProcess(Func string, args []interface{}) {
|
func AdminProcess(Func string, args []interface{}) {
|
||||||
@ -92,3 +96,22 @@ func ReqServerInfo(args []interface{}) error {
|
|||||||
AdminPlayerBack(a, JsonBuff)
|
AdminPlayerBack(a, JsonBuff)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ReqReloadServerMail(args []interface{}) error {
|
||||||
|
G_GameLogicPtr.MailMgrCall(&Msg.Msg{Type: Msg.HANDLE_TYPE_MAIL_RELOAD})
|
||||||
|
G_GameLogicPtr.NotifyAll(&Msg.Msg{Type: Msg.HANDLE_TYPE_MAIL})
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReqReload(args []interface{}) error {
|
||||||
|
a, _ := ParseAdminArgs(args)
|
||||||
|
gamedata.Reload()
|
||||||
|
res := make(map[string]interface{})
|
||||||
|
res["Code"] = 0
|
||||||
|
JsonBuff, err := json.Marshal(res)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
AdminPlayerBack(a, JsonBuff)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package game
|
package game
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"server/GoUtil"
|
"server/GoUtil"
|
||||||
"server/MergeConst"
|
"server/MergeConst"
|
||||||
@ -80,7 +81,6 @@ func HandleClientReq(args []interface{}) {
|
|||||||
ResRegisterAccount.ResultCode = MergeConst.Protocol_Error_Account_OR_PWD_Short
|
ResRegisterAccount.ResultCode = MergeConst.Protocol_Error_Account_OR_PWD_Short
|
||||||
data, _ := proto.Marshal(ResRegisterAccount)
|
data, _ := proto.Marshal(ResRegisterAccount)
|
||||||
gl.PackResInfo(a, "ResRegisterAccount", data)
|
gl.PackResInfo(a, "ResRegisterAccount", data)
|
||||||
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
gl.Db_AccountInfo.UserName = detail.UserName
|
gl.Db_AccountInfo.UserName = detail.UserName
|
||||||
@ -160,7 +160,8 @@ func HandleClientReq(args []interface{}) {
|
|||||||
backup := p.(*Player).BackUp() // 备份当前的 Player 值
|
backup := p.(*Player).BackUp() // 备份当前的 Player 值
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
log.Debug("uid : %d, func : %s, fatal : %s", p.(*Player).M_DwUin, m.GetFunc(), r)
|
log.Error("uid : %d, func : %s, fatal : %s", p.(*Player).M_DwUin, m.GetFunc(), r)
|
||||||
|
GoUtil.SendFeishuMsg(fmt.Sprintf("uid : %d, func : %s, fatal : %s", p.(*Player).M_DwUin, m.GetFunc(), r))
|
||||||
p.(*Player).Recover(backup) //还原Player的数据
|
p.(*Player).Recover(backup) //还原Player的数据
|
||||||
}
|
}
|
||||||
p.(*Player).lock.Unlock() //解锁
|
p.(*Player).lock.Unlock() //解锁
|
||||||
|
|||||||
@ -47,7 +47,7 @@ func (b *Base) InitData(Uid int) {
|
|||||||
|
|
||||||
func (b *Base) Login() {
|
func (b *Base) Login() {
|
||||||
b.LoginTime = GoUtil.Now()
|
b.LoginTime = GoUtil.Now()
|
||||||
// b.LogoutTime = 0
|
b.LogoutTime = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Base) GetNickName() string {
|
func (b *Base) GetNickName() string {
|
||||||
@ -211,3 +211,20 @@ func (b *Base) GetEnergyByAD() ([]*item.Item, error) {
|
|||||||
b.EnergyAD += 1
|
b.EnergyAD += 1
|
||||||
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: 25}}, nil
|
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: 25}}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *Base) FormatEnergyMul(Energy int) {
|
||||||
|
for {
|
||||||
|
EnergyLimit := baseCfg.GetLimitEnergyMul(b.Level)
|
||||||
|
if EnergyLimit == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if Energy > EnergyLimit {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
b.EnergyMul--
|
||||||
|
if b.EnergyMul < 0 {
|
||||||
|
b.EnergyMul = 0
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -39,6 +39,11 @@ const (
|
|||||||
MASTER_CARD_GOLD = 7
|
MASTER_CARD_GOLD = 7
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
HANDBOOK_STATUS_IDLE = 1 // 未领取
|
||||||
|
HANDBOOK_STATUS_GET = 2 // 已领取
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
TYPE_CARD_GIVE = 1 // 请求卡牌
|
TYPE_CARD_GIVE = 1 // 请求卡牌
|
||||||
TYPE_CARD_SEND = 2 // 赠送卡牌
|
TYPE_CARD_SEND = 2 // 赠送卡牌
|
||||||
@ -101,14 +106,15 @@ func (c *CardMod) InitData() {
|
|||||||
|
|
||||||
for k := range c.CardList {
|
for k := range c.CardList {
|
||||||
if _, ok := c.Handbook[k]; !ok {
|
if _, ok := c.Handbook[k]; !ok {
|
||||||
c.Handbook[k] = 1
|
c.Handbook[k] = HANDBOOK_STATUS_IDLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CardMod) Login(ServerOpenTime int64) {
|
func (c *CardMod) Login(ServerOpenTime int64) []*item.Item {
|
||||||
Now := GoUtil.Now()
|
Now := GoUtil.Now()
|
||||||
Duration := cardCfg.GetCardDuration()
|
Duration := cardCfg.GetCardDuration()
|
||||||
|
HandbookItemNum := 0
|
||||||
if c.EndTime < Now {
|
if c.EndTime < Now {
|
||||||
c.CardList = make(map[int]int)
|
c.CardList = make(map[int]int)
|
||||||
c.ExchangeStar = 0
|
c.ExchangeStar = 0
|
||||||
@ -116,10 +122,22 @@ func (c *CardMod) Login(ServerOpenTime int64) {
|
|||||||
c.AllCollect = 0
|
c.AllCollect = 0
|
||||||
c.EndTime = 0
|
c.EndTime = 0
|
||||||
c.Round = 0
|
c.Round = 0
|
||||||
|
c.Handbook = make(map[int]int)
|
||||||
|
for k, v := range c.Handbook {
|
||||||
|
if v == HANDBOOK_STATUS_GET {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
Round := cardCfg.GetRoundById(k)
|
||||||
|
if Round < c.Round {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
HandbookItemNum += cardCfg.GetStarById(k)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if c.EndTime == 0 {
|
if c.EndTime == 0 {
|
||||||
c.EndTime = ((Now-ServerOpenTime)/Duration+1)*Duration + ServerOpenTime
|
c.EndTime = ((Now-ServerOpenTime)/Duration+1)*Duration + ServerOpenTime
|
||||||
}
|
}
|
||||||
|
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: HandbookItemNum}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CardMod) ZeroUpdate() {
|
func (c *CardMod) ZeroUpdate() {
|
||||||
@ -141,7 +159,7 @@ func (c *CardMod) AddCard(Id int) {
|
|||||||
}
|
}
|
||||||
_, ok = c.Handbook[Id]
|
_, ok = c.Handbook[Id]
|
||||||
if !ok {
|
if !ok {
|
||||||
c.Handbook[Id] = 1
|
c.Handbook[Id] = HANDBOOK_STATUS_IDLE
|
||||||
c.Cache.Handbook[Id] = 1
|
c.Cache.Handbook[Id] = 1
|
||||||
}
|
}
|
||||||
c.Cache.Card[Id]++
|
c.Cache.Card[Id]++
|
||||||
@ -267,19 +285,18 @@ func (c *CardMod) ExStarReward(Id int) ([]*item.Item, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 领取全收集奖励
|
// 领取全收集奖励
|
||||||
func (c *CardMod) AllCollectReward() ([]*item.Item, error) {
|
func (c *CardMod) AllCollectReward() ([]*item.Item, []*item.Item, error) {
|
||||||
if c.AllCollect == 1 {
|
if c.AllCollect == 1 {
|
||||||
return nil, fmt.Errorf("AllCollectReward already collect")
|
return nil, nil, fmt.Errorf("AllCollectReward already collect")
|
||||||
}
|
}
|
||||||
AllCardId := cardCfg.GetAllCardId(c.Round)
|
AllCardId := cardCfg.GetAllCardId(c.Round)
|
||||||
for _, v := range AllCardId {
|
for _, v := range AllCardId {
|
||||||
count, ok := c.CardList[v]
|
count, ok := c.CardList[v]
|
||||||
if !ok || count <= 0 {
|
if !ok || count <= 0 {
|
||||||
return nil, fmt.Errorf("card not fully collect")
|
return nil, nil, fmt.Errorf("card not fully collect")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.AllCollect = 0
|
c.AllCollect = 0
|
||||||
c.Round++
|
|
||||||
c.CollectReward = make(map[int]struct{})
|
c.CollectReward = make(map[int]struct{})
|
||||||
ExStar := 0
|
ExStar := 0
|
||||||
for k, v := range c.CardList {
|
for k, v := range c.CardList {
|
||||||
@ -290,7 +307,20 @@ func (c *CardMod) AllCollectReward() ([]*item.Item, error) {
|
|||||||
c.ExchangeStar += ExStar
|
c.ExchangeStar += ExStar
|
||||||
c.Cache.ExStar += ExStar
|
c.Cache.ExStar += ExStar
|
||||||
Item := cardCfg.GetAllCollectReward()
|
Item := cardCfg.GetAllCollectReward()
|
||||||
return Item, nil
|
HandbookItemNum := 0
|
||||||
|
for k, v := range c.Handbook {
|
||||||
|
if v == HANDBOOK_STATUS_GET {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
Round := cardCfg.GetRoundById(k)
|
||||||
|
if Round < c.Round {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
HandbookItemNum += cardCfg.GetStarById(k)
|
||||||
|
}
|
||||||
|
c.Round++
|
||||||
|
c.Handbook = make(map[int]int)
|
||||||
|
return Item, []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: HandbookItemNum}}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CardMod) ResetCardFestival() {
|
func (c *CardMod) ResetCardFestival() {
|
||||||
@ -526,12 +556,12 @@ func (c *CardMod) AddGoldTimes() {
|
|||||||
|
|
||||||
func (c *CardMod) GetHandbookReward(CardId int) ([]*item.Item, error) {
|
func (c *CardMod) GetHandbookReward(CardId int) ([]*item.Item, error) {
|
||||||
if v, ok := c.Handbook[CardId]; ok {
|
if v, ok := c.Handbook[CardId]; ok {
|
||||||
if v == 2 {
|
if v == HANDBOOK_STATUS_GET {
|
||||||
return nil, fmt.Errorf("GetHandbookReward already get")
|
return nil, fmt.Errorf("GetHandbookReward already get")
|
||||||
}
|
}
|
||||||
Star := cardCfg.GetStarById(CardId)
|
Star := cardCfg.GetStarById(CardId)
|
||||||
c.Handbook[CardId] = 2
|
c.Handbook[CardId] = HANDBOOK_STATUS_GET
|
||||||
c.Cache.Handbook[CardId] = 2
|
c.Cache.Handbook[CardId] = HANDBOOK_STATUS_GET
|
||||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, Star)}, nil
|
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, Star)}, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("GetHandbookReward not find card")
|
return nil, fmt.Errorf("GetHandbookReward not find card")
|
||||||
|
|||||||
@ -8,8 +8,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type MailMod struct {
|
type MailMod struct {
|
||||||
List map[int]*MailInfo // 邮件列表
|
List map[int]*MailInfo // 邮件列表
|
||||||
AutoId int // 自增id
|
AutoId int // 自增id
|
||||||
|
ServerMail []int
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@ -66,7 +66,9 @@ const (
|
|||||||
HANDLE_TYPE_PLAYROOM_LOSE // playroom偷取物品
|
HANDLE_TYPE_PLAYROOM_LOSE // playroom偷取物品
|
||||||
SERVER_NOON_UPDATE // 12点更新
|
SERVER_NOON_UPDATE // 12点更新
|
||||||
|
|
||||||
FRIEND_TREASURE_HANDLE //好友宝藏操作
|
FRIEND_TREASURE_HANDLE //好友宝藏操作
|
||||||
|
HANDLE_TYPE_MAIL_ADD //添加邮件
|
||||||
|
HANDLE_TYPE_MAIL_RELOAD //重新加载邮件
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@ -93,9 +93,6 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) {
|
|||||||
for _, v := range v.MergeId {
|
for _, v := range v.MergeId {
|
||||||
Star += mergeDataCfg.GetStarById(v)
|
Star += mergeDataCfg.GetStarById(v)
|
||||||
}
|
}
|
||||||
if v.Type == Trigger_type {
|
|
||||||
Star = int(float64(Star) * 0.8)
|
|
||||||
}
|
|
||||||
if v.Type == Super_type {
|
if v.Type == Super_type {
|
||||||
Items := limitedTimeEventCfg.GetSuperOrderReward(Star)
|
Items := limitedTimeEventCfg.GetSuperOrderReward(Star)
|
||||||
ItemList = append(ItemList, Items...)
|
ItemList = append(ItemList, Items...)
|
||||||
@ -453,7 +450,16 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ
|
|||||||
//额外订单补充2;当玩家的棋盘中出现三个相同的满级产物时,立刻生成一个对应的收购订单;
|
//额外订单补充2;当玩家的棋盘中出现三个相同的满级产物时,立刻生成一个对应的收购订单;
|
||||||
for k := range MaxLvChess {
|
for k := range MaxLvChess {
|
||||||
ChessNum := GoUtil.GetElemNum(ChessList, k)
|
ChessNum := GoUtil.GetElemNum(ChessList, k)
|
||||||
if ChessNum == 3 {
|
OrderChess := 0
|
||||||
|
for _, order := range o.OrderList {
|
||||||
|
for _, v := range order.MergeId {
|
||||||
|
if v == k {
|
||||||
|
OrderChess++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OrderNum := (ChessNum - OrderChess) / 3
|
||||||
|
for i := 0; i < OrderNum; i++ {
|
||||||
b1 = true
|
b1 = true
|
||||||
o.addOrder([]int{k, k, k}, DIFF_LOW, Extra_type)
|
o.addOrder([]int{k, k, k}, DIFF_LOW, Extra_type)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,6 +23,7 @@ type PlayroomMod struct {
|
|||||||
Reward []*item.Item // 奖励
|
Reward []*item.Item // 奖励
|
||||||
DayFirstT int // 每日未首次触发次数
|
DayFirstT int // 每日未首次触发次数
|
||||||
Trigger int // 未触发次数
|
Trigger int // 未触发次数
|
||||||
|
TriggerTime int64 // 触发时间
|
||||||
HasVisit map[int]int64 // 今日已拜访的玩家
|
HasVisit map[int]int64 // 今日已拜访的玩家
|
||||||
Target int // 拜访的目标
|
Target int // 拜访的目标
|
||||||
GameId int // 游戏ID
|
GameId int // 游戏ID
|
||||||
@ -38,6 +39,7 @@ type PlayroomMod struct {
|
|||||||
NoFlip int // 连续未获取最高翻牌奖励次数
|
NoFlip int // 连续未获取最高翻牌奖励次数
|
||||||
TodayFlip bool // 今日是否已获得最高档奖励
|
TodayFlip bool // 今日是否已获得最高档奖励
|
||||||
JackpotNum int // 每日转盘数量
|
JackpotNum int // 每日转盘数量
|
||||||
|
Physiology map[int]*Physiology
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -55,6 +57,12 @@ const (
|
|||||||
FLIP_TYPE_COPPER = 1 // 铜
|
FLIP_TYPE_COPPER = 1 // 铜
|
||||||
FLIP_TYPE_SILVER = 2 // 银
|
FLIP_TYPE_SILVER = 2 // 银
|
||||||
FLIP_TYPE_GOLD = 3 // 金
|
FLIP_TYPE_GOLD = 3 // 金
|
||||||
|
|
||||||
|
PHYSIOLOGY_TYPE_STROKE = 1 // 抚摸
|
||||||
|
PHYSIOLOGY_TYPE_PLAY = 2 // 玩耍
|
||||||
|
PHYSIOLOGY_TYPE_FEED = 3 // 进食
|
||||||
|
PHYSIOLOGY_TYPE_CLEAN = 4 // 清洁
|
||||||
|
PHYSIOLOGY_TYPE_TOLIET = 5 // 上厕所
|
||||||
)
|
)
|
||||||
|
|
||||||
type Mood struct {
|
type Mood struct {
|
||||||
@ -63,6 +71,12 @@ type Mood struct {
|
|||||||
Time int64
|
Time int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Physiology struct {
|
||||||
|
Id int
|
||||||
|
Num int
|
||||||
|
Time int64
|
||||||
|
}
|
||||||
|
|
||||||
type Info struct {
|
type Info struct {
|
||||||
Time int64
|
Time int64
|
||||||
Times int
|
Times int
|
||||||
@ -86,6 +100,9 @@ func (p *PlayroomMod) InitData() {
|
|||||||
if p.MoodInfo == nil {
|
if p.MoodInfo == nil {
|
||||||
p.MoodInfo = make(map[int]*Mood)
|
p.MoodInfo = make(map[int]*Mood)
|
||||||
}
|
}
|
||||||
|
if p.Physiology == nil {
|
||||||
|
p.Physiology = make(map[int]*Physiology)
|
||||||
|
}
|
||||||
if p.Reward == nil {
|
if p.Reward == nil {
|
||||||
p.Reward = make([]*item.Item, 0)
|
p.Reward = make([]*item.Item, 0)
|
||||||
}
|
}
|
||||||
@ -129,10 +146,22 @@ func (p *PlayroomMod) GetMood() map[int]int {
|
|||||||
return Mood
|
return Mood
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PlayroomMod) GetPhysiologyList() map[int]int {
|
||||||
|
Physiology := make(map[int]int)
|
||||||
|
for k, v := range p.Physiology {
|
||||||
|
Physiology[k] = v.Num
|
||||||
|
}
|
||||||
|
return Physiology
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PlayroomMod) GetMoodInfo(Id int) *Mood {
|
func (p *PlayroomMod) GetMoodInfo(Id int) *Mood {
|
||||||
return p.MoodInfo[Id]
|
return p.MoodInfo[Id]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PlayroomMod) GetPhysiology(Id int) *Physiology {
|
||||||
|
return p.Physiology[Id]
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PlayroomMod) GetCollect() map[int]int {
|
func (p *PlayroomMod) GetCollect() map[int]int {
|
||||||
return p.Collect
|
return p.Collect
|
||||||
}
|
}
|
||||||
@ -160,9 +189,6 @@ func (p *PlayroomMod) SetTarget(Target int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *PlayroomMod) SetGameId(GameId int) {
|
func (p *PlayroomMod) SetGameId(GameId int) {
|
||||||
if p.GameId != 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
p.GameId = GameId
|
p.GameId = GameId
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,54 +197,41 @@ func (p *PlayroomMod) CreateOrderReward(Star int, itemMod *item.ItemMod) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
p.Reward = make([]*item.Item, 0)
|
p.Reward = make([]*item.Item, 0)
|
||||||
var Item1, Item2 int
|
NormalFoodId, NormalCleanId := playroomCfg.GetNormalItem()
|
||||||
VisitorItem := playroomCfg.GetVisitorItem()
|
PremiumFoodId, PremiumCleanId := playroomCfg.GetPremiumItem()
|
||||||
if Star < playroomCfg.GetOrderStar() {
|
|
||||||
Item1, Item2 = playroomCfg.GetNormalItem()
|
|
||||||
} else {
|
|
||||||
Item1, Item2 = playroomCfg.GetPremiumItem()
|
|
||||||
}
|
|
||||||
|
|
||||||
Item1Num := itemMod.GetItem(Item1)
|
NormalFoodNum := itemMod.GetItem(NormalFoodId)
|
||||||
Item2Num := itemMod.GetItem(Item2)
|
NormalCleanNum := itemMod.GetItem(NormalCleanId)
|
||||||
if p.DayFirstT == 2 {
|
|
||||||
p.Reward = append(p.Reward, &item.Item{Id: VisitorItem, Num: 1})
|
PremiumFoodNum := itemMod.GetItem(PremiumFoodId)
|
||||||
|
PremiumCleanNum := itemMod.GetItem(PremiumCleanId)
|
||||||
|
p.TriggerTime = GoUtil.Now()
|
||||||
|
if NormalFoodNum == 0 {
|
||||||
|
p.Reward = append(p.Reward, &item.Item{Id: NormalFoodId, Num: 1})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if p.Trigger == 4 {
|
if NormalCleanNum == 0 {
|
||||||
p.Reward = append(p.Reward, &item.Item{Id: VisitorItem, Num: 1})
|
p.Reward = append(p.Reward, &item.Item{Id: NormalCleanId, Num: 1})
|
||||||
p.Trigger = 0
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if Item1Num == 0 && Item2Num == 0 {
|
if PremiumFoodNum == 0 {
|
||||||
Prob := GoUtil.RandSlice([]int{Item1, Item2})
|
p.Reward = append(p.Reward, &item.Item{Id: PremiumFoodId, Num: 1})
|
||||||
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
|
|
||||||
p.DayFirstT++
|
|
||||||
p.Trigger++
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if math.Abs(float64(Item1Num-Item2Num)) > 3 {
|
if PremiumCleanNum == 0 {
|
||||||
RI := GoUtil.IfTrue(Item1Num > Item2Num, Item2, Item1).(int)
|
p.Reward = append(p.Reward, &item.Item{Id: PremiumCleanId, Num: 1})
|
||||||
p.Reward = append(p.Reward, &item.Item{Id: RI, Num: 1})
|
|
||||||
p.DayFirstT++
|
|
||||||
p.Trigger++
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var RandSlice []int
|
var RandSlice []int
|
||||||
if Star < playroomCfg.GetOrderStar() {
|
if math.Abs(float64((NormalCleanNum+PremiumCleanNum)-(NormalFoodNum+PremiumFoodNum))) > 3 {
|
||||||
RandSlice = []int{Item1, Item2}
|
RandSlice := GoUtil.IfTrue((NormalCleanNum+PremiumCleanNum) > (NormalFoodNum+PremiumFoodNum), []int{PremiumCleanId, NormalCleanId}, []int{NormalFoodId, PremiumFoodId}).([]int)
|
||||||
} else {
|
Prob := GoUtil.RandSlice(RandSlice)
|
||||||
RandSlice = []int{Item1, Item2, VisitorItem}
|
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
RandSlice = []int{NormalFoodId, NormalCleanId, PremiumFoodId, PremiumCleanId}
|
||||||
Prob := GoUtil.RandSlice(RandSlice)
|
Prob := GoUtil.RandSlice(RandSlice)
|
||||||
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
|
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
|
||||||
if Prob == VisitorItem {
|
|
||||||
p.DayFirstT = 3
|
|
||||||
p.Trigger = 0
|
|
||||||
} else {
|
|
||||||
p.DayFirstT++
|
|
||||||
p.Trigger++
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PlayroomMod) GetReward() []*item.Item {
|
func (p *PlayroomMod) GetReward() []*item.Item {
|
||||||
@ -233,6 +246,8 @@ func (p *PlayroomMod) Interact(Id, Type int) ([]*item.Item, int, error) {
|
|||||||
if Effect > 0 {
|
if Effect > 0 {
|
||||||
p.AllMood = min(100, p.AllMood+10)
|
p.AllMood = min(100, p.AllMood+10)
|
||||||
}
|
}
|
||||||
|
PType, PEffect := playroomCfg.GetInteractPhysiology(Id)
|
||||||
|
p.AddPhysiology(PType, PEffect)
|
||||||
p.AddMood(MoodType, Effect)
|
p.AddMood(MoodType, Effect)
|
||||||
return ItemList, MoodType, nil
|
return ItemList, MoodType, nil
|
||||||
}
|
}
|
||||||
@ -251,6 +266,21 @@ func (p *PlayroomMod) AddMood(Id, Num int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PlayroomMod) AddPhysiology(Id, Num int) {
|
||||||
|
Phy := p.GetPhysiology(Id)
|
||||||
|
if Phy == nil {
|
||||||
|
Phy = &Physiology{Id: Id, Num: 0, Time: 0}
|
||||||
|
}
|
||||||
|
Max := playroomCfg.GetPhysiologyMax(Id)
|
||||||
|
Phy.Num = max(0, min(Phy.Num+Num, Max))
|
||||||
|
if Phy.Num != 0 && Phy.Time == 0 {
|
||||||
|
Phy.Time = GoUtil.Now()
|
||||||
|
}
|
||||||
|
if Phy.Num == 0 {
|
||||||
|
Phy.Time = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PlayroomMod) AddVisitor(Id int, Time int64) {
|
func (p *PlayroomMod) AddVisitor(Id int, Time int64) {
|
||||||
v, ok := p.Visitor[Id]
|
v, ok := p.Visitor[Id]
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -381,8 +411,9 @@ func (p *PlayroomMod) NotifyMood() *msg.NotifyPlayroomMood {
|
|||||||
Mood[int32(k)] = int32(v.Num)
|
Mood[int32(k)] = int32(v.Num)
|
||||||
}
|
}
|
||||||
return &msg.NotifyPlayroomMood{
|
return &msg.NotifyPlayroomMood{
|
||||||
AllMood: int32(p.AllMood),
|
AllMood: int32(p.AllMood),
|
||||||
Mood: Mood,
|
Mood: Mood,
|
||||||
|
Physiology: GoUtil.MapIntToInt32(p.GetPhysiologyList()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -466,3 +497,24 @@ func (p *PlayroomMod) GetFlipReward() ([]*item.Item, error) {
|
|||||||
func (p *PlayroomMod) BuyItem(Id int) ([]*item.Item, []*item.Item) {
|
func (p *PlayroomMod) BuyItem(Id int) ([]*item.Item, []*item.Item) {
|
||||||
return playroomCfg.GetBuyItem(Id)
|
return playroomCfg.GetBuyItem(Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PlayroomMod) UnLock(Lv int) {
|
||||||
|
UnlockLv := playroomCfg.GetUnLockLv()
|
||||||
|
if Lv < UnlockLv {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(p.Physiology) == 0 {
|
||||||
|
Now := GoUtil.Now()
|
||||||
|
p.Physiology = make(map[int]*Physiology)
|
||||||
|
for k := 1; k <= 5; k++ {
|
||||||
|
Max := playroomCfg.GetPhysiologyMax(k)
|
||||||
|
p.Physiology[k] = &Physiology{Id: k, Num: Max, Time: Now}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(p.MoodInfo) == 0 {
|
||||||
|
p.MoodInfo = make(map[int]*Mood)
|
||||||
|
for k := 1; k <= 3; k++ {
|
||||||
|
p.MoodInfo[k] = &Mood{Id: k, Num: 100}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
BIN
src/server/gamedata/config/user.info
Normal file
BIN
src/server/gamedata/config/user.info
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user