AiChat领取奖励

This commit is contained in:
fatiao 2025-11-21 21:33:04 +08:00
parent 9ceaa8b5d1
commit fdecd2031a
13 changed files with 3280 additions and 3060 deletions

View File

@ -6,17 +6,13 @@
<component name="ChangeListManager">
<list default="true" id="d78b3961-331c-4a35-ae41-f23409fbe1fd" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/snap/db" beforeDir="false" afterPath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/snap/db" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/wal/0.tmp" beforeDir="false" afterPath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/wal/0.tmp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/wal/0000000000000000-0000000000000000.wal" beforeDir="false" afterPath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/wal/0000000000000000-0000000000000000.wal" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/baseserver/router/route_table.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/baseserver/router/route_table.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/config/csv/StoryRewards.csv" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/fruit/model/fruit_player.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/fruit/model/fruit_player.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/fruit/model/fruit_room.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/fruit/model/fruit_room.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/fruit/msg/fruit_msg.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/fruit/msg/fruit_msg.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/game/model/def.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/game/model/def.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/game/model/role.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/game/model/role.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/game/msg/fruit_msg.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/game/msg/fruit_msg.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/serverproto/config_csv.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/config_csv.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/game/model/role_base.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/game/model/role_base.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/game/msg/role_msg.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/game/msg/role_msg.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/serverproto/login.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/login.pb.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/serverproto/login.proto" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/login.proto" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/serverproto/messagedef.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/messagedef.pb.go" afterDir="false" />
@ -25,7 +21,18 @@
<change beforePath="$PROJECT_DIR$/roserver/serverproto/pbbind_gen.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/pbbind_gen.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/serverproto/user.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/user.pb.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/roserver/serverproto/user.proto" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/user.proto" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/auth" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/auth" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/battleboss" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/battleboss" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/battlerecord" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/battlerecord" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/db" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/db" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/fruit" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/fruit" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/game" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/game" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/gate" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/gate" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/gmweb" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/gmweb" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/guild" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/guild" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/rank" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/rank" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/serverlist" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/serverlist" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../server_publish/run/linux/social" beforeDir="false" afterPath="$PROJECT_DIR$/../server_publish/run/linux/social" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -71,7 +78,7 @@
"Go Build.db.executor": "Run",
"Go Build.fruit.executor": "Run",
"Go Build.game.executor": "Debug",
"Go Build.game1.executor": "Debug",
"Go Build.game1.executor": "Run",
"Go Build.game2.executor": "Debug",
"Go Build.gate.executor": "Debug",
"Go Build.gate1.executor": "Run",
@ -323,7 +330,7 @@
</line-breakpoint>
<line-breakpoint type="DlvLineBreakpoint">
<url>file://$PROJECT_DIR$/roserver/game/msg/role_msg.go</url>
<line>4283</line>
<line>4295</line>
<option name="timeStamp" value="86" />
</line-breakpoint>
<line-breakpoint type="DlvLineBreakpoint">
@ -373,7 +380,7 @@
</line-breakpoint>
<line-breakpoint type="DlvLineBreakpoint">
<url>file://$PROJECT_DIR$/roserver/game/msg/role_msg.go</url>
<line>2271</line>
<line>2283</line>
<option name="timeStamp" value="200" />
</line-breakpoint>
<line-breakpoint type="DlvLineBreakpoint">
@ -466,11 +473,6 @@
<line>74</line>
<option name="timeStamp" value="464" />
</line-breakpoint>
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
<url>file://$PROJECT_DIR$/roserver/game/msg/fruit_msg.go</url>
<line>24</line>
<option name="timeStamp" value="471" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
<watches-manager>

View File

@ -346,6 +346,7 @@ func init(){
addRule("CSRoleStoryNpcReq","game","game",1764)
addRule("CSFruitChatReq","game,fruit","game",1766)
addRule("SCFruitChatNtf","game,fruit","game",1767)
addRule("CSRoleGetSendNpcItemRewardReq","game","game",1768)
addRule("SSCrossYuanHangTrialViewListReq","crossserver","crossserver",6002)
addRule("SSCrossYuanHangTrialReq","crossserver","crossserver",6004)
addRule("SSCrossYuanHangTrialChallengeReq","crossserver","crossserver",6006)
@ -658,4 +659,5 @@ func init(){
ReqAckKVList[1756] = ReqAckKVInfo{1756, 1757, "CSFruitLeaveReq|SCFruitLeaveAck"}
ReqAckKVList[1758] = ReqAckKVInfo{1758, 1759, "CSFruitBetReq|SCFruitBetAck"}
ReqAckKVList[1764] = ReqAckKVInfo{1764, 1765, "CSRoleStoryNpcReq|SCRoleStoryNpcAck"}
ReqAckKVList[1768] = ReqAckKVInfo{1768, 1769, "CSRoleGetSendNpcItemRewardReq|SCRoleGetSendNpcItemRewardAck"}
}

View File

@ -80,6 +80,7 @@ type RoleLogicOuter interface {
SetRoleGuide(guideId int32)
SetRoleStory(story *serverproto.KeyValueType)
SetRoleStoryNpc(story *serverproto.KeyValueType)
GetSendNpcItemReward(itemId uint64, itemNum uint32, rewardId int32)
SetMapCartoon(id, status int32)
OnAddQualityPoint(msg *serverproto.CSAddQualityPointReq)
//hero
@ -2169,6 +2170,55 @@ func (this *Role) SetRoleStoryNpc(storyNpc *serverproto.KeyValueType) {
this.ReplayGate(ackMsg, true)
}
func (this *Role) GetSendNpcItemReward(itemId uint64, itemNum uint32, rewardId int32) {
storyRewardCfgMap := serverproto.StoryRewardCfgLoader
ownItemNum := this.roleBag.getItemNum(int32(itemId))
err := int32(serverproto.ErrorCode_ERROR_FAIL)
// TODO: 验证itemId的类型是否可以获取rewardId
storyRewards := make([]*serverproto.KeyValueType, 0)
newStoryNpcId := &serverproto.KeyValueType{}
if ownItemNum >= itemNum {
storyRewardCfg, storyExist := storyRewardCfgMap[rewardId]
if storyExist {
if storyRewardCfg.RewardType == Story_Reward_Heart {
heartRewardStr := storyRewardCfg.HeartReward
storyNpcId, addHeartVal := model.Str2Res(heartRewardStr)
preStoryNpcHeart := this.GetRoleBase().GetStoryNpcHeart(storyNpcId)
heart := preStoryNpcHeart + addHeartVal
util.InfoF("GetSendNpcItemReward: Add Heart itemId=%d, storyNpcId=%d, preStoryNpcHeart=%d, heart=%d", itemId, storyNpcId, preStoryNpcHeart, heart)
newStoryNpcId.Key = storyNpcId
newStoryNpcId.Value = heart
this.GetRoleBase().SetStoryNpcId(newStoryNpcId)
} else if storyRewardCfg.RewardType == Story_Reward_Gift {
rewardItems := make(map[int32]int32)
rewardCfg := storyRewardCfg.GiftReward
for _, v := range rewardCfg {
key, value := model.Str2Res(v)
storyRewards = append(storyRewards, &serverproto.KeyValueType{
Key: key,
Value: value,
})
rewardItems[key] = value
}
util.InfoF("GetSendNpcItemReward: itemId=%d storyRewardId=%d storyRewards num %d", itemId, rewardId, len(storyRewards))
if len(rewardItems) > 0 {
this.AddItemList(rewardItems, AddFrom_StoryChat, true)
}
}
this.DelItem(int32(itemId), int32(itemNum), AddItemST{AddFrom: AddFrom_StoryChat, Notify: true})
err = int32(serverproto.ErrorCode_ERROR_OK)
}
}
ackMsg := &serverproto.SCRoleGetSendNpcItemRewardAck{
Error: err,
RewardId: rewardId,
NpcHeart: newStoryNpcId,
StoryRewards: storyRewards,
}
this.ReplayGate(ackMsg, true)
}
func (this *Role) SetMapCartoon(id, status int32) {
bRet := this.GetRoleBase().SetNewMapCartoonId(id, status)
ackMsg := &serverproto.SCNewMapCartoonAck{

View File

@ -59,11 +59,11 @@ func (this *RoleBase) CopyData(base *serverproto.RoleBase) {
// 剧情//TODO wangzhaocan 后续放入RoleCommon
func (this *RoleBase) CopyStoryData(msgNtf *serverproto.SCRoleStoryNtf) {
msgNtf.Story = make([]int32, 0)
msgNtf.Story = make([]int64, 0)
for _, data := range this.roleBase.StoryId {
msgNtf.Story = append(msgNtf.Story, data)
}
msgNtf.StoryNpc = make([]int32, 0)
msgNtf.StoryNpc = make([]int64, 0)
for _, data := range this.roleBase.StoryNpcId {
msgNtf.StoryNpc = append(msgNtf.StoryNpc, data)
}
@ -1900,23 +1900,23 @@ func (this *RoleBase) SetStoryId(story *serverproto.KeyValueType) serverproto.Er
tmpVal := story.Key*1000 + story.Value
for index, data := range this.roleBase.StoryId {
//不是这个Key
if data/1000 != story.Key {
if data/1000 != int64(story.Key) {
continue
}
//重复发送
if data == tmpVal {
if data == int64(tmpVal) {
return serverproto.ErrorCode_ERROR_OK
}
//删除当前元素
this.roleBase.StoryId = append(this.roleBase.StoryId[:index], this.roleBase.StoryId[index+1:]...)
//记录新的元素
this.roleBase.StoryId = append(this.roleBase.StoryId, tmpVal)
this.roleBase.StoryId = append(this.roleBase.StoryId, int64(tmpVal))
this.SetDirty(true)
return serverproto.ErrorCode_ERROR_OK
}
this.roleBase.StoryId = append(this.roleBase.StoryId, tmpVal)
this.roleBase.StoryId = append(this.roleBase.StoryId, int64(tmpVal))
this.SetDirty(true)
return serverproto.ErrorCode_ERROR_OK
}
@ -1935,23 +1935,23 @@ func (this *RoleBase) SetStoryNpcId(storyNpc *serverproto.KeyValueType) serverpr
tmpVal := storyNpc.Key*1000 + storyNpc.Value
for index, data := range this.roleBase.StoryNpcId {
//不是这个Key
if data/1000 != storyNpc.Key {
if data/1000 != int64(storyNpc.Key) {
continue
}
//重复发送
if data == tmpVal {
if data == int64(tmpVal) {
return serverproto.ErrorCode_ERROR_OK
}
//删除当前元素
this.roleBase.StoryNpcId = append(this.roleBase.StoryNpcId[:index], this.roleBase.StoryNpcId[index+1:]...)
//记录新的元素
this.roleBase.StoryNpcId = append(this.roleBase.StoryNpcId, tmpVal)
this.roleBase.StoryNpcId = append(this.roleBase.StoryNpcId, int64(tmpVal))
this.SetDirty(true)
return serverproto.ErrorCode_ERROR_OK
}
this.roleBase.StoryNpcId = append(this.roleBase.StoryNpcId, tmpVal)
this.roleBase.StoryNpcId = append(this.roleBase.StoryNpcId, int64(tmpVal))
this.SetDirty(true)
return serverproto.ErrorCode_ERROR_OK
}

View File

@ -170,6 +170,18 @@ func init() {
role.(model2.RoleLogicOuter).SetRoleStoryNpc(msg.StoryNpcId)
})
serverproto.Handle_GAME_CSRoleGetSendNpcItemRewardReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
msg := ev.Msg().(*serverproto.CSRoleGetSendNpcItemRewardReq)
role := model2.RoleMag.GetRoleOrKick(cliId, ev)
if role == nil {
return
}
util.DebugF("uid=%v receive CSRoleGetSendNpcItemRewardReq msg=%v", role.GetUUid(), msg)
role.(model2.RoleLogicOuter).GetSendNpcItemReward(msg.ItemId, msg.ItemNum, msg.RewardId)
})
serverproto.Handle_GAME_CSNewMapCartoonReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
msg := ev.Msg().(*serverproto.CSNewMapCartoonReq)
role := model2.RoleMag.GetRoleOrKick(cliId, ev)

File diff suppressed because it is too large Load Diff

View File

@ -1431,9 +1431,9 @@ message CSRoleGuideNtf { //project game //RouteRule game
}
//线
message SCRoleStoryNtf {
repeated int32 Story = 1; //
repeated int64 Story = 1; //
KeyValueType map_cart = 2; //
repeated int32 StoryNpc = 3; //Npc好感度
repeated int64 StoryNpc = 3; //Npc好感度
}
//
message CSRoleStoryReq { //project game //RouteRule game
@ -1452,6 +1452,18 @@ message SCRoleStoryNpcAck {
int32 error = 1; //
KeyValueType story_npc_id = 2; //NPC好感度格式: NpcId+
}
//NPC物品的奖励
message CSRoleGetSendNpcItemRewardReq { //project game //RouteRule game
uint64 item_id = 1;
uint32 item_num = 2;
int32 reward_id = 3;
}
message SCRoleGetSendNpcItemRewardAck {
int32 error = 1; //
int32 reward_id = 2;
KeyValueType npc_heart = 3; //NPC好感度格式: NpcId+
repeated KeyValueType story_rewards = 4; //
}
//
message CSNewMapCartoonReq{ //project game //RouteRule game //confirm

File diff suppressed because it is too large Load Diff

View File

@ -747,6 +747,8 @@ enum protoMsgId{
SC_ROLE_STORY_NPC_ACK = 1765; // SCRoleStoryNpcAck **SCRoleStoryNpcAck **login.proto ** [SCRoleStoryNpcAck]
CS_FRUIT_CHAT_REQ = 1766; // CSFruitChatReq **CSFruitChatReq **login.proto **game,fruit [CSFruitChatReq]
SC_FRUIT_CHAT_NTF = 1767; // SCFruitChatNtf **SCFruitChatNtf **login.proto **game,fruit [SCFruitChatNtf]
CS_ROLE_GET_SEND_NPC_ITEM_REWARD_REQ = 1768; // NPC物品的奖励 **CSRoleGetSendNpcItemRewardReq **login.proto **game [CSRoleGetSendNpcItemRewardReq]
SC_ROLE_GET_SEND_NPC_ITEM_REWARD_ACK = 1769; // SCRoleGetSendNpcItemRewardAck **SCRoleGetSendNpcItemRewardAck **login.proto ** [SCRoleGetSendNpcItemRewardAck]
SS_WEB_GM_CHAT_MSG_NTF = 3000; // SSWebGMChatMsgNtf **SSWebGMChatMsgNtf **logic.proto **db [SSWebGMChatMsgNtf]
SS_WEB_GM_ADD_MAIL_NTF = 3001; // SSWebGMAddMailNtf **SSWebGMAddMailNtf **logic.proto **social,game,db [SSWebGMAddMailNtf]
SS_WEB_GM_BAN_NTF = 3002; // SSWebGMBanNtf **SSWebGMBanNtf **logic.proto **social,game [SSWebGMBanNtf]

View File

@ -725,5 +725,7 @@ enum protoMsgId{
SC_ROLE_STORY_NPC_ACK = 1765; // SCRoleStoryNpcAck **SCRoleStoryNpcAck **login.proto ** [SCRoleStoryNpcAck]
CS_FRUIT_CHAT_REQ = 1766; // CSFruitChatReq **CSFruitChatReq **login.proto **game,fruit [CSFruitChatReq]
SC_FRUIT_CHAT_NTF = 1767; // SCFruitChatNtf **SCFruitChatNtf **login.proto **game,fruit [SCFruitChatNtf]
CS_ROLE_GET_SEND_NPC_ITEM_REWARD_REQ = 1768; // NPC物品的奖励 **CSRoleGetSendNpcItemRewardReq **login.proto **game [CSRoleGetSendNpcItemRewardReq]
SC_ROLE_GET_SEND_NPC_ITEM_REWARD_ACK = 1769; // SCRoleGetSendNpcItemRewardAck **SCRoleGetSendNpcItemRewardAck **login.proto ** [SCRoleGetSendNpcItemRewardAck]
}

View File

@ -573,6 +573,7 @@ var(
Handle_GAME_CSRoleStoryNpcReq =func(e rocommon.ProcEvent){panic("CSRoleStoryNpcReq not implements")}
Handle_GAME_CSFruitChatReq =func(e rocommon.ProcEvent){panic("CSFruitChatReq not implements")}
Handle_GAME_SCFruitChatNtf =func(e rocommon.ProcEvent){panic("SCFruitChatNtf not implements")}
Handle_GAME_CSRoleGetSendNpcItemRewardReq =func(e rocommon.ProcEvent){panic("CSRoleGetSendNpcItemRewardReq not implements")}
Handle_GAME_SSWebGMAddMailNtf =func(e rocommon.ProcEvent){panic("SSWebGMAddMailNtf not implements")}
Handle_GAME_SSWebGMBanNtf =func(e rocommon.ProcEvent){panic("SSWebGMBanNtf not implements")}
Handle_GAME_SSWebGMNoticeNtf =func(e rocommon.ProcEvent){panic("SSWebGMNoticeNtf not implements")}
@ -1555,6 +1556,7 @@ func GetMessageHandler(sreviceName string) rocommon.EventCallBack {
case *CSRoleStoryNpcReq: Handle_GAME_CSRoleStoryNpcReq(e)
case *CSFruitChatReq: Handle_GAME_CSFruitChatReq(e)
case *SCFruitChatNtf: Handle_GAME_SCFruitChatNtf(e)
case *CSRoleGetSendNpcItemRewardReq: Handle_GAME_CSRoleGetSendNpcItemRewardReq(e)
case *SSWebGMAddMailNtf: Handle_GAME_SSWebGMAddMailNtf(e)
case *SSWebGMBanNtf: Handle_GAME_SSWebGMBanNtf(e)
case *SSWebGMNoticeNtf: Handle_GAME_SSWebGMNoticeNtf(e)
@ -2717,6 +2719,8 @@ func init() {
registerInfo(1765, reflect.TypeOf((*SCRoleStoryNpcAck)(nil)).Elem(), 0)
registerInfo(1766, reflect.TypeOf((*CSFruitChatReq)(nil)).Elem(), 0)
registerInfo(1767, reflect.TypeOf((*SCFruitChatNtf)(nil)).Elem(), 0)
registerInfo(1768, reflect.TypeOf((*CSRoleGetSendNpcItemRewardReq)(nil)).Elem(), 0)
registerInfo(1769, reflect.TypeOf((*SCRoleGetSendNpcItemRewardAck)(nil)).Elem(), 0)
registerInfo(3000, reflect.TypeOf((*SSWebGMChatMsgNtf)(nil)).Elem(), 0)
registerInfo(3001, reflect.TypeOf((*SSWebGMAddMailNtf)(nil)).Elem(), 0)
registerInfo(3002, reflect.TypeOf((*SSWebGMBanNtf)(nil)).Elem(), 0)

File diff suppressed because it is too large Load Diff

View File

@ -193,7 +193,7 @@ message RoleBase {
RoleData role_data = 10; //
FashionData fashion_data = 11; //
HeadInfo head_Info = 13; //
repeated int32 story_id = 14; //
repeated int64 story_id = 14; //
KeyValueType cguide = 15; //Compulsory guidance强制引导 key引导组IDValue引导步骤ID
KeyValueType map_animation = 16; //
@ -217,7 +217,7 @@ message RoleBase {
repeated KeyValueType watch_ad = 32; //广
bool google_comment = 33; //
int32 first_change = 34; //
repeated int32 story_npc_id = 35; //NPC好感度
repeated int64 story_npc_id = 35; //NPC好感度
}
//