双端交互

双端交互协议

互动道具类型

enum emPraiseType
{
    emPraiseType_Flower = 1,
    emPraiseType_Egg = 2,
    emPraiseType_BigFlower = 3,

    // 新增
     emPraiseType_Times = 4,   // 使用次数

    emPraiseType_JingNiYiBei = 7,   //敬你一杯
    emPraiseType_StrawSandals = 8,  //草鞋
    emPraiseType_JinLongFuTi = 9,   //金龙附体
    emPraiseType_RayPenalty = 10,   //雷罚
};

互动道具使用请求 [修改]

交互协议

CLIENT_DBS_PRAISE_REQ = 21453,

struct ClientDbsPraiseReq : PacketBase
{
    unsigned int index;         
    emPraiseType praisetype;
    unsigned int praisedesuseid;
    char         praisedesnk[sc_max_nickname_len];
    char         mynk[sc_max_nickname_len];
    unsigned int tblid;

    unsigned int mygt_serverid;
    ClientDbsPraiseReq() : PacketBase(CLIENT_DBS_PRAISE_REQ,sizeof(ClientDbsPraiseReq))
    {
        PRO_ZERO_MEMORY(this, sizeof(ClientDbsPraiseReq));
    }
};

注意

  • 该协议的praisetype增加了类型值,详见互动道具类型,其他不变

互动道具使用回复 [修改]

使用结果

enum emPraiseResult
{
    emPraise_OK   = 1,
    emPraise_Done,         //已经评价过
    emPraise_EnoughCount,  //已经评价过

     emPraise_Error_01,
     emPraise_Error_02,
     emPraise_Error_03,
     emPraise_Error_04,
     emPraise_Error_05,
     emPraise_Error_06,
     emPraise_Error_07,
     emPraise_Error_08,

    emPraise_ERROR_UNKNOWN,        // 未知错误,一般是因为服务间通讯故障
    emPraise_ERROR_NO_GOODS,    // 菜篮子不够
    emPraise_ERROR_ALLOC,        // 内存分配错误
    emPraise_ERROR_DB,            // dbs相关故障
    emPraise_DestUser_NotOnline,// 目标不在线
    emPraise_ERROR_LEVEL,        // 等级不够
    emPraise_ERROR_BIGFLOWER_COUNT_LIMIT,// 群发,次数超限制
    emPraise_ERROR_NOT_IN_GAME,             // 不在游戏内
    emPraise_ERROR_NO_STAR,                 // 群发,你没有五星武将    

    //新增
    emPraise_Ban,                    // 禁止
    emPraise_Praise_Max,            // 本场次数已达上限
    emPraise_Target_Protect,        // 保护中
    emPraise_No_Config,             // 没有找到配置
    emPraise_UseGoodsFailed,        // 道具使用失败
    emPraise_In_CD = 26,            // 在冷却时间中
};

交互协议

CLIENT_DBS_PRAISE_REP = 21454,

struct ClientDbsPraiseRep : PacketBase
{
    unsigned int    index;
    emPraiseResult  result;
    unsigned int    praise1;
    unsigned int    praise2;
    unsigned int    praise3;
    unsigned int    praise4;
    unsigned int    praise5;
    unsigned int    praise6;

    /*
    result == emPraise_OK
    praise1:鲜花值
    praise2:鸡蛋值
    result == emPraise_Target_Protect
    praise1:目标userid
    praise2:剩余保护时间
    */

    ClientDbsPraiseRep() : PacketBase(CLIENT_DBS_PRAISE_REP,sizeof(ClientDbsPraiseRep))
    {
        PRO_ZERO_MEMORY(this, sizeof(ClientDbsPraiseRep));
    }
};

注意

  • result的值为emPraise_OK或emPraise_Target_Protect时,praise1与praise2的取值不同,详见交互协议,需要客户端根据值进行数据处理

互动道具使用&更新通知 [修改]

SS_CLIENT_PRAISE_NTF = 21665// 原协议内容
struct SSClientPraiseNtf : public PacketBase
{
    unsigned int  praisetype;
    unsigned int  tblid;
    unsigned int  user_tempid1;
    unsigned int  user_tempid2;

    SSClientPraiseNtf() : PacketBase(SS_CLIENT_PRAISE_NTF, sizeof(SSClientPraiseNtf))
    {
        PRO_ZERO_MEMORY(this, sizeof(SSClientPraiseNtf));
    }
};

// 新协议内容
struct SSClientPraiseNtf : public PacketBase
{
    unsigned int  praisetype; //emPraiseType
    unsigned int  tblid;
    //unsigned int  user_tempid1;
    //unsigned int  user_tempid2;
    union UNtfParams
    {
        struct
        {
            unsigned int param1;
            unsigned int param2;
            unsigned int param3;
            unsigned int param4;
            unsigned int param5;
            unsigned int param6;
        }common;
        struct
        {
            unsigned int  user_tempid1;
            unsigned int  user_tempid2;
            int charm; //魅力值变化,有正负
        }praise; //praisetype是交互类型
        struct
        {
            unsigned int flower_times;
            unsigned int egg_times;
            unsigned int JingNiYiBei_times; //敬你一杯
            unsigned int StrawSandals_times;//草鞋
            unsigned int JinLongFuTi_times; //金龙附体
            unsigned int RayPenalty_times;  //雷罚
        }left_times;//praisetype是emPraiseType_Times
    }uparam;
    SSClientPraiseNtf() : PacketBase(SS_CLIENT_PRAISE_NTF, sizeof(SSClientPraiseNtf))
    {
        PRO_ZERO_MEMORY(this, sizeof(SSClientPraiseNtf));
    }
};

注意

  • 新协议内容包含老协议内容,老协议的praisetype取值只有emPraiseType_Flower/emPraiseType_Egg/emPraiseType_BigFlower,新协议根据praisetype取值不同,其协议内容也不相同,客户端需要注意这块儿的处理;
  • 在游戏开局、重连时,通知玩家互动道具的剩余使用次数,praisetype=emPraiseType_Times;
  • 在使用互动道具后,通知玩家互动道具的使用双方信息,添加了魅力值增减charm,praisetype=使用的互动道具类型;
  • 客户端需要注意下收到负面道具时,如果满足新手保护条件则需要进行保护处理;
  • 另外注意下客户端之前对于praisetype的处理,看下是否进行老包兼容处理;

互动道具保护通知 [新增]

交互协议

MAX_TABLE_SEAT = 8,
SS_CLIENT_PRAISE_PROTECT_NTF = 25272,

struct SsClientPraiseProtectNtf :public PacketBase
{
    SsClientPraiseProtectNtf() :PacketBase(SS_CLIENT_PRAISE_PROTECT_NTF, sizeof(SsClientPraiseProtectNtf))
    {
        PRO_ZERO_MEMORY(this, sizeof(SsClientPraiseProtectNtf));
    }
    struct TSeatProtectInfo
    {
        unsigned int user_id;
        unsigned int praise_type;
        unsigned int left_protect_time;
    };
    unsigned int GetLen()
    {
        return sizeof(SsClientPraiseProtectNtf) - sizeof(TSeatProtectInfo) * (MAX_TABLE_SEAT - user_cnt);
    }
    BYTE user_cnt;
    TSeatProtectInfo protect_info[MAX_TABLE_SEAT];
};

注意

  • 在使用互动道具和重连时,给客户端通知该消息

对局中的互动道具日志

  • mysql tblgame
    (1)游戏对局日志op_type=2001: log_info新增字段floweregg={鲜花赠送数目,鲜花接收数目,鸡蛋赠送数目,鸡蛋接收数目,敬你一杯赠送数目,敬你一杯接收数目,草鞋赠送数目,草鞋接收数目,金龙附体赠送数目,金龙附体接收数目,雷罚赠送数目,雷罚接收数目}
    (2)游戏互动道具日志op_type=2015: user_account=送出者账号,param1=道具类型,param2=道具添加的魅力值(小于等于0表示负面道具),log_info=接收者账号(可能有多个,分号隔开)