Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Проблема с выдачей EXP

Статус
В этой теме нельзя размещать новые ответы.

geka154

Дебютант
Всем привет. Я долгое время не могу пофиксить баг с выдачей exp на фракциях кроме бандитских.

Вот скрипт
PHP:
stock pay_day_time ( )
{
	for ( new j = 0 ; j < gz_count ; j ++ )
	{
		if ( gz_info [ j ] [ gz_owner ] == 0 ) continue ;
		f_info [ gz_info [ j ] [ gz_owner ] - 1 ] [ f_money ] += 500 ;
		update_gdorm_text ( gz_info [ j ] [ gz_owner ] ) ;
	}
	new total_graf [ 6 ] ;
	for(new i; i < CountGraffity; i++)
	{
	    if ( graf_info [ i ] [ g_member ] == 0 ) continue ;
	    f_info [ graf_info [ i ] [ g_member ] - 1 ] [ f_money ] += 250 ;
	    update_gdorm_text ( graf_info [ i ] [ g_member ] ) ;
	    total_graf [ graf_info [ i ] [ g_member ] - 18 ] ++ ;
	}
	for ( new j = 18 ; j <= 22 ; j ++ )
	{
		new query_string [ 86 ];
		format ( query_string, 86, "UPDATE `fractions` SET `f_money` = '%d' WHERE `f_id` = '%d' LIMIT 1",
		f_info [ j - 1 ] [ f_money ], j ) ;
		mysql_tquery ( sql_connection, query_string, "", "" ) ;
	}

	foreach(new i: logged_players)
	{
		switch ( p_t_info [ i ] [ p_data ] [ 1 ] )
		{
			case 0:
			{
				new newhour, newminute, newsecond ;
				gettime ( newhour, newminute, newsecond ) ;
				SetPlayerTime ( i, newhour, newminute ), SetPlayerWeather ( i, global_weather ) ;
			}
			case 1..9: SetPlayerWeather ( i, 4 ), SetPlayerTime ( i, 18, 0 ) ;
			case 10:SetPlayerTime ( i, 12, 0 ), SetPlayerWeather ( i, global_weather ) ;
		}
		if ( GetPVarInt ( i, "p_biz_id" ) != 0 )SetPlayerWeather ( i, 4 ), SetPlayerTime ( i, 18, 0 ) ;

		/*if ( p_info [ i ] [ hour_played ] + floatround ( NetStats_GetConnectedTime ( i ) / 1000 ) < 1200 )
		{
			SendClientMessage ( i, col_gray, "{"#cRD"}* {"#cGR"}Для получения зарплаты нужно отыграть {"#cRD"}20 минут{"#cGR"}.") ;
			continue ;
		}*/
		if ( pl_afk_time [ i ] > 2 )
		{
			SendClientMessage ( i, col_gray, "{"#cRD"}* {"#cGR"}Для получения зарплаты необходимо находиться не в АФК." ) ;
			continue ;
		}
		if ( p_info [ i ] [ member ] )
		{
			if ( ! gang_player ( i ) && ! mafia_player ( i ) )
			{
			    p_info [ i ] [ salary ] += f_info [ p_info [ i ] [ member ] - 1 ] [ f_rank_salary ] [ p_info [ i ] [ rank ] - 1 ] * GetPVarInt ( i, "advert_count" ) ;
			    SetPVarInt ( i, "advert_count", 1 ) ;
			
				/*if ( f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] > f_info [ p_info [ i ] [ member ] - 1 ] [ f_rank_salary ] [ p_info [ i ] [ rank ] - 1 ] )
				{
					p_info [ i ] [ salary ] += f_info [ p_info [ i ] [ member ] - 1 ] [ f_rank_salary ] [ p_info [ i ] [ rank ] - 1 ] ;
					f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] -= f_info [ p_info [ i ] [ member ] - 1 ] [ f_rank_salary ] [ p_info [ i ] [ rank ] - 1 ] ;
				}*/
				
				if ( f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] > f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] && f_info [ p_info [ i ] [ member ] - 1 ] [ f_status_zp ] == 1 )
				{
				    p_info [ i ] [ salary ] += f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ;
				    f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] -= f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ;
				}
				else if ( f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] > f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] && f_info [ p_info [ i ] [ member ] - 1 ] [ f_status_zp ] == 0 )
				{
				    new h, m, s;
    				gettime(h, m, s);
    				if( h == 20 )
    				{
    				    p_info [ i ] [ salary ] += f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ;
				    	f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] -= f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ;
    				}
				}
			}
			else
			{
				p_info [ i ] [ salary ] += f_info [ p_info [ i ] [ member ] - 1 ] [ f_rank_salary ] [ p_info [ i ] [ rank ] - 1 ] ;
				
				if ( f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] > f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] && f_info [ p_info [ i ] [ member ] - 1 ] [ f_status_zp ] == 0 )
				{
				    p_info [ i ] [ salary ] += f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ;
				    f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] -= f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ;
				}
				else if ( f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] > f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] && f_info [ p_info [ i ] [ member ] - 1 ] [ f_status_zp ] == 1 )
				{
				    new h, m, s;
    				gettime(h, m, s);
    				if( h == 20 )
    				{
    				    p_info [ i ] [ salary ] += f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ;
				    	f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] -= f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ;
    				}
				}
			}
		}

		SendClientMessage ( i, col_white, "{"#cGN"}*** {"#cWH"}БАНКОВСКИЙ ЧЕК {"#cGN"}***") ;
		
		new tmpintrate = 0, interest = 0, tax_player = 0 ;
		new newban_count = p_info [ i ] [ bank ] + p_info [ i ] [ salary ] ;
		new count_vip = floatround ( newban_count * 0.015 ) ;
		if ( p_info [ i ] [ vip ] )
		{
			newban_count += count_vip ;
		}
		
		if ( p_info [ i ] [ vip ] )
		{
		    tmpintrate = 3;
			interest = floatround( ( p_info [ i ] [ bank ] / 1000 ) * ( 3 ) ) ;
			if(interest > 100000)
			{
			    interest = 100000;
			}
		}
		else
		{
		    tmpintrate = 1;
			interest = floatround ( ( p_info [ i ] [ bank ] / 1000 ) * ( 1 ) ) ;
			newban_count += interest ;
			if(interest > 50000)
			{
			    interest = 50000;
			}
		}

		if ( p_info [ i ] [ salary ] > 0 )
		{
			tax_player += floatround ( ( ( p_info [ i ] [ salary ] * for_tax [ 6 ] ) / 100 ) / p_info [ i ] [ tax_donate ] ) ;
			if ( tax_player < 1 ) tax_player = 1 ;
			p_info [ i ] [ tax ] += tax_player ;
		}
		foreach ( new veh_id: player_vehicles[i])
		{
			tax_player += floatround ( ( RandomEx ( 300, 500 ) * for_tax [ 5 ] ) / p_info [ i ] [ tax_donate ] ) ;
			if ( tax_player < 1 ) tax_player = 1 ;
			p_info [ i ] [ tax ] += tax_player ;
		}
		new _t_string [ 144 ] ;
		format ( _t_string, sizeof _t_string, "Чек: {"#cGN"}%i${"#cWH"}. Баланс: {"#cGN"}%i${"#cWH"}", p_info [ i ] [ salary ], p_info [ i ] [ bank ]);
		SendClientMessage ( i, col_white, _t_string ) ;
		format ( _t_string, sizeof _t_string, "Налог: {"#cGN"}-%i${"#cWH"}. Общая задолженность: {"#cGN"}-%i$", tax_player, p_info [ i ] [ tax ] );
		SendClientMessage ( i, col_white, _t_string ) ;
		format ( _t_string, sizeof _t_string, "Вклад в банке под: {"#cGN"}0.%i{"#cWH"} процентов", tmpintrate);
		SendClientMessage ( i, col_white, _t_string ) ;
		format ( _t_string, sizeof _t_string, "Полученные средства по банковскому вкладу: {"#cGN"}%i${"#cWH"}", interest);
		SendClientMessage ( i, col_white, _t_string ) ;
		
		if ( p_info [ i ] [ member ] )
		{
		    if ( ! gang_player ( i ) && ! mafia_player ( i ) )
		    {
				if ( f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] > f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] && f_info [ p_info [ i ] [ member ] - 1 ] [ f_status_zp ] == 1 )
				{
				    format ( _t_string, 128, "Премиальные: {"#cGN"}%i${"#cWH"}", f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ) ;
					SendClientMessage ( i, col_white, _t_string ) ;
				}
				else if ( f_info [ p_info [ i ] [ member ] - 1 ] [ f_money ] > f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] && f_info [ p_info [ i ] [ member ] - 1 ] [ f_status_zp ] == 0 )
				{
				    new h, m, s;
		    		gettime(h, m, s);
				    if ( h == 20 )
				    {
				        format ( _t_string, 128, "Премиальные: {"#cGN"}%i${"#cWH"}", f_info [ p_info [ i ] [ member ] - 1 ] [ f_rang_zp ] [ p_info [ i ] [ rank ] - 1 ] ) ;
						SendClientMessage ( i, col_white, _t_string ) ;
				    }
				}
			}
		}
		
		if(p_info [ i ] [ rent_house ] != -1)
		{
			for ( new h = 0 ; h < house_count ; h ++ )
			{
				if(p_info [ i ] [ rent_house ] == h)
				{
				    if ( newban_count >= h_info [ h ] [ h_rent_price ] )
				    {
				        newban_count -= h_info [ h ] [ h_rent_price ];
					    format ( _t_string, 128, "Аренда жилого помещения: {"#cGN"}%i${"#cWH"}", h_info [ h ] [ h_rent_price ] ) ;
						SendClientMessage ( i, col_white, _t_string ) ;
						
						h_info [ h ] [ h_safe_data ] [ 1 ] += h_info [ h ] [ h_rent_price ] ;

						new _text_string [ 148 ] ;
						format ( _text_string, sizeof _text_string, "UPDATE `houses` SET `h_safe_data` = '%d|%d|%d|%d|%d|%d|%d|%d' WHERE `h_id` = '%d' LIMIT 1",
						h_info [ h ] [ h_safe_data ] [ 0 ], h_info [ h ] [ h_safe_data ] [ 1 ],
						h_info [ h ] [ h_safe_guns ] [ 0 ],	h_info [ h ] [ h_safe_guns ] [ 1 ], h_info [ h ] [ h_safe_guns ] [ 2 ],
						h_info [ h ] [ h_safe_guns ] [ 3 ],	h_info [ h ] [ h_safe_guns ] [ 4 ], h_info [ h ] [ h_safe_guns ] [ 5 ],
						h_info [ h ] [ h_id ] ) ;
						mysql_tquery ( sql_connection, _text_string ) ;
					}
					else
					{
					    p_info [ i ] [ rent_house ] = -1 ;
						update_int_sql ( i, "u_renthouse", p_info [ i ] [ rent_house ] ) ;
						SendClientMessage ( i, col_gray, "{"#cRD"}* {"#cGR"}Вы были выселены из арендуемого жилого помещения");
					}
				}
			}
		}

		p_info [ i ] [ salary ] = 0 ;
		if ( ( p_info [ i ] [ vip ] && p_info [ i ] [ bank ] + p_info [ i ] [ salary ] < 1000000 ) ||  p_info [ i ] [ bank ] + p_info [ i ] [ salary ] < 500000 )
		{
			p_info [ i ] [ bank ] = newban_count ;
		}
		else
		{
			SendClientMessage ( i, col_white, "" ) ;
			SendClientMessage ( i, col_white, "{"#cGR"}* Лимит средств на банковском счету превышен, часть заработной платы не была переведена." ) ;
		}
		//SendClientMessage ( i, col_white, "{"#cYW"}-----------------------------------------------------------" ) ;
		
		format ( _t_string, 128, "[F] В общак начислен бонус за %i граффити на районах.", total_graf [ p_info [ i ] [ member ] - 18 ]  ) ;
		if ( gang_player ( i ) ) SendClientMessage ( i, 0x8D8DFFFF, _t_string ) ;

		p_info [ i ] [ exp ] += 1 * server_bonus ;
		if ( p_info [ i ] [ level ] >= 3 && p_info [ i ] [ promocode_money ] > 0 )
		{
			give_money ( i, p_info [ i ] [ promocode_money ] ) ;
			insert_money_log ( i, INVALID_PLAYER_ID, p_info [ i ] [ promocode_money ], "промокод бонус" ) ;
			p_info [ i ] [ promocode_money ] = 0 ;
			update_int_sql ( i, "u_promomoney", p_info [ i ] [ promocode_money ] ) ;
			SendClientMessage ( i, col_white, "{"#cGN"}* {"#cWH"}Вы получили денежный бонус за введённый промокод." ) ;
		}
		if ( p_info [ i ] [ exp ] >= ( p_info [ i ] [ level ] + 1 ) * 4 )
		{
			p_info [ i ] [ exp ] -= ( p_info [ i ] [ level ] + 1 ) * 4 ;
			p_info [ i ] [ level ] ++ ;
			SetPlayerScore ( i, p_info [ i ] [ level ] ) ;
			update_int_sql ( i, "u_level", p_info [ i ] [ level ] ) ;

			p_info [ i ] [ donate_roulette ] += 1 ;
			update_int_sql ( i, "u_droulette", p_info [ i ] [ donate_roulette ] ) ;
			SendClientMessage ( i, col_white, "{"#cGN"}* {"#cWH"}Вы получили 1 очко для рулетки-удачи, введите {"#cGN"}/roulette{"#cWH"}, чтобы сыграть." ) ;

			SendClientMessage ( i, col_white, "{"#cGN"}* {"#cWH"}Ваш игровой уровень повысился." ) ;
			
			if ( p_info [ i ] [ level ] == 3 )
			{
				format ( _t_string, sizeof ( _t_string ), "SELECT `u_id`,`u_name` FROM `users` WHERE `u_name` IN (SELECT `u_referal` FROM `users` WHERE `u_id`='%d')",
				p_info [ i ] [ id ] ) ;
				mysql_tquery ( sql_connection, _t_string, "referal_bonus_callback", "i", i ) ;
			}
		}
		format ( _t_string, sizeof ( _t_string ), "UPDATE `users` SET `u_exp` = '%d',`u_tax` = '%d',`u_bank` = '%d' WHERE `u_id` = '%i' LIMIT 1",
		p_info [ i ] [ exp ], p_info [ i ] [ tax ], p_info [ i ] [ bank ], p_info [ i ] [ id ] ) ;
		mysql_tquery ( sql_connection, _t_string ) ;

		p_info [ i ] [ hour_played ] = 0 ;
	}
	return 1 ;
}


ошибка
PHP:
[11:47:12] [debug] Run time error 4: "Array index out of bounds"
[11:47:12] [debug]  Attempted to read/write array element at negative index -13
[11:47:12] [debug] AMX backtrace:
[11:47:12] [debug] #0 00034b1c in pay_day_time () at C:\Users\geka\Desktop\test pawno mods\gamemodes\und.pwn:8156
строчка
PHP:
format ( _t_string, 128, "[F] В общак начислен бонус за %i граффити на районах.", total_graf [ p_info [ i ] [ member ] - 18 ]  ) ;
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу