- Ошибка
-
Заказал передал плагин WSS , после того как установил прошел день и сервер крашнулся.
- ОС
- Linux
- Билд
-
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.4.0.641-dev-myarena.ru
Build date: 19:35:57 Apr 6 2018 (1455)
Build from: https://github.com/dreamstalker/rehlds/commit/ce163a3
- ReGamedll
-
ReGameDLL version: 5.3.0.222-dev
Build date: 22:15:38 Sep 22 2017
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/27f0563
- Список метамодулей
-
[ 1] Reunion RUN - reunion_mm_i386.so v0.1.0.92 ini Start Never
[ 2] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC3 ini ANY ANY
[ 3] AMX Mod X RUN - amxmodx_mm_i386.so v1.8.3-dev+5151 ini Start ANY
[ 4] ReSRDetector RUN - resrdetector_mm_i386.so v0.1.0 ini Chlvl ANY
[ 5] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 6] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 7] WHBlocker RUN - whblocker_mm_i386.so v1.5.695 ini Chlvl ANY
[ 8] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 9] VTC AMXX API RUN - VtcApi_amxx_i386.so v2017 RC pl3 ANY ANY
[10] CStrike RUN - cstrike_amxx_i386.so v1.8.3-dev+5151 pl3 ANY ANY
[11] CSX RUN - csx_amxx_i386.so v1.8.3-dev+5151 pl3 ANY ANY
[12] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl3 ANY Never
[13] MySQL RUN - mysql_amxx_i386.so v1.8.3-dev+5142 pl3 ANY ANY
[14] FakeMeta RUN - fakemeta_amxx_i386.so v1.8.3-dev+5151 pl3 ANY ANY
[15] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.8.3-dev+5151 pl3 ANY ANY
[16] Engine RUN - engine_amxx_i386.so v1.8.3-dev+5151 pl3 ANY ANY
16 plugins, 16 running
- Список плагинов
-
[ 1] FreshBans 1.3.8b kanagava fresh_bans_138_ running
[ 2] WebHS 0.1 kanagava fb_web_online.a running
[ 3] DopBan 3.0.3b kanagava dop_ban303_.amx running
[ 4] GameCMS_API 5.1.8 zhorzh78 gamecms_api_5.1 running
[ 5] GameCMS_GagManager 1.4.3 API5 zhorzh78 gamecms_gagmana running
[ 6] [183] Parachute RBS 17.12.12 KRoT@L/JTP10181 parachute_rbs.a running
[ 7] FM ResetScore 0.1 neygomon fm_rs.amxx running
[ 8] Weapon Skin System 0.7.0-55 Mistrick weapon_skin_sys running
[ 9] Menu System 0.1.2 serfreeman1337 menuSystem.amxx running
[ 10] ReAimDetector API 0.2.2 ReHLDS Team reaimdetector.a running
10 plugins, 10 running
- Исходный код
-
#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 /skins", "Command_ChangeSkin");
register_clcmd("say /skinreset", "Command_ResetSkin");
#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();
}
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
static g_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"
};
static g_menuname[][] = {
"", "P228", "Shield", "Scout", "He", "XM1014", "C4",
"MAC10", "AUG", "Smoke", "Elite", "Fiveseven", "Ump45",
"SG550", "Galil", "Famas", "Usp", "Glock18", "Awp", "Mp5",
"M249", "M3", "M4A1", "Tmp", "G3SG1", "FlashBang", "Deagle",
"SG552", "Ak47", "Knife", "P90"
};
new bool: g_create[] = {
false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false
};
public Command_ChangeSkin(id)
{
arrayset(g_create, false, sizeof(g_create) - 1);
new menu = menu_create("Skin Menu", "SkinMenu_Handler");
new skin_info[SkinInfo];
for(new i; i < g_iWeaponSkinsCount; i++)
{
ArrayGetArray(g_aWeaponSkins, i, skin_info);
for(new j; j < sizeof g_weapons; j++)
{
new weaponid = get_weapon_csw(g_weapons[j]);
if (!weaponid) continue;
if(skin_info[WeaponID] == weaponid)
{
if (!g_create[j])
{
new str[12]; num_to_str(weaponid, str, charsmax(str));
menu_additem(menu, g_menuname[j], str);
g_create[j] = true;
}
}
}
}
menu_display(id, menu);
}
public SkinMenu_Handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new iAccess, sName[64], sData[6], iCallback;
menu_item_getinfo(menu, item, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback);
new menu = menu_create("Skin Menu", "SubSkinMenu_Handler");
new weaponid = str_to_num(sData);
new skin_info[SkinInfo];
for(new i; i < g_iWeaponSkinsCount; i++)
{
ArrayGetArray(g_aWeaponSkins, i, skin_info);
if (skin_info[WeaponID] != weaponid) continue;
new str[12]; num_to_str(i, str, charsmax(str));
menu_additem(menu, skin_info[SkinName], str);
}
menu_display(id, menu);
return PLUGIN_HANDLED;
}
public SubSkinMenu_Handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new iAccess, sName[64], sData[6], iCallback;
menu_item_getinfo(menu, item, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback);
new skin_info[SkinInfo];
new wid = str_to_num(sData);
ArrayGetArray(g_aWeaponSkins, wid, skin_info);
g_iPlayerSkins[id][skin_info[WeaponID]] = wid + 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, wid + 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;
}
всем привет , нужна помощь в выяснении о вредноносном плагине который заказал , заказал плагин что бы переделали а именно weapon skin system , после установки на сервер прошел день и сервер не запускался без каких либо ошибок и логов , в тп написал там сказали что сервер крашнули из за плагина , а так как долгое время плагины не ставились а последний был именно WSS который делали на заказ то сомнений нет ,
почему именно сомнений нет , а так как делали два плагина один с проверкой на флаг а другой без проверки , и оба сервера бабахнулись :D
а ниже прикрепил с проверкой на флаг доступа ! хочу дополнить , щас сервер работает , но он чистый и обнаружил папку CRASH в ней текстовый документ с содержимым !
почему именно сомнений нет , а так как делали два плагина один с проверкой на флаг а другой без проверки , и оба сервера бабахнулись :D
а ниже прикрепил с проверкой на флаг доступа !
25 Июн 2018
Download all Attachments
-
18.7 KB Просмотры: 709
-
2.6 KB Просмотры: 193