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

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

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

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

Система прокачки скилов оружия по патронам.

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

Barni

Компетентный
Дефайны для регулировки кол - ва патронов, которые надо вытреить чтобы прокачать 1 процент
PHP:
#define Ammo_SDPISTOL 30 //Кол - во, которые надо выстрелить, чтоы прокачать 1 процент
#define Ammo_DEAGLE 24 //Кол - во, которые надо выстрелить, чтоы прокачать 1 процент
#define Ammo_SHOTGUN 15 //Кол - во, которые надо выстрелить, чтоы прокачать 1 процент
#define Ammo_MP5 75 //Кол - во, которые надо выстрелить, чтоы прокачать 1 процент
#define Ammo_AK47 100 //Кол - во, которые надо выстрелить, чтоы прокачать 1 процент
#define Ammo_M4A1 89 //Кол - во, которые надо выстрелить, чтоы прокачать 1 процент
В енумератор enum pInfo
PHP:
pGunSkill[6],
В public OnPlayerRegister
PHP:
iniSetInt(File,"SDPistol",0);
iniSetInt(File,"DesertEagle",0);
iniSetInt(File,"ShotGun",0);
iniSetInt(File,"MP5",0);
iniSetInt(File,"AK47",0);
iniSetInt(File,"M4",0);
В public OnPlayerUpdate или типо этого(Сохранение переменных в акаунт)
PHP:
iniSetInt(File,"SDPistol",PlayerInfo[playerid][pGunSkill][0]);
iniSetInt(File,"DesertEagle",PlayerInfo[playerid][pGunSkill][1]);
iniSetInt(File,"ShotGun",PlayerInfo[playerid][pGunSkill][2]);
iniSetInt(File,"MP5",PlayerInfo[playerid][pGunSkill][3]);
iniSetInt(File,"AK47",PlayerInfo[playerid][pGunSkill][4]);
iniSetInt(File,"M4",PlayerInfo[playerid][pGunSkill][5]);
В public OnPlayerLogin
PHP:
iniGetInt(File,"SDPistol",PlayerInfo[playerid][pGunSkill][0]);
iniGetInt(File,"DesertEagle",PlayerInfo[playerid][pGunSkill][1]);
iniGetInt(File,"ShotGun",PlayerInfo[playerid][pGunSkill][2]);
iniGetInt(File,"MP5",PlayerInfo[playerid][pGunSkill][3]);
iniGetInt(File,"AK47",PlayerInfo[playerid][pGunSkill][4]);
iniGetInt(File,"M4",PlayerInfo[playerid][pGunSkill][5]);
public OnPlayerCommandTExt:
PHP:
if(strcmp(cmd, "/myskills", true) == 0)
    {
            new stringskill[700];
        new points[6],percent[2] = "%";
        points[0] = 100 - PlayerInfo[playerid][pGunSkill][0];
        points[1] = 100 - PlayerInfo[playerid][pGunSkill][1];
        points[2] = 100 - PlayerInfo[playerid][pGunSkill][2];
        points[3] = 100 - PlayerInfo[playerid][pGunSkill][3];
        points[4] = 100 - PlayerInfo[playerid][pGunSkill][4];
        points[5] = 100 - PlayerInfo[playerid][pGunSkill][5];
         format(stringskill,sizeof(stringskill),"SDPistol:\t[%s]%d%s\nDeagle:\t[%s]%d%s\nShotGun:\t[%s]%d%s\nMP5\t\t[%s]%d%s\nAK47:\t\t[%s]%d%s\nM4A1:\t\t[%s]%d%s",
         ToDevelopSkills(PlayerInfo[playerid][pGunSkill][0],points[0]),PlayerInfo[playerid][pGunSkill][0],percent,
         ToDevelopSkills(PlayerInfo[playerid][pGunSkill][1],points[1]),PlayerInfo[playerid][pGunSkill][1],percent,
         ToDevelopSkills(PlayerInfo[playerid][pGunSkill][2],points[2]),PlayerInfo[playerid][pGunSkill][2],percent,
         ToDevelopSkills(PlayerInfo[playerid][pGunSkill][3],points[3]),PlayerInfo[playerid][pGunSkill][3],percent,
         ToDevelopSkills(PlayerInfo[playerid][pGunSkill][4],points[4]),PlayerInfo[playerid][pGunSkill][4],percent,
         ToDevelopSkills(PlayerInfo[playerid][pGunSkill][5],points[5]),PlayerInfo[playerid][pGunSkill][5],percent);
         ShowPlayerDialog(playerid,43,DIALOG_STYLE_MSGBOX,"<< Навыки владением оружием>>",stringskill,"Готово","");
        return 1;
}
Ну и сама функция распознавание прокачки скиллов:
PHP:
stock ToDevelopSkills(Slashes,Points)
{
    new SlashesAndPoints[400];
    new Slash[2] = "|";
    new Point[2] = "'";
    for(new i = 0; i < Slashes; i++) strcat(SlashesAndPoints, Slash);
    for(new i = 0; i < Points; i++) strcat(SlashesAndPoints, Point);
    return SlashesAndPoints;
}
В конец мода функцию скиллов игрока
PHP:
stock SetPlayerSkills(playerid)
{
    SetPlayerSkillLevel(playerid, WEAPONSKILL_PISTOL_SILENCED, PlayerInfo[playerid][pGunSkill][0]*10);
    SetPlayerSkillLevel(playerid, WEAPONSKILL_DESERT_EAGLE, PlayerInfo[playerid][pGunSkill][1]*10);
    SetPlayerSkillLevel(playerid, WEAPONSKILL_SHOTGUN, PlayerInfo[playerid][pGunSkill][2]*10);
    SetPlayerSkillLevel(playerid, WEAPONSKILL_MP5, PlayerInfo[playerid][pGunSkill][3]*10);
    SetPlayerSkillLevel(playerid, WEAPONSKILL_AK47, PlayerInfo[playerid][pGunSkill][4]*10);
    SetPlayerSkillLevel(playerid, WEAPONSKILL_M4, PlayerInfo[playerid][pGunSkill][5]*10);
    return 1;
}
В public OnPlayerSpawn в самый конец
PHP:
SetPlayerSkills(playerid);
Теперь переменные для отчитывания патронов в самое начало public OnPlayerUpdate
PHP:
SetPVarInt(playerid, "NewPlayerAmmo", GetPlayerAmmo(playerid));
if(GetPVarInt(playerid, "NewPlayerAmmo") != GetPVarInt(playerid, "PlayerAmmo"))
{
        OnPlayerAmmoChange(playerid, GetPVarInt(playerid, "NewPlayerAmmo"), GetPVarInt(playerid, "PlayerAmmo"));
        SetPVarInt(playerid, "PlayerAmmo", GetPVarInt(playerid, "NewPlayerAmmo"));
 }
Ну и сам public куда нить тоже в конец мода
PHP:
stock OnPlayerAmmoChange(playerid, newammo, oldammo)
{
    if(newammo < oldammo)
    {
        switch(GetPlayerWeapon(playerid))
        {
            case 24:
            {
                SetPVarInt(playerid, "SkillD",GetPVarInt(playerid,"SkillD") +1);
                if(GetPVarInt(playerid,"SkillD") >= Ammo_DEAGLE && PlayerInfo[playerid][pGunSkill][1] < 100)
                {
                    PlayerInfo[playerid][pGunSkill][1]++;
                    SetPVarInt(playerid, "SkillD",0);
                }
            }
            case 23:
            {
                SetPVarInt(playerid, "SkillSD",GetPVarInt(playerid,"SkillSD") +1);
                if(GetPVarInt(playerid,"SkillSD")>= Ammo_SDPISTOL && PlayerInfo[playerid][pGunSkill][0] < 100)
                {
                     PlayerInfo[playerid][pGunSkill][0]++;
                     SetPVarInt(playerid, "SkillSD",0);
                }
            }
            case 25:
            {
                SetPVarInt(playerid, "SkillShot",GetPVarInt(playerid,"SkillShot") +1);
                if(GetPVarInt(playerid,"SkillShot") >= Ammo_SHOTGUN && PlayerInfo[playerid][pGunSkill][2] < 100)
                {
                    PlayerInfo[playerid][pGunSkill][2]++;
                    SetPVarInt(playerid, "SkillShot",0);
                }
            }
            case 29:
            {
                SetPVarInt(playerid, "SkillMP5",GetPVarInt(playerid,"SkillMP5") +1);
                if(GetPVarInt(playerid,"SkillMP5") >= Ammo_MP5 && PlayerInfo[playerid][pGunSkill][3] < 100)
                {
                    PlayerInfo[playerid][pGunSkill][3]++;
                    SetPVarInt(playerid, "SkillMP5",0);
                }
            }
            case 30:
            {
                SetPVarInt(playerid, "SkillAk47",GetPVarInt(playerid,"SkillAk47") +1);
                if(GetPVarInt(playerid,"SkillAk47") >= Ammo_AK47 && PlayerInfo[playerid][pGunSkill][4] < 100)
                {
                    PlayerInfo[playerid][pGunSkill][4]++;
                    SetPVarInt(playerid, "SkillAk47",0);
                }
            }
            case 31:
            {
                SetPVarInt(playerid, "SkillM4",GetPVarInt(playerid,"SkillM4") +1);
                if(GetPVarInt(playerid,"SkillM4") >= Ammo_M4A1 && PlayerInfo[playerid][pGunSkill][5] < 100)
                {
                    PlayerInfo[playerid][pGunSkill][5]++;
                    SetPVarInt(playerid, "SkillM4",0);
                }
            }
        }
        SavePlayer(playerid);//замените на свою функцию сохранения
    }
    return 1;
}
В public OnPlayerConnect:
PHP:
PlayerInfo[playerid][pGunSkill][0] = 0;
PlayerInfo[playerid][pGunSkill][1] = 0;
PlayerInfo[playerid][pGunSkill][2] = 0;
PlayerInfo[playerid][pGunSkill][3] = 0;
PlayerInfo[playerid][pGunSkill][4] = 0;
PlayerInfo[playerid][pGunSkill][5] = 0;

Вот и всё.. Автор: Fresh_Light || Barni
Вот примерно так будет:



Чтобы проверить роботоспособность системы сделайте себе дигл, выстрелите 24 и более патронов и введите /myskill
if(Shot[playerid] >= кол -во) это сколько надо выстрелить патронов,чтобы прокачать 1% скил оружия
Обновлено, убран баг с прокачкой оружия(Если выстрелить 23 патрона с АК47 и 1 с дигла то дигл качнётся на 1 процент), убраны лишние переменные. Тестируем. Нашли баг? Пишите в тему, помогу!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу