(FS) Оружие на теле

Описание: Готовые решения скриптов, filterScript
Модератор: SJplayer

Sprite M
Автор темы, Ст. сержант
Ст. сержант
Аватара
Sprite M
Автор темы, Ст. сержант
Ст. сержант
Сообщения: 83
Зарегистрирован: 5 июня 2013
С нами: 10 лет 9 месяцев

#1 Sprite » 2 октября 2016, 20:43

Автор: GoldenLion

phpBB [media]


Привет, Я видел многие выпустили дополнительные скрипты, которые создают объекты вашего оружия на вашем теле, когда они не используются, но у них не было никаких вариантов для настройки позиции или скрыть их. Поэтому сегодня я решил создать filterscript как это, где вы можете настроить положение на теле вашего оружия или скрыть маленькое оружие.

Там только одна команда: /weapon [adjustpos/bone/hide]
Вам также потребуется ZCMD для компиляции filterscript.

Код

Код: Выделить всё

/*
    Weapons on body system by GoldenLion
    Credits to Zeex for ZCMD
   
    Please don't remove the credits. :)
*/
 
#define FILTERSCRIPT
 
#include <a_samp>
#include <zcmd>
 
#if defined FILTERSCRIPT
 
#define DIALOG_EDIT_BONE 5000
 
enum weaponInfo
{
    Float:Position[6],
    Bone,
    Hidden
}
 
new WeaponInfo
[MAX_PLAYERS][39][weaponInfo], WeaponCheckTimer[MAX_PLAYERS], EditingWeapon[MAX_PLAYERS];
 
GetWeaponObjectSlot
(weaponid)
{
    new objectslot;
   
    switch 
(weaponid)
    {
        case 22..24: objectslot = 0;
        case 25..27: objectslot = 1;
        case 28, 29, 32: objectslot = 2;
        case 30, 31: objectslot = 3;
        case 33, 34: objectslot = 4;
        case 35..38: objectslot = 5;
    }
    return objectslot;
}
 
GetWeaponModel
(weaponid)
{
    new const WeaponModels[] =
    {
        0, 331, 333, 334, 335, 336, 337, 338, 339, 341, 321, 322, 323, 324,
        325, 326, 342, 343, 344, 0, 0, 0, 346, 347, 348, 349, 350, 351, 352,
        353, 355, 356, 372, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
        367, 368, 368, 371
    
};
    return WeaponModels[weaponid];
}
 
PlayerHasWeapon
(playerid, weaponid)
{
    new weapon, ammo;
   
    for 
(new i; i < 13; i++)
    {
        GetPlayerWeaponData(playerid, i, weapon, ammo);
        if (weapon == weaponid && ammo) return 1;
    }
    return 0;
}
 
IsWeaponWearable
(weaponid)
{
    switch (weaponid) {
        case 22..38: return 1;
    }
    return 0;
}
 
IsWeaponHideable
(weaponid)
{
    switch (weaponid) {
        case 22..24, 28, 32: return 1;
    }
    return 0;
}
 
ResetWeaponInfo
(playerid)
{
    for (new i = 22; i <= 38; i++)
    {
        WeaponInfo[playerid][i][Position][0] = -0.115999;
        WeaponInfo[playerid][i][Position][1] = 0.189000;
        WeaponInfo[playerid][i][Position][2] = 0.087999;
        WeaponInfo[playerid][i][Position][3] = 0.000000;
        WeaponInfo[playerid][i][Position][4] = 44.500007;
        WeaponInfo[playerid][i][Position][5] = 0.000000;
        WeaponInfo[playerid][i][Bone] = 1;
        WeaponInfo[playerid][i][Hidden] = false;
    }
}
 
forward WeaponCheck
(playerid);
public WeaponCheck(playerid)
{
    new weapon[13], ammo[13], objectslot, weaponcount;
 
    for 
(new i; i <= 12; i++)
    {
        GetPlayerWeaponData(playerid, i, weapon[i], ammo[i]);
 
        if 
(weapon[i] && ammo[i] && !WeaponInfo[playerid][weapon[i]][Hidden] && IsWeaponWearable(weapon[i]) && EditingWeapon[playerid] != weapon[i])
        {
            objectslot = GetWeaponObjectSlot(weapon[i]);
           
            if 
(GetPlayerWeapon(playerid) != weapon[i]) SetPlayerAttachedObject(playerid, objectslot, GetWeaponModel(weapon[i]), WeaponInfo[playerid][weapon[i]][Bone], WeaponInfo[playerid][weapon[i]][Position][0], WeaponInfo[playerid][weapon[i]][Position][1], WeaponInfo[playerid][weapon[i]][Position][2], WeaponInfo[playerid][weapon[i]][Position][3], WeaponInfo[playerid][weapon[i]][Position][4], WeaponInfo[playerid][weapon[i]][Position][5], 1.000000, 1.000000, 1.000000);
            else if (IsPlayerAttachedObjectSlotUsed(playerid, objectslot)) RemovePlayerAttachedObject(playerid, objectslot);
        }
    }
    for (new i; i <= 5; i++) if (IsPlayerAttachedObjectSlotUsed(playerid, i))
    {
        weaponcount = 0;
           
        for 
(new j = 22; j <= 38; j++)
            if (PlayerHasWeapon(playerid, j) && GetWeaponObjectSlot(j) == i) weaponcount++;
               
        if 
(!weaponcount) RemovePlayerAttachedObject(playerid, i);
    }
    return 1;
}
 
public OnPlayerConnect
(playerid)
{
    ResetWeaponInfo(playerid);
    SetTimerEx("WeaponCheck", 150, true, "i", playerid);
    return 1;
}
 
public OnPlayerDisconnect
(playerid)
{
    KillTimer(WeaponCheckTimer[playerid]);
    return 1;
}
 
public OnDialogResponse
(playerid, dialogid, response, listitem, inputtext[])
{
    if (dialogid == DIALOG_EDIT_BONE)
    {
        if (response)
        {
            new weaponname[18], string[68];
           
            GetWeaponName
(EditingWeapon[playerid], weaponname, sizeof(weaponname));
            WeaponInfo[playerid][EditingWeapon[playerid]][Bone] = listitem + 1;
           
            format
(string, sizeof(string), "You have successfully changed the bone of your %s.", weaponname);
            SendClientMessage(playerid, -1, string);
        }
        EditingWeapon[playerid] = 0;
    }
}
 
public OnPlayerEditAttachedObject
(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
{
    if (EditingWeapon[playerid])
    {
        if (response)
        {
            new weaponname[18], string[80];
           
            GetWeaponName
(EditingWeapon[playerid], weaponname, sizeof(weaponname));
           
            WeaponInfo
[playerid][EditingWeapon[playerid]][Position][0] = fOffsetX;
            WeaponInfo[playerid][EditingWeapon[playerid]][Position][1] = fOffsetY;
            WeaponInfo[playerid][EditingWeapon[playerid]][Position][2] = fOffsetZ;
            WeaponInfo[playerid][EditingWeapon[playerid]][Position][3] = fRotX;
            WeaponInfo[playerid][EditingWeapon[playerid]][Position][4] = fRotY;
            WeaponInfo[playerid][EditingWeapon[playerid]][Position][5] = fRotZ;
           
            RemovePlayerAttachedObject
(playerid, GetWeaponObjectSlot(EditingWeapon[playerid]));
            SetPlayerAttachedObject(playerid, GetWeaponObjectSlot(EditingWeapon[playerid]), GetWeaponModel(EditingWeapon[playerid]), WeaponInfo[playerid][EditingWeapon[playerid]][Bone], fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, 1.000000, 1.000000, 1.000000);
           
            format
(string, sizeof(string), "You have successfully adjusted the position of your %s.", weaponname);
            SendClientMessage(playerid, -1, string);
        }
        EditingWeapon[playerid] = 0;
    }
    return 1;
}
 
CMD
:weapon(playerid, params[])
{
    new weaponid = GetPlayerWeapon(playerid);
   
    if 
(!weaponid)
        return SendClientMessage(playerid, -1, "You are not holding a weapon.");
           
    if 
(!IsWeaponWearable(weaponid))
        return SendClientMessage(playerid, -1, "This weapon cannot be edited.");
   
    if 
(!strcmp(params, "adjustpos", true))
    {
        if (EditingWeapon[playerid])
            return SendClientMessage(playerid, -1, "You are already editing a weapon.");
           
        SetPlayerArmedWeapon
(playerid, 0);
        SetPlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid), GetWeaponModel(weaponid), WeaponInfo[playerid][weaponid][Bone], WeaponInfo[playerid][weaponid][Position][0], WeaponInfo[playerid][weaponid][Position][1], WeaponInfo[playerid][weaponid][Position][2], WeaponInfo[playerid][weaponid][Position][3], WeaponInfo[playerid][weaponid][Position][4], WeaponInfo[playerid][weaponid][Position][5], 1.000000, 1.000000, 1.000000);
        EditAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
        EditingWeapon[playerid] = weaponid;
    }
    else if (!strcmp(params, "bone", true))
    {
        if (EditingWeapon[playerid])
            return SendClientMessage(playerid, -1, "You are already editing a weapon.");
           
        ShowPlayerDialog
(playerid, DIALOG_EDIT_BONE, DIALOG_STYLE_LIST, "Bone", "Spine\nHead\nLeft upper arm\nRight upper arm\nLeft hand\nRight hand\nLeft thigh\nRight thigh\nLeft foot\nRight foot\nRight calf\nLeft calf\nLeft forearm\nRight forearm\nLeft shoulder\nRight shoulder\nNeck\nJaw", "Choose", "Cancel");
        EditingWeapon[playerid] = weaponid;
    }
    else if (!strcmp(params, "hide", true))
    {          
        if 
(EditingWeapon[playerid])
            return SendClientMessage(playerid, -1, "You cannot hide a weapon while you are editing it.");
           
        if 
(!IsWeaponHideable(weaponid))
            return SendClientMessage(playerid, -1, "This weapon cannot be hidden.");
           
        new weaponname
[18], string[48];
           
        GetWeaponName
(weaponid, weaponname, sizeof(weaponname));   
       
        if 
(WeaponInfo[playerid][weaponid][Hidden])
        {
            format(string, sizeof(string), "You have set your %s to show.", weaponname);
            WeaponInfo[playerid][weaponid][Hidden] = false;
        }
        else
        
{
            format(string, sizeof(string), "You have set your %s to not show.", weaponname);
            WeaponInfo[playerid][weaponid][Hidden] = true;
           
            if 
(IsPlayerAttachedObjectSlotUsed(playerid, GetWeaponObjectSlot(weaponid)))
                RemovePlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
        }
        SendClientMessage(playerid, -1, string);
    }
    else SendClientMessage(playerid, -1, "USAGE: /weapon [adjustpos/bone/hide]");
    return 1;
}
 
#endif   

Скачать
http://pastebin.com/kAm5kjw8


Вернуться в «Скрипты / FS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 3 гостя