@iamzealotwang
2015-08-19T08:06:42.000000Z
字数 9420
阅读 876
任务
任务分为 "自己可完成型任务","多人合作型任务""特殊类型任务"
自己可完成任务(Single Mission)
"Single Mission" 为 用户不需要通过和其他人互动可以独立完成的任务
其任务步骤 包含且仅包含在 任务检测类型 中定义的程序可以检测的步骤
多人合作型任务(Mult Mission)
"Mult Mission"仅为一种特殊类型Mission
定义:
"主动方" : 任务发起的一方,一个Mult Mission中仅有一个"主动方"
"被动方" : 配合主动方完成任务的一方,一个Mult Mission中有多个被动方
流程:
主动方进入"特殊的看图说话面板"
主动方发出任务邀请
服务器根据 ** 互动型任务找人说明 ** 中定义的方式将任务推送给N个被动方(N根据看图说话中数量定义)
只要有一个被动方选择接受任务,则主动方的任务及触发
主动方和被动方作为互动的一组对象,在1v1 Chat模块中进行交互
交互方式包括:
互相发文字信息,照片,语音信息
当满足任务配置中要求的步骤数后及当前一组主动-被动(子任务)结束
在评分以后双方可以去领奖
特殊类型任务(Special Mission)
当特殊节日or特殊需求,可以直接将某个任务推送给用户1次
更新流程:
更改任务Config文件
后端直接修改数据库把任务推送给每个用户
互动型任务唯一性:A和B双方只能有同一个互动型任务,无论该任务状态是睡眠,进行.只要存在任务及A发送2000+任务时候就不会匹配上B (A,B可以为VIP,可以为双语明星.及该逻辑不区分人物属性)
推送用户数: 定义当发送2000任务时候,系统给该用户匹配的人数
推送用户选择逻辑: 定义 推送用户数的选择逻辑(及如何从众多的用户中挑出该一批用户)
可以被接受任务数: 推送用户数比如是20,及这20个用户代表又机会接受到该任务,如果可以被接受任务数为5,则表示这20个人中仅仅有5个人可以真正收到这个人物. 逻辑采取先到先得的方式
新用户: 注册少于2周的用户
可推送新用户: 首先为新用户其次该用户被匹配的双语明星数少于2
所有推送均不推送双语明星
所有推送仅推送异国用户
双语明星
- 推送用户数: 20
- 推送用户选择逻辑: 先从
新用户
找,不够再从其他VIP中找,再不够就不推- 可以被接受任务数: 5 / 目前实现为10
Vip用户
- 推送用户数: 20
- 推送用户选择逻辑: 根据兴趣匹配度(其中要有15个VIP)
- 可以被接受任务数: 2 / 目前实现为10
普通用户
- 无法发送2000任务
双语明星
- 推送人数: 20
- 推送用户选择逻辑: 先从
新用户
找,不够再从其他VIP中找,再不够及不推- 可以被接受任务数: 10 / 目前实现为10
VIP用户
- 推送人数: 20
- 推送用户选择逻辑: 根据兴趣匹配度(其中要有15个VIP,VIP中包含双语明星)
- 可以被接受任务: 5 / 目前实现为10
普通用户
- 无法发送2000任务
任务Tag信息:
互动任务的开启任务(MetaID 2000+)在配置表中会指定当前任务需要显示的卡片Tag信息
在看图说话的请求Rpc接口(requestCardList)中加入参数 missionID, 服务器端根据missionID读取配置文件取得当前Mission应该显示的卡片Tag,根据该Tag推送相应的卡片
任务请求CoolDown:
任务请求按钮每次点击有CoolDown间隔(12小时)
客户端发送请求"新任务"接口后,服务端重置CoolDown时间(12小时x60分钟x60秒=57600)
客户端根据CoolDown时间显示倒计时
服务端不做 "当前是否可以请求新任务"的逻辑检测
限定
- 互动型任务一在A和B之间只能同时发生一组(A和B不能同时进行两组互动任务)
新手任务
- 在请求任务的接口(requsetNewMission)中有一个参数(is_new_user)如果该值为true则给客户端推送新手任务
- 客户端将该Boolean值存在(playerProfile中的tutorialIndex,对应后端为userInfo中的newUserIndex)的第20位
> - 进入某个Club(ex:进入动物Club) -----> **MissionTypeClubEnter**
> - Club中上传照片 -----> **MissionTypeClubUploadPhoto**
> - Club中Like照片 -----> **MissionTypeClubLikePhoto**
> - Club中给照片Feedback -----> **MissionTypeClubFeedbackOnPhoto**
> - Club中给照片Comment -----> **MissionTypeClubCommentOnPhoto**
> - Club中给别人ThankYou -----> **MissionTypeClubGiveThankYou**
> - CardCenter 发送卡片 -----> **MissionTypeCardSendCard**
> - CardCenter Like一张卡片 -----> **MissionTypeCardLikeCard**
> - CardCenter 翻看一张卡片 -----> **MissionTypeCardFlipCard**
> - 1v1 Chat中发送文字 -----> **MissionTypeChatWriteTextMessage**
> - 1v1 Chat中发送图片 -----> **MissionTypeChatSendImageMessage**
> - 1v1 Chat中发送语音 -----> **MissionTypeChatSendVoiceMessage**
> - 更改Profile -----> **MissionTypeProfileEdit**
> - 商店中购买物品 -----> **MissionTypeShopBuyCoinsItme**
> - 更换家中壁纸 -----> **MissionTypeHomeChangeBackground**
> - 更换家中墙上照片 -----> **MissionTypeHomeChangeWallImage**
> - 访问好友家 -----> **MissionTypeFriendVistiFriend**
> - 发送好友请求 -----> **MissionTypeFriendSendAddFriendRequest**
> - 接受好友请求 -----> **MissionTypeFriendAcceptFriendRequest**
> - 使用虫洞 -----> **MissionTypeSceneUseWormhole**
> - 照片审核 -----> **MissionTypeExaminePhoto**
允许在title,desc的描述信息里面出现转义符号
#n# 转化为换行
#ownerUserName# 转化为任务所有者的名字
#playerName# 转化为当前用户的名字
MissionConfig中对于互动型任务存在missionContry限定,表示该任务仅仅可以推送给相应(EN,CN,ALL)的语言区域
MissionConfig的Mission会指定missionType
- selfMission //单独任务
- passivityMission //互动任务的被动任务
- engageMission //互动任务的主动任务
- initiativeMission //互动任务的发起任务
MissionConfig中的评分说明
- isShowMissionFinishQualityMark //是否显示任务完成质量评分
- isShowVoicePracticeMark //是否显示语音质量评分
- isShowTextPracticeMark //是否显示练习质量评分
//tutorialMissionArray 新手教学Mission
//selfMissionArray 可以自己完成的Mission
//initiativeMissionArray 主动发触发多人任务的Mission(一旦发完卡片后该任务结束)
//engageMissionArray 互动型任务中-主动方的Mission
//passivityMissionArray 互动型任务中-被动方的Mission
//在initiativeMissionArray中有MissionTags,后端用于兴趣相投模块查找卡片
//isUseStepReward 表示是否使用分步的奖励配置,如果为True则奖励读取missionStepArray中的值
//isOnceDaily 是否为每日仅推送一次的任务
{
"tutorialMissionArray": [
{
"missionID": 1,
"missionImgURL": "http://114.215.136.114:8085/metafile/missionImg/20.png",
"missionType": "selfMission",
"title_CN": "完善个人资料",
"title_EN": "改自己的Profile",
"desc_CN": "在家中好让更多的人了解你,想与你做朋友。",
"desc_EN": "改自己的Profile",
"rewardCoins": 100,
"rewardExp": 100,
"isUseStepReward": false,
"isOnceDaily":false //是否为每日仅推送一次的任务
"missionStepArray": [
{
"rewardCoins": "70",
"rewardExp": "20",
"rewardDiamond": "0",
"index": 0,
"desc_CN": "完善个人资料",
"desc_EN": "改自己的Profile",
"triggerType": "MissionTypeProfileEdit",
"triggerNum": 1
}
]
}
],
"selfMissionArray": [
{
"missionID": 1001,
"missionType": "selfMission",
"title_CN": "动物保护神",
"title_EN": "Animal Guardian",
"desc_CN": "动物俱乐部上传照片",
"desc_EN": "Hey! Warrior of Animuick share it with other warrior in Animal Club!",
"rewardCoins": 100,
"rewardExp": 100,
"missionStepArray": [
{
"index": 0,
"desc_CN": "在动物俱乐部中上传1张动物照片",
"desc_EN": "Upload 1 Photos in Animal Club",
"triggerType": "MissionTypeClubUploadPhoto",
"ext": {
"clubID": 3
},
"triggerNum": 1
},
{
"index": 1,
"desc_CN": "在动物俱乐部上传照片的任务",
"desc_EN": "Upload 1 Photos in Animal Club",
"triggerType": "MissionTypeClubUploadPhoto",
"ext": {
"clubID": 3
},
"triggerNum": 1
}
]
}
],
"initiativeMissionArray": [
{
"missionContry": "CN", //哪个国家的用户可以接收到当前Mission (CN,EN,ALL)
"missionID": 2000,
"engageMissionID": 3000,
"rewardCoins": 100,
"rewardExp": 100,
"title": "你最喜欢的男歌星",
"desc": "你最喜欢的男歌星是谁呢?在卡片中心找一个你最喜欢的男歌星并且告诉大家为什么",
"missionTags": "女歌星#女演员"
"missionStepArray": [
{
"index": 0,
"desc": "发送一张男歌星的卡片",
"triggerType": "missionSendCard",
"triggerNum": 1
}
]
}
],
"engageMissionArray": [
{
"missionID": 3000,
"relateMissionID": 4000,
"missionType": "engageMission",
"title": "和#UserName#一起聊聊你最喜欢的男歌星",
"desc": "#UserName#想觉得你发的卡片很有兴趣呢,快快和他一起聊聊你喜欢的这位男歌星吧!",
"rewardCoins": 100,
"rewardExp": 100,
"minimumFinishGroupNum": 3,
"broadcastGroupNum": 10,
"isShowMissionFinishQualityMark": true, //是否显示任务完成质量评分
"isShowVoicePracticeMark": true, //是否显示语音质量评分
"isShowTextPracticeMark": true, //是否显示练习质量评分
"missionStepArray": [
{
"index": 0,
"desc": "和#UserName#聊聊和这个男歌星相关的信息",
"triggerType": "typeChatWriteTextMessage",
"triggerNum": 3,
"finishAction": "relateMissionNextStep" //当前任务关联任务进入下一步
},
{
"index": 1,
"desc": "等待#UserName#给你的回复,记得要常回来看看呦!",
"triggerType": "waitServer" //等待服务器设置该步完成
},
{
"index": 2,
"desc": "Hey!太厉害了,再和#UserName#聊聊这个歌星吧",
"triggerType": "typeChatWriteTextMessage",
"triggerNum": 2
}
]
}
],
"passivityMissionArray": [
{
"missionID": 4000,
"missionType": "passivityMission",
"missionImgURL": "http://114.215.136.114:8085/metafile/missionImg/MissionTest.png",
"relateMissionID": 3000, //和当前任务关联的任务MetaID
"title": "Chat with #ownerUserName# about the male singer!",
"desc": "Hey! #UserName# is big fan of this singer, why don't you guys chat about this?",
"rewardCoins": 100,
"rewardExp": 100,
"isShowMissionMark": true, //是否显示任务完成质量评分
"isShowVoicePracticeMark": true, //是否显示语音质量评分
"isShowTextPracticeMark": true, //是否显示练习质量评分
"missionStepArray": [
{
"index": 0,
"desc": "Give #UserName# some feedback base on what he wrote",
"triggerType": "typeChatWriteTextMessage",
"triggerNum": 1,
"finishAction": "relateMissionStart" //当前任务关联任务开始
},
{
"index": 1,
"desc": "Wating #UserName# write more message.",
"triggerType": "waitServer" //等待服务器设置该步完成
},
{
"index": 2,
"desc": "Give #ownerUserName# some feedback base on what he wrote",
"triggerType": "typeChatWriteTextMessage",
"triggerNum": 1,
"finishAction": "relateMissionNextStep" //当前任务关联任务进入下一步
}
]
}
]
}
SelfMissionVo
{
"uuid":"xxxxx",
"missionMetaID": 2000,
"isFinish": false, //当前任务完成
"isGainReward": false, //当前任务已领奖
"isTodayInProgress":true //是否今日有进展(前端用于任务排除)
"userName":"xxx",
"userAvtartImgURL":"xxxx",
"userID":"xxxx",
"missionStepArray": [
{
"index": 0,
"stepNum": 3,
"isFinish": true
},
{
"index": 1,
"stepNum": 3,
"isFinish": true
},
{
"index": 2,
"stepNum": 3,
"isFinish": false
}
]
}
function requestMissionMetaConfigURL
return
{
"uri":"xxxxxxx" //返回的地址无Http前缀
}
function requestDailyMissionListAndRefreshTime
parameter
{
"clientDate":"0000000000000" //玩家当前的时间秒数(后端用于判断是否执行清空逻辑)
}
return
{
"historyStarNum":5 //成就页面中需要展示的星星数量
"activeMissionVoList":[] //当前活跃的任务列表(里面的格式为MissionVo)
"newMissionRefreshCountDownTime":3000 //刷新按钮剩余倒计时时间
}
function requsetNewMission
parameter
{
"totoalInteractiveMissionNum":1 //当前角色已有的互动任务数量
"num":7 //请求的任务数量
"is_new_user": //当前是否请求新手任务
}
return
{
"newMissionVoList":[] //新的任务列表(里面的格式为MissionVo)
}
function commandMissionVoChange
parameter
{
"uuid":"xxxxx" //Mission的唯一ID
"missionMetaID":3000 //
"stepIndex":1 //第几步有进展
"stepAddNum":1 //当前步骤加ji
"isStepFinish":true //当前步骤是否完成
"isMissionFinish":true //当前任务是否完成
"isEngageMission":true //当前任务是否为互动型任务
}
function commandGainMissionReward
parameter
{
"uuid":"xxxxx"
"missionMetaID":3000
}
function commandRatingOnInteractiveMission
parameter
{
"missionUUID":xxx,
"interactUserID":"xxx", //和当前用户互动的那个人的ID
"finshQualityRating":1~5,
"voiceRating":1~5,
"languageRating":1~5
}
function commandMissionCardChat
parameter
{
"cardID":"xxxxxx"
"userIDArray":[]
"message":"xxx"
"mission_id":"xxx"
"country":0
}
function commandAddTodayStarNum
parameter null
function requestMissionMetaConfigURL
parameter null
return