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))
|
||||
}
|
||||
|
||||
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 {
|
||||
var ret []int
|
||||
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
|
||||
}
|
||||
|
||||
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")
|
||||
}
|
||||
|
||||
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 {
|
||||
data, err := gamedata.GetDataByIntKey(CARD_PACK_CFG_NAME, Star)
|
||||
|
||||
@ -10,12 +10,16 @@ const (
|
||||
CFG_PLAYROOM_CONST = "PlayroomConst"
|
||||
CFG_PLAYROOM_DECORATE = "PlayroomDecorate"
|
||||
CFG_PLAYROOM_MOOD = "PlayroomMood"
|
||||
CFG_PLAYROOM_PHYSIOLOGY = "PlayroomPhysiology"
|
||||
CFG_PLAYROOM_PHYSIOLOGY_TYPE = "PlayroomPhysiologyType"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gamedata.InitCfg(CFG_PLAYROOM_CONST)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_DECORATE)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_MOOD)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY_TYPE)
|
||||
}
|
||||
|
||||
func GetUnLockLv() int {
|
||||
@ -26,6 +30,14 @@ func GetUnLockLv() int {
|
||||
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 {
|
||||
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Star")
|
||||
if err != nil {
|
||||
@ -42,6 +54,14 @@ func GetRewardStar() int {
|
||||
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) {
|
||||
data1, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "NormalFoodId")
|
||||
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")
|
||||
}
|
||||
|
||||
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 {
|
||||
r := make([]int, 0)
|
||||
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")
|
||||
}
|
||||
|
||||
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",
|
||||
"ServerStatus" : 1,
|
||||
"ServerCenter" : 1,
|
||||
|
||||
"GameConfPath": "F:/Github/pet_home_server/src/server/gamedata/config/",
|
||||
|
||||
"RedisAddr":"127.0.0.1",
|
||||
"RedisPort" :"6379",
|
||||
|
||||
@ -481,6 +481,7 @@ type SqlServerMailStruct struct {
|
||||
End_time int64 `db:"end_time"`
|
||||
Mail_type int `db:"mail_type"`
|
||||
To_uids string `db:"to_uids"`
|
||||
CreateTime int64 `db:"create_time"`
|
||||
}
|
||||
|
||||
type SqlChargeOrderStruct struct {
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
"os"
|
||||
"server/GoUtil"
|
||||
"server/conf"
|
||||
cardCfg "server/conf/card"
|
||||
@ -169,6 +171,11 @@ func ReqGmCommand(args []interface{}) error {
|
||||
OrderMod.EimtOrder = make(map[string]struct{})
|
||||
HandbookMod := player.PlayMod.getHandbookMod()
|
||||
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":
|
||||
MiningMod := player.PlayMod.getMiningMod()
|
||||
MiningMod.ZeroUpdate(-1)
|
||||
@ -247,6 +254,34 @@ func ReqGmCommand(args []interface{}) error {
|
||||
case "resetCardSeasonFirst":
|
||||
CardMod := player.PlayMod.getCardMod()
|
||||
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()
|
||||
return nil
|
||||
|
||||
@ -5,11 +5,13 @@ import (
|
||||
"math"
|
||||
"server/GoUtil"
|
||||
baseCfg "server/conf/base"
|
||||
playroomCfg "server/conf/playroom"
|
||||
userCfg "server/conf/user"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/item"
|
||||
"server/game/mod/limitedTimeEvent"
|
||||
MsgMod "server/game/mod/msg" // Ensure this package exists and is correctly referenced
|
||||
"server/game/mod/playroom"
|
||||
"server/msg"
|
||||
"time"
|
||||
)
|
||||
@ -137,17 +139,34 @@ func LimitedTimeCardTrigger(p *Player) {
|
||||
}, "LimitedTimeCard")
|
||||
}
|
||||
}
|
||||
|
||||
func LimitedTimePlayroomTrigger(p *Player, Id int) {
|
||||
func LimitedTimePlayroomTrigger(p *Player) {
|
||||
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()
|
||||
Now := GoUtil.Now()
|
||||
MoodInfo := PlayroomMod.GetMoodInfo(Id)
|
||||
if MoodInfo == nil {
|
||||
Physiology := PlayroomMod.GetPhysiology(Id)
|
||||
if Physiology == nil {
|
||||
return
|
||||
}
|
||||
NewTime, Num := GoUtil.PlayroomTrigger(MoodInfo.Time, MoodInfo.Num)
|
||||
MoodInfo.Time = NewTime
|
||||
MoodInfo.Num = Num
|
||||
NewTime, Num := PlayroomTrigger(Physiology.Id, Physiology.Time, Physiology.Num)
|
||||
Physiology.Time = NewTime
|
||||
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()
|
||||
PlayroomBackData(p)
|
||||
NextSecond := NewTime - Now
|
||||
@ -155,12 +174,42 @@ func LimitedTimePlayroomTrigger(p *Player, Id int) {
|
||||
p.CallEvent(time.Duration(NextSecond)*time.Second, func() {
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
LimitedTimePlayroomTrigger(p, Id)
|
||||
LimitedTimePlayroomTrigger_(p, Id)
|
||||
p.SendClientRes()
|
||||
}, 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) {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
EndTime := PlayroomMod.Endtime
|
||||
|
||||
@ -9,6 +9,11 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
MAIL_TYPE_SERVER = 1
|
||||
MAIL_TYPE_USER = 2
|
||||
)
|
||||
|
||||
type MailMgr struct {
|
||||
*ServerMod
|
||||
list map[int]*ServerMail
|
||||
@ -38,10 +43,18 @@ func (m *MailMgr) Init() {
|
||||
m.list = make(map[int]*ServerMail)
|
||||
// 注册处理函数
|
||||
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)
|
||||
db.GetServerMailData(&data)
|
||||
@ -65,8 +78,30 @@ func (r *MailMgr) LoadMail() {
|
||||
To_uids: Uids,
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (r *MailMgr) Sync() {
|
||||
G_GameLogicPtr.NotifyAll(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL, Extra: r.list[1]})
|
||||
func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail {
|
||||
// 同步邮件
|
||||
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)
|
||||
// 猪猪银行触发
|
||||
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()
|
||||
// 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()
|
||||
p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
|
||||
if p.PlayerBaseMod.Data.UserName == "388faebe29ffe56666a04ea22b902b0f" {
|
||||
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)
|
||||
}
|
||||
HandbookItem := p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
|
||||
p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String())
|
||||
}
|
||||
|
||||
func (p *Player) Outline() {
|
||||
@ -379,6 +365,7 @@ func (p *Player) Outline() {
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
BaseMod.Outline(int(Cacumulative))
|
||||
p.PlayMod.save()
|
||||
p.UpdateUserInfo()
|
||||
}
|
||||
|
||||
// 离线 保存数据
|
||||
@ -739,6 +726,7 @@ func (p *Player) GetSimpleData(Uid int, simple *PlayerSimpleData) error {
|
||||
func (p *Player) UpdateUserInfo() {
|
||||
simple := &PlayerSimpleData{}
|
||||
Base := p.GetPlayerBaseMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
simple.Name = p.PlayMod.getBaseMod().NickName
|
||||
simple.Avatar = p.PlayMod.getAvatarMod().SetId
|
||||
simple.Uid = int(p.M_DwUin)
|
||||
@ -746,8 +734,8 @@ func (p *Player) UpdateUserInfo() {
|
||||
simple.Face = p.PlayMod.getFaceMod().SetId
|
||||
simple.Level = p.GetPlayerBaseMod().GetLevel()
|
||||
simple.Decorate = p.PlayMod.getDecorateMod().DecorateNum
|
||||
simple.Login = int64(Base.Data.LoginTime)
|
||||
simple.Loginout = int64(Base.Data.LogoutTime)
|
||||
simple.Login = int64(BaseMod.LoginTime)
|
||||
simple.Loginout = int64(BaseMod.LogoutTime)
|
||||
simple.FaceBook = Base.Data.FaceBookId
|
||||
simple.FaceBookPic = p.PlayMod.getBaseMod().FacebookUrl
|
||||
simple.Playroom = p.PlayMod.getPlayroomMod().Room
|
||||
|
||||
@ -426,6 +426,10 @@ func (p *PlayerBaseData) ClearData() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (p *PlayerBaseData) GetRegisterTime() int64 {
|
||||
return int64(p.Data.Rolecreatetime)
|
||||
}
|
||||
|
||||
// 增加减少体力
|
||||
func (p *PlayerBaseData) AddEnergy(player *Player, cnt int) error {
|
||||
BaseMod := p.p.PlayMod.getBaseMod()
|
||||
@ -435,6 +439,8 @@ func (p *PlayerBaseData) AddEnergy(player *Player, cnt int) error {
|
||||
}
|
||||
if cnt < 0 {
|
||||
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() {
|
||||
Recover := userCfg.GetRecover(int(BaseMod.Level))
|
||||
@ -523,9 +529,10 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int) (int, error) {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.UnLock(int(BaseMod.Level))
|
||||
player.PushClientRes(p.BackAsset())
|
||||
return upLv, nil
|
||||
|
||||
}
|
||||
|
||||
func (p *PlayerBaseData) GetLevel() int {
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"math"
|
||||
"server/GoUtil"
|
||||
"server/conf"
|
||||
mergeDataCfg "server/conf/mergeData"
|
||||
orderCfg "server/conf/order"
|
||||
"server/game/mod/item"
|
||||
@ -113,9 +114,9 @@ func (p *PlayerChessData) UpdateChessData(player *Player, MChessData map[string]
|
||||
|
||||
// 检查棋子数据是否一致
|
||||
func (p *PlayerChessData) checkChessEqual(player *Player) bool {
|
||||
// if len(p.Data.MChessData) == 0 {
|
||||
// return true
|
||||
// }
|
||||
if len(p.Data.MChessData) == 0 && conf.Server.GameName == "Merge_Pet_Local" {
|
||||
return true
|
||||
}
|
||||
ChessList := player.PlayMod.getChessMod().GetChessList()
|
||||
if len(ChessList) != len(p.Data.MChessData) {
|
||||
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)})
|
||||
case msg.HANDLE_TYPE_SELL: //出售棋子
|
||||
items, err := ChessMod.SellChess(ChessId)
|
||||
// if checkChess(ChessId, BaseMod.GetEnergyMul(), ChessMod.GetEmitList()) { // 在订单中无法生成的棋子 出售获得原价宠物币
|
||||
// items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: mergeDataCfg.GetStarById(ChessId)}}
|
||||
// }
|
||||
if checkChess(ChessId, BaseMod.GetEnergyMul(), ChessMod.GetEmitList()) { // 在订单中无法生成的棋子 出售获得原价宠物币
|
||||
items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: mergeDataCfg.GetStarById(ChessId)}}
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -241,7 +242,14 @@ func (p *PlayerChessData) ClearData() bool {
|
||||
}
|
||||
|
||||
func checkChess(ChessId, EnergyMul int, Emit []int) bool {
|
||||
if len(Emit) == 0 {
|
||||
return false
|
||||
}
|
||||
ChessIdLv := mergeDataCfg.GetLvById(ChessId)
|
||||
ChessIdType := mergeDataCfg.GetTypeById(ChessId)
|
||||
if ChessIdType != "Product" {
|
||||
return false
|
||||
}
|
||||
ChessIdColor := mergeDataCfg.GetColorById(ChessId)
|
||||
if ChessIdColor == "Star" || ChessIdColor == "Energy" || ChessIdColor == "Diamond" {
|
||||
return false
|
||||
@ -254,12 +262,9 @@ func checkChess(ChessId, EnergyMul int, Emit []int) bool {
|
||||
break
|
||||
}
|
||||
}
|
||||
Min, Max := getChesslvRange(EmitId, EnergyMul)
|
||||
_, Max := getChesslvRange(EmitId, EnergyMul)
|
||||
Adjust := mergeDataCfg.GetAdjust(EmitId, ChessIdColor)
|
||||
if ChessIdLv < Min-Adjust || ChessIdLv > Max-Adjust {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
return ChessIdLv > Max-Adjust
|
||||
}
|
||||
|
||||
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) {
|
||||
return //TODO 暂时不用
|
||||
return
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
if OrderMod.Step != 12 {
|
||||
return
|
||||
}
|
||||
if !checkChess(ChessId, EnergyMul, Emit) {
|
||||
return
|
||||
}
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
OrderMod.CreateCleanOrder2([]int{ChessId})
|
||||
player.PushClientRes(OrderMod.BackData())
|
||||
}
|
||||
|
||||
@ -191,28 +191,7 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
case msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY: // # 锦标赛排名变动通知
|
||||
BackChampship(p)
|
||||
case msg.HANDLE_TYPE_MAIL: // 邮件操作
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
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))
|
||||
}
|
||||
}
|
||||
SyncMailMsg(p)
|
||||
case msg.HANDLE_TYPE_PLAYROOM_LOSE: // # 玩家输了
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
Items := make([]*item.Item, 0)
|
||||
@ -322,6 +301,18 @@ func SyncFriendMsg(p *Player) {
|
||||
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) {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
@ -534,6 +525,12 @@ func BackChampship(p *Player) {
|
||||
}
|
||||
|
||||
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()
|
||||
if p.GetPlayerBaseMod().GetLevel() < PlayroomUnlockLv {
|
||||
return nil
|
||||
@ -547,7 +544,6 @@ func PlayroomOrderTrigger(p *Player) error {
|
||||
log.Debug("uid : %d, PlayroomOrderTrigger, err : %s", p.M_DwUin, err)
|
||||
return err
|
||||
}
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.CreateOrderReward(Star, p.PlayMod.getItemMod())
|
||||
PlayroomBackData(p)
|
||||
p.PlayMod.save()
|
||||
@ -606,6 +602,7 @@ func PlayroomBackData(p *Player) {
|
||||
r.WorkStatus = int32(PlayroomMod.WorkStatus)
|
||||
r.Playroom = GoUtil.MapIntToInt32(PlayroomMod.GetRoom())
|
||||
r.Mood = GoUtil.MapIntToInt32(PlayroomMod.GetMood())
|
||||
r.Physiology = GoUtil.MapIntToInt32(PlayroomMod.GetPhysiologyList())
|
||||
r.AllMood = int32(PlayroomMod.AllMood)
|
||||
r.Jackpot = int32(PlayroomMod.JackpotNum)
|
||||
p.PushClientRes(r)
|
||||
|
||||
@ -184,10 +184,10 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
proto.Unmarshal(buf, req)
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
ChessMod := player.PlayMod.getChessMod()
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
|
||||
Item, mergeList, OrderType, Star, err := OrderMod.RewardOrder(int(req.OrderId))
|
||||
if OrderType == order.Trigger_type { // playroom触发式订单获取额外道具
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
Item1 := PlayroomMod.GetReward()
|
||||
Item = item.Merge(Item, Item1)
|
||||
P1, P2 := playroomCfg.GetPremiumItem()
|
||||
@ -196,6 +196,10 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
} else {
|
||||
Star = int(math.Ceil(float64(Star) * 0.6))
|
||||
}
|
||||
Target := GetVisitorPlayer(player)
|
||||
PlayroomMod.Target = Target
|
||||
PlayroomMod.Status = playroom.STATUS_VISIT
|
||||
PlayroomBackData(player)
|
||||
}
|
||||
|
||||
if !OrderMod.CheckSuperOrder() {
|
||||
@ -887,7 +891,7 @@ func ReqExStarReward(args []interface{}) error {
|
||||
func ReqAllCollectReward(args []interface{}) error {
|
||||
_, player, _ := ParseArgs(args)
|
||||
CardMod := player.PlayMod.getCardMod()
|
||||
itemList, err := CardMod.AllCollectReward()
|
||||
itemList, itemList2, err := CardMod.AllCollectReward()
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResAllCollectReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -904,6 +908,14 @@ func ReqAllCollectReward(args []interface{}) error {
|
||||
})
|
||||
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.PushClientRes(CardMod.NotifyCard())
|
||||
player.PushClientRes(&msg.ResAllCollectReward{
|
||||
@ -2929,7 +2941,8 @@ func ReqPlayroomInfo(args []interface{}) error {
|
||||
}
|
||||
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(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)
|
||||
Star := min(500, max(PlayerData.Star/10, 10))
|
||||
ChessMod := player.PlayMod.getChessMod()
|
||||
@ -2959,7 +2972,7 @@ func ReqPlayroomInfo(args []interface{}) error {
|
||||
PlayroomMod.SetGameId(2)
|
||||
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)
|
||||
return nil
|
||||
}
|
||||
@ -2970,7 +2983,7 @@ func ReqPlayroomInteract(args []interface{}) error {
|
||||
req := &msg.ReqPlayroomInteract{}
|
||||
proto.Unmarshal(buf, req)
|
||||
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 {
|
||||
player.SendErrClienRes(&msg.ResPlayroomInteract{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -2987,7 +3000,7 @@ func ReqPlayroomInteract(args []interface{}) error {
|
||||
return err
|
||||
}
|
||||
player.PlayMod.save()
|
||||
LimitedTimePlayroomTrigger(player, MoodType)
|
||||
LimitedTimePlayroomTrigger(player)
|
||||
player.PushClientRes(PlayroomMod.NotifyMood())
|
||||
player.PushClientRes(&msg.ResPlayroomInteract{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
|
||||
@ -180,3 +180,11 @@ func UnitOrder2(p *Player, Lv, EnergyMul int) float64 {
|
||||
}
|
||||
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 (
|
||||
"encoding/json"
|
||||
"server/GoUtil"
|
||||
Msg "server/game/mod/msg"
|
||||
"server/gamedata"
|
||||
"server/msg"
|
||||
"server/pkg/github.com/name5566/leaf/gate"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
@ -13,6 +15,8 @@ import (
|
||||
var AdminFuncMap = map[string]func([]interface{}) error{
|
||||
"ReqAdminInfo": AdminPlayerInfo,
|
||||
"ReqServerInfo": ReqServerInfo,
|
||||
"ReqReloadServerMail": ReqReloadServerMail,
|
||||
"ReqReload": ReqReload,
|
||||
}
|
||||
|
||||
func AdminProcess(Func string, args []interface{}) {
|
||||
@ -92,3 +96,22 @@ func ReqServerInfo(args []interface{}) error {
|
||||
AdminPlayerBack(a, JsonBuff)
|
||||
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
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"server/GoUtil"
|
||||
"server/MergeConst"
|
||||
@ -80,7 +81,6 @@ func HandleClientReq(args []interface{}) {
|
||||
ResRegisterAccount.ResultCode = MergeConst.Protocol_Error_Account_OR_PWD_Short
|
||||
data, _ := proto.Marshal(ResRegisterAccount)
|
||||
gl.PackResInfo(a, "ResRegisterAccount", data)
|
||||
|
||||
break
|
||||
}
|
||||
gl.Db_AccountInfo.UserName = detail.UserName
|
||||
@ -160,7 +160,8 @@ func HandleClientReq(args []interface{}) {
|
||||
backup := p.(*Player).BackUp() // 备份当前的 Player 值
|
||||
defer func() {
|
||||
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).lock.Unlock() //解锁
|
||||
|
||||
@ -47,7 +47,7 @@ func (b *Base) InitData(Uid int) {
|
||||
|
||||
func (b *Base) Login() {
|
||||
b.LoginTime = GoUtil.Now()
|
||||
// b.LogoutTime = 0
|
||||
b.LogoutTime = 0
|
||||
}
|
||||
|
||||
func (b *Base) GetNickName() string {
|
||||
@ -211,3 +211,20 @@ func (b *Base) GetEnergyByAD() ([]*item.Item, error) {
|
||||
b.EnergyAD += 1
|
||||
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
|
||||
)
|
||||
|
||||
const (
|
||||
HANDBOOK_STATUS_IDLE = 1 // 未领取
|
||||
HANDBOOK_STATUS_GET = 2 // 已领取
|
||||
)
|
||||
|
||||
const (
|
||||
TYPE_CARD_GIVE = 1 // 请求卡牌
|
||||
TYPE_CARD_SEND = 2 // 赠送卡牌
|
||||
@ -101,14 +106,15 @@ func (c *CardMod) InitData() {
|
||||
|
||||
for k := range c.CardList {
|
||||
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()
|
||||
Duration := cardCfg.GetCardDuration()
|
||||
HandbookItemNum := 0
|
||||
if c.EndTime < Now {
|
||||
c.CardList = make(map[int]int)
|
||||
c.ExchangeStar = 0
|
||||
@ -116,10 +122,22 @@ func (c *CardMod) Login(ServerOpenTime int64) {
|
||||
c.AllCollect = 0
|
||||
c.EndTime = 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 {
|
||||
c.EndTime = ((Now-ServerOpenTime)/Duration+1)*Duration + ServerOpenTime
|
||||
}
|
||||
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: HandbookItemNum}}
|
||||
}
|
||||
|
||||
func (c *CardMod) ZeroUpdate() {
|
||||
@ -141,7 +159,7 @@ func (c *CardMod) AddCard(Id int) {
|
||||
}
|
||||
_, ok = c.Handbook[Id]
|
||||
if !ok {
|
||||
c.Handbook[Id] = 1
|
||||
c.Handbook[Id] = HANDBOOK_STATUS_IDLE
|
||||
c.Cache.Handbook[Id] = 1
|
||||
}
|
||||
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 {
|
||||
return nil, fmt.Errorf("AllCollectReward already collect")
|
||||
return nil, nil, fmt.Errorf("AllCollectReward already collect")
|
||||
}
|
||||
AllCardId := cardCfg.GetAllCardId(c.Round)
|
||||
for _, v := range AllCardId {
|
||||
count, ok := c.CardList[v]
|
||||
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.Round++
|
||||
c.CollectReward = make(map[int]struct{})
|
||||
ExStar := 0
|
||||
for k, v := range c.CardList {
|
||||
@ -290,7 +307,20 @@ func (c *CardMod) AllCollectReward() ([]*item.Item, error) {
|
||||
c.ExchangeStar += ExStar
|
||||
c.Cache.ExStar += ExStar
|
||||
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() {
|
||||
@ -526,12 +556,12 @@ func (c *CardMod) AddGoldTimes() {
|
||||
|
||||
func (c *CardMod) GetHandbookReward(CardId int) ([]*item.Item, error) {
|
||||
if v, ok := c.Handbook[CardId]; ok {
|
||||
if v == 2 {
|
||||
if v == HANDBOOK_STATUS_GET {
|
||||
return nil, fmt.Errorf("GetHandbookReward already get")
|
||||
}
|
||||
Star := cardCfg.GetStarById(CardId)
|
||||
c.Handbook[CardId] = 2
|
||||
c.Cache.Handbook[CardId] = 2
|
||||
c.Handbook[CardId] = HANDBOOK_STATUS_GET
|
||||
c.Cache.Handbook[CardId] = HANDBOOK_STATUS_GET
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, Star)}, nil
|
||||
}
|
||||
return nil, fmt.Errorf("GetHandbookReward not find card")
|
||||
|
||||
@ -10,6 +10,7 @@ import (
|
||||
type MailMod struct {
|
||||
List map[int]*MailInfo // 邮件列表
|
||||
AutoId int // 自增id
|
||||
ServerMail []int
|
||||
}
|
||||
|
||||
const (
|
||||
|
||||
@ -67,6 +67,8 @@ const (
|
||||
SERVER_NOON_UPDATE // 12点更新
|
||||
|
||||
FRIEND_TREASURE_HANDLE //好友宝藏操作
|
||||
HANDLE_TYPE_MAIL_ADD //添加邮件
|
||||
HANDLE_TYPE_MAIL_RELOAD //重新加载邮件
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@ -93,9 +93,6 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) {
|
||||
for _, v := range v.MergeId {
|
||||
Star += mergeDataCfg.GetStarById(v)
|
||||
}
|
||||
if v.Type == Trigger_type {
|
||||
Star = int(float64(Star) * 0.8)
|
||||
}
|
||||
if v.Type == Super_type {
|
||||
Items := limitedTimeEventCfg.GetSuperOrderReward(Star)
|
||||
ItemList = append(ItemList, Items...)
|
||||
@ -453,7 +450,16 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ
|
||||
//额外订单补充2;当玩家的棋盘中出现三个相同的满级产物时,立刻生成一个对应的收购订单;
|
||||
for k := range MaxLvChess {
|
||||
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
|
||||
o.addOrder([]int{k, k, k}, DIFF_LOW, Extra_type)
|
||||
}
|
||||
|
||||
@ -23,6 +23,7 @@ type PlayroomMod struct {
|
||||
Reward []*item.Item // 奖励
|
||||
DayFirstT int // 每日未首次触发次数
|
||||
Trigger int // 未触发次数
|
||||
TriggerTime int64 // 触发时间
|
||||
HasVisit map[int]int64 // 今日已拜访的玩家
|
||||
Target int // 拜访的目标
|
||||
GameId int // 游戏ID
|
||||
@ -38,6 +39,7 @@ type PlayroomMod struct {
|
||||
NoFlip int // 连续未获取最高翻牌奖励次数
|
||||
TodayFlip bool // 今日是否已获得最高档奖励
|
||||
JackpotNum int // 每日转盘数量
|
||||
Physiology map[int]*Physiology
|
||||
}
|
||||
|
||||
const (
|
||||
@ -55,6 +57,12 @@ const (
|
||||
FLIP_TYPE_COPPER = 1 // 铜
|
||||
FLIP_TYPE_SILVER = 2 // 银
|
||||
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 {
|
||||
@ -63,6 +71,12 @@ type Mood struct {
|
||||
Time int64
|
||||
}
|
||||
|
||||
type Physiology struct {
|
||||
Id int
|
||||
Num int
|
||||
Time int64
|
||||
}
|
||||
|
||||
type Info struct {
|
||||
Time int64
|
||||
Times int
|
||||
@ -86,6 +100,9 @@ func (p *PlayroomMod) InitData() {
|
||||
if p.MoodInfo == nil {
|
||||
p.MoodInfo = make(map[int]*Mood)
|
||||
}
|
||||
if p.Physiology == nil {
|
||||
p.Physiology = make(map[int]*Physiology)
|
||||
}
|
||||
if p.Reward == nil {
|
||||
p.Reward = make([]*item.Item, 0)
|
||||
}
|
||||
@ -129,10 +146,22 @@ func (p *PlayroomMod) GetMood() map[int]int {
|
||||
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 {
|
||||
return p.MoodInfo[Id]
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) GetPhysiology(Id int) *Physiology {
|
||||
return p.Physiology[Id]
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) GetCollect() map[int]int {
|
||||
return p.Collect
|
||||
}
|
||||
@ -160,9 +189,6 @@ func (p *PlayroomMod) SetTarget(Target int) {
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) SetGameId(GameId int) {
|
||||
if p.GameId != 0 {
|
||||
return
|
||||
}
|
||||
p.GameId = GameId
|
||||
}
|
||||
|
||||
@ -171,54 +197,41 @@ func (p *PlayroomMod) CreateOrderReward(Star int, itemMod *item.ItemMod) {
|
||||
return
|
||||
}
|
||||
p.Reward = make([]*item.Item, 0)
|
||||
var Item1, Item2 int
|
||||
VisitorItem := playroomCfg.GetVisitorItem()
|
||||
if Star < playroomCfg.GetOrderStar() {
|
||||
Item1, Item2 = playroomCfg.GetNormalItem()
|
||||
} else {
|
||||
Item1, Item2 = playroomCfg.GetPremiumItem()
|
||||
}
|
||||
NormalFoodId, NormalCleanId := playroomCfg.GetNormalItem()
|
||||
PremiumFoodId, PremiumCleanId := playroomCfg.GetPremiumItem()
|
||||
|
||||
Item1Num := itemMod.GetItem(Item1)
|
||||
Item2Num := itemMod.GetItem(Item2)
|
||||
if p.DayFirstT == 2 {
|
||||
p.Reward = append(p.Reward, &item.Item{Id: VisitorItem, Num: 1})
|
||||
NormalFoodNum := itemMod.GetItem(NormalFoodId)
|
||||
NormalCleanNum := itemMod.GetItem(NormalCleanId)
|
||||
|
||||
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
|
||||
}
|
||||
if p.Trigger == 4 {
|
||||
p.Reward = append(p.Reward, &item.Item{Id: VisitorItem, Num: 1})
|
||||
p.Trigger = 0
|
||||
if NormalCleanNum == 0 {
|
||||
p.Reward = append(p.Reward, &item.Item{Id: NormalCleanId, Num: 1})
|
||||
return
|
||||
}
|
||||
if Item1Num == 0 && Item2Num == 0 {
|
||||
Prob := GoUtil.RandSlice([]int{Item1, Item2})
|
||||
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
|
||||
p.DayFirstT++
|
||||
p.Trigger++
|
||||
if PremiumFoodNum == 0 {
|
||||
p.Reward = append(p.Reward, &item.Item{Id: PremiumFoodId, Num: 1})
|
||||
return
|
||||
}
|
||||
if math.Abs(float64(Item1Num-Item2Num)) > 3 {
|
||||
RI := GoUtil.IfTrue(Item1Num > Item2Num, Item2, Item1).(int)
|
||||
p.Reward = append(p.Reward, &item.Item{Id: RI, Num: 1})
|
||||
p.DayFirstT++
|
||||
p.Trigger++
|
||||
if PremiumCleanNum == 0 {
|
||||
p.Reward = append(p.Reward, &item.Item{Id: PremiumCleanId, Num: 1})
|
||||
return
|
||||
}
|
||||
var RandSlice []int
|
||||
if Star < playroomCfg.GetOrderStar() {
|
||||
RandSlice = []int{Item1, Item2}
|
||||
} else {
|
||||
RandSlice = []int{Item1, Item2, VisitorItem}
|
||||
}
|
||||
if math.Abs(float64((NormalCleanNum+PremiumCleanNum)-(NormalFoodNum+PremiumFoodNum))) > 3 {
|
||||
RandSlice := GoUtil.IfTrue((NormalCleanNum+PremiumCleanNum) > (NormalFoodNum+PremiumFoodNum), []int{PremiumCleanId, NormalCleanId}, []int{NormalFoodId, PremiumFoodId}).([]int)
|
||||
Prob := GoUtil.RandSlice(RandSlice)
|
||||
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++
|
||||
return
|
||||
}
|
||||
RandSlice = []int{NormalFoodId, NormalCleanId, PremiumFoodId, PremiumCleanId}
|
||||
Prob := GoUtil.RandSlice(RandSlice)
|
||||
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) GetReward() []*item.Item {
|
||||
@ -233,6 +246,8 @@ func (p *PlayroomMod) Interact(Id, Type int) ([]*item.Item, int, error) {
|
||||
if Effect > 0 {
|
||||
p.AllMood = min(100, p.AllMood+10)
|
||||
}
|
||||
PType, PEffect := playroomCfg.GetInteractPhysiology(Id)
|
||||
p.AddPhysiology(PType, PEffect)
|
||||
p.AddMood(MoodType, Effect)
|
||||
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) {
|
||||
v, ok := p.Visitor[Id]
|
||||
if !ok {
|
||||
@ -383,6 +413,7 @@ func (p *PlayroomMod) NotifyMood() *msg.NotifyPlayroomMood {
|
||||
return &msg.NotifyPlayroomMood{
|
||||
AllMood: int32(p.AllMood),
|
||||
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) {
|
||||
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