任务 - wolfcon/NGA-API-Documents GitHub Wiki
15 任务
15.1 获取任务信息
输入地址
/nuke.php?
输入参数
__lib //固定为 mission
__act //固定为 get
event //触发任务的事件ID 取值 1:签到事件
type //任务类型bit 取值 1:需要计数器的任务/2:可以重复完成的任务
available //是否只返回对用户有效(可完成)的任务 取值 1或0 (目前只能取1)
fid //任务限定的版面ID 不设为不限制 0为不属于特定版面的任务
tid //任务限定的主题ID 暂时未用
gid //任务限定的用户组ID 暂时未用
__output //输出格式 见1.1
提交后服务器会返回满足条件(event/type/available)的任务
论坛源码中对应
./nuke/lib_mission.php , lib_mission::__act_get()
返回信息
window.script_muti_get_var_store={
"data":{
"0":{
"0":{
"id":1, //任务ID
"name":"测试任务", //任务名
"info":"测试\n 任务信息", //任务的文字描述 可以使用bbscode
"detail":"任务必须满足以下条件:\n\n\n
任务可以获得以下奖励:\n
道具:激活码/推荐码(1,1) x 2, 道具:行动力(2,1) x 1, 铜币:10, 声望:用户the_great_sea(7)的声望(-7) +100, 声望:德鲁伊(11) +100, \n\n
任务只能完成一次\n\n", //任务的详细信息
"stat":"目前已经连续签到0天\n共计签到0\n\n任务于 2014-04-11 18:11:48 完成\n\n" //当前用户的此任务完成状况
"raw_detail":{}, //任务详细信息的原始格式 见15.2
"stat_detail":{}, //完成状况的原始格式 见15.3
}
"1":.... //可能有多个
}
}
,
"time":1397451364
}
15.2 任务详细信息的原始格式
array(
lib_mission::__MD_ID =>123, #id
lib_mission::__MD_NAME => '任务名',
lib_mission::__MD_INFO => '任务信息 可以使用bbscode 不要有换行',
lib_mission::__MD_COND_AND => array( #必需满足的条件
array(lib_mission::_COND_SINGIN_CONTINUE , 123), #全局连续签到时间
array(lib_mission::_COND_SINGIN_SUM , 123), #全局总和签到时间
array(lib_mission::_COND_COUNTER_SINGIN_CONTINUE , 123),#任务计数器的连续签到时间
array(lib_mission::_COND_COUNTER_SINGIN_SUM , 123),#任务计数器的总和签到时间
),
lib_mission::__MD_COND_OR => array( #只需满足一个的条件 结构同上
array(lib_mission::_COND_USER_ACTIVE_EQUAL , 1),//激活状态等于(如果用户激活级别1以上全视为1)
array(lib_mission::_COND_MUST_CLIENT , 1),//必须是认证的客户端
array(lib_mission::_COND_GOLD , minValue),//铜币大于等于
array(lib_mission::_COND_REPUTATION , rid, minValue),//声望大于等于
),
lib_mission::__MD_FILTER_AND =>array(#显示任务必需满足的条件 结构同上 (选择available任务前检查
),
lib_mission::__MD_FILTER_OR =>array(#显示任务只需满足一个的条件 结构同上(选择available任务前检查
),
lib_mission::__MD_TYPE => _TYPE_SIGNIN_COUNTER|_TYPE_REPEAT|..., #任务类型bit
lib_mission::__MD_COOLDOWN_DAYS => 123, #重复完成的时间间隔 大于等于天
lib_mission::__MD_EVENT => _EVENT_SIGNIN/..., #触发任务完成的事件类型
lib_mission::__MD_REWARD_FIX => array(
lib_mission::_REWARD_ITEM => array( #道具类任务奖励
array(#道具1
lib_mission::_ITEM_TYPE=>123, #道具的type
lib_mission::_ITEM_SUB_TYPE => 123, #道具的sub_type
lib_mission::_ITEM_COUNT=> 123, #奖励道具的数量
),
array(#道具2
lib_mission::_ITEM_TYPE=>123,
lib_mission::_ITEM_SUB_TYPE => 123,
lib_mission::_ITEM_COUNT=> 123,
),...
),
lib_mission::_REWARD_CODE => array( #奖品码类任务奖励
array(#奖品码1
lib_mission::_CODE_INFO=>123, //奖品码的说明
),
array(#奖品码2
lib_mission::_CODE_INFO=>123, //奖品码的说明
),...
),
lib_mission::_REWARD_GOLD => 123,#任务奖励 铜币数
lib_mission::_REWARD_REPUTATION => array(#任务奖励 声望
声望id => 声望值,
...
),
),
lib_mission::__MD_REWARD_RANDOM => array( #随机奖励
123=>array( #随机组1 key为权重 随机计算方式为 srand(1,权重1+权重2+权重3...) 然后检查结果落在哪个权重范围内
... #随机组内结构与固定奖励相同
),
234=>array( #随机组2
),
...
)
lib_mission::__MD_FILTER_AND => 16,//同cond
lib_mission::__MD_FILTER_OR => 17,
lib_mission::__MD_COST_FIX => 18,//同reward
lib_mission::__MD_COST_RANDOM => 19,
lib_mission::__MD_END_TIME =>123,#任务的结束时间 不设为无限
lib_mission::__MD_FID =>123,//过滤条件
lib_mission::__MD_TID =>123,//过滤条件
lib_mission::__MD_GID =>123,//过滤条件
lib_mission::__MD_MANUAL_COUNT_GROUP =>123,//如果任务是用户手动请求计数 那么在用户请求某任务计数的时候 客户端应该自动请求相同group的任务计数
lib_mission::__MD_COUNTER_TYPE =>lib_mission::_COUNTER_SIGNIN #计数器类型
);
//其中用到的key
const __MD_ID = 1;
const __MD_COND_AND = 2;
const __MD_COND_OR = 3;
#key of mission data array __MD_COND
const _COND_SINGIN_CONTINUE = 1;//不要用这个
const _COND_SINGIN_SUM = 2;//不要用这个
const _COND_COUNTER_SINGIN_CONTINUE = 3;//任务计数器连续签到
const _COND_COUNTER_SINGIN_SUM = 4;//任务计数器总签到
const _COND_USER_ACTIVE_EQUAL = 5;//激活状态等于(如果用户激活级别1以上全视为1)
const _COND_MUST_CLIENT = 6;//必须是认证的客户端
const _COND_GOLD = 7;//铜币大于等于
const _COND_REPUTATION = 8;//声望大于等于
const _COND_COUNTER_TOPIC_SHARE_LEAST = 9; // 任务计数器,至少分享主题的数量
const _COND_COUNTER_BUILD_TEAM_LEAST = 10; // 任务计数器,至少访问寻求组队的次数
const _COND_GOLD_LESS = 11;//铜币小于等于
const _COND_REGDATE_LESS = 12;//注册时间小于
const _COND_REGDATE_GREAT = 13;//注册时间大于
const _COND_TOPIC_GREAT = 14;//1时间之后的主题数大于等于2
const _COND_COUNTER_CUSTOM_SUPPORT = 15; // 任务计数器,某特定活动计数 由服务器通过接口__act_server_custom_task_count_v0_add发送计数数据触发
const __MD_TYPE = 4;//类型bit 用于select任务时过滤
const _TYPE_COUNTER = 1;#需要计数的任务
const _TYPE_REPEAT = 2;#可以重复完成的任务
const _TYPE_ACTIVE = 4;#必须用户级别激活级别1或更高
const _TYPE_NOACTIVE = 8;#必须用户激活级别0
const _TYPE_CLIENT = 16;#必须是认证的客户端
const _TYPE_HIDE_COND = 32;#不公开任务条件
const _TYPE_AUTO_CHECK = 64;#客户端在获取到available任务时应自动检查__act_check_mission任务是否完成
const _TYPE_MANUAL_CHECK = 128;#客户端在获取到available任务后 应由用户自己操作检查任务是否完成
const __MD_COOLDOWN_DAYS = 5;
const __MD_EVENT = 6;#触发任务的事件
const _EVENT_SIGNIN = 1; #签到事件
const _EVENT_TOPIC_SHARE = 2; # 主题分享事件
const _EVENT_BUILD_TEAM = 3; # 组队事件
const _EVENT_CUSTOM_SUPPORT = 4; # 组队事件
const __MD_NAME = 9;
const __MD_INFO = 10;
const __MD_END_TIME = 11;
const __MD_FID = 12;//任务所属fid 用于select任务时过滤
const __MD_TID = 13;//任务所属tid 用于select任务时过滤
const __MD_GID = 14;//任务所属用户组id 用于select任务时过滤
const __MD_REWARD_FIX = 7;
const __MD_REWARD_RANDOM = 8;
#key of __MD_REWARD_FIX element
const _REWARD_ITEM = 1;#任务奖励 道具 array(item1, item2, ...)
#key of __MD_REWARD_ITEM element
const _ITEM_TYPE=0;
const _ITEM_SUB_TYPE=1;
const _ITEM_COUNT=2;
const _REWARD_GOLD = 2;#任务奖励 铜币数
const _REWARD_REPUTATION = 3;#任务奖励 声望
const _REWARD_CODE = 4;#任务奖励 任意奖品码
const _CODE_ITEM_ID = 0;#奖品码的占位item id 每种奖品必须不同 必须是type4 subtype1(奖品码储存在pw_items_code count字段必须为0
const _CODE_REWARD_COOLDOWN_LIMIT = 1;#奖品码发放的cooldown时间(秒<3600 前一次获奖的cooldown时间内中奖用户无法再次获奖
const _CODE_REWARD_USER_LIMIT = 2;//每个用户只能获得一个码
const _CODE_INFO = 3;//奖品码的说明 可能为空
const _CODE_REWARD_COOLDOWN_RANGE = 4;#奖品码发放的cooldown时段(秒<86400 此时段内只能有人获得一次奖品
const _REWARD_178_API = 5;#任务奖励 接口发送积分
const _REWARD_ACTIVE = 6;#任务奖励 生成一个激活接口使用的验证码
const __MD_COUNTER_TYPE = 15;
const _COUNTER_SIGNIN= 1;#计数器类型 签到
const _COUNTER_TOPIC_SHARE = 2; # 计数器类型 主题分享 对应_COND_COUNTER_TOPIC_SHARE_LEAST
const _COUNTER_BUILD_TEAM = 3; # 计数器类型 组队 对应_COND_COUNTER_BUILD_TEAM_LEAST
const _COUNTER_CUSTOM_SUPPORT = 4; # 计数器类型 对应_COND_COUNTER_CUSTOM_SUPPORT
const __MD_FILTER_AND = 16;//同cond
const __MD_FILTER_OR = 17;
const __MD_COST_FIX = 18;//同reward
const __MD_COST_RANDOM = 19;
const __MD_MANUAL_COUNT_GROUP = 20; //如果任务是用户手动请求计数 那么在用户请求某任务计数的时候 客户端应该自动请求相同group的任务计数
const __MD_ORDER = 21;//排序权重 小的在前
const __MD_START_TIME = 22;//任务起始时间 未到时间的应不显示
15.3 完成状况的原始格式
array(
lib_mission::__STAT_CHECK_IN_C=>123, //连续签到次数
lib_mission::__STAT_CHECK_IN_S=>123, //总签到次数
lib_mission::__STAT_COMPLETE_TIME=>123, //任务完成的时间
....
)
const __STAT_CHECK_IN_C = 1;//连续签到次数 对应_COUNTER_SIGNIN
const __STAT_CHECK_IN_S = 2;//总签到次数 对应_COUNTER_SIGNIN
const __STAT_COMPLETE_TIME = 3;//任务完成的时间 对应_COUNTER_*
const __STAT_DONE_TIME = 4; # 任务最后一次计数时间
const __STAT_CUSTOM_COUNTER = 5; # 任务计数值 对应_COUNTER_CUSTOM_SUPPORT
15.4 检查特定的任务
输入地址
/nuke.php?
输入参数
__lib //固定为 mission
__act //固定为 check_mission
mid //任务的id
no_complete //=1 时检查任务时不会自动完成任务
__output //输出格式 见1.1
提交后服务器会检查是否能完成特定id的任务 如能完成会完成之
论坛源码中对应
./nuke/lib_mission.php , lib_mission::__act_check_mission()
返回信息
window.script_muti_get_var_store={
"data":{
0:{
"0":{//如果用户有可能完成任务 但是目前不满足完成条件 , 任务信息在这里
"0":{
"id":1, //任务ID
"name":"测试任务", //任务名
"info":"测试\n 任务信息", //任务的文字描述 可以使用bbscode
"detail":"任务必须满足以下条件:\n\n\n
任务可以获得以下奖励:\n
道具:激活码/推荐码(1,1) x 2, 道具:行动力(2,1) x 1, 铜币:10, 声望:用户the_great_sea(7)的声望(-7) +100, 声望:德鲁伊(11) +100, \n\n
任务只能完成一次\n\n", //任务的详细信息
"stat":"目前已经连续签到0天\n共计签到0\n\n任务于 2014-04-11 18:11:48 完成\n\n" //当前用户的此任务完成状况
"raw_detail":{}, //任务详细信息的原始格式 见15.2
"stat_detail":{}, //完成状况的原始格式 见15.3
}
}
"1":{//如果本次检查中完成了任务 , 任务信息在这里 , 如果设置了no_complete则为达成完成条件的任务信息
"0":{
"id":1, //任务ID
"name":"测试任务", //任务名
"info":"测试\n 任务信息", //任务的文字描述 可以使用bbscode
"detail":"任务必须满足以下条件:\n\n\n
任务可以获得以下奖励:\n
道具:激活码/推荐码(1,1) x 2, 道具:行动力(2,1) x 1, 铜币:10, 声望:用户the_great_sea(7)的声望(-7) +100, 声望:德鲁伊(11) +100, \n\n
任务只能完成一次\n\n", //任务的详细信息
"stat":"目前已经连续签到0天\n共计签到0\n\n任务于 2014-04-11 18:11:48 完成\n\n" //当前用户的此任务完成状况
"raw_detail":{}, //任务详细信息的原始格式 见15.2
"stat_detail":{}, //完成状况的原始格式 见15.3
}
}
"2":'vfervgrfed' //如果完成了任务 获得的奖励的文字描述 , 如果设置了no_complete则不会有这个
"3":'bgfrtsbgtfrrgbtrfd' //额外的文字提示 可能有也可能没有
}
}
,
"time":1397451364
}
15.5 签到类任务单独计数
输入地址
/nuke.php?
输入参数
__lib //固定为 mission
__act //固定为 checkin_count_add
mid //任务ID
no_complete//=1 检查任务时不会自动完成任务
__output //输出格式 见1.1
只对 self::__MD_EVENT => self::_EVENT_SIGNIN, self::__MD_TYPE=>self::_TYPE_COUNTER, 类的任务有效
提交后服务器会返回是否计数(签到)成功
计数后会自动进行15.4的任务检查
如果有计数后完成的任务则会返回成功信息
论坛源码中对应
./nuke/lib_mission.php , lib_mission::__act_checkin_count_add()
返回信息
window.script_muti_get_var_store={
"data":{
"0":{//计数结果
任务id1 : 7, //7表示 “今天已经签到了”
任务id2 : null,//空 或者不是数字都表示计数成功
.... //可能有多个
}
1:{//完成的任务的成功信息
... //结构见15.4中相同部分
}
}
,
"time":1397451364
}
15.6 任务列表显示流程
-
通过接口15.1获得对当前用户可用(available)的任务信息
-
列表显示任务 其中任务类型为_TYPE_AUTO_CHECK的任务应自动通过接口15.4尝试完成 其中任务类型为_TYPE_MANUAL_CHECK应显示“提交任务”按钮 用户点击时通过接口15.4尝试完成 其中任务类型为_TYPE_MANUAL_CHECK并且计数器类型为_COUNTER_SIGNIN的任务应显示“签到”按钮 用户点击时通过接口15.5签到并尝试完成 具有相同__MD_MANUAL_COUNT_GROUP的任务 在自动或用户对其中一个进行操作时 其他的也应进行同样操作