Подскажите как сделать, что бы конкретное оружие было доступно лишь админу или vip игроку.

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
67
Реакции
1
Помог
1 раз(а)
Неверный раздел форума
Ошибка
Подскажите как сделать, что бы конкретное оружие было доступно лишь админу или vip игроку.
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5249 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: Jun 19 2019 13:31:53
Built from: https://github.com/alliedmodders/amxmodx/commit/6cecb34
Build ID: 5249:6cecb34
Core mode: JIT+ASM32
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.7.0.692-dev
Build date: 18:58:01 Sep 21 2019 (1988)
Build from: https://github.com/dreamstalker/rehlds/commit/e7232be
ReGamedll
ReGameDLL version: 5.9.0.362-dev
Build date: 20:19:32 Jun 21 2019
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/b669a39
Версия Metamod
Metamod-r v1.3.0.128, API (5:13)
Metamod-r build: 17:47:54 Aug 24 2018
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/0cf2f70
Список метамодулей
Currently loaded plugins:
description stat pend file vers src load unload
[ 1] SafeNameAndChat RUN - SafeNameAndChat.so v1.1 ini ANY ANY
[ 2] Reunion RUN - reunion_mm_i386.so v0.1.0.92c ini Start Never
[ 3] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 4] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 5] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC4 ini ANY ANY
[ 6] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5249 ini Start ANY
[ 7] ReSRDetector RUN - resrdetector_mm_i386.so v0.1.0 ini Chlvl ANY
[ 8] WHBlocker RUN - whblocker_mm_i386.so v1.5.696 ini Chlvl ANY
[ 9] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[10] MySQL RUN - mysql_amxx_i386.so v1.9.0.5249 pl6 ANY ANY
[11] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl6 ANY Never
[12] ReAPI RUN - reapi_amxx_i386.so v5.9.0.171-dev pl6 ANY Never
[13] Engine RUN - engine_amxx_i386.so v1.9.0.5249 pl6 ANY ANY
[14] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5249 pl6 ANY ANY
[15] GeoIP RUN - geoip_amxx_i386.so v1.9.0.5249 pl6 ANY ANY
[16] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5249 pl6 ANY ANY
[17] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5249 pl6 ANY ANY
[18] Fun RUN - fun_amxx_i386.so v1.9.0.5249 pl6 ANY ANY
18 plugins, 18 running
Список плагинов
[ 1] admin_loader 0.5.5 kanagava admin_loader-05 running 
[ 2] WebHS 0.1 kanagava fb_web_online.a running
[ 3] FreshBans 1.4.2b kanagava fresh_bans_142_ running
[ 4] fb_forwards 0.1.4 Kanagava & Realu fb_forwards.amx running
[ 5] Admin Commands 1.9.0.5249 AMXX Dev Team admincmd.amxx running
[ 6] Admin Help 1.9.0.5249 AMXX Dev Team adminhelp.amxx running
[ 7] Slots Reservation 1.9.0.5249 AMXX Dev Team adminslots.amxx running
[ 8] Multi-Lingual System 1.9.0.5249 AMXX Dev Team multilingual.am running
[ 9] Menus Front-End 1.9.0.5249 AMXX Dev Team menufront.amxx running
[ 10] Commands Menu 1.9.0.5249 AMXX Dev Team cmdmenu.amxx running
[ 11] Players Menu 1.9.0.5249 AMXX Dev Team plmenu.amxx running
[ 12] Maps Menu 1.9.0.5249 AMXX Dev Team mapsmenu.amxx running
[ 13] Plugin Menu 1.9.0.5249 AMXX Dev Team pluginmenu.amxx running
[ 14] Reklama 09.07.2019 mx?! reklama.amxx running
[ 15] Admin Chat 1.9.0.5249 AMXX Dev Team adminchat.amxx running
[ 16] Anti Flood 1.9.0.5249 AMXX Dev Team antiflood.amxx running
[ 17] Scrolling Message 1.9.0.5249 AMXX Dev Team scrollmsg.amxx running
[ 18] Info. Messages 1.9.0.5249 AMXX Dev Team imessage.amxx running
[ 19] Admin Votes 1.9.0.5249 AMXX Dev Team adminvote.amxx running
[ 20] TimeLeft 1.9.0.5249 AMXX Dev Team timeleft.amxx running
[ 21] Pause Plugins 1.9.0.5249 AMXX Dev Team pausecfg.amxx running
[ 22] Stats Configuration 1.9.0.5249 AMXX Dev Team statscfg.amxx running
[ 23] StatsX 1.9.0.5249 AMXX Dev Team statsx.amxx running
[ 24] CSStatsX SQL 0.7.4+2 serfreeman1337 csstatsx_sql.am running
[ 25] ReAimDetector API 0.2.2 ReHLDS Team reaimdetector.a running
[ 26] [ReAPI] Custom Models 1.6.1 neugomon custom_models.a running
[ 27] Spectator Bots 2.1 SISA s_b.amxx running
[ 28] Micro Army Rank System 1.29Hz_p1 Ge3eR mars.amxx running
[ 29] unknown unknown unknown ExCLuSiVe_CSDM. running
[ 30] Connect Info 1.0 Hypa_[KZ] connect_info.am running
[ 31] Parachute 1.1 Random1, 93()|29 sub_parachute.a running
[ 32] AFK Control ReNew 1.2(a) neygomon afk_control.amx running
[ 33] Advanced Kill Assists 0.9 Spection next21_kill_ass running
[ 34] Ping Checker 26.0.1 RC1 h1k3 ping_checker.am running
[ 35] Show Damage 1.0 neygomon damager.amxx running
[ 36] Screen Fade [True Flas 1.0 Leo_[BH] screen_fade_fla running
[ 37] AntiFlash FINAL 5.0 Leo_[BH] antiflash5.amxx running
[ 38] Ultimate Gore 1.6 JTP10181 amx_gore_ultima running
[ 39] Reset Score and Sound 1.0 FarCher NewResetScore.a running
[ 40] RE Vampire 1.0.7 MakapoH, AcE, RE re_vampire.amxx running
[ 41] Voteban CSR 0.8.5beta Leo_[BH] csr_voteban.amx running
[ 42] Demo Recorder 1.6 Sho0ter demorecorder.am running
[ 43] Time Lights 1.1 Leo_[BH] time_light.amxx running
[ 44] Simple Grenade Trail 1.0 seroff granade_trail.a running
[ 45] PLUGIN VERSION AUTHOR hidetimer.amxx running
[ 46] Weapon Skin System 0.7.0-55 Mistrick weapon_skin_sys running
[ 47] [ReAMX] BackWeapons RB 17.08.11 SKAJIbnEJIb & ho backweapons_rbs running
[ 48] NoRound Balancer 1.3 neygomon noround_balance running
[ 49] unknown unknown unknown menuSystem.amxx running
[ 50] Spec Switch 0.0.3 many spec_switch_new running
[ 51] Kills Rarity 0.0.1 wopox1337 KillsRarity.amx running
[ 52] InName Combo Kills 0.0.2 wopox1337 InName_Combo_Ki running
[ 53] Grab 3.0 DEPO grab.amxx running
[ 54] Advanced Gag 1.9.0 neygomon amx_gag.amxx running
[ 55] HUD Menu 2.0 {DePo} HUD_Menu.amxx running
[ 56] Bullet Whizz 1.4 Cheap_Suit Bullet_Whizz.am running
[ 57] Lite Admin ESP 1.0 neygomon admin_esp.amxx running
[ 58] Colored Spawn 1.2.2 fezh colored_spawn.a running
[ 59] Lite Translit 2.8 neygomon lite_translit.a running
[ 60] Map Manager: Core 3.0.5 Mistrick map_manager_cor running
[ 61] Map Manager: Scheduler 0.1.3 Mistrick map_manager_sch running
[ 62] Map Manager: Rtv 0.1.1 Mistrick map_manager_rtv running
[ 63] Map Manager: Nominatio 0.1.2 Mistrick map_manager_nom running
[ 64] Map Manager: BlockList 0.0.3 Mistrick map_manager_blo running
[ 65] Map Manager: Online so 0.0.2 Mistrick map_manager_onl running
[ 66] Map Manager: Effects 0.0.8 Mistrick map_manager_eff running
[ 67] Map Manager: Informer 0.0.5 Mistrick map_manager_inf running
67 plugins, 67 running
Автор плагина
Mistrick
Версия плагина
0.7.0-55
Исходный код
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Weapon Skin System"
#define VERSION "0.7.0-55"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define DEFAULT_SKIN_MENU

#define MODEL_NOT_SET 0

#define is_valid_pev(%0) (pev_valid(%0) == 2)
#define get_weapon_skin(%0) pev(%0, pev_iuser4)
#define set_weapon_skin(%0,%1) set_pev(%0, pev_iuser4, %1)

const XO_CBASEPLAYER = 5;
const XO_CBASEPLAYERWEAPON = 4;

const m_pPlayer = 41;
const m_pNext = 42;
const m_iId = 43;
const m_pActiveItem = 373;
const m_rgpPlayerItems_CWeaponBox = 34;
const m_rgpPlayerItems_CBasePlayer = 367;

enum Forwards
{
WEAPON_DEPLOY,
WEAPON_HOLSTER,
WEAPON_CAN_PICKUP,
WEAPON_DROP,
WEAPON_ADD_TO_PLAYER
};

enum
{
ADD_BY_WEAPONBOX,
ADD_BY_ARMORY_ENTITY,
ADD_BY_BUYZONE
};

enum
{
WEAPON_MODEL_IGNORED,
WEAPON_MODEL_CHANGED
};

new g_iForwards[Forwards];
new Float:g_flLastTouchTime;
new bool:g_bIgnoreSetModel = true;

enum _:SkinInfo
{
WeaponID,
SkinName[32],
ModelV,
ModelP,
ModelW[64]
};

new const FILE_MODELS[] = "weapon_skins.ini";

new Array:g_aWeaponSkins;
new g_LoadedWeapons;
new g_iWeaponSkinsCount;
new g_iPlayerSkins[33][32];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

#if defined DEFAULT_SKIN_MENU
register_clcmd("say /awp", "Command_ChangeSkinawp");
register_clcmd("say /deagle", "Command_ChangeSkindeagle");
register_clcmd("say /knife", "Command_ChangeSkinknife");
#endif // DEFAULT_SKIN_MENU

// forward cs_weapon_deploy(id, weapon, weaponid, skin);
g_iForwards[WEAPON_DEPLOY] = CreateMultiForward("wss_weapon_deploy", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_CELL);

// forward cs_weapon_holster(id, weapon, weaponid, skin);
g_iForwards[WEAPON_HOLSTER] = CreateMultiForward("wss_weapon_holster", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_CELL);

// forward cs_weapon_can_pickup(id, weaponbox, weapon, weaponid, skin);
// should return 1 for block pickup
g_iForwards[WEAPON_CAN_PICKUP] = CreateMultiForward("wss_weapon_can_pickup", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_CELL);

// forward cs_weapon_drop(id, weaponbox, weapon, weaponid, skin);
g_iForwards[WEAPON_DROP] = CreateMultiForward("wss_weapon_drop", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_CELL);

RegisterWeapons();
RegisterWeaponDrop();
}

public Command_ChangeSkinawp(id)
{
Command_ChangeSkin(id, CSW_AWP);
}
public Command_ChangeSkindeagle(id)
{
Command_ChangeSkin(id, CSW_DEAGLE);
}
public Command_ChangeSkinknife(id)
{
Command_ChangeSkin(id, CSW_KNIFE);
}

RegisterWeapons()
{
for(new i = CSW_P228, weapon_name[32]; i <= CSW_P90; i++)
{
if(get_weaponname(i, weapon_name, charsmax(weapon_name)))
{
RegisterHam(Ham_Item_Deploy, weapon_name, "Ham_WeaponDeploy_Post", .Post = true);
RegisterHam(Ham_Item_Holster, weapon_name, "Ham_WeaponHolster_Post", .Post = true);
RegisterHam(Ham_Item_AddToPlayer, weapon_name, "Ham_WeaponAddToPlayer_Post", .Post = true);
}
}
register_touch("armoury_entity", "player", "CArmouryEntity__Touch");
register_touch("weaponbox", "player", "CWeaponBox__Touch");
}
RegisterWeaponDrop()
{
RegisterHam(Ham_Spawn, "grenade", "Ham_WeaponSpawn_Post", .Post = true);
RegisterHam(Ham_Spawn, "weaponbox", "Ham_WeaponSpawn_Post", .Post = true);
register_forward(FM_SetModel, "FM_SetModel_Pre", ._post = false);
}

public plugin_precache()
{
new file_path[128]; get_localinfo("amxx_configsdir", file_path, charsmax(file_path));
format(file_path, charsmax(file_path), "%s/%s", file_path, FILE_MODELS);

new file = fopen(file_path, "rt");

if(!file)
{
set_fail_state("File not found!");
}

g_aWeaponSkins = ArrayCreate(SkinInfo, 1);

// forward wss_loaded_skin(index, weaponid, name[]);
new fwd = CreateMultiForward("wss_loaded_skin", ET_IGNORE, FP_CELL, FP_CELL, FP_STRING);

new buffer[256], weapon_name[32], skin_name[32], model_v[64], model_p[64], model_w[64];
new weaponid, skin_info[SkinInfo];
new ret;

while(!feof(file))
{
fgets(file, buffer, charsmax(buffer));

if(!buffer[0] || buffer[0] == ';') continue;

parse(buffer, weapon_name, charsmax(weapon_name), skin_name, charsmax(skin_name), model_v, charsmax(model_v), model_p, charsmax(model_p), model_w, charsmax(model_w));
weaponid = get_weapon_csw(weapon_name);

if(!weaponid) continue;

skin_info[WeaponID] = weaponid;

g_LoadedWeapons |= (1 << weaponid);

if(model_v[0] && file_exists(model_v))
{
skin_info[ModelV] = engfunc(EngFunc_AllocString, model_v);
precache_model(model_v);
}
if(model_p[0] && file_exists(model_p))
{
skin_info[ModelP] = engfunc(EngFunc_AllocString, model_p);
precache_model(model_p);
}
if(model_w[0] && file_exists(model_w))
{
copy(skin_info[ModelW], charsmax(skin_info[ModelW]), model_w);
precache_model(model_w);
}
copy(skin_info[SkinName], charsmax(skin_info[SkinName]), skin_name);

ExecuteForward(fwd, ret, g_iWeaponSkinsCount + 1, weaponid, skin_name);

ArrayPushArray(g_aWeaponSkins, skin_info);
g_iWeaponSkinsCount++;

skin_info[ModelV] = MODEL_NOT_SET; skin_info[ModelP] = MODEL_NOT_SET; skin_info[ModelW] = MODEL_NOT_SET;
}

fclose(file);

if(!g_iWeaponSkinsCount)
{
ArrayDestroy(g_aWeaponSkins);
set_fail_state("File is empty!");
}
}

public plugin_natives()
{
register_library("weapon_skin_system");
register_native("wss_register_weapon", "native_register_weapon");
register_native("wss_get_weapon_skin_index", "native_get_weapon_skin_index");
register_native("wss_set_weapon_skin_index", "native_set_weapon_skin_index");
register_native("wss_get_skin_name", "native_get_skin_name");
register_native("wss_set_user_skin", "native_set_user_skin");
}

// TODO: add call forward?
// native wss_register_weapon(weaponid, skinname[], model_v[], model_p[], model_w[]);
public native_register_weapon(plugin, params)
{
enum {
arg_weaponid = 1,
arg_skinname,
arg_model_v,
arg_model_p,
arg_model_w
};

new skin_info[SkinInfo], model[64];
skin_info[WeaponID] = get_param(arg_weaponid);

g_LoadedWeapons |= (1 << skin_info[WeaponID]);

get_string(arg_model_v, model, charsmax(model));
if(model[0] && file_exists(model))
{
skin_info[ModelV] = engfunc(EngFunc_AllocString, model);
precache_model(model);
}
get_string(arg_model_p, model, charsmax(model));
if(model[0] && file_exists(model))
{
skin_info[ModelP] = engfunc(EngFunc_AllocString, model);
precache_model(model);
}
get_string(arg_model_w, model, charsmax(model));
if(model[0] && file_exists(model))
{
copy(skin_info[ModelW], charsmax(skin_info[ModelW]), model);
precache_model(model);
}
get_string(arg_skinname, skin_info[SkinName], charsmax(skin_info[SkinName]));

// ExecuteForward(fwd, ret, g_iWeaponSkinsCount + 1, weaponid, skin_name);

ArrayPushArray(g_aWeaponSkins, skin_info);
g_iWeaponSkinsCount++;

return g_iWeaponSkinsCount;
}

// native wss_get_weapon_skin_index(weapon);
public native_get_weapon_skin_index(plugin, params)
{
enum { arg_weapon = 1 };

new weapon = get_param(arg_weapon);

return get_weapon_skin(weapon);
}

// native wss_set_weapon_skin_index(weapon);
public native_set_weapon_skin_index(plugin, params)
{
enum {
arg_weapon = 1,
arg_skin
};

set_weapon_skin(get_param(arg_weapon), get_param(arg_skin));
}

// native wss_get_skin_name(skin, name[], len);
public native_get_skin_name(plugin, params)
{
enum
{
arg_skin = 1,
arg_name,
arg_len
};

new skin = get_param(arg_skin);

if(skin < 1 || skin > g_iWeaponSkinsCount)
{
log_error(AMX_ERR_NATIVE, "[WSS] Get skin name: wrong skin index! index %d", skin);
return 0;
}

new skin_info[SkinInfo];
ArrayGetArray(g_aWeaponSkins, skin - 1, skin_info);
set_string(arg_name, skin_info[SkinName], get_param(arg_len));

return 1;
}

// native wss_set_user_skin(id, weaponid, skin_index);
public native_set_user_skin(plugin, params)
{
enum
{
arg_id = 1,
arg_weaponid,
arg_skin_index
};

new id = get_param(arg_id);
new weaponid = get_param(arg_weaponid);
new skin_index = get_param(arg_skin_index);

if(id < 1 || id > 32)
{
log_error(AMX_ERR_NATIVE, "[WSS] Set user skin: wrong player index! index %d", id);
return 0;
}

if(!weaponid)
{
arrayset(g_iPlayerSkins[id], 0, sizeof(g_iPlayerSkins[]));
return 1;
}

g_iPlayerSkins[id][weaponid] = skin_index;

return 1;
}

public client_connect(id)
{
arrayset(g_iPlayerSkins[id], 0, sizeof(g_iPlayerSkins[]));
}

#if defined DEFAULT_SKIN_MENU
public Command_ChangeSkin(id, weapon)
{
new menu = menu_create("Skin Menu", "SkinMenu_Handler");

new skin_info[SkinInfo];
for(new i, key[2]; i < g_iWeaponSkinsCount; i++)
{
ArrayGetArray(g_aWeaponSkins, i, skin_info);
if(skin_info[WeaponID] != weapon) continue;
key[0] = i;
menu_additem(menu, skin_info[SkinName], key);
}
menu_display(id, menu);
}
public SkinMenu_Handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}

new info[2], stuff;
menu_item_getinfo(menu, item, stuff, info, charsmax(info), _, _, stuff);

new skin = info[0];

new skin_info[SkinInfo];
ArrayGetArray(g_aWeaponSkins, skin, skin_info);

g_iPlayerSkins[id][skin_info[WeaponID]] = skin + 1;

new weapon, weaponid;
new cur_weapon = get_pdata_cbase(id, m_pActiveItem, XO_CBASEPLAYER);

#define MAX_ITEM_SLOTS 6

for(new i; i < MAX_ITEM_SLOTS; i++)
{
weapon = get_pdata_cbase(id, m_rgpPlayerItems_CBasePlayer + i, XO_CBASEPLAYER);

while (is_valid_pev(weapon))
{
weaponid = get_pdata_int(weapon, m_iId, XO_CBASEPLAYERWEAPON);

if(weaponid == skin_info[WeaponID])
{
set_weapon_skin(weapon, skin + 1);

if(weapon == cur_weapon)
{
if(skin_info[ModelV]) set_pev(id, pev_viewmodel, skin_info[ModelV]);
if(skin_info[ModelP]) set_pev(id, pev_weaponmodel, skin_info[ModelP]);
}
// stop cycles
i = MAX_ITEM_SLOTS; break;
}

weapon = get_pdata_cbase(weapon, m_pNext, XO_CBASEPLAYERWEAPON);
}
}

menu_destroy(menu);
return PLUGIN_HANDLED;
}

public Command_ResetSkin(id)
{
static weapons[][] =
{
"", "weapon_p228", "weapon_shield", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4",
"weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45",
"weapon_sg550", "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy",
"weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle",
"weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
};

new menu = menu_create("Skin Reset", "SkinReset_Handler");

for(new i = 1, num[2]; i < 32; i++)
{
if(g_LoadedWeapons & (1 << i) && g_iPlayerSkins[id][i])
{
num[0] = i;
menu_additem(menu, weapons[i], num);
}
}

menu_display(id, menu);
}

public SkinReset_Handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}

new info[2], buffer;
menu_item_getinfo(menu, item, buffer, info, charsmax(info), .callback = buffer);

new weaponid = info[0];

g_iPlayerSkins[id][weaponid] = 0;

menu_destroy(menu);
return PLUGIN_HANDLED;
}
#endif // DEFAULT_SKIN_MENU

public Ham_WeaponDeploy_Post(const weapon)
{
new id = get_pdata_cbase(weapon, m_pPlayer, XO_CBASEPLAYERWEAPON);
new weaponid = get_pdata_int(weapon, m_iId, XO_CBASEPLAYERWEAPON);

#if defined _DEBUG
client_print(0, print_chat, "deploy: id %d, weapon %d, weaponid %d", id, weapon, weaponid);
#endif // _DEBUG

new skin = get_weapon_skin(weapon);
if(skin)
{
new skin_info[SkinInfo];
ArrayGetArray(g_aWeaponSkins, skin - 1, skin_info);
if(skin_info[ModelV]) set_pev(id, pev_viewmodel, skin_info[ModelV]);
if(skin_info[ModelP]) set_pev(id, pev_weaponmodel, skin_info[ModelP]);

new ret; ExecuteForward(g_iForwards[WEAPON_DEPLOY], ret, id, weapon, weaponid, skin);
}
}

public Ham_WeaponHolster_Post(const weapon)
{
new id = get_pdata_cbase(weapon, m_pPlayer, XO_CBASEPLAYERWEAPON);
new weaponid = get_pdata_int(weapon, m_iId, XO_CBASEPLAYERWEAPON);

#if defined _DEBUG
client_print(0, print_chat, "holster: id %d, weapon %d, weaponid %d", id, weapon, weaponid);
#endif // _DEBUG

new skin = get_weapon_skin(weapon);
if(skin)
{
new ret; ExecuteForward(g_iForwards[WEAPON_HOLSTER], ret, id, weapon, weaponid, skin);
}
}

public CArmouryEntity__Touch(ent, id)
{
g_flLastTouchTime = get_gametime();
}

public CWeaponBox__Touch(ent, id)
{
#define MAX_ITEM_TYPES 6

for(new i, weapon; i < MAX_ITEM_TYPES; i++)
{
weapon = get_pdata_cbase(ent, m_rgpPlayerItems_CWeaponBox + i, XO_CBASEPLAYERWEAPON);

if(is_valid_pev(weapon))
{
new weaponid = get_pdata_int(weapon, m_iId, XO_CBASEPLAYERWEAPON);

new skin = get_weapon_skin(weapon);
if(skin)
{
#if defined _DEBUG
client_print(0, print_chat, "can pickup: id %d, weaponbox %d, weapon %d, weaponid %d", id, ent, weapon, weaponid);
#endif // _DEBUG

new ret; ExecuteForward(g_iForwards[WEAPON_CAN_PICKUP], ret, id, ent, weapon, weaponid, skin);

if(ret)
{
return PLUGIN_HANDLED;
}
}
}
}

return PLUGIN_CONTINUE;
}

public Ham_WeaponAddToPlayer_Post(const weapon, const id)
{
new weaponid = get_pdata_int(weapon, m_iId, XO_CBASEPLAYERWEAPON);

#if defined _DEBUG
client_print(0, print_chat, "add_to_player: id %d, weapon %d, weaponid %d", id, weapon, weaponid);
#endif // _DEBUG

new type;

if (pev(weapon, pev_owner) > 0)
{
type = ADD_BY_WEAPONBOX;
}
else if(get_gametime() == g_flLastTouchTime)
{
type = ADD_BY_ARMORY_ENTITY;
}
else
{
type = ADD_BY_BUYZONE;
}

if(type == ADD_BY_ARMORY_ENTITY || type == ADD_BY_WEAPONBOX)
{
return HAM_IGNORED;
}

if(get_weapon_skin(weapon))
{
return HAM_IGNORED;
}

if(g_iPlayerSkins[id][weaponid])
{
set_weapon_skin(weapon, g_iPlayerSkins[id][weaponid]);
}

return HAM_IGNORED;
}

public Ham_WeaponSpawn_Post(const ent)
{
if (is_valid_pev(ent))
{
g_bIgnoreSetModel = false;
}
}
public FM_SetModel_Pre(const ent)
{
if(g_bIgnoreSetModel || !is_valid_pev(ent)) return FMRES_IGNORED;

g_bIgnoreSetModel = true;

new classname[32]; pev(ent, pev_classname, classname, charsmax(classname));
if(equal(classname, "grenade"))
{
new id = pev(ent, pev_owner);
new weaponid = fm_cs_get_grenade_type(ent);

#if defined _DEBUG
client_print(0, print_chat, "throw grenade: id %d, weapon %d, weaponid %d", id, ent, weaponid);
#endif // _DEBUG

new ret = cs_weapon_drop(id, ent, ent, weaponid);

if(ret)
{
return FMRES_SUPERCEDE;
}

return FMRES_IGNORED;
}

#define MAX_ITEM_TYPES 6

for(new i, weapon; i < MAX_ITEM_TYPES; i++)
{
weapon = get_pdata_cbase(ent, m_rgpPlayerItems_CWeaponBox + i, XO_CBASEPLAYERWEAPON);

if(is_valid_pev(weapon))
{
new id = pev(ent, pev_owner);
new weaponid = get_pdata_int(weapon, m_iId, XO_CBASEPLAYERWEAPON);

#if defined _DEBUG
client_print(0, print_chat, "drop: id %d, weaponbox %d, weapon %d, weaponid %d", id, ent, weapon, weaponid);
#endif // _DEBUG

new ret = cs_weapon_drop(id, ent, weapon, weaponid);

if(ret)
{
return FMRES_SUPERCEDE;
}
}
}

return FMRES_IGNORED;
}

cs_weapon_drop(id, weaponbox, weapon, weaponid)
{
new skin = get_weapon_skin(weapon);
if(skin)
{
new skin_info[SkinInfo];
ArrayGetArray(g_aWeaponSkins, skin - 1, skin_info);
engfunc(EngFunc_SetModel, weaponbox, skin_info[ModelW]);

new ret; ExecuteForward(g_iForwards[WEAPON_DROP], ret, id, weaponbox, weapon, weaponid, skin);

return WEAPON_MODEL_CHANGED;
}
return WEAPON_MODEL_IGNORED;
}

stock get_weapon_csw(weapon_name[])
{
static weapons[][] =
{
"", "weapon_p228", "weapon_shield", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4",
"weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45",
"weapon_sg550", "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy",
"weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle",
"weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
};

for(new i = 1; i < sizeof(weapons); i++)
{
if(equali(weapon_name, weapons[i]))
{
return i;
}
}

return 0;
}

// work only for "grenade" classname
stock fm_cs_get_grenade_type(index)
{
const m_iTeam = 114;
new bits = get_pdata_int(index, m_iTeam);

if (bits & (1 << 0))
return CSW_HEGRENADE;
else if (bits & (1 << 1))
return CSW_SMOKEGRENADE;
else if (!bits)
return CSW_FLASHBANG;

return 0;
}
Подскажите как сделать, что бы конкретное оружие было доступно лишь админу или vip игроку. ( Что бы скины оружий выделенный на скриншоте ниже могли брать только vip игроки или администраторы, а остальное оружие было доступно всем)
 

Download all Attachments

Сообщения
1,668
Реакции
1,495
Помог
24 раз(а)
Проверить на флаги админ или вип.
 
Сообщения
67
Реакции
1
Помог
1 раз(а)
fl0wer, можете показать хоть один пример с одним оружием.
 
Сообщения
1,668
Реакции
1,495
Помог
24 раз(а)
newcs, а мы что уже не в капитализме?
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
newcs, привет.

Ищешь в исходнике строки выдачи оружия.

Далее перед выдачей добавляешь проверки.

Например (как вариант):
C++:
new Flags = get_user_flags(id);

if(Flags & ADMIN_BAN){
//тут функция выдачи оружия (на данном примере только тем игрокам у кого флаг бана есть, ну например админ
}
В дополнение вот тебе список флагов для подстановки:
**
* Admin level constants
*/
#define ADMIN_ALL 0 /* everyone */
#define ADMIN_IMMUNITY (1<<0) /* flag "a" */
#define ADMIN_RESERVATION (1<<1) /* flag "b" */
#define ADMIN_KICK (1<<2) /* flag "c" */
#define ADMIN_BAN (1<<3) /* flag "d" */
#define ADMIN_SLAY (1<<4) /* flag "e" */
#define ADMIN_MAP (1<<5) /* flag "f" */
#define ADMIN_CVAR (1<<6) /* flag "g" */
#define ADMIN_CFG (1<<7) /* flag "h" */
#define ADMIN_CHAT (1<<8) /* flag "i" */
#define ADMIN_VOTE (1<<9) /* flag "j" */
#define ADMIN_PASSWORD (1<<10) /* flag "k" */
#define ADMIN_RCON (1<<11) /* flag "l" */
#define ADMIN_LEVEL_A (1<<12) /* flag "m" */
#define ADMIN_LEVEL_B (1<<13) /* flag "n" */
#define ADMIN_LEVEL_C (1<<14) /* flag "o" */
#define ADMIN_LEVEL_D (1<<15) /* flag "p" */
#define ADMIN_LEVEL_E (1<<16) /* flag "q" */
#define ADMIN_LEVEL_F (1<<17) /* flag "r" */
#define ADMIN_LEVEL_G (1<<18) /* flag "s" */
#define ADMIN_LEVEL_H (1<<19) /* flag "t" */
#define ADMIN_MENU (1<<20) /* flag "u" */
#define ADMIN_BAN_TEMP (1<<21) /* flag "v" */
#define ADMIN_ADMIN (1<<24) /* flag "y" */
#define ADMIN_USER (1<<25) /* flag "z" */

Можешь делать несколько проверок, например так, будем учитывать 2 флага разных.

C++:
new Flags = get_user_flags(id);

if(Flags & (ADMIN_BAN|ADMIN_LEVEL_H)){
//тут функция (на данном примере разрешено с флагом бана и с флагом t
}
 
Последнее редактирование:
Сообщения
67
Реакции
1
Помог
1 раз(а)
wellasgood, это понятно, но в моем случаи это только для всех awp, deagle, knife.
Т.к все оружия прописаны в ini файле

; ● Valid weapon names:
; weapon_elite, weapon_fiveseven, weapon_usp, weapon_glock18, weapon_p228, weapon_deagle
; weapon_scout, weapon_xm1014, weapon_mac10, weapon_aug, weapon_ump45, weapon_sg550,
; weapon_galil, weapon_famas, weapon_awp, weapon_mp5navy, weapon_m249, weapon_m3,
; weapon_m4a1, weapon_tmp, weapon_g3sg1, weapon_sg552, weapon_ak47, weapon_p90
; weapon_knife, weapon_c4 weapon_flashbang, weapon_hegrenade, weapon_smokegrenade


; Syntax: "weapon name" "skin name" "model_v" "model_p" "model_w"
"weapon_knife" "Нож Керамбит" "models/knife/v_knife1.mdl" "models/knife/p_knife1.mdl"
"weapon_knife" "Кибернетический" "models/knife/v_knife2.mdl" "models/knife/p_knife2.mdl"
"weapon_knife" "Нож-Бабочка" "models/knife/v_knife3.mdl" "models/knife/p_knife3.mdl"
"weapon_knife" "The Nutcracker" "models/knife/v_knife4.mdl" "models/knife/p_knife4.mdl"
"weapon_knife" "Valor Blade" "models/knife/v_knife5.mdl" "models/knife/p_knife5.mdl"
"weapon_knife" "Ka Bar" "models/knife/v_knife6.mdl" "models/knife/p_knife6.mdl"
"weapon_knife" "Biohazard Knife" "models/knife/v_knife7.mdl" "models/knife/p_knife7.mdl"
"weapon_knife" "Древняя коса" "models/knife/v_kosa.mdl" "models/knife/p_kosa.mdl"

"weapon_deagle" "COLT M1911" "models/deagle/v_deagle1.mdl" "models/deagle/p_deagle1.mdl" "models/deagle/w_deagle1.mdl"
"weapon_deagle" "Colt Anaconda 44" "models/deagle/v_deagle2.mdl" "models/deagle/p_deagle2.mdl" "models/deagle/w_deagle2.mdl"
"weapon_deagle" "Colt Python SE Autumn Twilight" "models/deagle/v_deagle3.mdl" "models/deagle/p_deagle3.mdl" "models/deagle/w_deagle3.mdl"
"weapon_deagle" "Два Дигла" "models/deagle/v_elite.mdl" "models/deagle/p_elite.mdl" "models/deagle/w_elite.mdl"
"weapon_deagle" "Тактический Deagle" "models/deagle/v_deagle4.mdl" "models/deagle/p_deagle4.mdl" "models/deagle/w_deagle4.mdl"
"weapon_deagle" "357 Revolver" "models/deagle/v_deagle5.mdl" "models/deagle/p_deagle5.mdl" "models/deagle/w_deagle5.mdl"
"weapon_deagle" "Machine" "models/deagle/v_deagle6.mdl" "models/deagle/p_deagle6.mdl" "models/deagle/w_deagle6.mdl"
"weapon_deagle" "Wannabe's Raging Bull on Mr.Scratch's " "models/deagle/v_deagle7.mdl" "models/deagle/p_deagle7.mdl" "models/deagle/w_deagle7.mdl"

"weapon_awp" "Винтовка Damnation" "models/awp/v_awp1.mdl" "models/awp/p_awp1.mdl" "models/awp/w_awp1.mdl"
"weapon_awp" "Винтовка Hyperion" "models/awp/v_awp2.mdl" "models/awp/p_awp2.mdl" "models/awp/w_awp2.mdl"
"weapon_awp" "Винтовка Hidden" "models/awp/v_awp3.mdl" "models/awp/p_awp3.mdl" "models/awp/w_awp3.mdl"
"weapon_awp" "Винтовка Lycanthrope" "models/awp/v_awp4.mdl" "models/awp/p_awp4.mdl" "models/awp/w_awp4.mdl"
"weapon_awp" "Винтовка Gauss" "models/awp/v_gauss.mdl" "models/awp/p_gauss.mdl" "models/awp/w_gauss.mdl"
"weapon_awp" "Винтовка Ohka" "models/awp/v_awp5.mdl" "models/awp/p_awp5.mdl" "models/awp/w_awp5.mdl"
"weapon_awp" "Винтовка AWP-Z" "models/awp/v_zgun.mdl" "models/awp/p_zgun.mdl" "models/awp/w_zgun.mdl"
"weapon_awp" "Винтовка Солнце" "models/awp/v_awp6.mdl" "models/awp/p_awp6.mdl" "models/awp/w_awp6.mdl"
 

Download all Attachments

Сообщения
1,419
Реакции
2,509
Помог
59 раз(а)
В данном разделе создаются темы для решения проблем работы плагина а не доработки/изменения под свои хотелки. Если у Вас имеются попытки реализовать нужное, лучше всего подходит раздел "Вопросы по созданию и модификации". Если таковых попыток нет, то следует создать заказ: "Заказы".
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу