流程设计与交互

煮酒流程设计与交互

  • 只列出与煮酒1.0版本的差异之处

煮酒的redis数据记录

玩家煮酒信息

  • 与1.0相比,存储数据内容有变化
  • hash键名: hash:bargain_areaid_actid:player (areaid:区号 actid:期数id)
  • 内容:
    • key: 玩家账号
    • value: {
      “gotgoods”:[{“idx”:已完成的煮酒物品idx, “goodsid”:已完成的煮酒物品id, “getcount”: 该物品已完成的煮酒次数}, …],
      “getinggoods”:{“idx”:进行中的煮酒物品idx, “goodsid”:进行中的煮酒物品id, “code”: 进行中的煮酒码},
      “selectgoods:[{“idx”:选择未进行的煮酒物品idx, “goodsid”:选择未进行的煮酒物品id, “code”: 选择未进行的煮酒码}, …],
      “helplist”:[{“code”:助酒的煮酒码,acc:助酒的煮酒玩家账号,delprice:助酒的砍价数额}, …]
      }

煮酒码数据

  • 与1.0相比,存储数据内容有变化
  • hash键名: hash:bargain_areaid_actid:code
  • 内容:
    • key: 煮酒码
    • value: {“isget”:本次煮酒物品是否已获得,”master”:煮酒玩家账号,”goodsid”:煮酒物品id,”idx”:煮酒物品序号,code”:煮酒码,”helperlist”:[{“acc”:”助酒玩家账号”,”delprice”:砍价数额}],”totaldelprice”:总共的砍价数额,”sysdelprice”:系统赠送的砍价数额,”createtime”:开始煮酒时间}

助酒信息

  • 与1.0相比,存储数据有变化
  • hash键名: hash:bargain_areaid_actid:help
  • 内容:
    • key: ip或设备id
    • value: [使用该ip或设备id煮酒的玩家账号,…]

日志记录

  • 增加了切换煮酒物品和gm命令日志
    • 切换煮酒物品 {code=煮酒码, actid=活动期数, goodsid=煮酒物品id, op=”bargain swap”}
    • gm命令 {actid=活动期数, gmop=gm命令,opid=命令id, op=”bargain gm”}

活动内容交互

请求的opid

  • 增加放弃煮酒和gm命令

    -- 请求的opid
    local EmOpID = {
      bargain_getacklist      = 0,            -- 获取ack列表
      bargain_getconfig       = 1,            -- 获取配置
      bargain_getcurdata      = 2,            -- 获取当前煮酒信息
      bargain_start           = 3,            -- 选择一个煮酒的物品,生成唯一码,开始煮酒
      bargain_help            = 4,            -- 助酒砍价
      bargain_getgoods        = 5,            -- 获取煮酒物品
      bargain_gethelp         = 6,            -- 获取助酒信息
      bargain_helpntf         = 7,            -- 助酒通知
      bargain_giveup          = 8,            -- 放弃当前进行中的煮酒
    
      -- 以下是gm命令
      bargain_gm_help         = 1000,         -- gm助酒
    }
    

处理结果枚举

  • 增加部分返回码
-- 请求回复的结果
local EnumResult = {
    success                         = 0,    -- 成功
    module_close                    = 1,    -- 模块未开启
    param_error                     = 2,    -- 参数错误
    click_too_fast                  = 3,    -- 操作太频繁
    data_error                      = 4,    -- 数据错误(resid没有需要的数据)
    activity_no_open                = 5,    -- 活动未开启
    redis_error                     = 6,    -- redis操作失败
    redis_no_data                   = 7,    -- redis无数据
    help_limit_account              = 8,    -- 助酒失败,账号限制,已经历助酒
    help_limit_ip                   = 9,    -- 助酒失败,ip限制,已经历助酒
    help_limit_device               = 10,   -- 助酒失败,设备限制,已经历助酒
    bargain_none                    = 11,   -- 没有正在进行中的煮酒
    bargain_doing                   = 12,   -- 煮酒进行中
    bargain_free                    = 13,   -- 煮酒已达到最低价
    bargain_over                    = 14,   -- 煮酒已结束,已获得物品
    bargain_had                     = 15,   -- 已完成煮酒
    code_make_fail                  = 16,   -- 煮酒码生成失败
    help_not_exist                  = 17,   -- 助酒的活动不存在
    help_already                    = 18,   -- 已经助酒了
    help_over                       = 19,   -- 不再需要助酒了
    help_not_self                   = 20,   -- 不能给自己助酒
    help_none                       = 21,   -- 没有助酒过
    use_yuanbao_failed              = 22,   -- 扣元宝失败
    add_goods_failed                = 23,   -- 添加道具失败

    bargain_select_cur              = 24,   -- 选择了当前进行中的煮酒物品进行煮酒
    help_user_once                  = 25,   -- 只能给该玩家助酒一次
    bargain_doing_limit             = 26,   -- 达到了同时煮酒物品的数目上限
}

煮酒物品状态

  • 添加一个状态
-- 煮酒物品状态
local GoodsState = {
    canget      = 0,             -- 没有进行煮酒
    getting     = 1,             -- 选中进行中的煮酒
    got         = 2,             -- 煮酒完成
    select      = 3,             -- 选中未进行的煮酒
}

获取活动列表

请求内容参数

module_type=6
opid=0

回复内容

module_type=6
opid=0
data={
    result: EnumResult(success/activity_no_open),
    helpstate:该账号是否可以助酒(0:不可以,1:可以),
    bargainget:该账号是否有可领取的煮酒(0:没有,1:有),
    helphad:该账号是否已助酒(0:没有,1:有),
    actlist={
        [id]={
            id=第几期,
            actkey=活动key,
            actnamekey=名称key,
            name=模块名
        }
    }
}

注意

  • 该协议交互内容无变化,但需注意:
    (1)客户端在入口处判断该账号有没有助酒请根据helphad字段;
    (2)客户端在入口处判断该账号能不能助酒请根据helpstate字段;

获取活动配置

请求内容

module_type=6
opid=1
data={
id=第几期,
}

回复内容

module_type=6
opid=1
data={
    result:EnumResult(success/activity_no_open/param_error/redis_error/data_error),
    state=玩家煮酒状态PlayerState,
    helpstate=玩家助酒状态HelpState,
    helphad:该账号是否已助酒(0:没有,1:有),
    config={
        id=第几期,
        actkey=活动key,
        name=模块名,
        show=是否显示,
        begintime=开始时间,
        endtime=结束时间,
        countDown=倒计时,
    },
    goods_state_list=[
        {
            idx=物品序号,
            state=物品煮酒状态GoodsState
        },
        ...
    ]
}

注意

  • 该协议交互有变化:
    (1)原config.limitlevel不再下发,由客户端读取本地配置;
    (2)原config.goodslist改为goods_state_list,煮酒物品列表由客户端读取本地配置,状态根据goods_state_list设置(皮肤需要客户端另加判断是否已拥有);

获取煮酒码数据

请求内容

module_type=6
opid=2
data={id=第几期}

回复内容

module_type=6
opid=2
data={
    result:EnumResult(success/activity_no_open/param_error/redis_error/data_error/bargain_none),
    bargaindata={
        state=状态,
        isget=是否已获得本次煮酒物品,
        master=煮酒玩家账号,
        goodsid=煮酒物品id,
        code=煮酒码,
        totaldelprice=总共的砍价数额,
        sysdelprice=系统赠送砍价数额,
        createtime=开始煮酒时间,
        helperlist=[
            {
                acc=助酒玩家账号,
                head=头像,
                sex=性别,
                nickname=昵称,
                delprice=砍价数额
            },
            {...}
        ]
    }
}

注意

  • 该协议交互有变化,bargaindata添加了字段isget和sysdelprice

选择物品开始煮酒

请求内容

module_type=6
opid=3
data={
    id=第几期,
    idx=物品序号,
    goodsid=物品id
}

回复内容

module_type=6
opid=3
data={
    result:EnumResult(success/activity_no_open/param_error/redis_error/data_error/bargain_doing/bargain_had/bargain_select_cur/bargain_doing_limit),
    bargaindata={
        state=状态,
        isget=是否已获得本次煮酒物品,
        master=煮酒玩家账号,
        idx=煮酒物品序号,
        goodsid=煮酒物品id,
        code=煮酒码,
        totaldelprice=总共砍价数额,
        sysdelprice=系统赠送砍价数额,
        createtime=开始煮酒时间,
        helperlist=[]
    }
}

注意

  • 该协议交互有变化,主要有:
    (1)result添加了bargain_select_cur/bargain_doing_limit;
    (2)bargaindata添加了字段isget和sysdelprice;
    (3)选择煮酒和切换煮酒物品都是使用该协议,同一账号的多个煮酒使用的煮酒码不相同,在切换煮酒物品时,客户端最好判断下选择的是不是当前正在进行的煮酒和选择的物品是否可以煮酒;
    (4)选择新物品煮酒成功后,系统会赠送部分助酒数额,另客户端需要更新下更新物品列表中该物品的状态

助酒砍价

请求内容

module_type=6
opid=4
data={
    id=第几期,
    deviceid=设备id,
    devicetype=机型,1-ios,0-其他
    bargaincode=煮酒码
}

处理流程

  • 与1.0有些许不同
  1. 助酒限制:
    (1)同一个ip或设备id可以供多少个不同的账号助酒(根据配置)玩家如果已使用某个ip或设备id助酒过,则可以继续使用ip或设备id助酒;
    (2)同一个账号可以助酒的次数(根据配置);
    (3)同一个账号只能给同一个煮酒码助酒一次;同一个账号只能给同一个玩家助酒一次;
  2. 助酒数额:
    (1)玩家的类型计算根据配置而定;
    (2)不同的玩家首次和二次助酒数额区间不同,根据配置而定

回复内容

module_type=6
opid=4
data={
    result:EnumResult(success/activity_no_open/param_error/redis_error/data_error/help_over/help_limit_account/help_limit_device/help_limit_ip/bargain_none/help_not_self/help_already/click_too_fast/help_user_once),
    bargaincode=煮酒码
    delprice=砍价数额
}

注意

  • 回复内容result添加了help_user_once
  • 客户端收到别的玩家给自己助酒后,需要判断是否是自己当前进行中的煮酒作不同处理

获取煮酒物品(购买或免费)

请求内容

module_type=6
opid=5
data={
    id=第几期,
    goodsid=物品id,
    idx=物品序号,
    bargaincode=煮酒码
}

回复内容

module_type=6
opid=5
data={
    result:EnumResult(success/activity_no_open/param_error/redis_error/data_error/click_too_fast/use_yuanbao_failed/add_goods_failed),
    goodsid=物品id,
    idx=物品序号,
    bargaincode=煮酒码
}

注意

  • 成功后,客户端需要更新物品列表中该物品的状态(如果玩家还有未进行中的煮酒,不会选择一个作为当前进行中的煮酒,由玩家自己选择)

放弃正在进行中的煮酒

请求内容

module_type=6
opid=8
data={
    id=第几期,
    idx=物品序号,
    goodsid=物品id
}

处理流程

  1. 获取配置是否有效;
  2. 是否是当前进行中的煮酒;
  3. 将当前进行中的煮酒移到未进行中并更新数据库,回复客户端;

回复内容

module_type=6
opid=8
data={
    result:EnumResult(success/activity_no_open/param_error/redis_error/data_error),
}

注意

  • 新增协议,客户端收到成功后:
    (1)刷新对应物品的状态(原进行中的煮酒变为未进行);
    (2)界面回到煮酒物品选择界面

GM命令

  • 只能是gm账号使用
//gm msact bargain [活动期数id] [gm操作id] [根据需要定义 以空格分隔各个字段]

gm操作id列举:
    1000: 助酒, 该操作不受任何限制,不检查助酒条件限制,不计入gm账号的助酒数据,只更新煮酒码数据,可对同一个人或同一个煮酒码重复助酒

给某个煮酒码助酒100
//gm msact bargain 1 1000 code 100