Compare commits

..

12 Commits

Author SHA1 Message Date
tomas 2ab2ffafdd Merge remote-tracking branch 'origin/develop' into dev_slots 2024-12-03 11:13:33 +08:00
sk bdac067402 添加十三张预选牌功能 2024-12-02 17:53:07 +08:00
sk b1d365e030 好友申请数据修复 2024-12-02 17:10:19 +08:00
sk 744d52226c 修改十三张打枪时长 2024-12-02 15:58:56 +08:00
sk 2d43a4153a fix同意好友申请申请记录没有删除 2024-12-02 15:53:42 +08:00
sk 4d9dd37713 Merge branch 'sk' into develop 2024-12-02 14:58:42 +08:00
sk 8a9a4f0c2d fix同意好友申请申请记录没有删除 2024-12-02 14:58:23 +08:00
sk f532cee29b 更新配置文件 2024-12-02 14:32:55 +08:00
sk 0fe7ee6d4c fix 十三张牌局记录税收比例 2024-12-02 14:11:39 +08:00
sk 5d90c143c8 Merge branch 'sk' into develop 2024-12-02 14:06:40 +08:00
sk 1477611d4a fix游戏时长 2024-12-02 14:06:15 +08:00
sk 57def951c1 更新配置文件 2024-12-02 13:54:49 +08:00
17 changed files with 215 additions and 213 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -71,7 +71,7 @@
"Name": "十三张(四人场)",
"GameId": 211,
"Params": [
0,
4,
0,
30,
50,
@ -84,7 +84,7 @@
"Name": "十三张(八人场)",
"GameId": 212,
"Params": [
1,
8,
0,
30,
50,
@ -97,7 +97,7 @@
"Name": "十三张(自由场经典场)",
"GameId": 213,
"Params": [
1,
8,
0,
30,
50,
@ -110,7 +110,7 @@
"Name": "十三张(自由场癞子场)",
"GameId": 214,
"Params": [
1,
8,
0,
30,
50,
@ -250,6 +250,18 @@
"GameId": 312,
"GameDif": "312"
},
{
"Id": 31300,
"Name": "CashMania",
"GameId": 313,
"GameDif": "313"
},
{
"Id": 31400,
"Name": "GatesOfOlympus",
"GameId": 314,
"GameDif": "314"
},
{
"Id": 60800,
"Name": "娃娃机",

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -34,6 +34,7 @@ const (
ThirteenWaterPlayerOpTest = 3 // test
ThirteenWaterPlayerOpReset = 4 // 重新选牌
ThirteenWaterPlayerJoin = 5 // 加入游戏
ThirteenWaterPlayerOpSelect = 6 // 预选牌
)
const (
ThirteenWaterSceneWaitTimeout = time.Second * 2 //等待倒计时

View File

@ -1471,7 +1471,7 @@ func (this *Scene) SaveGameDetailedLog(param *SaveGameDetailedParam) {
return
}
if param.GameTime < 0 {
if param.GameTime <= 0 {
param.GameTime = int64(time.Now().Sub(this.GameNowTime).Seconds())
}

View File

@ -12,6 +12,7 @@ type PlayerEx struct {
cards [13]int //手牌信息
allGroup map[int]*thirteen.Group //玩家所有牌型
cardsO *thirteen.Group //确定的牌型信息
preCardsO *thirteen.Group //预确定的牌型
isDP bool // 是否倒排
gainCoin int64 //本局赢的金币
taxCoin int64 //本局税收
@ -36,6 +37,7 @@ func (this *PlayerEx) Clear() {
}
this.allGroup = make(map[int]*thirteen.Group)
this.cardsO = &thirteen.Group{Head: [3]int{-1, -1, -1}, Mid: [5]int{-1, -1, -1, -1, -1}, End: [5]int{-1, -1, -1, -1, -1}, PokerType: -1}
this.preCardsO = &thirteen.Group{Head: [3]int{-1, -1, -1}, Mid: [5]int{-1, -1, -1, -1, -1}, End: [5]int{-1, -1, -1, -1, -1}, PokerType: -1}
this.isDP = false
this.gainCoin = 0
this.taxCoin = 0

View File

@ -870,6 +870,7 @@ func (this *StateOp) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, param
} else {
sceneEx.SendSelectCards(playerEx, int(params[0]), int64(opcode))
}
playerEx.preCardsO = &rule.Group{Head: [3]int{-1, -1, -1}, Mid: [5]int{-1, -1, -1, -1, -1}, End: [5]int{-1, -1, -1, -1, -1}, PokerType: -1}
playerEx.Trusteeship = 0
playerEx.UnmarkFlag(base.PlayerState_Auto)
playerEx.deterMine = true
@ -886,6 +887,34 @@ func (this *StateOp) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, param
//提前进入亮牌阶段
s.ChangeSceneState(rule.ThirteenWaterSceneStateShowCards)
}
case rule.ThirteenWaterPlayerOpSelect:
playerEx.deterMine = false
playerEx.cardsO = &rule.Group{Head: [3]int{-1, -1, -1}, Mid: [5]int{-1, -1, -1, -1, -1}, End: [5]int{-1, -1, -1, -1, -1}, PokerType: -1}
playerEx.Trusteeship = 0
playerEx.UnmarkFlag(base.PlayerState_Auto)
pack := &thirteen.SCThirteenPlayerOp{
OpRetCode: thirteen.OpResultCode_OPRC_Sucess,
OpCode: int32(opcode),
OpParam: params,
Pos: int32(playerEx.GetPos()),
}
if len(params) == 13 {
//校验牌
a := rule.DelCards(playerEx.cards[:], common.Int64Toint(params))
if len(a) != 0 {
logger.Logger.Error("the cards is error.")
returnFunc(thirteen.OpResultCode_OPRC_Error)
return true
}
//牌赋值
copy(playerEx.preCardsO.Head[:], common.Int64Toint(params[:3]))
copy(playerEx.preCardsO.Mid[:], common.Int64Toint(params[3:8]))
copy(playerEx.preCardsO.End[:], common.Int64Toint(params[8:]))
playerEx.preCardsO.PokerType = 0
}
playerEx.SendToClient(int(thirteen.TWMmoPacketID_PACKET_SCThirteenPlayerOp), pack)
case rule.ThirteenWaterPlayerOpReset:
// 取消确认
playerEx.deterMine = false
@ -913,6 +942,11 @@ func (this *StateOp) OnLeave(s *base.Scene) {
for _, player := range sceneEx.players {
if player != nil && player.IsGameing() {
// 使用预选牌
if player.preCardsO != nil && player.preCardsO.PokerType != -1 && (player.cardsO == nil || player.cardsO.PokerType == -1) {
player.cardsO = player.preCardsO
}
// 判断是否倒水
if player.cardsO != nil && player.cardsO.PokerType != -1 {
if player.cardsO.PokerType < 1000000 {
player.isDP = sceneEx.logic.IsDP(player.cardsO.Head, player.cardsO.Mid, player.cardsO.End)
@ -1234,11 +1268,8 @@ func (this *StateHit) OnEnter(s *base.Scene) {
}
}
}
if sceneEx.isCanAllHitPos != -1 {
hitNum++
}
// 每个打枪加1秒全垒打再加1秒
sceneEx.hitTime += time.Second * (time.Duration(hitNum))
// 每个打枪加2秒全垒打再加2秒
sceneEx.hitTime += time.Second * 2 * (time.Duration(hitNum))
sceneEx.ShowCards()
}
}
@ -1334,7 +1365,7 @@ func (this *StateBilled) OnEnter(s *base.Scene) {
RoomType: sceneEx.GetSceneType(),
BaseScore: int32(sceneEx.GetBaseScore()),
NowRound: int32(sceneEx.NumOfGames),
ClubRate: sceneEx.Scene.PumpCoin,
TaxRate: s.GetDBGameFree().GetTaxRate(),
}
var person []model.ThirteenWaterPerson
for _, o_player := range sceneEx.players {

View File

@ -168,8 +168,8 @@ type ThirteenWaterType struct {
NowRound int32 //当前局数
PlayerCount int //玩家数量
BaseScore int32 //底分
TaxRate int32 //税率(万分比)
PlayerData []ThirteenWaterPerson //玩家信息
ClubRate int32 //俱乐部抽水比例
}
type ThirteenWaterPoker struct {

View File

@ -4238,10 +4238,10 @@ type DB_GameFree struct {
FreeMode int32 `protobuf:"varint,6,opt,name=FreeMode,proto3" json:"FreeMode,omitempty"`
GameRule int32 `protobuf:"varint,7,opt,name=GameRule,proto3" json:"GameRule,omitempty"`
GameType int32 `protobuf:"varint,8,opt,name=GameType,proto3" json:"GameType,omitempty"`
SceneType int32 `protobuf:"varint,9,opt,name=SceneType,proto3" json:"SceneType,omitempty"`
RankType int32 `protobuf:"varint,10,opt,name=RankType,proto3" json:"RankType,omitempty"`
SceneAdd int32 `protobuf:"varint,11,opt,name=SceneAdd,proto3" json:"SceneAdd,omitempty"`
Desc string `protobuf:"bytes,12,opt,name=Desc,proto3" json:"Desc,omitempty"`
Desc string `protobuf:"bytes,9,opt,name=Desc,proto3" json:"Desc,omitempty"`
SceneType int32 `protobuf:"varint,10,opt,name=SceneType,proto3" json:"SceneType,omitempty"`
RankType int32 `protobuf:"varint,11,opt,name=RankType,proto3" json:"RankType,omitempty"`
SceneAdd int32 `protobuf:"varint,12,opt,name=SceneAdd,proto3" json:"SceneAdd,omitempty"`
ShowType int32 `protobuf:"varint,13,opt,name=ShowType,proto3" json:"ShowType,omitempty"`
SubShowType int32 `protobuf:"varint,14,opt,name=SubShowType,proto3" json:"SubShowType,omitempty"`
Flag int32 `protobuf:"varint,15,opt,name=Flag,proto3" json:"Flag,omitempty"`
@ -4393,6 +4393,13 @@ func (x *DB_GameFree) GetGameType() int32 {
return 0
}
func (x *DB_GameFree) GetDesc() string {
if x != nil {
return x.Desc
}
return ""
}
func (x *DB_GameFree) GetSceneType() int32 {
if x != nil {
return x.SceneType
@ -4414,13 +4421,6 @@ func (x *DB_GameFree) GetSceneAdd() int32 {
return 0
}
func (x *DB_GameFree) GetDesc() string {
if x != nil {
return x.Desc
}
return ""
}
func (x *DB_GameFree) GetShowType() int32 {
if x != nil {
return x.ShowType
@ -11426,14 +11426,14 @@ var file_protocol_server_pbdata_proto_rawDesc = []byte{
0x65, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x75,
0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x75,
0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08,
0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c,
0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28,
0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08,
0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e,
0x65, 0x41, 0x64, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e,
0x65, 0x41, 0x64, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x65, 0x73, 0x63, 0x18, 0x0c, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x44, 0x65, 0x73, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77,
0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12,
0x0a, 0x04, 0x44, 0x65, 0x73, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x65,
0x73, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65,
0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01,
0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08,
0x53, 0x63, 0x65, 0x6e, 0x65, 0x41, 0x64, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
0x53, 0x63, 0x65, 0x6e, 0x65, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77,
0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x77,
0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x53, 0x68, 0x6f, 0x77, 0x54,
0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x53, 0x75, 0x62, 0x53, 0x68,

View File

@ -709,13 +709,13 @@ message DB_GameFree {
int32 GameType = 8;
int32 SceneType = 9;
string Desc = 9;
int32 RankType = 10;
int32 SceneType = 10;
int32 SceneAdd = 11;
int32 RankType = 11;
string Desc = 12;
int32 SceneAdd = 12;
int32 ShowType = 13;

View File

@ -511,7 +511,7 @@ func (this *FriendMgr) FriendApply(p *Player, destP *model.BindFriend) {
// p 同意者
// destP 申请者
func (this *FriendMgr) FriendAgree(p *Player, destP *model.BindFriend) {
var applyList []int32
var applyList, meApplyList []int32
SendToClick := func(retCode friend.OpResultCode, self ...bool) {
pack := &friend.SCFriendOp{
OpCode: proto.Int32(OpTypeAgree),
@ -534,6 +534,10 @@ func (this *FriendMgr) FriendAgree(p *Player, destP *model.BindFriend) {
RoleId: int32(roleId),
}
p.SendToClient(int(friend.FriendPacketID_PACKET_SCFriendOp), pack)
if meApplyList != nil {
p.ApplyList = meApplyList
this.SendApplyList(p)
}
} else {
destPs := PlayerMgrSington.GetPlayerBySnId(destP.SnId)
if destPs != nil && destPs.IsOnLine() {
@ -608,52 +612,73 @@ func (this *FriendMgr) FriendAgree(p *Player, destP *model.BindFriend) {
}
}
ret, err := model.QueryFriendApplyBySnid(p.Platform, p.SnId)
if err != nil {
return friend.OpResultCode_OPRC_Error
}
// 维护申请放和被申请方的申请列表
//查看是否在申请列表
if ret != nil {
if ret.ApplySnids != nil {
for i, as := range ret.ApplySnids {
if as.SnId == destP.SnId {
// 删除被申请者的申请列表
ret.ApplySnids = append(ret.ApplySnids[:i], ret.ApplySnids[i+1:]...)
model.UpsertFriendApply(p.Platform, p.SnId, ret)
// 删除发起方的申请列表
data, err := model.QueryFriendApplyListBySnid(p.Platform, destP.SnId)
if err != nil {
logger.Logger.Errorf("QueryFriendApplyListBySnid err:%v", err)
} else {
if data == nil {
data = model.NewApplyList(destP.SnId)
}
for k, v := range data.List {
if v == p.SnId {
data.List = append(data.List[:k], data.List[k+1:]...)
model.UpsertApplyList(p.Platform, data)
applyList = data.List
break
}
}
}
// 保存好友关系
if friendDB != nil {
friendDB.BindFriend = append(friendDB.BindFriend, &model.BindFriend{
SnId: p.SnId,
CreateTime: time.Now().Unix(),
})
model.UpsertFriend(friendDB)
}
return nil
// 删除申请者的申请列表
delApplyListFunc := func(plt string, snid int32, applySnid int32) friend.OpResultCode {
// 删除被申请者的申请列表
list1, err := model.QueryFriendApplyBySnid(plt, snid)
if err != nil {
logger.Logger.Errorf("QueryFriendApplyBySnid %v error: %v", snid, err)
return friend.OpResultCode_OPRC_Error
}
if list1 != nil {
k := 0
for k < len(list1.ApplySnids) {
if list1.ApplySnids[k].SnId == applySnid {
list1.ApplySnids = append(list1.ApplySnids[:k], list1.ApplySnids[k+1:]...)
model.UpsertFriendApply(plt, snid, list1)
} else {
k++
}
}
}
// 删除发起方的申请列表
list2, err := model.QueryFriendApplyListBySnid(plt, applySnid)
if err != nil {
logger.Logger.Errorf("QueryFriendApplyListBySnid %v error: %v", applySnid, err)
return friend.OpResultCode_OPRC_Error
}
if list2 != nil {
k := 0
for k < len(list2.List) {
if list2.List[k] == snid {
list2.List = append(list2.List[:k], list2.List[k+1:]...)
model.UpsertApplyList(plt, list2)
} else {
k++
}
}
}
if applySnid == destP.SnId && list2 != nil {
applyList = list2.List
}
if applySnid == p.SnId && list2 != nil {
meApplyList = list2.List
}
return friend.OpResultCode_OPRC_Sucess
}
return friend.OpResultCode_OPRC_Error
//查看是否在申请列表
code := delApplyListFunc(p.Platform, p.SnId, destP.SnId)
if code != friend.OpResultCode_OPRC_Sucess {
return code
}
code = delApplyListFunc(p.Platform, destP.SnId, p.SnId)
if code != friend.OpResultCode_OPRC_Sucess {
return code
}
// 保存好友关系
if friendDB != nil {
friendDB.BindFriend = append(friendDB.BindFriend, &model.BindFriend{
SnId: p.SnId,
CreateTime: time.Now().Unix(),
})
model.UpsertFriend(friendDB)
}
return nil
}), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) {
if data != nil {
logger.Logger.Error("FriendAgree data:", data)

Binary file not shown.

Binary file not shown.