#Boot
Ученик
Изучая структуру системы скилов в РП моде увидел интересный факт: скилл повышается ТОЛЬКО при убийстве персонажа, а это немного не честно.
В этот системке немного другой алгоритм, скилл для оружия дается в реальном процентном соотношении с навыками игрока в стрельбе.
Проще говоря - кол-во попаданий / на кол-во выстрелов * 100%, что дает нам процент уровня тащерства игрока.
Команда /skill для просмотра навыков владения оружием.
Ко всем define:
Ко всем new:
В public OnPlayerConnect(playerid) :
В public OnPlayerCommandText(playerid, cmdtext[]):
В public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart) :
В public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) :
Вот простенькая система скилов по попаданиям!
В этот системке немного другой алгоритм, скилл для оружия дается в реальном процентном соотношении с навыками игрока в стрельбе.
Проще говоря - кол-во попаданий / на кол-во выстрелов * 100%, что дает нам процент уровня тащерства игрока.
Команда /skill для просмотра навыков владения оружием.
Ко всем define:
PHP:
#define SKILL_WEAPONS 10
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
*/
PHP:
for( new j = 0; j != SKILL_WEAPONS; j++ ){
weapon_shots[ playerid ][ j ] = 0.0;
weapon_damaged[ playerid ][ j ] = 0.0;
}
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");
}
PHP:
if( 22 <= weaponid <= 31 )
weapon_damaged[ playerid ][ weaponid - 22 ] += 1.0;
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 ) );
}
