宠物皮毛功能开发
This commit is contained in:
parent
cf5f30cebb
commit
b3689ca93d
57
src/server/conf/fur/fur_cfg.go
Normal file
57
src/server/conf/fur/fur_cfg.go
Normal file
@ -0,0 +1,57 @@
|
||||
package fur_cfg
|
||||
|
||||
import (
|
||||
"server/game/mod/item"
|
||||
"server/gamedata"
|
||||
)
|
||||
|
||||
const (
|
||||
CFG_FUR_CONST = "FurShopConst"
|
||||
CFG_FUR_SHOP = "FurShop"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gamedata.InitCfg(CFG_FUR_CONST)
|
||||
gamedata.InitCfg(CFG_FUR_SHOP)
|
||||
}
|
||||
|
||||
func GetFurShopCost(id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_FUR_SHOP, id)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Cost")
|
||||
}
|
||||
|
||||
func GetFurShopFreeTimes() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_FUR_CONST, "free_unlock")
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
|
||||
func GetFurShopTag(id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_FUR_SHOP, id)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "TAG")
|
||||
}
|
||||
|
||||
func GetFurShopItem(id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_FUR_SHOP, id)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
itemId := gamedata.GetIntValue(data, "ItemID")
|
||||
if itemId == 0 {
|
||||
return nil
|
||||
}
|
||||
return []*item.Item{
|
||||
{
|
||||
Id: itemId,
|
||||
Num: 1,
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -454,6 +454,7 @@ func (ad *GameLogic) GetResFriendPlayerByUid(Id int) *msg.ResFriendPlayerSimple
|
||||
Physiology: GoUtil.MapIntToInt32(player.Physiology),
|
||||
Last: last,
|
||||
PetName: player.PetName,
|
||||
PetFur: int32(player.PetFur),
|
||||
}
|
||||
}
|
||||
|
||||
@ -840,6 +841,9 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqPlayroomTaskReward", ReqPlayroomTaskReward) // 领取任务奖励
|
||||
RegisterMsgProcessFunc("ReqPlayroomGameShowReward", ReqPlayroomGameShowReward) // 展示游戏结果数据
|
||||
RegisterMsgProcessFunc("ReqPlayroomGuide", ReqPlayroomGuide) // 展示游戏结果数据
|
||||
RegisterMsgProcessFunc("ReqPetFur", ReqPetFur) // 宠物毛皮信息
|
||||
RegisterMsgProcessFunc("ReqPetFurBuy", ReqPetFurBuy) // 宠物毛皮商店购买
|
||||
RegisterMsgProcessFunc("ReqFurSet", ReqFurSet) //宠物毛皮设置
|
||||
// 宠物宝藏
|
||||
RegisterMsgProcessFunc("ReqFriendTreasure", ReqFriendTreasure) // 请求好友宝藏数据
|
||||
RegisterMsgProcessFunc("ReqFriendTreasureStart", ReqFriendTreasureStart) // 开始游戏
|
||||
|
||||
@ -39,6 +39,7 @@ type PlayerSimpleData struct {
|
||||
Physiology map[int]int
|
||||
Lang int
|
||||
Account string
|
||||
PetFur int
|
||||
}
|
||||
|
||||
type VarGoldCard struct {
|
||||
|
||||
84
src/server/game/mod/fur/fur.go
Normal file
84
src/server/game/mod/fur/fur.go
Normal file
@ -0,0 +1,84 @@
|
||||
package fur
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
fur_cfg "server/conf/fur"
|
||||
"server/game/mod/item"
|
||||
"server/msg"
|
||||
)
|
||||
|
||||
type FurMod struct {
|
||||
Set int
|
||||
List map[int]*FurInfo
|
||||
Free int
|
||||
}
|
||||
|
||||
type FurInfo struct {
|
||||
Id int
|
||||
AddTime int64
|
||||
EndTime int64
|
||||
}
|
||||
|
||||
func (f *FurMod) InitData() {
|
||||
if f.List == nil {
|
||||
f.List = make(map[int]*FurInfo)
|
||||
}
|
||||
}
|
||||
|
||||
// 获取毛皮信息
|
||||
func (f *FurMod) GetFurInfo(id int) *FurInfo {
|
||||
info, ok := f.List[id]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return info
|
||||
}
|
||||
|
||||
// 增加毛皮
|
||||
func (f *FurMod) AddFurInfo(id int, addTime, endTime int64) {
|
||||
f.List[id] = &FurInfo{
|
||||
Id: id,
|
||||
AddTime: addTime,
|
||||
EndTime: endTime,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FurMod) GetFurBuyCost(id int) ([]*item.Item, []*item.Item) {
|
||||
freeCount := fur_cfg.GetFurShopFreeTimes()
|
||||
if f.Free < freeCount {
|
||||
f.Free++
|
||||
return nil, fur_cfg.GetFurShopItem(id)
|
||||
}
|
||||
return fur_cfg.GetFurShopCost(id), fur_cfg.GetFurShopItem(id)
|
||||
}
|
||||
|
||||
// 设置毛皮
|
||||
func (f *FurMod) SetFur(id int) error {
|
||||
if id == 0 {
|
||||
f.Set = 0
|
||||
return nil
|
||||
}
|
||||
if _, ok := f.List[id]; !ok {
|
||||
return fmt.Errorf("fur id not found")
|
||||
}
|
||||
f.Set = id
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *FurMod) GetFurSet() int {
|
||||
return f.Set
|
||||
}
|
||||
|
||||
// 消息返回
|
||||
func (f *FurMod) BackData() *msg.ResPetFur {
|
||||
freeCount := fur_cfg.GetFurShopFreeTimes()
|
||||
furId := make([]int32, 0, len(f.List))
|
||||
for id := range f.List {
|
||||
furId = append(furId, int32(id))
|
||||
}
|
||||
return &msg.ResPetFur{
|
||||
FurId: furId,
|
||||
FurSet: int32(f.Set),
|
||||
FreeCount: int32(freeCount - f.Free),
|
||||
}
|
||||
}
|
||||
@ -58,6 +58,7 @@ const (
|
||||
ITEM_TYPE_PLAYROOM_DRESS_SET = 114 // playroom服饰套装
|
||||
ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱
|
||||
ITEM_TYPE_ACT_PASS = 116 // 通行证活动道具
|
||||
ITEM_TYPE_PET_FUR = 117 // 宠物毛皮
|
||||
)
|
||||
|
||||
func (i *ItemMod) InitData() {
|
||||
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"server/game/mod/chess"
|
||||
"server/game/mod/decorate"
|
||||
"server/game/mod/endless"
|
||||
"server/game/mod/fur"
|
||||
limitedTimeEvent "server/game/mod/limited_time_event"
|
||||
"server/game/mod/mail"
|
||||
"server/game/mod/order"
|
||||
@ -57,3 +58,7 @@ func (p *Player) GetSevenLoginMod() *sevenLogin.SevenLoginMod {
|
||||
func (p *Player) GetOrderMod() *order.OrderMod {
|
||||
return p.PlayMod.getOrderMod()
|
||||
}
|
||||
|
||||
func (p *Player) GetFurMod() *fur.FurMod {
|
||||
return p.PlayMod.getFurMod()
|
||||
}
|
||||
|
||||
@ -582,6 +582,9 @@ func (p *Player) GetAgentByPlayer() gate.Agent {
|
||||
|
||||
// 处理物品
|
||||
func (p *Player) HandleLoseItem(itemList []*item.Item, Label string) error {
|
||||
if itemList == nil {
|
||||
return nil
|
||||
}
|
||||
for _, v := range itemList {
|
||||
if v.Num > 0 {
|
||||
v.Num = -v.Num
|
||||
@ -590,7 +593,7 @@ func (p *Player) HandleLoseItem(itemList []*item.Item, Label string) error {
|
||||
return p.HandleItem(itemList, Label)
|
||||
}
|
||||
func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
if len(itemList) == 0 {
|
||||
if itemList == nil {
|
||||
return nil
|
||||
}
|
||||
is_update := false
|
||||
@ -892,6 +895,11 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
PassMod.AddExp(v.Num)
|
||||
p.ActPassBackData()
|
||||
case item.ITEM_TYPE_PET_FUR:
|
||||
FurMod := p.PlayMod.getFurMod()
|
||||
Effect := itemCfg.GetItemEffect(v.Id)
|
||||
FurMod.AddFurInfo(Effect, GoUtil.Now(), 0)
|
||||
BackDataType[item.ITEM_TYPE_PET_FUR] = struct{}{}
|
||||
default:
|
||||
err := ItemMod.AddItem(v.Id, v.Num)
|
||||
p.TeLog("asset_change", map[string]interface{}{
|
||||
@ -931,6 +939,9 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
item.ITEM_TYPE_PLAYROOM_DECORATION_SET,
|
||||
item.ITEM_TYPE_PLAYROOM_DRESS_SET:
|
||||
p.PlayroomBackData()
|
||||
case item.ITEM_TYPE_PET_FUR:
|
||||
FurMod := p.PlayMod.getFurMod()
|
||||
p.PushClientRes(FurMod.BackData())
|
||||
}
|
||||
}
|
||||
p.PetItemUseLog(itemList)
|
||||
@ -1063,6 +1074,7 @@ func (p *Player) UpdateUserInfo() {
|
||||
simple.Physiology = p.PlayMod.getPlayroomMod().GetPhysiologyList()
|
||||
simple.Lang = int(p.PlayMod.getBaseMod().Lang)
|
||||
simple.Account = p.PlayMod.getBaseMod().Account
|
||||
simple.PetFur = p.PlayMod.getFurMod().GetFurSet()
|
||||
//TODO 存储到redis 在新版本中将优化成gob进行压缩
|
||||
value, _ := json.Marshal(simple)
|
||||
IdStr := GoUtil.String(p.M_DwUin)
|
||||
|
||||
@ -23,6 +23,7 @@ import (
|
||||
"server/game/mod/face"
|
||||
"server/game/mod/friend"
|
||||
friendTreasure "server/game/mod/friend_treasure.go"
|
||||
"server/game/mod/fur"
|
||||
guesscolor "server/game/mod/guess_color"
|
||||
"server/game/mod/guide"
|
||||
guideTask "server/game/mod/guide_task"
|
||||
@ -120,6 +121,7 @@ type PlayerModList struct {
|
||||
Catnip catnip.CatnipMod // 猫草大作战
|
||||
GuideTask guideTask.GuideTaskMod // 引导任务
|
||||
Pass pass.PassMod // 通行证
|
||||
Fur fur.FurMod // 毛皮
|
||||
}
|
||||
|
||||
func (p *PlayerModData) LoadDataFromDB(dwUin interface{}) bool {
|
||||
@ -221,6 +223,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
|
||||
p.ModList.Compensation.InitData()
|
||||
p.ModList.GuideTask.InitData()
|
||||
p.ModList.Pass.InitData()
|
||||
p.ModList.Fur.InitData()
|
||||
return is_update, nil
|
||||
}
|
||||
|
||||
@ -439,3 +442,7 @@ func (p *PlayerMod) getGuideTaskMod() *guideTask.GuideTaskMod {
|
||||
func (p *PlayerMod) getPassMod() *pass.PassMod {
|
||||
return &p.mod_list.Pass
|
||||
}
|
||||
|
||||
func (p *PlayerMod) getFurMod() *fur.FurMod {
|
||||
return &p.mod_list.Fur
|
||||
}
|
||||
|
||||
52
src/server/game/req_func_fur.go
Normal file
52
src/server/game/req_func_fur.go
Normal file
@ -0,0 +1,52 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"server/msg"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
func ReqPetFur(player *Player, buf []byte) error {
|
||||
FurMod := player.GetFurMod()
|
||||
player.PushClientRes(FurMod.BackData())
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqPetFurBuy(player *Player, buf []byte) error {
|
||||
var req msg.ReqPetFurBuy
|
||||
err := proto.Unmarshal(buf, &req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
FurMod := player.GetFurMod()
|
||||
costList, AddItem := FurMod.GetFurBuyCost(int(req.FurId))
|
||||
// 扣除物品
|
||||
err = player.HandleLoseItem(costList, msg.ITEM_POP_LABEL_PetFurShop.String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 增加物品
|
||||
err = player.HandleItem(AddItem, msg.ITEM_POP_LABEL_PetFurShop.String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
player.PlayMod.save()
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqFurSet(player *Player, buf []byte) error {
|
||||
var req msg.ReqFurSet
|
||||
err := proto.Unmarshal(buf, &req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
FurMod := player.GetFurMod()
|
||||
err = FurMod.SetFur(int(req.FurId))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
player.UpdateUserInfo()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(FurMod.BackData())
|
||||
return nil
|
||||
}
|
||||
@ -106,7 +106,7 @@ func TestNotify(t *testing.T) {
|
||||
// titlekey, infokey := notification_cfg.GetPetroomGameNotificationMsg()
|
||||
// title := languageCfg.GetLanguage(msg.LANG_TYPE(1), titlekey)
|
||||
// info := languageCfg.GetLanguage(msg.LANG_TYPE(1), infokey)
|
||||
GoUtil.NotifyPlayer(10130, 2, title, fmt.Sprintf(info, "猫猫"))
|
||||
GoUtil.NotifyPlayer(3625212, 2, title, fmt.Sprintf(info, "猫猫"))
|
||||
// GoUtil.NotifyPlayer(19246, 1, "Test Notification", "This is a test notification from the server.")
|
||||
}
|
||||
|
||||
|
||||
92
src/server/test/fur_test.go
Normal file
92
src/server/test/fur_test.go
Normal file
@ -0,0 +1,92 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
fur_cfg "server/conf/fur"
|
||||
"server/game"
|
||||
"server/msg"
|
||||
"testing"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
func TestGetFurShopCost(t *testing.T) {
|
||||
cost := fur_cfg.GetFurShopCost(1)
|
||||
fmt.Printf("cost: %v", cost)
|
||||
}
|
||||
|
||||
func TestGetFurShopFreeTimes(t *testing.T) {
|
||||
freeTimes := fur_cfg.GetFurShopFreeTimes()
|
||||
fmt.Printf("freeTimes: %d", freeTimes)
|
||||
}
|
||||
|
||||
func TestGetFurShopTag(t *testing.T) {
|
||||
tag := fur_cfg.GetFurShopTag(1)
|
||||
fmt.Printf("tag: %d", tag)
|
||||
}
|
||||
|
||||
func TestReqPetFur(t *testing.T) {
|
||||
player := new(game.Player)
|
||||
err := game.ReqPetFur(player, nil)
|
||||
if err != nil {
|
||||
t.Errorf("ReqPetFur error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReqPetFurBuy(t *testing.T) {
|
||||
player := new(game.Player)
|
||||
player.InitPlayerByUid(100001)
|
||||
m := msg.ReqPetFurBuy{
|
||||
FurId: 1,
|
||||
}
|
||||
buf, err := proto.Marshal(&m)
|
||||
if err != nil {
|
||||
t.Errorf("marshal error: %v", err)
|
||||
}
|
||||
err = game.ReqPetFurBuy(player, buf)
|
||||
if err != nil {
|
||||
t.Errorf("ReqPetFurBuy error: %v", err)
|
||||
}
|
||||
|
||||
m = msg.ReqPetFurBuy{
|
||||
FurId: 2,
|
||||
}
|
||||
buf, err = proto.Marshal(&m)
|
||||
if err != nil {
|
||||
t.Errorf("marshal error: %v", err)
|
||||
}
|
||||
err = game.ReqPetFurBuy(player, buf)
|
||||
if err != nil {
|
||||
t.Errorf("ReqPetFurBuy error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReqFurSet(t *testing.T) {
|
||||
player := new(game.Player)
|
||||
player.InitPlayerByUid(100001)
|
||||
m := msg.ReqFurSet{
|
||||
FurId: 1,
|
||||
}
|
||||
buf, err := proto.Marshal(&m)
|
||||
if err != nil {
|
||||
t.Errorf("marshal error: %v", err)
|
||||
}
|
||||
FurMod := player.GetFurMod()
|
||||
FurMod.AddFurInfo(1, 0, 0)
|
||||
err = game.ReqFurSet(player, buf)
|
||||
if err != nil {
|
||||
t.Errorf("ReqFurSet error: %v", err)
|
||||
}
|
||||
|
||||
m = msg.ReqFurSet{
|
||||
FurId: 0,
|
||||
}
|
||||
buf, err = proto.Marshal(&m)
|
||||
if err != nil {
|
||||
t.Errorf("marshal error: %v", err)
|
||||
}
|
||||
err = game.ReqFurSet(player, buf)
|
||||
if err != nil {
|
||||
t.Errorf("ReqFurSet error: %v", err)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user