基于酷Q的崩坏三抽卡模拟_C++入门级酷Q插件开发

插件简介

   为了高仿官方抽卡概率,我设计调整了数据,在一定程度上满足了出货期望和官方概率近视相等~(注意:不同十连间抽卡保底事件是相互独立的,同卡池单抽十连共享保底,抽卡保底不与抽卡的人有关)(Pro和Air版本都可用)

更新日志(随缘更新):

版本:1.3.2

  • 修复标配抽卡只有四个A级角色的bug
  • 更新了扩充卡池-扩充由真红改为樱桃炸弹,精准专属武器up改为睡美人

版本:1.3.1

  • 增加管理员系统
  • 增加管理员初始化签到记录的指令
  • 开启关闭抽卡指令交给管理员
  • 默认抽卡=关闭

版本:1.2.2

  • 各卡池单抽与十连共享抽卡保底次数,扩充单抽与十连共享百连保底次数
  • 修复各卡池单抽十连的部分抽卡次数被共享使用的问题,完全独立各卡池的保底事件

版本:1.2.1

  • 更改抽卡提示方式,由显示帐号改为艾特抽卡对象
  • 修改部分描述(如 阁下===>舰长)
  • 更新了最近的扩充和精准A卡池内容(data1.txt和data3.txt)
  • 修复280水晶无法单抽2800水晶无法十连的问题
  • 修复签到只能签一次的问题(第二天未签到但无法签到)

版本:1.2.0

  • 增加水晶管理系统
  • 通过消耗水晶进行抽卡,水晶不足不能抽卡

版本:1.1.0

  • 可自定义抽卡内容
  • 自动创建数据文件以及文件夹
  • 修改了部分文字描述
  • 群聊默认抽卡关闭=>开启
  • 增加扩充百连保底

版本:1.0.0

  • 模拟崩坏三抽卡三种卡池六种抽卡方式
  • 支持私聊群聊抽卡
  • 群聊默认抽卡关闭(重载应用会初始化抽卡的状态)

加载代码块核心代码(appmain.cpp):

EVE_Enable(Enable)
{
	logger.Info("应用被启用");

	int res = mkdir(".\\data\\app\\com.7cyang.bh3");
	if (res == 0) {
		logger.Info("创建文件夹成功");
	}
	else {
		logger.Info("创建文件夹失败:已存在文件夹请忽略这条消息");
	}
	ifstream infile1(".\\data\\app\\com.7cyang.bh3\\data1.txt");
	if (!infile1) {
		ofstream fout(".\\data\\app\\com.7cyang.bh3\\data1.txt");//create
		logger.Info("创建data1文件成功");
		fout.close();
		infile1.close();
	}
	ifstream infile2(".\\data\\app\\com.7cyang.bh3\\data2.txt");
	if (!infile2) {
		ofstream fout(".\\data\\app\\com.7cyang.bh3\\data2.txt");//create
		logger.Info("创建data2文件成功");
		fout.close();
		infile2.close();
	}
	ifstream infile3(".\\data\\app\\com.7cyang.bh3\\data3.txt");
	if (!infile3) {
		ofstream fout(".\\data\\app\\com.7cyang.bh3\\data3.txt");//create
		logger.Info("创建data3文件成功");
		fout.close();
		infile3.close();
	}
	ifstream infile4(".\\data\\app\\com.7cyang.bh3\\user_data.txt");
	if (!infile4) {
		ofstream fout(".\\data\\app\\com.7cyang.bh3\\user_data.txt");//create
		logger.Info("创建user_data文件成功");
		fout.close();
		infile4.close();
		int sigi = 0;
		if (sigi == 0) {
			sigi = 1;
			ofstream  ofresult(".\\data\\app\\com.7cyang.bh3\\user_data.txt", ios::app);
			ofresult << "q=14000" << endl;
			ofresult << "admin=123456789,987654321" << endl;
			ofresult.close();
		}
	}
	return 0;
}

EVE_Disable(Disable)
{
	logger.Info("应用被停用");
	return 0;
}

MUST_AppInfo_RETURN(CQAPPID)

群聊代码(example_winSpeak.cpp):

#include <CQEVE_GroupMsg.h>
#include <CQcode.h>
#include <CQLogger.h>
#include <time.h>
#include <string>
#include <iostream>
#include <fstream>
#include <cassert>
#include <sstream>

using namespace std;
using namespace CQ;

static Logger logger("崩坏三抽卡模拟");
static int isOpen = 0;
static long long str1[] = { 0,0 };
static string str2[] = { "","" };
static int sigi = 0;
static string KC[5] = { "S级女武神(UP)","A级女武神(UP)","A级女武神A","A级女武神B","A级女武神C" };//扩初始内容
static string ZB[][100] = { {"极品武器"},
							{"极品圣痕"},
							{"极品武器A","极品武器B","极品武器C","极品武器D","极品武器E","极品武器F"},
							{"极品圣痕A","极品圣痕B" ,"极品圣痕C" ,"极品圣痕D"},
							{"稀有武器A","稀有武器B","稀有武器C","稀有武器D","稀有武器E","稀有武器F","稀有武器G","稀有武器H","稀有武器I","稀有武器J","稀有武器K",
							"稀有武器L","稀有武器M","稀有武器N","稀有武器O","稀有武器P","稀有武器Q","稀有武器R","稀有武器S","稀有武器T","稀有武器U","稀有武器V"},
							{"稀有圣痕A","稀有圣痕B","稀有圣痕C","稀有圣痕D","稀有圣痕E","稀有圣痕F","稀有圣痕G","稀有圣痕H","稀有圣痕I","稀有圣痕J","稀有圣痕K","稀有圣痕L"},
							{"[材料:★4]超合金盾","[材料:★4]相转移镜面","[材料:★4]特斯拉涡轮机","[材料:★3]断裂的刀柄","[材料:★3]超小型反应炉","[材料:★3]铱合金火星塞"},
							{"[圣痕经验]双子以太结晶","[武器经验]双子灵魂结晶","[圣痕经验]以太结晶","[武器经验]灵魂结晶"},
							{"[金币:5w]吼咪宝藏","[金币:2w]吼美宝藏","[金币:5k]吼里宝藏"}
							};//精准初始内容
static string KC2[][100] = { {"白骑士·月光","雷电女王的鬼铠","次元边界突破","血色玫瑰","处刑装·紫菀","神恩歌颂",
								"影骑士·月轮","炽翎","苍骑士·月魂","樱桃炸弹"},//10个
							{"女武神·游侠","圣女祈祷","女武神·强袭","影舞冲击","驱动装·山吹","雪地狙击",
								"融核装·深红","女武神·凯旋","樱火轮舞","女武神·誓约","女武神·讯羽",
								"白夜执事","黯蔷薇","猎袭装·影铁","蓝莓特攻"},//15个
							{"领域装·白练","脉冲装·绯红","女武神·战车","战场疾风"},//4个
							{"[武器]!极品武器★★★★☆","[圣痕]!极品圣痕★★★★☆","[圣痕]稀有圣痕★★★☆","[武器]稀有武器★★★☆"},//4个
							{"[材料]进化材料","[芯片]角色经验芯片","[金币材料]吼美宝藏"}//3个
							};//标配初始内容
static int sigGet = 0,countGet = 0;//是否获得保底+抽奖次数
static int sigGetb = 0, countGetb = 0,countGetS = 0,sigGetS = 0, sigGetj = 0, countGetj = 0;//标配获得保底,抽奖次数,扩充获得S级角色次数,扩充是否获得了S级,精准是否获得极品,精准抽奖次数
static int num_s = 0,num_a = 0,num_U = 0,num_u = 0,num_D = 0,num_d = 0,num_P = 0,num_p = 0;
static long long user_account[200];
static long long user_have[200];
static unsigned int isCheck[200];
static long long qi = 0;
static long long admin[10];
static int loadsig = 0;

//获取当前日期0点时的时间戳
unsigned int getMorningTime()
{
	time_t t = time(NULL);
	struct tm* tm = localtime(&t);
	tm->tm_hour = 0;
	tm->tm_min = 0;
	tm->tm_sec = 0;
	return  mktime(tm);
}

long long div(string str) {//字符串转longlong 
	long long num = 0;
	string newStr = "";
	int sigdiv = 0;
	for (int i = 0; i < str.length(); i++) {
		if (sigdiv == 1) {
			newStr = newStr + str[i];
		}
		if (str[i] == '=') {
			sigdiv = 1;
		}
	}
	num = stoll(newStr);
	//num = atoi(newStr.c_str());
	return num;
}

string rediv(long long a){//long long 转 string
	stringstream os;
	os << a;
	string str = os.str();
    return str;
}
//加载管理员
void adminUser(string str) {
	string newStr = "";
	string nextStr = "";
	int sn = 0;
	int sig = 0;
	for (int i = 0; i < str.length(); i++) {
		if (sig == 1) {
			newStr = newStr + str[i];
		}
		if (str[i] == '=') {
			sig = 1;
		}
	}
	for (int i = 0; i < newStr.length(); i++) {
		if (newStr[i] != ',') {
			nextStr = nextStr + newStr[i];
		}
		if (newStr[i] == ',' || i == newStr.length() - 1) {
			admin[sn] = stoll(nextStr);
			nextStr = "";
			sn++;
		}
	}
}

string charToStr(char* contentChar)
{
	string tempStr;
	for (int i = 0; contentChar[i] != '\0'; i++)
	{
		tempStr += contentChar[i];
	}
	return tempStr;
}

void use_c(long long account, long long num) {
	ifstream in;
	char line[1024] = { '\0' };
	int sigsite = 0;
	for (int i = 0; i < 200; i++) {
		if (user_account[i] == account) {
			sigsite = i;
			break;
		}
	}
	in.open(".\\data\\app\\com.7cyang.bh3\\user_data.txt");
	int i = 0;
	string tempStr;
	int sigusec = 0;
	string eqstr = "QQ=" + rediv(account);
	while (in.getline(line, sizeof(line)))
	{
		i++;
		if (i == sigusec) {
			string newsline;
			newsline = "num=" + rediv(user_have[sigsite] - num);
			char newline[1024] = { '\0' };
			for (int i = 0; i < newsline.length(); i++) {
				newline[i] = newsline[i];
			}
			newline[newsline.length()] = '\0';
			tempStr += charToStr(newline);
		}
		else {
			if (charToStr(line) != eqstr)
			{
				tempStr += charToStr(line);
			}
			else
			{
				tempStr += charToStr(line);
				sigusec = i + 2;
			}
		}
		tempStr += '\n';
	}
	sigusec = 0;
	in.close();
	ofstream out;
	out.open(".\\data\\app\\com.7cyang.bh3\\user_data.txt");
	out.flush();
	out << tempStr;
	out.close();
}

void crystal(long long account) {
	//签到增加14000水晶
	ifstream in;
	char line[1024] = { '\0' };
	int sigsite = 0;
	for (int i = 0; i < 200; i++) {
		if (user_account[i] == account) {
			sigsite = i;
			break;
		}
	}
	in.open(".\\data\\app\\com.7cyang.bh3\\user_data.txt");
	int i = 0;
	string tempStr;
	int sigcc = 0;
	string eqstr = "QQ=" + rediv(account);
	while (in.getline(line, sizeof(line)))
	{
		i++;
		if (i == sigcc - 1) {
			//替换
			string newsline;
			newsline = "sig=" + rediv(getMorningTime());
			char newline[1024] = { '\0' };
			for (int i = 0; i < newsline.length(); i++) {
				newline[i] = newsline[i];
			}
			newline[newsline.length()] = '\0';
			tempStr += charToStr(newline);
		}
		else {
			if (i == sigcc) {
				string newsline;
				newsline = "num=" + rediv(user_have[sigsite] + qi);
				char newline[1024] = { '\0' };
				for (int i = 0; i < newsline.length(); i++) {
					newline[i] = newsline[i];
				}
				newline[newsline.length()] = '\0';
				tempStr += charToStr(newline);
			}
			else {
				if (charToStr(line) != eqstr)
				{
					tempStr += charToStr(line);
				}
				else
				{
					tempStr += charToStr(line);
					sigcc = i + 2;
				}
			}
		}
		tempStr += '\n';
	}
	sigcc = 0;
	in.close();
	ofstream out;
	out.open(".\\data\\app\\com.7cyang.bh3\\user_data.txt");
	out.flush();
	out << tempStr;
	out.close();
}
//初始化签到记录
void initData() {
	ifstream in;
	char line[1024] = { '\0' };
	in.open(".\\data\\app\\com.7cyang.bh3\\user_data.txt");
	string tempStr;
	while (in.getline(line, sizeof(line)))
	{
		if (charToStr(line)[0]=='s'&& charToStr(line)[1] == 'i'&& charToStr(line)[2] == 'g'&& charToStr(line)[3] == '=')
		{
			string newsline;
			newsline = "sig=0";
			char newline[1024] = { '\0' };
			for (int i = 0; i < newsline.length(); i++) {
				newline[i] = newsline[i];
			}
			newline[newsline.length()] = '\0';
			tempStr += charToStr(newline);
		}
		else
		{
			tempStr += charToStr(line);
		}
		tempStr += '\n';
	}
	in.close();
	ofstream out;
	out.open(".\\data\\app\\com.7cyang.bh3\\user_data.txt");
	out.flush();
	out << tempStr;
	out.close();
}

string add(string str) {
	string s0 = "";
	int len = str.length();
	for (int i = 1; i < len; i++) {
		s0 = s0 + str[i];
	}
	return s0;
}

void getUserData() {
	//读取用户数据
	int i = 0, a1 = 0, a2 = 0, a3 = 0;
	string s;
	ifstream infile;
	infile.open(".\\data\\app\\com.7cyang.bh3\\user_data.txt");
	while(getline(infile, s))
	{
		if (s[0]!='q'&&s[0]!='a') {
			i++;
			if (i % 3 == 1) {
				long long a = div(s);
				user_account[a1] = a;
				a1++;
			}
			else {
				if (i % 3 == 0) {
					long long a = div(s);
					user_have[a2] = a;
					a2++;
				}
				else {
					if (i % 3 == 2) {
						long long a = div(s);
						isCheck[a3] = a;
						a3++;
					}
				}
			}
		}
		else {
			if (s[0] == 'q') {
				qi = div(s);
			}
			else {
				//管理员QQ
				adminUser(s);
			}
		}
	}
	i = 0; a1 = 0; a2 = 0; a3 = 0;
	infile.close();
}
//获取卡池内容,格式参照崩坏三官网
void getData() {
	int i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0;
	string s,str;
	ifstream infile;
	infile.open(".\\data\\app\\com.7cyang.bh3\\data1.txt");
	while(getline(infile, s))
	{
		KC[i1]=s;
		i1++;
	}
	infile.close();
	i1 = 0;

	infile.open(".\\data\\app\\com.7cyang.bh3\\data3.txt");
	while (getline(infile, s))
	{
		if (s[0]=='S') {
			str = add(s);
			KC2[0][i1] = str;
			i1++;
		}
		else {
			if (s[0] == 'A')
			{
				str = add(s);
				KC2[1][i2] = str;
				i2++;
			}
			else if(s[0] == 'B'){
				str = add(s);
				KC2[2][i3] = str;
				i3++;
			}
		}
	}
	infile.close();
	i1 = 0; i2 = 0 ,i3 = 0;

	infile.open(".\\data\\app\\com.7cyang.bh3\\data2.txt");
	while (getline(infile, s))
	{
		if (s[0] == 'U') {
			str = add(s);
			ZB[0][i1] = str;
			i1++;
		}
		else {
			if (s[0] == 'u')
			{
				str = add(s);
				ZB[1][i2] = str;
				i2++;
			}
			else {
				if (s[0] == 'D') {
					str = add(s);
					ZB[2][i3] = str;
					i3++;
				}
				else {
					if (s[0] == 'd') {
						str = add(s);
						ZB[3][i4] = str;
						i4++;
					}
					else {
						if (s[0] == 'P') {
							str = add(s);
							ZB[4][i5] = str;
							i5++;
						}
						else {
							if (s[0] == 'p') {
								str = add(s);
								ZB[5][i6] = str;
								i6++;
							}
						}
					}
				}
			}
		}
	}
	infile.close();
	i1 = 0; i2 = 0; i3 = 0; i4 = 0; i5 = 0; i6 = 0;
}

string judge(int sig) {
	string str;
	if (sig <= 1231) {//S
		str = "<角色卡>" + KC[0] + "(UP)";
	}
	else {
		if (sig <= 4924) {//Aup
			str = "<角色卡>" + KC[1] + "(UP)";
		}
		else {
			if (sig <= 7386) {//a
				str = "<角色卡>" + KC[2] + "(歪)";
			}
			else {
				if (sig <= 9848) {//b
					str = "<角色卡>" + KC[3] + "(歪)";
				}
				else {
					if (sig <= 12310) {//c
						str = "<角色卡>" + KC[4] + "(歪)";
					}
					else {
						if (sig <= 14890) {
							str = "(碎片)" + KC[0]+ "碎片(UP)";
						}
						else {
							if (sig <= 30370) {
								str = "(碎片)" + KC[1]+"碎片(UP)";
							}
							else {
								if (sig <= 33466) {
									str = "(碎片)" + KC[2] + "碎片";
								}
								else {
									if (sig <= 36562) {
										str = "(碎片)" + KC[3] + "碎片";
									}
									else {
										if (sig <= 39658) {
											str = "(碎片)" + KC[4] + "碎片";
										}
										else {
											if (sig <= 65458) {
												str = "[材料]技能材料";
											}
											else {
												int num = (rand() % 3)+1;
												num = (rand() % 3)+1;
												if (num == 1) {
													str = "[材料]低星装备材料";
												}
												if (num == 2) {
													str = "[芯片]角色经验";
												}
												if (num == 3) {
													str = "[金币]吼姆宝藏";
												}
											}
										}
									}
								}
							}
						}
					}
				}

			}

		}
	}
	return str;
}

string judge2(int sig) {
	string str;
	int num_sig = 0;
	if (sig <= 1619) {//武器UP
		num_sig = (rand() % num_U);
		num_sig = (rand() % num_U);
		str = ZB[0][num_sig];
		str = "[武器]" + str +"★★★★☆(UP)";
	}
	else {
		if (sig <= 4047) {//3720圣痕up
			num_sig = (rand() % num_u);
			num_sig = (rand() % num_u);
			if (sig <= 2428&&sig>1619)
				str = ZB[1][num_sig] + "(上)★★★★☆(UP)";
			if (sig <= 3238 && sig > 2428)
				str = ZB[1][num_sig] + "(中)★★★★☆(UP)";
			if (sig <= 4047 && sig > 3238)
				str = ZB[1][num_sig] + "(下)★★★★☆(UP)";
			str = "[圣痕]" + str;
		}
		else {
			if (sig <= 5666) {//武器 歪
				num_sig = (rand() % num_D);
				num_sig = (rand() % num_D);
				str = ZB[2][num_sig];
				str = "[武器]" + str + "★★★★☆(歪)";
			}
			else {
				if (sig <= 8095) {//圣痕歪
					num_sig = (rand() % num_d);
					num_sig = (rand() % num_d);
					str = ZB[3][num_sig];
					if (sig <= 6476 && sig > 5666)
						str = str + "(上)★★★★☆(歪)";
					if (sig <= 7285 && sig > 6476)
						str = str + "(中)★★★★☆(歪)";
					if (sig <= 8095 && sig > 7285)
						str = str + "(下)★★★★☆(歪)";
					str = "[圣痕]" + str;
				}
				else {
					if (sig <= 19888) {
						num_sig = (rand() % num_P);
						num_sig = (rand() % num_P);
						str = ZB[4][num_sig];
						str = "[武器]" + str + "★★★☆";
					}
					else {
						if (sig <= 55238) {
							num_sig = (rand() % num_p);
							num_sig = (rand() % num_p);
							str = ZB[5][num_sig];
							if (sig <= 31671 && sig > 19888)
								str = str + "(上)★★★☆";
							if (sig <= 43455 && sig > 31671)
								str = str + "(中)★★★☆";
							if (sig <= 55238 && sig > 43455)
								str = str + "(下)★★★☆";
							str = "[圣痕]" + str;
						}
						else {
							int numsigt = (rand() % 50)+1;
							numsigt = (rand() % 50)+1;
							if (numsigt <= 20 && numsigt > 0){
								num_sig = (long)(6.0 * rand() / (1.0 * RAND_MAX));
								num_sig = (long)(6.0 * rand() / (1.0 * RAND_MAX));
								str = ZB[6][num_sig];
							}
							if (numsigt <= 40 && numsigt > 20) {
								num_sig = (long)(4.0 * rand() / (1.0 * RAND_MAX));
								num_sig = (long)(4.0 * rand() / (1.0 * RAND_MAX));
								str = ZB[7][num_sig];
							}
							if (numsigt <= 50 && numsigt > 40) {
								num_sig = (long)(3.0 * rand() / (1.0 * RAND_MAX));
								num_sig = (long)(3.0 * rand() / (1.0 * RAND_MAX));
								str = ZB[8][num_sig];
							}
						}

					}
				}

			}

		}
	}
	return str;
}

string judge3(int sig) {
	string str;
	if (sig <= 1231) {
		int num = (rand() % num_s);
		num = (rand() % num_s);
		str = "<角色卡>" + KC2[0][num] + "(S级女武神)";
	}
	else {
		if (sig <= 12310) {
			int num = (rand() % num_a);
			num = (rand() % num_a);
			str = "<角色卡>" + KC2[1][num] + "(A级女武神)";
		}
		else {//1350
			if (sig <= 13619) {
				int num = (rand() % num_s);;
				num = (rand() % num_s);
				str = "(碎片)"+ KC2[0][num] + "碎片(S级)";
			}
			else {//1019
				if (sig <= 24130) {
					int num = (rand() % num_a);
					num = (rand() % num_a);
					str = "(碎片)" + KC2[1][num] + "碎片(A级)";
				}
				else {//550
					if (sig <= 29803) {
						int num = (rand() % 4) ;
						num = (rand() % 4) ;
						str = "<角色卡>" + KC2[2][num]+"(B级女武神)";
					}
					else {//46  73  750 2250=====3242 3315 4065 6315
						if (sig <= 61982) {
							if (sig <= 30227 && sig > 29803)
								str = KC2[3][0];
							if (sig <= 30930 && sig > 30227)
								str = KC2[3][1];
							if (sig <= 38668 && sig > 30930) {
								int num = (rand() % num_P);
								num = (rand() % num_P);
								str = "[武器]" + ZB[3][num] + "★★★☆";//稀有武器
							}
							if (sig <= 61982 && sig > 38668) {
								int num = (rand() % num_p);
								num = (rand() % num_p);
								str = ZB[3][num];//稀有圣痕
								int sig_num = (rand() % 3) + 1;
								sig_num = (rand() % 3) + 1;
								if (sig_num == 1)
									str = "[圣痕]" + str + "(上)★★★☆";
								if (sig_num == 2)
									str = "[圣痕]" + str + "(中)★★★☆";
								if (sig_num == 3)
									str = "[圣痕]" + str + "(下)★★★☆";
							}
						}
						else {//1474
							if (sig <= 77189) {
								str = KC2[4][0];
							}
							else {//1474
								if (sig <= 92396) {
									str = KC2[4][1];
								}
								else {//737
									str = KC2[4][2];
								}
							}
						}
					}
				}

			}

		}
	}
	return str;
}

EVE_GroupMsg_EX(Speak) {
	static string msgs("Speak:");
	long long str0;
	string adminlist = "";
	memset(user_account, 0, sizeof(user_account));
	memset(user_have, 0, sizeof(user_have));
	memset(isCheck, 0, sizeof(isCheck));
	memset(admin, 0, sizeof(admin));
	getData();
	getUserData();
	if (loadsig == 0) {
		for (int ad = 0; ad < 10; ad++) {
			if (admin[ad] == 0)
				break;
			else {
				adminlist = adminlist + rediv(admin[ad]);
			}
			if (ad < 9 && admin[ad + 1] != 0) {
				adminlist = adminlist + "|";
			}
		}
		logger.Info("已加载管理员:" + adminlist);
		loadsig = 1;
	}
	auto message = eve.message;
	auto msg = eve.sendMsg();
	num_s = 0; num_a = 0; num_U = 0; num_u = 0; num_D = 0; num_d = 0; num_P = 0; num_p = 0;
	for (int numto = 0; numto < 100; numto++) {
		//标配
		if (KC2[0][numto] != "") {
			num_s++;
		}
		if (KC2[1][numto] != "") {
			num_a++;
		}
		//精准
		if (ZB[0][numto] != "") {
			num_U++;
		}
		if (ZB[1][numto] != "") {
			num_u++;
		}
		if (ZB[2][numto] != "") {
			num_D++;
		}
		if (ZB[3][numto] != "") {
			num_d++;
		}
		if (ZB[4][numto] != "") {
			num_P++;
		}
		if (ZB[5][numto] != "") {
			num_p++;
		}
	}
	if (message.compare("")) {
		
		str0 = eve.fromQQ;
		str1[sigi] = eve.fromQQ;
		str2[sigi] = eve.message;
		sigi = (sigi+1)%2;
	}

	if (!message.compare("CQ1")) {
		// 发送内容由多个内容组成
		msg
			<< "发送人为:" << str1[sigi]
			<< ",消息为:" << str2[sigi]
			<< send;
	}

	if (!message.compare("签到初始化")) {
		// 发送内容由多个内容组成
		long long account = eve.fromQQ;
		int sigAdmin = 0;
		for (int i = 0; i < 10; i++) {
			if (admin[i] == 0)
				break;
			else {
				if (account == admin[i]) {
					sigAdmin = 1;
					break;
				}
			}
		}
		if (sigAdmin == 1) { 
			//初始化
			initData();
			msg
				<< "一位会空中劈叉的舰长清空了今日的签到记录,所有舰长都可以再次签到了哦~"
				<< send;
		}
	}

	if (!message.compare("抽卡签到")) {
		long long account = eve.fromQQ;
		int sig = 0;
		if (isOpen == 1) {
			//读取是否存在用户,不存在,则创建新用户
			for (int i = 0; i < 200; i++) {
				if (user_account[i]==0)
					break;
				else {
					if (user_account[i] == account) {
						sig = 1;
						//写入文档,更新水晶
						if (isCheck[i]== getMorningTime()) {
							msg
								<< "[CQ:at,qq=" << eve.fromQQ << "]" << "嗨呀,舰长已经签到过了呢~"
								<< send;
						}
						else {
							crystal(account);
							msg
								<< "[CQ:at,qq=" << eve.fromQQ << "]"
								<< "签到成功啦,哦~~,你获得每日抽卡签到奖励"<<qi<<"水晶耶"
								<< send;
						}
						break;
					}
					else {//不存在用户,进行添加+重新读取----移动到其他地方
						
					}
				}
			}
			if (sig == 0) {
				msg
					<< "[CQ:at,qq=" << eve.fromQQ << "]"
					<< "还没有舰长的数据哦~发送 抽卡注册 成为一名休伯利安的清洁工怎么样?"
					<< send;
			}
		}
		else {
			msg
				<< "系统未开启呢,有没有哪位可爱的舰长会来开启呢" << send;
		}

	}

	if (!message.compare("抽卡注册")) {
		// 发送内容由多个内容组成
		long long account = eve.fromQQ;
		long long num = 14000;
		int sig_user = 0,this_sig = 0;
		for (int i = 0; i < 200; i++) {
			if (account == user_account[i]) {
				this_sig = 1;
				break;
			}
		}
		if (this_sig == 0) {
			ofstream  ofresult(".\\data\\app\\com.7cyang.bh3\\user_data.txt", ios::app);
			ofresult << "QQ=" << account << endl;
			ofresult << "sig=" << sig_user << endl;
			ofresult << "num=" << num << endl;
			msg
				<< "[CQ:at,qq=" << eve.fromQQ << "]" <<"恭喜注册成功,赠送舰长14000水晶" << send;
			ofresult.close();
		}
		else {
			msg
				<< "[CQ:at,qq=" << eve.fromQQ << "]"
				<< "舰长已经注册过了,不能重复注册哦~"
				<< send;
		}
	}

	if (!message.compare("我的水晶")) {
		// 发送内容由多个内容组成
		long long account = eve.fromQQ;
		long long num_have = 0;
		int sig = 0;
		for (int i = 0; i < 200; i++) {
			if (user_account[i] == account) {
				num_have = user_have[i];
				sig = 1;
				break;
			}
		}
		if (sig == 1) {
			msg
				<< "[CQ:at,qq=" << account << "]"
				<< "舰长还有" << num_have << "水晶。"
				<< send;
		}
		else {
			msg
				<< "[CQ:at,qq=" << account << "]"
				<< "还没有舰长的数据哦~发送 抽卡注册 成为一名休伯利安的清洁工怎么样?"
				<< send;
		}
	}

	if (!message.compare("开启抽卡")) {
		// 发送内容由多个内容组成
		long long account = eve.fromQQ;
		int sig = 0;
		for (int i = 0; i < 10; i++) {
			if (admin[i] == 0)
				break;
			else {
				if (admin[i] == account) {
					sig = 1;
					if (isOpen == 1) {
						msg
							<< "抽卡已经被会空中劈叉的清洁工开启过了,不要重复开启啦~" << send;
					}
					else {
						isOpen = 1;
						msg
							<< "一名会空中劈叉的清洁工开启了抽卡,各位舰长快来围观吧~" << send;
					}
					break;
				}
			}
		}
		if (sig == 0) {
			msg
				<< "[CQ:at,qq=" << eve.fromQQ << "]" << "舰长还是个不会空中劈叉的清洁工哦,你还没有这种操作~"
				<< send;
		}
	}

	if (!message.compare("关闭抽卡")) {//&&eve.fromQQ == 1476911135
		// 发送内容由多个内容组成
		long long account = eve.fromQQ;
		int sig = 0;
		for (int i = 0; i < 10; i++) {
			if (admin[i] == 0)
				break;
			else {
				if (admin[i] == account) {
					sig = 1;
					if (isOpen == 1) {
						isOpen = 0;
						msg
							<< "一位舰长学会了空中劈叉,并关闭了抽卡" << send;
					}
					else {
						msg
							<< "抽卡已经被一名路过的舰长关闭了,再关也没用了呢" << send;
					}
					break;
				}
			}
		}
		if (sig==0) {
			msg
				<< "[CQ:at,qq=" << eve.fromQQ << "]" << "舰长还是个不会空中劈叉的清洁工哦,你还没有这种操作~"
				<< send;
		}
	}

	/*if (!message.compare("查看卡池")) {
		string list = "";
		list = list + "扩充:";
		for (int k = 0; k < KC->length(); k++) {
			if(KC[k]!="")
			list = list + KC[k];
			if (k != KC->length() - 1&& KC[k] != "") {
				list = list + ",";
			}
		}
		list = list + "\n精准:";
		for (int k = 0; k < 4; k++) {
			for (int l = 0; l < ZB[k]->length(); l++) {
				if(ZB[k][l] != ""){
					list = list + ZB[k][l];
					if (ZB[k][l + 1] != ""&& l < ZB[k]->length()-1) {
						list = list + ",";
					}
				}
			}
		}
		list = list + "\n标配:";
		for (int k = 0; k < 5; k++) {
			for (int l = 0; l < 100; l++) {
				list = list + KC2[k][l]+",";
			}
		}
		msg
			<< "卡池一览:\n" << list << send;
	}*/

	if (!message.compare("扩充单抽")) {
		// 发送内容由多个内容组成
		long long account = eve.fromQQ;
		int sig_account = -1;
		for (int i = 0; i < 200; i++) {
			if (account == user_account[i]) {
				sig_account = i;
				break;
			}
		}
		if (isOpen == 1) {
			if (sig_account != -1) {
				if (user_have[sig_account] >= 280) {
					use_c(account, 280);
					int tm = (int)time(NULL);
					srand(tm);
					int sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
					sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
					if (sigGet == 0 && countGet == 9)//保底
					{
						sig = (rand() % 12310) + 1;
						sigGet = 1;
					}
					if (sig <= 12310) {
						sigGet = 1;
					}
					if (sig <= 1231) {
						sigGetS = 1;
					}
					string str;
					str = judge(sig);
					msg
						<< "[CQ:at,qq=" << str0 << "]"
						<< "\n抽取结果[扩充]:" << str
						<< send;
					countGet++;
					if (sigGet == 1) {
						sigGet = 0;
						countGet = 0;
					}
					countGetS++;
					if (sigGetS == 1) {
						sigGetS = 0;
						countGetS = 0;
					}
					sig = -1;
				}
				else {
					msg
						<< "[CQ:at,qq=" << account << "]" << "舰长的水晶不够了呢~~" << send;
				}
			}
			else {
				msg
					<< "[CQ:at,qq=" << account << "]"
					<< "还没有舰长的数据哦~发送 抽卡注册 成为一名休伯利安的清洁工怎么样?"
					<< send;
			}
		}
		else {
			msg
				<< "抽卡没有被开启呢~" << send;
		}
	}

	if (!message.compare("扩充十连")) {
		// 发送内容由多个内容组成
		long long account = eve.fromQQ;
		int sig_account = -1;
		for (int i = 0; i < 200; i++) {
			if (account == user_account[i]) {
				sig_account = i;
				break;
			}
		}
		if (isOpen == 1) {
			if (sig_account != -1) {
				if (user_have[sig_account] >= 2800) {
					use_c(account, 2800);
					int tm = (int)time(NULL);
					int count = 0;
					string str[10] = {};
					string strHave = "";
					srand(tm);
					int sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
					for (int i = 0; i < 10; i++) {
						sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
						if (sig <= 12310)//获得S或者A计数+1
							sigGet = 1;//获得A/S
						if (sig <= 1231) {//获得S
							sigGetS = 1;
						}
						if (countGet == 9 && sigGet == 0)//保底---->十连的保底
						{
							sig = (rand() % 12310) + 1;
							if (sig <= 1231) {
								sigGetS = 1;
							}
							sigGet = 1;
						}
						if (countGetS == 99 && sigGetS == 0) {//百连保底
							sig = (rand() % 1231) + 1;
							sigGetS = 1;
							sigGet = 1;
						}
						str[i] = judge(sig);
						countGetS++;
						if (sigGetS == 1) {//如果获得了S === 清零S
							sigGetS = 0;
							countGetS = 0;
						}
						countGet++;
						if (sigGet == 1) {//如果获得了A或者S === 清零
							sigGet = 0;
							countGet = 0;
						}
					}
					for (int i = 0; i < 10; i++) {
						strHave = strHave + str[i];
						if (i != 9) {
							strHave = strHave + "\n";
						}
					}
					msg
						<< "[CQ:at,qq=" << str0 << "]"
						<< "\n抽取结果[扩充]:\n" << strHave << send;
					sig = -1;
				}
				else {
					msg
						<< "[CQ:at,qq=" << account << "]" << "舰长的水晶不够抽十连了哟~" << send;
				}
			}
			else {
				msg
					<< "[CQ:at,qq=" << account << "]"
					<< "还没有舰长的数据哦~发送 抽卡注册 成为一名休伯利安的清洁工怎么样?"
					<< send;
			}
		}
		else {
			msg
				<< "抽卡没有被开启呢~" << send;
		}
	}

	if (!message.compare("精准单抽")) {
		// 发送内容由多个内容组成
		long long account = eve.fromQQ;
		int sig_account = -1;
		for (int i = 0; i < 200; i++) {
			if (account == user_account[i]) {
				sig_account = i;
				break;
			}
		}
		if (isOpen == 1) {
			if (sig_account != -1) {
				if (user_have[sig_account] >= 280) {
					use_c(account, 280);
					int tm = (int)time(NULL);
					srand(tm);
					int sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
					sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
					if (sigGetj == 0 && countGetj == 9)//保底
					{
						sig = (rand() % 8095) + 1;
						sigGetj = 1;
					}
					string str;
					str = judge2(sig);
					msg
						<< "[CQ:at,qq=" << str0 << "]"
						<< "\n抽取结果[精准]:" << str
						<< send;
					countGetj++;
					if (sigGetj == 1) {
						sigGetj = 0;
						countGetj = 0;
					}
					sig = -1;
				}
				else {
					msg
						<< "[CQ:at,qq=" << account << "]" << "舰长的水晶不够了呢~~" << send;
				}
			}
			else {
				msg
					<< "[CQ:at,qq=" << account << "]"
					<< "还没有舰长的数据哦~发送 抽卡注册 成为一名休伯利安的清洁工怎么样?"
					<< send;
			}
		}
		else {
			msg
				<< "抽卡没有被开启呢~" << send;
		}
	}

	if (!message.compare("精准十连")) {
		long long account = eve.fromQQ;
		int sig_account = -1;
		for (int i = 0; i < 200; i++) {
			if (account == user_account[i]) {
				sig_account = i;
				break;
			}
		}
		// 发送内容由多个内容组成
		if (isOpen == 1) {
			if (sig_account != -1) {
				if (user_have[sig_account] >= 2800) {
					use_c(account, 2800);
					int tm = (int)time(NULL);
					int count = 0;
					string str[10] = {};
					string strHave = "";
					srand(tm);
					int sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
					for (int i = 0; i < 10; i++) {
						sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
						if (sig <= 8095)
							sigGetj = 1;
						if (countGetj == 9 && sigGetj == 0) {
							sigGetj = 1;
							sig = (rand() % 8095) + 1;
						}
						str[i] = judge2(sig);
						countGetj++;
						if (sigGetj == 1) {
							countGetj = 0;
							sigGetj = 0;
						}
					}
					for (int i = 0; i < 10; i++) {
						strHave = strHave + str[i];
						if (i != 9) {
							strHave = strHave + "\n";
						}
					}
					msg
						<< "[CQ:at,qq=" << str0 << "]"
						<< "\n抽取结果[精准]:\n" << strHave << send;
					sig = -1;
				}
				else {
					msg
						<< "[CQ:at,qq=" << account << "]" << "舰长的水晶不够抽十连了哟~" << send;
				}
			}
			else {
				msg
					<< "[CQ:at,qq=" << account << "]"
					<< "还没有舰长的数据哦~发送 抽卡注册 成为一名休伯利安的清洁工怎么样?"
					<< send;
			}
		}
		else {
			msg
				<< "抽卡没有被开启呢~" << send;
		}
	}

	if (!message.compare("标配单抽")) {
		long long account = eve.fromQQ;
		int sig_account = -1;
		for (int i = 0; i < 200; i++) {
			if (account == user_account[i]) {
				sig_account = i;
				break;
			}
		}
		// 发送内容由多个内容组成
		if (isOpen == 1) {
			if (sig_account != -1) {
				if (user_have[sig_account] >= 280) {
					use_c(account, 280);
					int tm = (int)time(NULL);
					srand(tm);
					int sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
					sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
					if (sigGetb == 0 && countGetb == 9)//保底
					{
						int number = (rand() % 10) + 1;
						number = (rand() % 10) + 1;
						if (number <= 1) {
							sig = (rand() % 1231) + 1;
						}
						else
							sig = (rand() % (12310 - 1231)) + 1231 + 1;
						sigGetb++;
					}
					string str;
					str = judge3(sig);
					msg
						<< "[CQ:at,qq=" << str0 << "]"
						<< "\n抽取结果[标配]:" << str
						<< send;
					countGetb++;
					if (sigGetb == 1) {
						sigGetb = 0;
						countGetb = 0;
					}
					sig = -1;
				}
				else {
					msg
						<< "[CQ:at,qq=" << account << "]" << "舰长的水晶不够了呢~~" << send;
				}
			}
			else {
				msg
					<< "[CQ:at,qq=" << account << "]"
					<< "还没有舰长的数据哦~发送 抽卡注册 成为一名休伯利安的清洁工怎么样?"
					<< send;
			}
		}
		else {
			msg
				<< "抽卡没有被开启呢~" << send;
		}
	}
	if (!message.compare("标配十连")) {
		long long account = eve.fromQQ;
		int sig_account = -1;
		for (int i = 0; i < 200; i++) {
			if (account == user_account[i]) {
				sig_account = i;
				break;
			}
		}
		// 发送内容由多个内容组成
		if (isOpen == 1) {
			if (sig_account != -1) {
				if (user_have[sig_account] >= 2800) {
					use_c(account, 2800);
					int tm = (int)time(NULL);
					int count = 0;
					string str[10] = {};
					string strHave = "";
					srand(tm);
					int sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
					for (int i = 0; i < 10; i++) {
						sig = (long)(100000.0 * rand() / (1.0 * RAND_MAX)) + 1;
						if (sig <= 12310)
							sigGetb = 1;
						if (countGetb == 9 && sigGetb == 0)//保底
						{
							int number = (rand() % 10) + 1;
							number = (rand() % 10) + 1;
							if (number <= 1) {
								sig = (rand() % 1231) + 1;
							}
							else
								sig = (rand() % (12310 - 1231)) + 1231 + 1;
							sigGetb = 1;
						}
						str[i] = judge3(sig);
						countGetb++;
						if (sigGetb == 1) {
							sigGetb = 0;
							countGetb = 0;
						}
					}
					for (int i = 0; i < 10; i++) {
						strHave = strHave + str[i];
						if (i != 9) {
							strHave = strHave + "\n";
						}
					}
					msg
						<< "[CQ:at,qq=" << str0 << "]"
						<< "\n抽取结果[标配]:\n" << strHave << send;
					sig = -1;
				}
				else {
					msg
						<< "[CQ:at,qq=" << account << "]" << ",舰长的水晶不够抽取十连了哟~" << send;
				}
			}
			else {
				msg
					<< "[CQ:at,qq=" << account << "]"
					<< "还没有舰长的数据哦~发送 抽卡注册 成为一名休伯利安的清洁工怎么样?"
					<< send;
			}
		}
		else {
			msg
				<< "抽卡没有被开启呢~" << send;
		}
	}
	//if (eve.message.compare(0, msgs.size(), msgs)) return;

	//auto txt = eve.message.substr(msgs.size());

	//eve.sendMsg() << code::record("out.wav", txt) << send;
	//record 的第一个参数指示将语音生成到哪个文件(相对于酷Q的语音目录)
	//record 的第二个参数指示将指定文字生成语音
	//由于一些兼容性问题,不是所有版本的window都支持此条目
}
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值