/// <summary> /// 获取某个礼品码的平台信息 /// </summary> /// <param name="dbMgr"></param> /// <param name="fileName"></param> public static int GetLiPinMaPingTaiID2(DBManager dbMgr, int songLiID, string liPinMa, int roleZoneID) { liPinMa = liPinMa.ToUpper(); //转成大写 int ptid = -1, ptrepeat = 0, zoneID = 0; if (!LiPinMaParse.ParseLiPinMa(liPinMa, out ptid, out ptrepeat, out zoneID)) { return(-1020); } if (zoneID > 0 && roleZoneID != zoneID) { return(-1021); } return(ptid); }
public static bool ParseLiPinMa2(string lipinma, out int ptid, out int ptrepeat, out int zoneID, out int nMaxUseNum) { bool result; if (GameDBManager.GameConfigMgr.GetGameConfigItemInt("lipinma_v1", 0) == 1) { result = LiPinMaParse.ParseLiPinMa(lipinma, out ptid, out ptrepeat, out zoneID, out nMaxUseNum); } else { ptid = -1; ptrepeat = 0; zoneID = 0; nMaxUseNum = 1; int nAddLength = 0; if (lipinma.Length > 23) { nAddLength = 2; } if (lipinma.Length < 22 + nAddLength || lipinma.Length > 23 + nAddLength) { result = false; } else { lipinma = lipinma.ToUpper(); if ("NZ" != lipinma.Substring(0, 2)) { result = false; } else { ptid = Convert.ToInt32(lipinma.Substring(2, 3)); ptrepeat = Convert.ToInt32(lipinma.Substring(5, 1)); zoneID = Convert.ToInt32(lipinma.Substring(6, 3)); if (nAddLength > 0) { nMaxUseNum = Convert.ToInt32(lipinma.Substring(9, 2)); } string crc32Str = lipinma.Substring(9 + nAddLength); MD5 md5 = MD5.Create(); byte[] data0 = new byte[25]; for (int i = 0; i < 5; i++) { data0[i] = Convert.ToByte(crc32Str.Substring(2 * i + 4, 2), 16); } data0[5] = 31; data0[6] = 22; data0[7] = 5; data0[8] = 150; Array.Copy(BitConverter.GetBytes(ptid), 0, data0, 9, 4); Array.Copy(BitConverter.GetBytes(ptrepeat), 0, data0, 13, 4); Array.Copy(BitConverter.GetBytes(zoneID), 0, data0, 17, 4); Array.Copy(BitConverter.GetBytes(nMaxUseNum), 0, data0, 21, 4); byte[] data = md5.ComputeHash(data0); for (int i = 0; i < 2; i++) { if (Convert.ToByte(crc32Str.Substring(2 * i, 2), 16) != data[i]) { return(false); } } result = true; } } } return(result); }
/// <summary> /// 使用某个礼品码(自己生成的特定格式的礼品码) /// </summary> /// <param name="dbMgr"></param> /// <param name="fileName"></param> public static int UseLiPinMa2(DBManager dbMgr, int roleID, int songLiID, string liPinMa, int roleZoneID) { if (null == _LiPinMaDict) { return(-1010); } Dictionary <string, LiPinMaItem> liPinMaDict = _LiPinMaDict; //先得到 int usedNum = 0; liPinMa = liPinMa.ToUpper(); //转成大写 int ptid = -1, ptrepeat = 0, zoneID = 0; if (!LiPinMaParse.ParseLiPinMa(liPinMa, out ptid, out ptrepeat, out zoneID)) { return(-1020); } if (zoneID > 0 && roleZoneID != zoneID) { return(-1021); } //防止多用户重入 lock (Mutex) { LiPinMaItem liPinMaItem = null; if (!liPinMaDict.TryGetValue(liPinMa, out liPinMaItem)) { liPinMaItem = new LiPinMaItem() { LiPinMa = liPinMa, HuodongID = 1, MaxNum = 1, UsedNum = 0, PingTaiID = ptid, PingTaiRepeat = ptrepeat, }; liPinMaDict[liPinMa] = liPinMaItem; } if (liPinMaItem.HuodongID != songLiID) { return(-1030); } if (liPinMaItem.MaxNum > 0 && liPinMaItem.UsedNum >= liPinMaItem.MaxNum) { return(-1040); } //如果不允许平台内的礼品码重复领取 if (liPinMaItem.PingTaiRepeat <= 0) { //通过活动ID查询平台ID int pingTaiID = DBQuery.QueryPingTaiIDByHuoDongID(dbMgr, liPinMaItem.HuodongID, roleID, liPinMaItem.PingTaiID); if (pingTaiID == liPinMaItem.PingTaiID) { return(-10000); } } //添加使用礼品码的平台记录 DBWriter.AddUsedLiPinMa(dbMgr, liPinMaItem.HuodongID, liPinMaItem.LiPinMa, liPinMaItem.PingTaiID, roleID); liPinMaItem.UsedNum++; usedNum = liPinMaItem.UsedNum; } //插入一个新的礼品码的数据 DBWriter.InsertNewLiPinMa(dbMgr, liPinMa, songLiID.ToString(), "1", ptid.ToString(), ptrepeat.ToString(), "1"); return(0); }