Question

За 1 payday идет сразу несколько payday

 

Спойлер

stock PayDay()
{
    new string[128];
    foreach(new i: Player)
	{
	    if(PlayerLogged[i])
	    {
			if(PI[i][pCheckTime] >= 1200 && IsThePayDayMembers(PI[i][pMember]) && !PI[i][pAdmin])
			{
				PI[i][pPayCheck] += Fraction_Pay[GetTeamID(i)][PI[i][pRank]-1];
			}
			if(PI[i][pAdmin])
			{
			    if(PI[i][pCheckTime] < 1200) SendClientMessage(i, COLOR_WHITE, "- Зарплата администратора: 0р");
			    else
			    {
					static const gAdminPay[] =
					{
						5000, 12000, 15000, 20000, 20000, 20000, 20000
					};
				    new AdminSalary = gAdminPay[PI[i][pAdmin]-1];
					GiveBankMoney(i, AdminSalary, "AdminSalary");
			    	format(string, sizeof(string), "- Зарплата администратора: {FFCC00}%dр", AdminSalary);
					SendClientMessage(i, COLOR_WHITE, string);
				}
			}
			if(PI[i][pMember])
			{
				format(string, sizeof(string), "- Зарплата: {66CC00}%dр", Fraction_Pay[GetTeamID(i)][PI[i][pRank]-1]);
				SendClientMessage(i, COLOR_WHITE, string);
				GiveBankMoney(i, Fraction_Pay[GetTeamID(i)][PI[i][pRank]-1], "PayDay");
				FracBank[9] -= Fraction_Pay[GetTeamID(i)][PI[i][pRank]-1];
				MysqlUpdateOtherInt("sfnbank", FracBank[9]);
			}
			if(MP1[0] > 0)
			{
			    format(string, sizeof(string), "- Гос. Налог: {0099FF}%dр", MP1[0]);
			    SendClientMessage(i, COLOR_WHITE, string);
			    PI[i][pBank] -= MP1[0];
				FracBank[9] += MP1[0];
				MysqlUpdateOtherInt("sfnbank", FracBank[9]);
				MysqlUpdatePlayerInt(i, "bank", PI[i][pBank]);
			}
			if(GetPlayerRooms(i))
			{
				SendClientMessage(i, COLOR_WHITE, "- Кварплата: {FFCC00}100р");
			}
			format(string, sizeof(string), "- Доп. зарплата: {0099FF}%dр", PI[i][pPayCheck]);
			SendClientMessage(i, COLOR_WHITE, string);
			FracBank[9] -= PI[i][pPayCheck];
			MysqlUpdateOtherInt("sfnbank", FracBank[9]);
			GiveBankMoney(i, PI[i][pPayCheck], "PayDay");
			format(string, sizeof(string), "- Текущий баланс счёта: {0099FF}%dр", PI[i][pBank]);
			SendClientMessage(i, COLOR_WHITE, string);
			PI[i][pPayCheck] = 0;
			PI[i][pZakon]++;
			MysqlUpdatePlayerInt(i, "paycheck", PI[i][pPayCheck]);
			MysqlUpdatePlayerInt(i, "zakon", PI[i][pZakon]);
			if(PI[i][pPhone][0] > 10)
			{
			    PI[i][pPhone][0] -= 10;
			}
			else if(PI[i][pPhone][0] <= 10)
			{
			    PI[i][pPhone][0] = 0;
			    PhoneMenuExit(i);
				CancelSelectTextDraw(i);
			}
			else
			{
			    PI[i][pPhone][0] = 0;
			    PhoneMenuExit(i);
				CancelSelectTextDraw(i);
			}

			new fmt_query[50+MAX_PLAYER_NAME];

			format(fmt_query, sizeof fmt_query, "UPDATE `accounts` SET `phone`='%d, %d' WHERE `name`='%s'", PI[i][pPhone][0], PI[i][pPhone][1], GetName(i));
			mysql_query(dbHandle, fmt_query);

			if(PI[i][pCheckTime] < 0) SendClientMessage(i, COLOR_DARKORANGE, "В этом часу Вы отыграли менее 20 минут, по этому ничего не получаете!");//убрать
			else
			{
				PI[i][pTime]++;
				MysqlUpdatePlayerInt(i, "time", PI[i][pTime]);
				PI[i][pExp]++;
			    if(PI[i][pVip] && !(PI[i][pTime] % 4)) PI[i][pExp]++;
			    format(string, sizeof(string), "- Опыт (%d из %d)", PI[i][pExp], (PI[i][pLevel]+1)*4);
			    SendClientMessage(i, COLOR_WHITE, string);
				MysqlUpdatePlayerInt(i, "exp", PI[i][pExp]);
			    if(PI[i][pExp] >= (PI[i][pLevel]+1)*4)
			    {
			        SendClientMessage(i, TEAM_BLUE_COLOR, "Ваш игровой возраст повысился!");
				    PI[i][pLevel]++;
				    PI[i][pAge]++;
				    PI[i][pExp] = 0;
				    SetPlayerScore(i, PI[i][pLevel]);
					MysqlUpdatePlayerInt(i, "level", PI[i][pLevel]);
					MysqlUpdatePlayerInt(i, "age", PI[i][pAge]);
					MysqlUpdatePlayerInt(i, "exp", PI[i][pExp]);
			    }
			    if(PI[i][pLevel] == 4 && PI[i][pExp] == 0)
				{
					if(strlen(PI[i][GOOGLEAUTH]) > 2)
					{
						GiveMoney(i, 50000);
						SendClientMessage(i, COLOR_LIME, "Вы получили {63BD4E}50000р {FFFFFF}за привязку Google Authenticator");
					}

					if(PI[i][pMailConfirmed] == 0)
						return SendClientMessage(i, C_OSNOV, "Чтобы получить вознаграждение за игрока, привяжите почту!");
					{
						if(!strcmp(PI[i][pReferal], "None", true)) { }
						else
						{
							new targetid = GetPlayerID(PI[i][pReferal]);
							if(targetid != INVALID_PLAYER_ID)
							{
								GiveMoney(targetid, 50000);
								SendClientMessage(targetid, COLOR_LIME, "Вы получили {63BD4E}50000р {FFFFFF}за приглашенного игрока");
							}
							else
							{
								STRING_GLOBAL[0] = EOS;
								format(STRING_GLOBAL, sizeof(STRING_GLOBAL), "SELECT * FROM "T_ACCOUNTS" WHERE name = '%s'", PI[i][pReferal]);
								mysql_tquery(dbHandle, STRING_GLOBAL, "OfflineSetReferalMoney", "i", i);
							}
						}
					}
				}
			}
			PI[i][pCheckTime] = 0;
			MysqlUpdatePlayerInt(i, "checktime", PI[i][pCheckTime]);
			Conday[1] = 0;
			PlayerPlaySound(i,5203,0.0,0.0,0.0);
		}
		else SendClientMessage(i, COLOR_DARKORANGE, "Вы не авторизированы для получения зарплаты");
	}
	new hour;
	gettime(hour, _, _);
	if(hour == 3)
	{
		for(new houseid = TOTALHOUSE; houseid > 0; houseid --)
		{
			if(!strcmp("None", HouseInfo[houseid][hOwner], true)) continue;
			if(HouseInfo[houseid][hOplata] < 1)
			{
				new targetid = GetPlayerID(HouseInfo[houseid][hOwner]);
				if(targetid != INVALID_PLAYER_ID)
				{
					PI[targetid][pBank] += HouseInfo[houseid][hBuyPrice];
					PI[targetid][pSpawnChange] = 0;
					MysqlUpdatePlayerInt(targetid, "spawnchange", PI[targetid][pSpawnChange]);
					SendClientMessage(targetid, COLOR_YELLOW, "Ваш дом был продан за неуплату");
					SendClientMessage(targetid, COLOR_YELLOW, "На Ваш банковский счет возвращена стоимость дома по гос-ву");
					MysqlUpdatePlayerInt(targetid, "bank", PI[targetid][pBank]);
				}
				else
				{
					STRING_GLOBAL[0] = EOS;
					format(STRING_GLOBAL, sizeof(STRING_GLOBAL), "SELECT * FROM "T_ACCOUNTS" WHERE name = '%s'", HouseInfo[houseid][hOwner]);
					mysql_tquery(dbHandle, STRING_GLOBAL, "OfflineClearHouse", "i", houseid);
				}
				strmid(HouseInfo[houseid][hOwner], "None", 0, strlen("None"), MAX_PLAYER_NAME);
				HouseInfo[houseid][hBuyPrice] = HouseInfo[houseid][hOplata] = HouseInfo[houseid][hGarage] = HouseInfo[houseid][hAutoDoors] = 0;
				HouseInfo[houseid][hLock] = 1;

				STRING_GLOBAL[0] = EOS;
				format(STRING_GLOBAL, sizeof(STRING_GLOBAL), "UPDATE "T_HOUSE" SET hOwner='%s',hOplata=%d,buyprice=%d,hGarage=%d,hAutoDoors=%d,hLock=%d WHERE id=%d",
				HouseInfo[houseid][hOwner],HouseInfo[houseid][hOplata],HouseInfo[houseid][hBuyPrice],HouseInfo[houseid][hGarage],HouseInfo[houseid][hAutoDoors],HouseInfo[houseid][hLock],houseid);
				mysql_tquery(dbHandle, STRING_GLOBAL, "", "");
				UpdateHouse(houseid);
			}
			else
			{
				HouseInfo[houseid][hOplata] -= 1;
				MysqlUpdateHouseInt(houseid, "hOplata", HouseInfo[houseid][hOplata]);
			}
		}
		for(new businessid = TOTALBIZZ; businessid > 0; businessid --)
		{
			if(!strcmp("None", BizzInfo[businessid][bOwner], true)) continue;
			if(BizzInfo[businessid][bOplata] < 1)
			{
				new targetid = GetPlayerID(BizzInfo[businessid][bOwner]);
				if(targetid != INVALID_PLAYER_ID)
				{
					PI[targetid][pBank] += BizzInfo[businessid][bBuyPrice];
					SendClientMessage(targetid, COLOR_YELLOW, "Ваш бизнес был продан за неуплату");
					SendClientMessage(targetid, COLOR_YELLOW, "На Ваш банковский счет возвращена стоимость бизнеса по гос-ву");
					MysqlUpdatePlayerInt(targetid, "bank", PI[targetid][pBank]);
				}

				ClearBizz(businessid);
			}
			else
			{
				BizzInfo[businessid][bOplata] -= 1;
				MysqlUpdateBizzInt(businessid, "oplata", BizzInfo[businessid][bOplata]);
			}
		}
		for(new kvarid = 1; kvarid <= TOTALROOMS; kvarid++)
		{
		    new query[300];
			if(!strcmp("None", RoomsInfo[kvarid][rOwner], true)) continue;
			if(RoomsInfo[kvarid][rOplata] < 100)
			{
				new targetid = GetPlayerID(RoomsInfo[kvarid][rOwner]);
				if(targetid != INVALID_PLAYER_ID)
				{
					new i = GetPVarInt(targetid, "PlayerRooms");
					strmid(RoomsInfo[i][rOwner], "None", 0, strlen("None"), MAX_PLAYER_NAME);
					RoomsInfo[i][rLock] = 0;
					SetRoomsStr(i, "rOwner", "None");
					RoomsInfo[i][rOplata] = 0;
					PI[targetid][pSpawnChange] = 0;
					SendClientMessage(targetid, COLOR_YELLOW, ""cPS"Вы не оплатили электричество, ваша квартира была передана гос-ву!");
					SendClientMessage(targetid, COLOR_YELLOW, ""cPS"На ваш банковский счет возвращена стоимость дома по гос-ву");
					PI[targetid][pBank] += RoomsInfo[i][rCost];
					format(query, sizeof(query), "UPDATE "T_ROOMS" SET  rOwner = '%s', rLock = %d WHERE id = %d LIMIT 1", RoomsInfo[i][rOwner], RoomsInfo[i][rLock], i);
					mysql_tquery(dbHandle, query, "", "");
				}
				else
				{
					format(query, sizeof(query), "SELECT * FROM "T_ACCOUNTS" WHERE name = '%s'", RoomsInfo[kvarid][rOwner]);
					mysql_tquery(dbHandle, query, "OfflineClearKvar", "i", kvarid);
				}
				strmid(RoomsInfo[kvarid][rOwner], "None", 0, strlen("None"), MAX_PLAYER_NAME);
				RoomsInfo[kvarid][rLock] = 0;
				format(query, sizeof(query), "UPDATE "T_ROOMS" SET  rOwner = '%s', rLock = %d WHERE id = %d LIMIT 1", RoomsInfo[kvarid][rOwner], RoomsInfo[kvarid][rLock], kvarid);
				mysql_tquery(dbHandle, query, "", "");
			}
			else
			{
				RoomsInfo[kvarid][rOplata] -= 100;
				SetRoomsInt(kvarid, "rOplata", RoomsInfo[kvarid][rOplata]);
			}
		}
	}
	for(new bizzid = TOTALBIZZ; bizzid > 0; bizzid --)
	{
		switch(BizzInfo[bizzid][bControl])
    	{
    		case TEAM_OPG1:
			{
				FracBank[6] += BizzPay[bizzid] / 10;
				MysqlUpdateMafiaInt("lcnbank", FracBank[6]);
			}
	    	case TEAM_RSM:
			{
				FracBank[5] += BizzPay[bizzid] / 10;
				MysqlUpdateMafiaInt("yakuzabank", FracBank[5]);
			}
		}

	    if(!strcmp(BizzInfo[bizzid][bOwner], "None", true)) continue;
	    if(BizzInfo[bizzid][bLock] == 1 && BizzInfo[bizzid][bLockTime] >= 36) ClearBizz(bizzid);
	    else
	    {
	       	BizzPay[bizzid] = 0;
	       	new playerid = GetPlayerID(BizzInfo[bizzid][bOwner]);
	        if(BizzInfo[bizzid][bProduct] <= 0 || BizzInfo[bizzid][bLic] == 0)
			{
				if(playerid != INVALID_PLAYER_ID && IsPlayerConnected(playerid))
				{
					if(BizzInfo[bizzid][bLockTime] == 0)
					{
					    if(GetPlayerBizz(playerid))
						{
							SendClientMessage(playerid, COLOR_YELLOW, "Налоговая служба |{FFFFFF} Ваш бизнес был закрыт по причине: отсутствие продуктов или отсутствие лицензии");
							SendClientMessage(playerid, COLOR_YELLOW, "Налоговая служба | {FFFFFF}Если по истечению 36 часов бизнес будет закрыт, он будет продан гос-ву");
						}
					}
					BizzInfo[bizzid][bLock] = 1;
					MysqlUpdateBizzInt(bizzid, "block", BizzInfo[bizzid][bLock]);
				}
			}
			if(BizzInfo[bizzid][bLock] == 1)
			{
				BizzInfo[bizzid][bLockTime]++;
				MysqlUpdateBizzInt(bizzid, "locktime", BizzInfo[bizzid][bLockTime]);
			}
			if(BizzInfo[bizzid][bLockTime] > 1 && BizzInfo[bizzid][bLockTime] < 36)
			{
				if(IsPlayerConnected(playerid) && playerid != INVALID_PLAYER_ID)
				{
					if(GetPlayerBizz(playerid))
					{
						SendMes(playerid, COLOR_YELLOW, "Ваш бизнес закрыт уже %i час(а)", BizzInfo[GetPVarInt(playerid, "PlayerBizz")][bLockTime]);
						SendClientMessage(playerid, COLOR_YELLOW, "Если по истечению 36 часов бизнес будет закрыт, он будет продан гос-ву");
					}
				}
			}
	    }
	}
	return 1;
}

 

 

Share this post


Link to post

4 answers to this question

  • 0

@archiboy6, на основании чего вы пришли к такому выводу?

Share this post


Link to post
  • 0

@odosenok ПРи PayDay в игре выводится несколько раз, и сумма денег тоже обновляется

Share this post


Link to post
  • 0

Для решения проблемы, необходимо посмотреть  конкретно место где вызывается функция PayDay(). Если вызывается несколько раз, следовательно вызов идет в таймере, следовательно необходимо поставить условие, при котором PayDay() вызовется только один раз.

Edited by odosenok
Причина: убрал жирный текст.

Заметка от Cawfee , создано

Все-таки не стоит выделять жирным все подряд. Ухудшается читаемость текста.

Share this post


Link to post
  • 0

@archiboy6, ну, так что? Тебе же предложили посмотреть место вызова функции PayDay. Есть новости, не?

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Filatov123
      By Filatov123
      fatal error 100: cannot read from file: "performance"