Доступ к готовым решениям

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

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

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

Мануал Система скилов по попаданиям

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

#Boot

Ученик
Изучая структуру системы скилов в РП моде увидел интересный факт: скилл повышается ТОЛЬКО при убийстве персонажа, а это немного не честно.
В этот системке немного другой алгоритм, скилл для оружия дается в реальном процентном соотношении с навыками игрока в стрельбе.
Проще говоря - кол-во попаданий / на кол-во выстрелов * 100%, что дает нам процент уровня тащерства игрока.

Команда /skill для просмотра навыков владения оружием.

Ко всем define:
PHP:
#define SKILL_WEAPONS 10
Ко всем new:
PHP:
new Float: weapon_shots[ MAX_PLAYERS ][ SKILL_WEAPONS ];
new Float: weapon_damaged[ MAX_PLAYERS ][ SKILL_WEAPONS ];
/*

	22 - WEAPON_COLT45
	23 - WEAPON_SILENCED
	24 - WEAPON_DEAGLE
	25 - WEAPON_SHOTGUN
	26 - WEAPON_SAWEDOFF
	27 - WEAPON_SHOTGSPA
	28 - WEAPON_UZI
	29 - WEAPON_MP5
	30 - WEAPON_AK47
	31 - WEAPON_M4
*/
В public OnPlayerConnect(playerid) :
PHP:
for( new j = 0; j != SKILL_WEAPONS; j++ ){
	    weapon_shots[ playerid ][ j ] = 0.0;
	    weapon_damaged[ playerid ][ j ] = 0.0;
	}
В public OnPlayerCommandText(playerid, cmdtext[]):
PHP:
if(!strcmp(cmdtext, "/skill", true)){
 	    new j = -1, str[ 256 ], weapon_name[ 32 ];
	    format( str, 256, "{ffffff}Навыки владения оружиями:\n" );
	    while( ++j != SKILL_WEAPONS ){
	        GetWeaponName( ( j + 22 ), weapon_name, sizeof weapon_name );
 
	        if( weapon_shots[ playerid ][ j ] == 0.0 || weapon_damaged[ playerid ][ j ] == 0.0 )
	            format( str, 256, "%s%s: 0.0%s\n", str, weapon_name, "%" );
	        else
				format( str, 256, "%s%s: %.2f%s\n", str, weapon_name, ( weapon_damaged[ playerid ][ j ] / weapon_shots[ playerid ][ j ] ) * 100.0, "%" );
	    }
 	    return ShowPlayerDialog( playerid, 0, DIALOG_STYLE_MSGBOX, "  ", str, "Ok", "" );
 	}
	return SendClientMessage(playerid, -1, "Command is not exist");
}
В public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart) :
PHP:
if( 22 <= weaponid <= 31 )
weapon_damaged[ playerid ][ weaponid - 22 ] += 1.0;
В public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) :
PHP:
if( 22 <= weaponid <= 31 ){
 		weapon_shots[ playerid ][ weaponid - 22 ] += 1.0;
		SetPlayerSkillLevel( playerid, weaponid - 22, floatround( ( ( weapon_damaged[ playerid ][ weaponid - 22 ] / weapon_shots[ playerid ][ weaponid - 22 ] ) * 100.0 ) * 9.99 ) );
	}
Вот простенькая система скилов по попаданиям!
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу