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