diff --git a/data/DB_GameCoinPool.dat b/data/DB_GameCoinPool.dat
index a46923a..ec0000c 100644
--- a/data/DB_GameCoinPool.dat
+++ b/data/DB_GameCoinPool.dat
@@ -102,4 +102,9 @@
 ±°»€›îÀ–± €ÚÄ	XÈ` ÝŒ
 ²°»€ŽÎ€áë €„¯_XÈ`À¤ÿ
 ³°»€Æ†�€åšw €”ëÜXÈ`À¶üš
- ´°»€Œ�ž€Êµî €¨Ö¹XÈ`€íøµ
\ No newline at end of file
+ ´°»€Œ�ž€Êµî €¨Ö¹XÈ`€íøµ
+Áþ»€›îÀ–± €ÚÄ	XÈ` ÝŒ
+ÑÌ¼€ŽÎ€áë €„¯_XÈ`À¤ÿ
+áš½€Æ†�€åšw €”ëÜXÈ`À¶üš
+ ñè½€Œ�ž€Êµî €¨Ö¹XÈ`€íøµ
+ �·¾€Œ�ž€Êµî €¨Ö¹XÈ`€íøµ
\ No newline at end of file
diff --git a/data/DB_GameCoinPool.json b/data/DB_GameCoinPool.json
index cd94de1..f0185fe 100644
--- a/data/DB_GameCoinPool.json
+++ b/data/DB_GameCoinPool.json
@@ -1065,6 +1065,46 @@
 			"UpperLimit": 2000000000,
 			"CtrlRate": 200,
 			"InitNovicValue": 650000000
+		},
+		{
+			"Id": 3080001,
+			"InitValue": 6000000,
+			"LowerLimit": 5000000,
+			"UpperLimit": 20000000,
+			"CtrlRate": 200,
+			"InitNovicValue": 6500000
+		},
+		{
+			"Id": 3090001,
+			"InitValue": 60000000,
+			"LowerLimit": 50000000,
+			"UpperLimit": 200000000,
+			"CtrlRate": 200,
+			"InitNovicValue": 65000000
+		},
+		{
+			"Id": 3100001,
+			"InitValue": 300000000,
+			"LowerLimit": 250000000,
+			"UpperLimit": 1000000000,
+			"CtrlRate": 200,
+			"InitNovicValue": 325000000
+		},
+		{
+			"Id": 3110001,
+			"InitValue": 600000000,
+			"LowerLimit": 500000000,
+			"UpperLimit": 2000000000,
+			"CtrlRate": 200,
+			"InitNovicValue": 650000000
+		},
+		{
+			"Id": 3120001,
+			"InitValue": 600000000,
+			"LowerLimit": 500000000,
+			"UpperLimit": 2000000000,
+			"CtrlRate": 200,
+			"InitNovicValue": 650000000
 		}
 	]
 }
\ No newline at end of file
diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat
index 79f8787..df99138 100644
Binary files a/data/DB_PropExchange.dat and b/data/DB_PropExchange.dat differ
diff --git a/data/DB_Task.dat b/data/DB_Task.dat
index 7f78134..9f7b037 100644
Binary files a/data/DB_Task.dat and b/data/DB_Task.dat differ
diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go
index 8148257..761309f 100644
--- a/gamesrv/action/action_game.go
+++ b/gamesrv/action/action_game.go
@@ -291,6 +291,13 @@ func CSDestroyRoom(s *netlib.Session, packetid int, data interface{}, sid int64)
 		send()
 		return nil
 	}
+	if scene.ExtraData != nil {
+		gs, ok := scene.ExtraData.(base.GameScene)
+		if ok {
+			gs.SceneDestroy(true)
+			return nil
+		}
+	}
 	scene.Destroy(true)
 	return nil
 }
diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go
index 0abe0a0..fab8d37 100644
--- a/gamesrv/clawdoll/action_clawdoll.go
+++ b/gamesrv/clawdoll/action_clawdoll.go
@@ -76,6 +76,8 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data
 		case 1:
 			if msg.Result == 1 {
 				logger.Logger.Tracef("ä¸Šåˆ†æˆ�åŠŸï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�snid = ", msg.Snid)
+				//å�‘é€�å�‘å‰�ç§»åŠ¨æŒ‡ä»¤
+				sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonFront)
 			} else {
 				logger.Logger.Tracef("ä¸Šåˆ†å¤±è´¥ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�ï¼�snid = ", msg.Snid)
 			}
@@ -134,15 +136,15 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf
 			return nil
 		}
 
-		logger.Logger.Tracef("èŽ·å�–å¨ƒå¨ƒæœº appId = %v, serverSecret = %v, streamId = %v", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId)
+		logger.Logger.Tracef("èŽ·å�–å¨ƒå¨ƒæœº appId = %v, serverSecret = %v, streamId = %v,snid = %d", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId, p.SnId)
 
 		//ç”Ÿæˆ�token
-		token, err := token04.GenerateToken04(uint32(machineInfo.AppId), strconv.Itoa(int(p.SnId)), machineInfo.ServerSecret, 7200, "")
+		token, err := token04.GenerateToken04(uint32(machineInfo.AppId), strconv.Itoa(int(p.SnId)), machineInfo.ServerSecret, 3600, "")
 		if err != nil {
 			logger.Logger.Error(err)
 			return err
 		}
-		logger.Logger.Trace(token)
+		logger.Logger.Trace("======================token========================", token)
 
 		pack := &clawdoll.SCCLAWDOLLSendToken{
 			LogicId:  scene.DBGameFree.GetId(),
@@ -155,33 +157,6 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf
 	return nil
 }
 
-// å¨ƒå¨ƒæœºè¿”å›žtoken é€šçŸ¥å®¢æˆ·ç«¯
-func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) error {
-	logger.Logger.Tracef("MSSendTokenHandler")
-	if msg, ok := data.(*machine.MSSendToken); ok {
-		//ç»™å®¢æˆ·ç«¯è¿”å›žtoken
-		token := msg.Token
-		p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnid())
-		if p == nil {
-			logger.Logger.Warn("MSSendTokenHandler p == nil")
-			return nil
-		}
-
-		scene := p.GetScene()
-		if scene == nil {
-			return nil
-		}
-
-		pack := &clawdoll.SCCLAWDOLLSendToken{
-			LogicId:  scene.DBGameFree.GetId(),
-			Appid:    msg.Appid,
-			Token:    token,
-			StreamId: msg.StreamId,
-		}
-		p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack)
-	}
-	return nil
-}
 func init() {
 	common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpHandler{})
 	netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpPacketFactory{})
@@ -189,6 +164,4 @@ func init() {
 	//å®¢æˆ·ç«¯è¯·æ±‚token
 	common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenHandler{})
 	netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenPacketFactory{})
-	//èŽ·å�–tokenè¿”å›ž
-	netlib.Register(int(machine.DollMachinePacketID_PACKET_MSSendToken), &machine.MSSendToken{}, MSSendTokenHandler)
 }
diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go
index e581d75..0269621 100644
--- a/gamesrv/tienlen/scenedata_tienlen.go
+++ b/gamesrv/tienlen/scenedata_tienlen.go
@@ -2105,7 +2105,7 @@ func (this *TienLenSceneData) SendFirstGiveTimeItem(p *base.Player) {
 
 // SaveCustomLog ä¿�å­˜ç«žæŠ€é¦†å¯¹å±€è®°å½•
 func (this *TienLenSceneData) SaveCustomLog() {
-	if this.CustomLogSave || !this.IsCustom() {
+	if this.CustomLogSave || !this.IsCustom() || this.NumOfGames == 0 {
 		return
 	}
 	this.CustomLogSave = true
@@ -2117,15 +2117,16 @@ func (this *TienLenSceneData) SaveCustomLog() {
 		Platform:     this.Platform,
 		CycleId:      this.CycleID,
 		RoomConfigId: this.GetCustom().GetRoomConfigId(),
+		GameFreeId:   this.GetGameFreeId(),
+		TotalRound:   this.TotalOfGames,
+		PlayerNum:    this.PlayerNum,
+		Password:     this.GetCustom().GetPassword(),
+		CostType:     this.GetCustom().GetCostType(),
+		Voice:        this.GetCustom().GetVoice(),
 		RoomId:       this.SceneId,
 		StartTs:      this.GameStartTime.Unix(),
 		EndTs:        time.Now().Unix(),
 		State:        state,
-		GameFreeId:   this.GetGameFreeId(),
-		TotalRound:   this.TotalOfGames,
-		Password:     this.GetCustom().GetPassword(),
-		CostType:     this.GetCustom().GetCostType(),
-		Voice:        this.GetCustom().GetVoice(),
 	}
 	for snid := range this.BilledList {
 		var items []*model.Item
diff --git a/machine/action/action_server.go b/machine/action/action_server.go
index ea70d6b..2eb245c 100644
--- a/machine/action/action_server.go
+++ b/machine/action/action_server.go
@@ -3,14 +3,12 @@ package action
 import (
 	"bytes"
 	"fmt"
-	"github.com/zegoim/zego_server_assistant/token/go/src/token04"
 	"math"
 	"mongo.games.com/game/machine/machinedoll"
 	"mongo.games.com/game/protocol/machine"
 	"mongo.games.com/goserver/core/logger"
 	"mongo.games.com/goserver/core/netlib"
 	"mongo.games.com/goserver/core/timer"
-	"strconv"
 	"sync"
 	"time"
 )
@@ -71,7 +69,7 @@ func processConnMessageQueue(queue *ConnMessageQueue) {
 
 // ç§»åŠ¨
 func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data interface{}) error {
-	logger.Logger.Tracef("SMDollMachinePerateHandler %v", data)
+	fmt.Println("SMDollMachinePerateHandler %v", data)
 	msg, ok := data.(*machine.SMDollMachineoPerate)
 	if !ok {
 		return nil
@@ -121,13 +119,7 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte
 		Process(conn, f1, f2)
 	case 5:
 		//æŠ•å¸�
-		f1 := []func(){
-			func() { machinedoll.Coin(conn) },
-		}
-		f2 := []func(){
-			func() {},
-		}
-		Process(conn, f1, f2)
+		machinedoll.Coin(conn)
 		go DollMachineGrabResult(session, conn, msg.Snid, msg.GetId())
 	}
 	return nil
@@ -269,7 +261,7 @@ func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interf
 	return nil
 }
 
-// èŽ·å�–è¿›å…¥è§†é¢‘æˆ¿é—´token
+/*// èŽ·å�–è¿›å…¥è§†é¢‘æˆ¿é—´token
 func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) error {
 	logger.Logger.Tracef("SMGetTokenHandler %v", data)
 	msg, ok := data.(*machine.SMGetToken)
@@ -308,12 +300,12 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{})
 	session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info)
 	fmt.Println("å�‘æ¸¸æˆ�æœ�åŠ¡å™¨å�‘é€�å¨ƒå¨ƒæœºtokenï¼š%v", info)
 	return nil
-}
+}*/
 
 func init() {
 	netlib.Register(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), &machine.SMDollMachineoPerate{}, SMDollMachinePerateHandler)
 	netlib.Register(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), &machine.SMDollMachineGrab{}, SMDollMachineGrabHandler)
 	//é“¾æŽ¥æˆ�åŠŸ è¿”å›žæ¶ˆæ�¯
 	netlib.Register(int(machine.DollMachinePacketID_PACKET_SMGameLinkSucceed), &machine.SMGameLinkSucceed{}, SMGameLinkSucceedHandler)
-	netlib.Register(int(machine.DollMachinePacketID_PACKET_SMGetToken), &machine.SMGetToken{}, SMGetTokenHandler)
+	//netlib.Register(int(machine.DollMachinePacketID_PACKET_SMGetToken), &machine.SMGetToken{}, SMGetTokenHandler)
 }
diff --git a/machine/machinedoll/command.go b/machine/machinedoll/command.go
index 5ed8a95..bab7a18 100644
--- a/machine/machinedoll/command.go
+++ b/machine/machinedoll/command.go
@@ -382,7 +382,7 @@ var data = []byte{
 	0x65, //0 å‡ å¸�å‡ çŽ©
 	0x00, //1 å‡ å¸�å‡ çŽ©å� ç”¨ä½�
 	0x2D, //2 æ¸¸æˆ�æ—¶é—´
-	0x00, //3 å‡ºå¥–æ¨¡å¼�0 æ— æ¦‚çŽ‡ 1 éš�æœºæ¨¡å¼� 2 å›ºå®šæ¨¡å¼� 3 å† å…´æ¨¡å¼�
+	0x01, //3 å‡ºå¥–æ¨¡å¼�0 æ— æ¦‚çŽ‡ 1 éš�æœºæ¨¡å¼� 2 å›ºå®šæ¨¡å¼� 3 å† å…´æ¨¡å¼�
 	0x0F, //4 å‡ºå¥–æ¦‚çŽ‡
 	0x00, //5 å‡ºå¥–æ¦‚çŽ‡å� ç”¨ä½�
 	0x00, //6 ç©ºä¸­æŠ“ç‰© 0å…³é—­ 1å¼€å�¯
diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go
index e3cc943..592eab4 100644
--- a/protocol/machine/machine.pb.go
+++ b/protocol/machine/machine.pb.go
@@ -496,150 +496,6 @@ func (x *MSUpdateDollMachineStatus) GetVideoAddr() string {
 	return ""
 }
 
-//èŽ·å�–token
-type SMGetToken struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Snid         int32  `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"`
-	AppId        int64  `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"`
-	ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"`
-	StreamId     string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"`
-}
-
-func (x *SMGetToken) Reset() {
-	*x = SMGetToken{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_machine_proto_msgTypes[7]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SMGetToken) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SMGetToken) ProtoMessage() {}
-
-func (x *SMGetToken) ProtoReflect() protoreflect.Message {
-	mi := &file_machine_proto_msgTypes[7]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SMGetToken.ProtoReflect.Descriptor instead.
-func (*SMGetToken) Descriptor() ([]byte, []int) {
-	return file_machine_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *SMGetToken) GetSnid() int32 {
-	if x != nil {
-		return x.Snid
-	}
-	return 0
-}
-
-func (x *SMGetToken) GetAppId() int64 {
-	if x != nil {
-		return x.AppId
-	}
-	return 0
-}
-
-func (x *SMGetToken) GetServerSecret() string {
-	if x != nil {
-		return x.ServerSecret
-	}
-	return ""
-}
-
-func (x *SMGetToken) GetStreamId() string {
-	if x != nil {
-		return x.StreamId
-	}
-	return ""
-}
-
-//è¿”å›žtoken
-type MSSendToken struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Snid     int32  `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"`
-	Appid    int64  `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"`
-	Token    string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"`
-	StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"`
-}
-
-func (x *MSSendToken) Reset() {
-	*x = MSSendToken{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_machine_proto_msgTypes[8]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *MSSendToken) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*MSSendToken) ProtoMessage() {}
-
-func (x *MSSendToken) ProtoReflect() protoreflect.Message {
-	mi := &file_machine_proto_msgTypes[8]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use MSSendToken.ProtoReflect.Descriptor instead.
-func (*MSSendToken) Descriptor() ([]byte, []int) {
-	return file_machine_proto_rawDescGZIP(), []int{8}
-}
-
-func (x *MSSendToken) GetSnid() int32 {
-	if x != nil {
-		return x.Snid
-	}
-	return 0
-}
-
-func (x *MSSendToken) GetAppid() int64 {
-	if x != nil {
-		return x.Appid
-	}
-	return 0
-}
-
-func (x *MSSendToken) GetToken() string {
-	if x != nil {
-		return x.Token
-	}
-	return ""
-}
-
-func (x *MSSendToken) GetStreamId() string {
-	if x != nil {
-		return x.StreamId
-	}
-	return ""
-}
-
 var File_machine_proto protoreflect.FileDescriptor
 
 var file_machine_proto_rawDesc = []byte{
@@ -677,44 +533,29 @@ var file_machine_proto_rawDesc = []byte{
 	0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53,
 	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64,
 	0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41,
-	0x64, 0x64, 0x72, 0x22, 0x76, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65,
-	0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12,
-	0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x0b, 0x4d,
-	0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e,
-	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14,
-	0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41,
-	0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74,
-	0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74,
-	0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x2a, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d,
-	0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c,
-	0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d,
-	0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18,
-	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e,
-	0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a,
-	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63,
-	0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e,
-	0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d,
-	0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e,
-	0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d,
-	0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26,
-	0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74,
-	0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
-	0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50,
-	0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12,
-	0x17, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54,
-	0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa6, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b,
-	0x45, 0x54, 0x5f, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7,
-	0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65,
-	0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x64, 0x64, 0x72, 0x2a, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68,
+	0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50,
+	0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68,
+	0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43,
+	0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75,
+	0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43,
+	0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e,
+	0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50,
+	0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68,
+	0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50,
+	0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68,
+	0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50,
+	0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f,
+	0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10,
+	0xa4, 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53,
+	0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61,
+	0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, 0x17, 0x0a, 0x11,
+	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65,
+	0x6e, 0x10, 0xa6, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
+	0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, 0x9c, 0x01, 0x42,
+	0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63,
+	0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c,
+	0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -730,7 +571,7 @@ func file_machine_proto_rawDescGZIP() []byte {
 }
 
 var file_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
 var file_machine_proto_goTypes = []interface{}{
 	(DollMachinePacketID)(0),           // 0: machine.DollMachinePacketID
 	(*SMGameLinkSucceed)(nil),          // 1: machine.SMGameLinkSucceed
@@ -740,8 +581,6 @@ var file_machine_proto_goTypes = []interface{}{
 	(*MSDollMachineList)(nil),          // 5: machine.MSDollMachineList
 	(*DollMachine)(nil),                // 6: machine.DollMachine
 	(*MSUpdateDollMachineStatus)(nil),  // 7: machine.MSUpdateDollMachineStatus
-	(*SMGetToken)(nil),                 // 8: machine.SMGetToken
-	(*MSSendToken)(nil),                // 9: machine.MSSendToken
 }
 var file_machine_proto_depIdxs = []int32{
 	6, // 0: machine.MSDollMachineList.data:type_name -> machine.DollMachine
@@ -842,30 +681,6 @@ func file_machine_proto_init() {
 				return nil
 			}
 		}
-		file_machine_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SMGetToken); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_machine_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MSSendToken); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -873,7 +688,7 @@ func file_machine_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_machine_proto_rawDesc,
 			NumEnums:      1,
-			NumMessages:   9,
+			NumMessages:   7,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto
index a109267..ba7c784 100644
--- a/protocol/machine/machine.proto
+++ b/protocol/machine/machine.proto
@@ -58,18 +58,4 @@ message MSUpdateDollMachineStatus{
 	int32 Id = 1;
 	int32 Status = 2;	//1-ç©ºé—² 0-æ— æ³•ä½¿ç”¨
 	string VideoAddr = 3;
-}
-//èŽ·å�–token
-message SMGetToken{
-	int32 Snid = 1;
-	int64 AppId = 2;
-	string ServerSecret = 3;
-	string StreamId = 4;
-}
-//è¿”å›žtoken
-message MSSendToken{
-	int32 Snid = 1;
-	int64 Appid = 2;
-	string Token = 3;
-	string StreamId = 4;
 }
\ No newline at end of file
diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go
index bf0779f..441578d 100644
--- a/worldsrv/action_server.go
+++ b/worldsrv/action_server.go
@@ -513,7 +513,7 @@ func init() {
 						}
 					}
 
-					if !scene.IsMatchScene() { // æ¯”èµ›æ²¡é‡‘å¸�æ˜¯ç§¯åˆ†
+					if !scene.IsMatchScene() && !scene.IsCustom() { // æ¯”èµ›æ²¡é‡‘å¸�æ˜¯ç§¯åˆ†
 						player.Coin = playerBet.GetCoin()
 						player.GameCoinTs = playerBet.GetGameCoinTs()
 						player.GameTax += playerBet.GetTax()
diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go
index 75333b9..e01fe96 100644
--- a/worldsrv/shopmgr.go
+++ b/worldsrv/shopmgr.go
@@ -1226,6 +1226,13 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any,
 
 			}
 
+			switch shopInfo.Page {
+			case ShopPageFangKa:
+				remark = fmt.Sprintf("æˆ¿å�¡|%v", shopInfo.Id)
+			default:
+
+			}
+
 			dbShop = this.NewDbShop(p, shopInfo.Page, amount[:], ShopConsumeMoney, costNum,
 				common.GainWay_ShopBuy, itemInfo, shopInfo.Id, shopInfo.Name, 0, remark, []int32{})
 			err := model.InsertDbShopLog(dbShop)
diff --git a/xlsx/DB_GameCoinPool.xlsx b/xlsx/DB_GameCoinPool.xlsx
index 0243731..402fcb5 100644
Binary files a/xlsx/DB_GameCoinPool.xlsx and b/xlsx/DB_GameCoinPool.xlsx differ
