Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Информационная доска

Данный раздел предназначен для обсуждения, а также решения технических проблем связанных с серверной частью. Обсуждения касательно игровых клиентов ведутся здесь.

1. Во время создания новой темы аккуратно оформляйте её, не допускайте грамматических ошибок.
2. Описывая проблему старайтесь, как можно больше рассказать о ней, а так же о действиях с сервером после которых она возникла, по возможности подкрепите информацию логами.
3. Если вопрос касается проблемы в работе сервера, то обязательно прикрепляйте список плагинов (введите в консоли сервера: meta list и amxx plugins), настройки server.cfg, логи. Так же указывайте операционную систему, версию HLDS (введите к консоли сервера: version) и где хостится сервер.

Длинную информацию скрывайте под спойлер.
2 страниц V   1 2

Скорострельность оружия

Статус пользователя DANDY
сообщение 3.11.2016, 1:35
Сообщение #1
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Имею 4 сервера ZM. Столкнулся с проблемой скорострельности добавленных в extra items оружий. Все оружия стреляют некорректно (Сначала очень быстро, как надо, настроил так, потом все медленней и со стандартной скоростью).
Проблема только на Linux. На домашнем тестовом сервере стреляют нормально!
В чем может быть проблема?
VDS ОС Debian 8.

meta list

Currently loaded plugins:
description stat pend file vers src load unlod
[ 1] AMX Mod X RUN - amxmodx_mm.so v1.8.3-d ini Start ANY
[ 2] dproto_EF RUN - dproto.so v0.9.391 ini Start Never
[ 3] Sem RUN - sem.so v1.0 ini Chlvl ANY
[ 4] FUPD RUN - fupd.so v1.0 ini Start Never
[ 5] WHBlocker RUN - whblocker_mm_i38 v1.5.570 ini Chlvl ANY
[ 6] Cust. Flood Fix RUN - cff.so v1.1 ini Start Never
[ 7] LocalizeBug Fix RUN - localizebugfix.s v2.4 ini Start Never
[ 8] NetBufExtender RUN - nbex.so v1.0 ini ANY Never
[ 9] UserInfoNetOpti RUN - uino.so v1.0 ini ANY Never
[10] VoiceTranscoder RUN - vtc.so v106 ini ANY ANY
[11] hackdetector RUN - hackdetector_amx v0.15.22 pl1 ANY ANY
[12] FakeMeta RUN - fakemeta_amxx_i3 v1.8.3-d pl1 ANY ANY
[13] Fun RUN - fun_amxx_i386.so v1.8.3-d pl1 ANY ANY
[14] MySQL RUN - mysql_amxx_i386. v1.8.3-d pl1 ANY ANY
[15] CStrike RUN - cstrike_amxx_i38 v1.8.3-d pl1 ANY ANY
[16] Engine RUN - engine_amxx_i386 v1.8.3-d pl1 ANY ANY
[17] Ham Sandwich RUN - hamsandwich_amxx v1.8.3-d pl1 ANY ANY
17 plugins, 17 running


version

Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
Exe build: 13:12:29 Aug 29 2013 (6153)


amxx plugins

Currently loaded plugins:
name version author file status
[ 1] Yet Another SpamGuard 1.2 AndrewZ/voed yet_another_spa running
[ 2] Admin Base 1.8.2 AMXX Dev Team admin.amxx running
[ 3] FreshBan 1.1.8a kanagava fresh_bans.amxx running
[ 4] Admin Commands 1.8.2 AMXX Dev Team admincmd.amxx running
[ 5] Menus Front-End 1.8.3 AMXX Dev Team menufront.amxx running
[ 6] Players Menu 1.8.3 AMXX Dev Team plmenu.amxx running
[ 7] Maps Menu 1.8.3 AMXX Dev Team mapsmenu.amxx running
[ 8] Admin Chat 1.8.3 AMXX Dev Team adminchat.amxx running
[ 9] Anti Flood 1.8.3 AMXX Dev Team antiflood.amxx running
[ 10] Admin Votes 1.8.2 AMXX Dev Team adminvote.amxx running
[ 11] Zombie Plague 4.3 MeRcyLeZZ zombie_plague40 debug
[ 12] [ZP] Default Zombie Cl 4.2 MeRcyLeZZ zp_zclasses40.a running
[ 13] [ZP] Level System 2.3 heka / di.alyabe zp_level_system debug
[ 14] unknown unknown unknown NPC_alien_boss. running
[ 15] unknown unknown unknown zp_voteboss.amx running
[ 16] Map Manager 2.0.4 Mistrick mapmanager_v2.a running
[ 17] High Ping Kicker (Stea 0.16.2 OLO/shadow high_ping_kicke running
[ 18] Mute Menu 1.0 Rjava addon_mute_menu running
[ 19] [ZP] Server addon: Zsp 5.1 Game over zp_zspawn_syste running
[ 20] Flag: Unlimited Clip 1.0 MeRcyLeZZ besk_patroni.am running
[ 21] [ZP] Admin & Vip Menu 1.0 heka / di.alyabe vip_menu_admin_ running
[ 22] [JB] AdminMenu 0.1 Opo4uMapy AmxModMenuNew.a running
[ 23] Afk Control 0.4 Stable Freedo.m | neygo afk_control.amx running
[ 24] Admin Prefixes 4.1 m0skVi4a ;] AdminPrefixes.a running
[ 25] [ZP]Models 1.0 ZiMBuS zp_models.amxx debug
[ 26] Advert Messages 1.2 neygomon adverts.amxx running
[ 27] Reset Score 1.0 Silenttt resetscore_rus. running
[ 28] Demo Recorder 1.6 Sho0ter demorecorder.am running
[ 29] Map Spawns Editor 1.0.16 iG_os map_spawns_edit running
[ 30] WalkGuard 1.3.2 mogel walkguard.amxx running
[ 31] 'Fire in the hole' blo 1.0 xPaw hidefireintheho running
[ 32] UnPrecacher 0.1 Proo.Noob anti_precash.am running
[ 33] [ZP] Web Stats 0.3.0 PomanoB/Maslyak zp_stats.amxx debug
[ 34] [ZP] Angel Leech Zombi 1.4 KRoT@L/JTP10181/ zp_angel_leechi running
[ 35] [ZP] Wallclimb 1.0 WallClimb by Pyt zp_class_climb. running
[ 36] [ZP] Class Smoker 1.3ml 4eRT zp_class_smoker running
[ 37] unknown unknown unknown zp_zclass_leap_ running
[ 38] Zombie Class Deimos 1.2.3 NST Team / Zombi zp_class_deimos debug
[ 39] [ZP] AntiDote Nade 0.1 di.alyabev zp_antidote_nad running
[ 40] [ZP] LaserMine 2.8.2 SandStriker / Sh zp_lasermine.am debug
[ 41] [ZP] Extra Item: Armor 1.0 ill zp_extra_armor. running
[ 42] [ZP] Extra: Unlimited 1.0 MeRcyLeZZ zp_extra_unlimi running
[ 43] Extra Item Jetpack+Baz 3.2 B!gBud azp_extra_jetpa running
[ 44] [ZP] Extra: Soul Eater 1.0 Crock / =) (Popr zp_extra_skull1 running
[ 45] unknown unknown unknown zp_extra_skull2 debug
[ 46] [ZP] Extra: XM8 Limit 1.0 LARS-BLOODLIKER zp_extra_skull3 running
[ 47] [ZP] Extra: Skull4 1.0 LARS-BLOODLIKER zp_extra_skull4 running
[ 48] [ZP] Extra: Skull5 1.1 n1ke:D zp_extra_skull5 running
[ 49] [ZP] Extra: Skull7 1.1 n1ke:D zp_extra_skull7 running
[ 50] [CSO] Skull-6 1.0 LARS-BLOODLIKER zp_extra_skull6 running
[ 51] [ZP] Extra: mk48 1.0 mazafaka zp_extra_mk48.a running
[ 52] Skull-11 0.1 Chrescoe1 zp_extra_skull1 running
[ 53] [ZP] Extra Item: Quad 1.5 Dias/Arwel/heka/ zp_quadbarel.am running
[ 54] Restrict Weapons 1.8.3 AMXX Dev Team restmenu.amxx running
[ 55] [ZP] Addon: Grenade St 1.0 rapara13 zp_addon_grenad running
[ 56] [ZP] Extra Item: Jump 1.0 Opo4uMapy zp_jump_bomb.am running
[ 57] unlimtied ammo 0.1 v3x zp_unlimited_cl running
[ 58] [ZP] Display Health 0.1.0 PomanoB zp_display_Heal running
[ 59] NadeModes 11.2 Nomexous & OT nademodes.amxx running
[ 60] Kill HP 1.0 ill adm_hp.amxx running
[ 61] [ZP] Addons: Zombie Vi 1.0 ill zm_vip_acc.amxx running
[ 62] Addon: Knifes 2.2 1.0 Mr.TheFold zp_addon_knifes running
[ 63] [ZP] DHUD Informer 0.0.0.1 Andrei zp_score.amxx running
[ 64] [ZP] Survivor or Nemes 1.0 Kiske zp_winorlose_ro running
[ 65] [ZP] Extra Item: Parac 1.1 pharse zp_extra_parach running
65 plugins, 65 running


server.cfg

;
sys_ticrate "800"
hostname "ZombiePlay.ru | Зомби Чума [Скидки!]" ;Имя сервера, которое будет отображаться в игре и в игровых мониторингах
sv_allowdownload "1" //
sv_downloadurl "http://shopzp.ru/fast/" ;Дамп для быстрой загрузки в игре карт, звуков и моделей.
sv_allowupload "0"
sv_allow_dlfile "0"
rcon_password "" ;RCON пароль сервера, используется для управления сервером через консоль (ВАЖНО: не говорите этот пароль никому, и смените его, если значение стандартное)
sv_password "" ;пароль при подключении к серверу
log "off" ;ведение логов
sv_logecho "1" // показывать информацию из логов сервера в консоль(сервера)
sv_logfile "1" // записывать логи сервера в файлы
mp_logdetail "0" ;детализация логов
mp_logmessages "0"
mp_timelimit "25" ;Лимит времени игры на карте (минуты)
mp_autokick "0"
mp_autoteambalance "1" ;Автобаланс игроков (0 - нет, 1 - да)
mp_c4timer "45" ;Время на разминирование бомбы (секунды)
mp_flashlight "1" ;Фонарик (0 - нет, 1 - да)
mp_footsteps "1" ;Слышимость шагов (0 - нет, 1 - да)
mp_freezetime "0" ;Предварительное время перед началом раунда на закупку (секунды)
mp_friendlyfire "0" ;Огонь по своим (0 - нет, 1 - да)
mp_hostagepenalty "0"
mp_limitteams "0"
mp_tkpunish "0"
mp_roundtime "4" ;Время раунда (минуты)
mp_buytime "0.50" ;Время на закупку (минуты)
mp_fadetoblack "0" ;Затемнение экрана после смерти (0 - нет, 1 - да)
mp_forcechasecam "0" ;Режим слежения за игроками после смерти (0 - следить можно за всеми, 1 - только за своей командой, 2 - нельзя двигать камеру)
mp_forcecamera "0"
mp_kickpercent "100"
mp_playerid "1"
mp_startmoney "800" ;Начальная сумма денег, с которой игрок стартует на карте
mp_chattime "3"
mp_falldamage "1"
sv_airaccelerate "10"
sv_airmove "1"
sv_restartround "0"
sv_maxspeed "500"
sv_voiceenable "1" ;Голос в игре (0 - нет, 1 - да)
sv_alltalk "1" ;Режим голосового общения (0 - разговаривать можно только со своей командой, 1 - со всеми на сервере)
sv_voicequality "4" ;качество голосовой связи (1-5)
sv_voicecodec "voice_speex" ;кодек голосовой связи
allow_spectators "1" ;Разрешить спектаторов на сервере (0 - нет, 1 - да)
pausable "0" ;Разрешить паузу на сервере (0 - нет, 1 - да)
sv_aim "0"
sv_cheats "0"
sv_spectatormaxspeed "500"
sv_unlag "1"
sv_contact "http://zombieplay.ru"
sv_timeout "40"
sv_proxies "0"
sv_rcon_banpenalty "1441"
sv_rcon_maxfailures "1"
sv_rcon_minfailures "1"
sv_rcon_minfailuretime "20"
hpk_maxsize "0.1"
exec "banned.cfg" ;загрузка списка банов по steamID
exec "listip.cfg" ;загрузка списка банов по IP
mapchangecfgfile "server.cfg"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя DANDY
сообщение 4.11.2016, 14:40
Сообщение #2
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Неужели никто не сталкивался с данной проблемой?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DANDY
сообщение 18.3.2017, 0:07
Сообщение #3
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Апаю тему. Актуально.
Может появился знаток, знающий в чем проблема?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
EvilSMS
сообщение 18.3.2017, 0:34
Сообщение #4
Стаж: 10 лет

Сообщений: 1801
Благодарностей: 410
Полезность: < 0

DANDY, что-то знакомое, не могу вспомнить из-за чего, а так по дефолту могу сказать, для интереса поставь ласт билд и все к нему, если не изменится, то я подумаю из-за чего, а то с 2015 не много завязал с ZP)))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя fl0werD
сообщение 18.3.2017, 1:10
Сообщение #5
Стаж: 9 лет 4 месяца

Сообщений: 155
Благодарностей: 114
Полезность: 692

Конлифкт скорее всего. Скидывай скрострельные плагины.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 18.3.2017, 1:18
Сообщение #6
Стаж: 12 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Возможно линукс оффсеты в плагине кривые. Еще как вариант значения пингбуст потыкать, но маловероятно
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DANDY
сообщение 19.3.2017, 21:45
Сообщение #7
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Параметры запуска:
-pingboost 3 -noipx -insecure -master +sv_lan 0 +exec server.cfg

Исходники плагинов прикрепил.

skull5.sma

Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <cstrike>
#include <zombieplague>

enum
{
anim_idle,
anim_reload,
anim_draw,
anim_shoot1,
anim_shoot2,
anim_shoot3
}

#define ENG_NULLENT -1
#define EV_INT_WEAPONKEY EV_INT_impulse
#define VSK94_WEAPONKEY 802
#define M24_WEAPONKEY 803
#define MAX_PLAYERS 32

const USE_STOPPED = 0
const OFFSET_ACTIVE_ITEM = 373
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX = 5
const OFFSET_LINUX_WEAPONS = 4

#define WEAP_LINUX_XTRA_OFF 4
#define m_fKnown 44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle 48
#define m_iClip 51
#define m_fInReload 54
#define PLAYER_LINUX_XTRA_OFF 5
#define m_flNextAttack 83

#define VSK_RELOAD_TIME 2.2

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "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 const Fire_Sounds[][] = {"weapons/vsk-1.wav"}

new VSK94_V_MODEL[64] = "models/zombieplay/v_skull5.mdl"
new VSK94_P_MODEL[64] = "models/zombieplay/p_skull5.mdl"
new VSK94_W_MODEL[64] = "models/zombieplay/w_skull5.mdl"

new cvar_dmg_vsk94, cvar_recoil_vsk94, g_itemid_vsk94, cvar_spd_vsk94, cvar_ammo_vsk94
new cvar_clip_vsk94
new g_has_vsk94[33]
new g_MaxPlayers, g_orig_event_sg550, g_IsInPrimaryAttack, g_clip_ammo[33], g_vsk_TmpClip[33]
new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
new oldweap[33], g_index_smoke, g_index_shell

public plugin_init()
{
register_plugin("[ZP] Extra: Skull5", "1.1", "n1ke:D")
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
register_event("CurWeapon","CurrentWeapon","be","1=1")

RegisterHam(Ham_Item_AddToPlayer, "weapon_sg550", "fw_SG550_AddToPlayer")
RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)

RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg550", "fw_SG550_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg550", "fw_SG550_PrimaryAttack_Post", 1)
RegisterHam(Ham_Item_PostFrame, "weapon_sg550", "SG550__ItemPostFrame");
RegisterHam(Ham_Weapon_Reload, "weapon_sg550", "SG550__Reload");
RegisterHam(Ham_Weapon_Reload, "weapon_sg550", "SG550__Reload_Post", 1);

RegisterHam(Ham_TraceAttack, "worldspawn", "ham_traceattack_post", 1)
RegisterHam(Ham_TraceAttack, "func_breakable", "ham_traceattack_post", 1)
RegisterHam(Ham_TraceAttack, "func_wall", "ham_traceattack_post", 1)
RegisterHam(Ham_TraceAttack, "func_door", "ham_traceattack_post", 1)
RegisterHam(Ham_TraceAttack, "func_door_rotating", "ham_traceattack_post", 1)
RegisterHam(Ham_TraceAttack, "func_plat", "ham_traceattack_post", 1)
RegisterHam(Ham_TraceAttack, "func_rotating", "ham_traceattack_post", 1)

RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_forward(FM_SetModel, "fw_SetModel")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_PlaybackEvent, "fwPlaybackEvent")

register_clcmd("weapon_vsk94_zpc", "clcmd_weapon_sg550")

cvar_dmg_vsk94 = register_cvar("zp_vsk94_dmg", "1.0")
cvar_recoil_vsk94 = register_cvar("zp_vsk94_recoil", "0.4")
cvar_clip_vsk94 = register_cvar("zp_vsk94_clip", "24")
cvar_ammo_vsk94 = register_cvar("zp_vsk94_ammo", "120")
cvar_spd_vsk94 = register_cvar("zp_vsk94_spd", "0.5")

g_itemid_vsk94 = zp_register_extra_item("Skull5", 4, ZP_TEAM_HUMAN)
g_MaxPlayers = get_maxplayers()
}

public plugin_natives()
{
register_native("give_vsk94", "give_weapon_vsk94", 1)
}

public plugin_precache()
{
precache_model(VSK94_V_MODEL)
precache_model(VSK94_P_MODEL)
precache_model(VSK94_W_MODEL)

g_index_shell = precache_model("models/zp_cso/shell762.mdl")

g_index_smoke = precache_model("sprites/effects/rainsplash.spr")

for(new i = 0; i < sizeof Fire_Sounds; i++)
precache_sound(Fire_Sounds[i])

precache_sound("weapons/vsk_clipout.wav")
precache_sound("weapons/vsk_draw.wav")
precache_sound("weapons/vsk_clipin.wav")

precache_generic("sprites/weapon_vsk94_zpc.txt")

precache_generic("sprites/zp_cso/640hud25.spr")

m_iBlood[0] = precache_model("sprites/blood.spr")
m_iBlood[1] = precache_model("sprites/bloodspray.spr")

register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
}

public fwPrecacheEvent_Post(type, const name[])
{
if (equal("events/sg550.sc", name))
{
g_orig_event_sg550 = get_orig_retval()
return FMRES_HANDLED
}

return FMRES_IGNORED
}

public client_disconnect(id)
{
g_has_vsk94[id] = false
}

public fw_SetModel(entity, model[])
{
if(!is_valid_ent(entity))
return FMRES_IGNORED;

static szClassName[33]
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))

if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED;

static iOwner

iOwner = entity_get_edict(entity, EV_ENT_owner)

if(equal(model, "models/w_sg550.mdl"))
{
static iStoredSG550ID

iStoredSG550ID = find_ent_by_owner(ENG_NULLENT, "weapon_sg550", entity)

if(!is_valid_ent(iStoredSG550ID))
return FMRES_IGNORED;

if(g_has_vsk94[iOwner])
{
entity_set_int(iStoredSG550ID, EV_INT_WEAPONKEY, VSK94_WEAPONKEY)

g_has_vsk94[iOwner] = false

entity_set_model(entity, VSK94_W_MODEL)

return FMRES_SUPERCEDE;
}
}

return FMRES_IGNORED;
}

public give_weapon_vsk94(id)
{
drop_weapons(id, 1);
new iWep3 = give_item(id,"weapon_sg550")
if( iWep3 > 0 )
{
cs_set_weapon_ammo( iWep3, get_pcvar_num(cvar_clip_vsk94) )
cs_set_user_bpammo (id, CSW_SG550, get_pcvar_num(cvar_ammo_vsk94))
}
g_has_vsk94[id] = true;
Sprite(id, "weapon_vsk94_zpc", 4, 90, -1, -1, 0, 16, 13, 0)
}

public zp_extra_item_selected(id, itemid)
{
if(itemid == g_itemid_vsk94)
{
give_weapon_vsk94(id)
}
}

public clcmd_weapon_sg550(id)
{
if(!is_user_alive(id))
return;

engclient_cmd(id, "weapon_sg550")

}

public fw_SG550_AddToPlayer(SG550, id)
{
if(!is_valid_ent(SG550) || !is_user_connected(id))
return HAM_IGNORED;

if(entity_get_int(SG550, EV_INT_WEAPONKEY) == VSK94_WEAPONKEY)
{
g_has_vsk94[id] = true

Sprite(id, "weapon_vsk94_zpc", 4, 90, -1, -1, 0, 16, 13, 0)

entity_set_int(SG550, EV_INT_WEAPONKEY, 0)

return HAM_HANDLED;
} else Sprite(id, "weapon_sg550", 4, 90, -1, -1, 0, 16, 13, 0)

return HAM_IGNORED;
}

public fw_UseStationary_Post(entity, caller, activator, use_type)
{
if (use_type == USE_STOPPED && is_user_connected(caller))
replace_weapon_models(caller, get_user_weapon(caller))
}

public fw_Item_Deploy_Post(weapon_ent)
{
static owner
owner = fm_cs_get_weapon_ent_owner(weapon_ent)

static weaponid
weaponid = cs_get_weapon_id(weapon_ent)

replace_weapon_models(owner, weaponid)
}

public CurrentWeapon(id)
{
replace_weapon_models(id, read_data(2))

if((read_data(2) != CSW_SG550 || !g_has_vsk94[id]))
return

static Float:iSpeed
if(g_has_vsk94[id])
iSpeed = get_pcvar_float(cvar_spd_vsk94)

static weapon[32],Ent
get_weaponname(read_data(2),weapon,31)
Ent = find_ent_by_owner(-1,weapon,id)
if(Ent)
{
static Float:Delay, Float:M_Delay
Delay = get_pdata_float( Ent, 46, 4) * iSpeed
M_Delay = get_pdata_float( Ent, 47, 4) * iSpeed
if (Delay > 0.0)
{
set_pdata_float(Ent, 46, Delay, 4)
set_pdata_float(Ent, 47, M_Delay, 4)
}
}
}

replace_weapon_models(id, weaponid)
{
switch (weaponid)
{
case CSW_SG550:
{
if (zp_get_user_zombie(id) || zp_get_user_survivor(id))
return;

if(g_has_vsk94[id])
{
set_pev(id, pev_viewmodel2, VSK94_V_MODEL)
set_pev(id, pev_weaponmodel2, VSK94_P_MODEL)

if(oldweap[id] != CSW_SG550)
{
Sprite(id, "weapon_vsk94_zpc", 4, 90, -1, -1, 0, 16, 13, 0)
}
}
}
}
oldweap[id] = weaponid
}

public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
{
if(!is_user_alive(Player) || get_user_weapon(Player) != CSW_SG550 ||
(get_user_weapon(Player) == CSW_SG550 && !g_has_vsk94[Player]))
return FMRES_IGNORED

set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
return FMRES_HANDLED
}

public fw_SG550_PrimaryAttack(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)

if (!g_has_vsk94[Player])
return;

g_IsInPrimaryAttack = 1
pev(Player,pev_punchangle,cl_pushangle[Player])

g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
}

public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if ((eventid != g_orig_event_sg550) || !g_IsInPrimaryAttack)
return FMRES_IGNORED
if (!(1 <= invoker <= g_MaxPlayers))
return FMRES_IGNORED

playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
return FMRES_SUPERCEDE
}

public fw_SG550_PrimaryAttack_Post(Weapon)
{
g_IsInPrimaryAttack = 0
new Player = get_pdata_cbase(Weapon, 41, 4)

if(g_has_vsk94[Player])
{
new Float:push[3]
pev(Player,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[Player],push)

xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_vsk94),push)
xs_vec_add(push,cl_pushangle[Player],push)
set_pev(Player,pev_punchangle,push)

if (!g_clip_ammo[Player])
return

emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
UTIL_PlayWeaponAnimation(Player, anim_reload)

make_shell(Player)
}
}

public SG550__ItemPostFrame(weapon_entity) {
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED;

if (!g_has_vsk94[id])
return HAM_IGNORED;

new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)

new iBpAmmo = cs_get_user_bpammo(id, CSW_SG550);
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)

if( fInReload && flNextAttack <= 0.0 )
{
new j = min(get_pcvar_num(cvar_clip_vsk94) - iClip, iBpAmmo)

set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
cs_set_user_bpammo(id, CSW_SG550, iBpAmmo-j);

set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
fInReload = 0
}

return HAM_IGNORED;
}

public SG550__Reload(weapon_entity) {
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED;

if (!g_has_vsk94[id])
return HAM_IGNORED;

g_vsk_TmpClip[id] = -1;

new iBpAmmo = cs_get_user_bpammo(id, CSW_SG550);
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

if (iBpAmmo <= 0)
return HAM_SUPERCEDE;

if (iClip >= get_pcvar_num(cvar_clip_vsk94))
return HAM_SUPERCEDE;


g_vsk_TmpClip[id] = iClip;

return HAM_IGNORED;
}

public SG550__Reload_Post(weapon_entity) {
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED;

if (!g_has_vsk94[id])
return HAM_IGNORED;

if (g_vsk_TmpClip[id] == -1)
return HAM_IGNORED;

set_pdata_int(weapon_entity, m_iClip, g_vsk_TmpClip[id], WEAP_LINUX_XTRA_OFF)

set_pdata_float(weapon_entity, m_flTimeWeaponIdle, VSK_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)

set_pdata_float(id, m_flNextAttack, VSK_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)

set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)

// relaod animation
UTIL_PlayWeaponAnimation(id, 3)

return HAM_IGNORED;
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(damage_type&DMG_GENERIC)
return

if (victim != attacker && is_user_connected(attacker) && (damage_type & DMG_BULLET))
{
static Float:cache_extradmg
if(get_user_weapon(attacker) == CSW_SG550)
{
if(g_has_vsk94[attacker])
{
cache_extradmg = damage * get_pcvar_float(cvar_dmg_vsk94)
SetHamParamFloat(4, cache_extradmg)
}
}
}
}

public message_DeathMsg(msg_id, msg_dest, id)
{
static szTruncatedWeapon[33], iAttacker, iVictim

get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))

iAttacker = get_msg_arg_int(1)
iVictim = get_msg_arg_int(2)

if(!is_user_connected(iAttacker) || iAttacker == iVictim)
return PLUGIN_CONTINUE

if(equal(szTruncatedWeapon, "sg550") && get_user_weapon(iAttacker) == CSW_SG550)
{
if(g_has_vsk94[iAttacker])
set_msg_arg_string(4, "vsk94")
}

return PLUGIN_CONTINUE
}

stock fm_cs_get_current_weapon_ent(id)
{
return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX);
}

stock fm_cs_get_weapon_ent_owner(ent)
{
return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
}

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(pev(Player, pev_body))
message_end()
}

stock drop_weapons(id, dropwhat)
{
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)

for (i = 0; i < num; i++)
{
weaponid = weapons[i]

if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
{
static wname[32]
get_weaponname(weaponid, wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}
public Sprite(const player, const string_msg[], byte_1, byte_2, byte_3, byte_4, byte_5, byte_6, byte_7, byte_8)
{
message_begin( MSG_ONE, get_user_msgid("WeaponList"), .player = player );
{
write_string(string_msg); // WeaponName
write_byte(byte_1); // PrimaryAmmoID
write_byte(byte_2); // PrimaryAmmoMaxAmount
write_byte(byte_3); // SecondaryAmmoID
write_byte(byte_4); // SecondaryAmmoMaxAmount
write_byte(byte_5); // SlotID (0...N)
write_byte(byte_6); // NumberInSlot (1...N)
write_byte(byte_7); // WeaponID
write_byte(byte_8); // Flags
}
message_end();
}

public ham_traceattack_post(victim, attacker, Float:flDamage, Float:direction[3], ptr, damage_type)
{
if(!is_user_connected( attacker ) || !is_user_alive( attacker ) || !attacker)
return HAM_IGNORED

static UserGun
UserGun = get_user_weapon(attacker)

if ((UserGun != CSW_SG550 || !g_has_vsk94[attacker]))
return HAM_IGNORED

if(!(damage_type & DMG_BULLET))
return HAM_IGNORED

static Float:flEnd[3]
get_tr2(ptr, TR_vecEndPos, flEnd)

if(!is_user_alive(victim))
{
if(victim)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_byte(random_num(41, 45))
write_short(victim)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_byte(random_num(41, 45))
message_end()
}

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_short(attacker)
write_byte(random_num(41, 45))
message_end()

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2] + 3)
write_short(g_index_smoke)
write_byte(1)
write_byte(50)
message_end()

}
return HAM_HANDLED
}

public make_shell(Player)
{
new Float:upScale, Float:fwScale, Float:rgScale
upScale = -10.0,
fwScale = 15.0
rgScale = 6.0

static Float:vPunchAngle[ 3 ], Float:vAngle[ 3 ], xol
xol = 1 + 2

if( xol & 1 )
pev( Player, pev_v_angle, vAngle )

if( xol & 2 )
pev( Player, pev_punchangle, vPunchAngle )

xs_vec_add(vAngle, vPunchAngle, vAngle)
engfunc( EngFunc_MakeVectors, vAngle );

static Float:vVel[ 3 ], Float:vOrigin[ 3 ], Float:vViewOfs[ 3 ],
i, Float:vShellOrigin[ 3 ], Float:vShellVelocity[ 3 ], Float:vRight[ 3 ],
Float:vUp[ 3 ], Float:vForward[ 3 ];
pev( Player, pev_velocity, vVel );
pev( Player, pev_view_ofs, vViewOfs );
pev( Player, pev_angles, vAngle );
pev( Player, pev_origin, vOrigin );
global_get( glb_v_right, vRight );
global_get( glb_v_up, vUp );
global_get( glb_v_forward, vForward );

for( i = 0; i < 3; i++ )
{
vShellOrigin[i] = vOrigin[ i ] + vViewOfs[ i ] + vUp[ i ] * upScale + vForward[i] * fwScale + vRight[ i ] * rgScale;
vShellVelocity[i] = vVel[ i ] + vRight[ i ] * random_float( 50.0, 70.0 ) + vUp[i] * random_float( 100.0, 150.0 ) + vForward[ i ] * 25.0;
}

engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vShellOrigin, 0)
write_byte(TE_MODEL)
engfunc(EngFunc_WriteCoord, vShellOrigin[0])
engfunc(EngFunc_WriteCoord, vShellOrigin[1])
engfunc(EngFunc_WriteCoord, vShellOrigin[2])
engfunc(EngFunc_WriteCoord, vShellVelocity[0])
engfunc(EngFunc_WriteCoord, vShellVelocity[1])
engfunc(EngFunc_WriteCoord, vShellVelocity[2])
engfunc(EngFunc_WriteAngle, vAngle[1])
write_short(g_index_shell)
write_byte(1)
write_byte(25)
message_end()
}



skull6.sma

Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <cstrike>
#include <zombieplague>

#define ENG_NULLENT -1
#define EV_INT_WEAPONKEY EV_INT_impulse
#define skull6_WEAPONKEY 1999
#define MAX_PLAYERS 32
#define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)

const USE_STOPPED = 0
const OFFSET_ACTIVE_ITEM = 373
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX = 5
const OFFSET_LINUX_WEAPONS = 4

#define WEAP_LINUX_XTRA_OFF 4
#define m_fKnown 44
#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47
#define m_flTimeWeaponIdle 48
#define m_iClip 51
#define m_fInReload 54
#define PLAYER_LINUX_XTRA_OFF 5
#define m_flNextAttack 83
#define m_iFOV 363

#define skull6_RELOAD_TIME 4.0
#define skull6_SHOOT1 1
#define skull6_SHOOT2 2
#define skull6_RELOAD 3
#define skull6_DRAW 4

#define write_coord_f(%1) engfunc(EngFunc_WriteCoord,%1)

new const Fire_Sounds[][] = { "weapons/skull6-1.wav" }
new const Sound_Zoom[] = { "weapons/zoom.wav" }

new skull6_V_MODEL[64] = "models/mashingun/v_skull6.mdl"
new skull6_P_MODEL[64] = "models/mashingun/p_skull6.mdl"
new skull6_W_MODEL[64] = "models/mashingun/w_skull6.mdl"

#define skull6_Body 0

new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }

new const skull6_name[] = "weapon_skull6"

new const skull6_spr[][] =
{
"sprites/mashingun/640hud95.spr",
"sprites/mashingun/640hud7.spr"
}

new g_itemid_skull6
new cvar_dmg_skull6, cvar_recoil_skull6, cvar_clip_skull6, cvar_spd_skull6, cvar_skull6_ammo, cvar_dmg_skull6_z, cvar_recoil_skull6_z, cvar_spd_skull6_z
new g_MaxPlayers, g_orig_event_skull6, g_IsInPrimaryAttack, g_iClip
new Float:cl_pushangle[MAX_PLAYERS + 1][3]
new g_has_skull6[33], g_clip_ammo[33], g_skull6_TmpClip[33], oldweap[33]
new g_hamczbots, cvar_botquota
new gmsgWeaponList


const PRIMARY_WEAPONS_BIT_SUM =
(1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<
CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "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" }

public plugin_init()
{
register_plugin("[CSO] Skull-6 ", "1.0", "LARS-BLOODLIKER")
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
register_event("CurWeapon","CurrentWeapon","be","1=1")
RegisterHam(Ham_Item_AddToPlayer, "weapon_m249", "fw_skull6_AddToPlayer")
RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "fw_skull6_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "fw_skull6_PrimaryAttack_Post", 1)
RegisterHam(Ham_Item_PostFrame, "weapon_m249", "skull6_ItemPostFrame")
RegisterHam(Ham_Weapon_Reload, "weapon_m249", "skull6_Reload")
RegisterHam(Ham_Weapon_Reload, "weapon_m249", "skull6_Reload_Post", 1)
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_forward(FM_SetModel, "fw_SetModel")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
register_forward(FM_CmdStart, "fw_CmdStart")

RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)

cvar_dmg_skull6 = register_cvar("zp_skull6_dmg", "0.7")
cvar_recoil_skull6 = register_cvar("zp_skull6_recoil", "0.2")
cvar_spd_skull6 = register_cvar("zp_skull6_spd", "0.6")
cvar_dmg_skull6_z = register_cvar("zp_skull6_dmg_zoom", "1.2")
cvar_recoil_skull6_z = register_cvar("zp_skull6_recoil_zoom", "0.3")
cvar_spd_skull6_z = register_cvar("zp_skull6_spd_zoom", "1.2")
cvar_clip_skull6 = register_cvar("zp_skull6_clip", "80")
cvar_skull6_ammo = register_cvar("zp_skull6_ammo", "200")

g_itemid_skull6 = zp_register_extra_item("Skull-6", 40, ZP_TEAM_HUMAN)
g_MaxPlayers = get_maxplayers()
cvar_botquota = get_cvar_pointer("bot_quota")
gmsgWeaponList = get_user_msgid("WeaponList")
register_clcmd(skull6_name, "command_skull6")
}

public plugin_precache()
{
precache_model(skull6_V_MODEL)
precache_model(skull6_P_MODEL)
precache_model(skull6_W_MODEL)

for(new i = 0; i < sizeof Fire_Sounds; i++)
precache_sound(Fire_Sounds[i])

precache_sound(Sound_Zoom)

precache_sound("weapons/skull6_boxin.wav")
precache_sound("weapons/skull6_boxin2.wav")
precache_sound("weapons/skull6_boxout.wav")
precache_sound("weapons/skull6_chain.wav")
precache_sound("weapons/skull6_clipout.wav")


register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)

new sFile[64]
formatex(sFile, charsmax(sFile), "sprites/%s.txt", skull6_name)
precache_generic(sFile)

for(new i = 0; i < sizeof(skull6_spr); i++)
{
precache_generic(skull6_spr[i])
}
}

public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
if(!is_user_alive(iAttacker))
return

new g_currentweapon = get_user_weapon(iAttacker)

if(g_currentweapon != CSW_M249) return

if(!g_has_skull6[iAttacker]) return

static Float:flEnd[3]
get_tr2(ptr, TR_vecEndPos, flEnd)

if(iEnt)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(iEnt)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_short(iAttacker)
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}

public register_ham_czbots(Player)
{
if(g_hamczbots || !is_user_connected(Player) || !get_pcvar_num(cvar_botquota)) return

RegisterHamFromEntity(Ham_TakeDamage, Player, "fw_TakeDamage")

g_hamczbots = true
}

public client_putinserver(Player)
{
if(is_user_bot(Player) && !g_hamczbots && cvar_botquota) set_task(0.1, "register_ham_czbots", Player)
}

public command_skull6(Player)
{
engclient_cmd(Player, "weapon_m249")
return PLUGIN_HANDLED
}

public zp_user_humanized_post(id)
{
g_has_skull6[id] = false
}

public plugin_natives ()
{
register_native("give_weapon_skull6", "native_give_weapon_add", 1)
register_native("get_weapon_skull6", "native_get_weapon_add", 1)
}
public native_give_weapon_add(id)
{
give_skull6(id)
}
public native_get_weapon_add(id)
{
return g_has_skull6[id]
}

public fwPrecacheEvent_Post(type, const name[])
{
if(equal("events/m249.sc", name))
{
g_orig_event_skull6 = get_orig_retval()
return FMRES_HANDLED
}
return FMRES_IGNORED
}

public client_connect(id)
{
g_has_skull6[id] = false
}

public client_disconnect(id)
{
g_has_skull6[id] = false
}

public zp_user_infected_post(id)
{
if(zp_get_user_zombie(id))
{
g_has_skull6[id] = false
}
}

public fw_SetModel(entity, model[])
{
if(!is_valid_ent(entity))
return FMRES_IGNORED

static szClassName[33]
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))

if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED

static iOwner

iOwner = entity_get_edict(entity, EV_ENT_owner)

if(equal(model, "models/w_m249.mdl"))
{
static iStoredAugID

iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_m249", entity)

if(!is_valid_ent(iStoredAugID))
return FMRES_IGNORED

if(g_has_skull6[iOwner])
{
entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, skull6_WEAPONKEY)

g_has_skull6[iOwner] = false

entity_set_model(entity, skull6_W_MODEL)

set_pev(entity, pev_body, skull6_Body)

return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}

public give_skull6(id)
{
drop_weapons(id, 2)
new iWep2 = give_item(id,"weapon_m249")
if(iWep2 > 0)
{
cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_skull6))
cs_set_user_bpammo (id, CSW_M249, get_pcvar_num(cvar_skull6_ammo))
UTIL_PlayWeaponAnimation(id, skull6_DRAW)
set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)

message_begin(MSG_ONE, gmsgWeaponList, _, id)
write_string(skull6_name)
write_byte(3)
write_byte(200)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(4)
write_byte(CSW_M249)
message_end()
}
g_has_skull6[id] = true
}

public zp_extra_item_selected(id, itemid)
{
if(itemid != g_itemid_skull6)
return

give_skull6(id)
}

public fw_skull6_AddToPlayer(skull6, id)
{
if(!is_valid_ent(skull6) || !is_user_connected(id))
return HAM_IGNORED

if(entity_get_int(skull6, EV_INT_WEAPONKEY) == skull6_WEAPONKEY)
{
g_has_skull6[id] = true

entity_set_int(skull6, EV_INT_WEAPONKEY, 0)

message_begin(MSG_ONE, gmsgWeaponList, _, id)
write_string(skull6_name)
write_byte(3)
write_byte(200)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(4)
write_byte(CSW_M249)
message_end()

return HAM_HANDLED
}
else
{
message_begin(MSG_ONE, gmsgWeaponList, _, id)
write_string("weapon_m249")
write_byte(3)
write_byte(200)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(4)
write_byte(CSW_M249)
message_end()
}
return HAM_IGNORED
}

public fw_UseStationary_Post(entity, caller, activator, use_type)
{
if(use_type == USE_STOPPED && is_user_connected(caller))
replace_weapon_models(caller, get_user_weapon(caller))
}

public fw_Item_Deploy_Post(weapon_ent)
{
static owner
owner = fm_cs_get_weapon_ent_owner(weapon_ent)

static weaponid
weaponid = cs_get_weapon_id(weapon_ent)

replace_weapon_models(owner, weaponid)
}

public CurrentWeapon(id)
{
replace_weapon_models(id, read_data(2))

if(read_data(2) != CSW_M249 || !g_has_skull6[id])
return

static Float:iSpeed
if(g_has_skull6[id])
{
if(cs_get_user_zoom(id) == CS_SET_FIRST_ZOOM || cs_get_user_zoom(id) == CS_SET_SECOND_ZOOM)
iSpeed = get_pcvar_float(cvar_spd_skull6_z)
else
iSpeed = get_pcvar_float(cvar_spd_skull6)
}
static weapon[32],Ent
get_weaponname(read_data(2),weapon,31)
Ent = find_ent_by_owner(-1,weapon,id)
if(Ent)
{
static Float:Delay
Delay = get_pdata_float( Ent, 46, 4) * iSpeed
if (Delay > 0.0)
{
set_pdata_float(Ent, 46, Delay, 4)
}
}
}

replace_weapon_models(id, weaponid)
{
switch(weaponid)
{
case CSW_M249:
{
if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
return

if(g_has_skull6[id])
{
set_pev(id, pev_viewmodel2, skull6_V_MODEL)
set_pev(id, pev_weaponmodel2, skull6_P_MODEL)
if(oldweap[id] != CSW_M249)
{
UTIL_PlayWeaponAnimation(id, skull6_DRAW)
set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)

message_begin(MSG_ONE, gmsgWeaponList, _, id)
write_string(skull6_name)
write_byte(3)
write_byte(200)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(4)
write_byte(CSW_M249)
message_end()
}
}
}
}
oldweap[id] = weaponid
}

public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
{
if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_M249 || !g_has_skull6[Player]))
return FMRES_IGNORED

set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
return FMRES_HANDLED
}

public fw_skull6_PrimaryAttack(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)

if(!g_has_skull6[Player])
return

g_IsInPrimaryAttack = 1
pev(Player,pev_punchangle,cl_pushangle[Player])

g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
g_iClip = cs_get_weapon_ammo(Weapon)
}

public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if((eventid != g_orig_event_skull6) || !g_IsInPrimaryAttack)
return FMRES_IGNORED
if(!(1 <= invoker <= g_MaxPlayers))
return FMRES_IGNORED

playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
return FMRES_SUPERCEDE
}

public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id) || (get_user_weapon(id) != CSW_M249 || !g_has_skull6[id]))
return FMRES_IGNORED

if(get_pdata_float(id, m_flNextAttack, OFFSET_LINUX) > 0.0)
return FMRES_IGNORED

if(get_user_weapon(id) == CSW_M249 && g_has_skull6[id])
{
if(get_uc(uc_handle, UC_Buttons) & IN_ATTACK2)
{
//new entity = find_ent_by_owner(-1, "weapon_m249", id)
new entity = get_pdata_cbase(id, OFFSET_ACTIVE_ITEM)
if(get_pdata_float(entity, m_flNextSecondaryAttack, WEAP_LINUX_XTRA_OFF) <= 0.0)
{
SecondaryAttack_AWP_Style(id)
}
}
}
return FMRES_HANDLED
}

SecondaryAttack_AWP_Style(id)
{
switch(get_pdata_int(id, m_iFOV))
{
case 90: set_pdata_int(id, m_iFOV, 40)
case 40: set_pdata_int(id, m_iFOV, 10)
case 10: set_pdata_int(id, m_iFOV, 90)
}
emit_sound(id, CHAN_ITEM, Sound_Zoom, 0.20, 2.40, 0, 100)
//new entity = find_ent_by_owner(-1, "weapon_m249", id)
new entity = get_pdata_cbase(id, OFFSET_ACTIVE_ITEM)
set_pdata_float(entity, m_flNextSecondaryAttack, 0.3, WEAP_LINUX_XTRA_OFF)
}

public fw_skull6_PrimaryAttack_Post(Weapon)
{
g_IsInPrimaryAttack = 0
new Player = get_pdata_cbase(Weapon, 41, 4)

new szClip, szAmmo
get_user_weapon(Player, szClip, szAmmo)

if(!is_user_alive(Player))
return

if(g_iClip <= cs_get_weapon_ammo(Weapon))
return

if(g_has_skull6[Player])
{
if (!g_clip_ammo[Player])
return

new Float:push[3]
pev(Player,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[Player],push)

if(cs_get_user_zoom(Player) == CS_SET_FIRST_ZOOM || cs_get_user_zoom(Player) == CS_SET_SECOND_ZOOM)
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_skull6_z),push)
else
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_skull6),push)

xs_vec_add(push,cl_pushangle[Player],push)
set_pev(Player,pev_punchangle,push)

emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(szClip > 1) UTIL_PlayWeaponAnimation(Player, random_num(skull6_SHOOT1,skull6_SHOOT2))

static Float:vVel[3], Float:vAngle[3], Float:vOrigin[3], Float:vViewOfs[3],
Float:vUp[3], Float:vForward[3]
pev(Player, pev_velocity, vVel)
pev(Player, pev_view_ofs, vViewOfs)
pev(Player, pev_angles, vAngle)
pev(Player, pev_origin, vOrigin)
global_get(glb_v_up, vUp)
global_get(glb_v_forward, vForward)

}
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if(victim != attacker && is_user_connected(attacker))
{
if(get_user_weapon(attacker) == CSW_M249)
{
if(g_has_skull6[attacker])
{
if(cs_get_user_zoom(attacker) == CS_SET_FIRST_ZOOM || cs_get_user_zoom(attacker) == CS_SET_SECOND_ZOOM)
SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_skull6_z))
else
SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_skull6))
}
}
}
}

public message_DeathMsg(msg_id, msg_dest, id)
{
static szTruncatedWeapon[33], iAttacker, iVictim

get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))

iAttacker = get_msg_arg_int(1)
iVictim = get_msg_arg_int(2)

if(!is_user_connected(iAttacker) || iAttacker == iVictim)
return PLUGIN_CONTINUE

if(equal(szTruncatedWeapon, "m249") && get_user_weapon(iAttacker) == CSW_M249)
{
if(g_has_skull6[iAttacker])
set_msg_arg_string(4, "skull6")
}
return PLUGIN_CONTINUE
}

stock fm_cs_get_current_weapon_ent(id)
{
return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
}

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(pev(Player, pev_body))
message_end()
}

public skull6_ItemPostFrame(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if(!is_user_connected(id))
return HAM_IGNORED

if(!g_has_skull6[id])
return HAM_IGNORED

static iClipExtra

iClipExtra = get_pcvar_num(cvar_clip_skull6)
new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)

new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)

if(fInReload && flNextAttack <= 0.0)
{
new j = min(iClipExtra - iClip, iBpAmmo)

set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
cs_set_user_bpammo(id, CSW_M249, iBpAmmo-j)

set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
fInReload = 0
}
return HAM_IGNORED
}

public skull6_Reload(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if(!is_user_connected(id))
return HAM_IGNORED

if(!g_has_skull6[id])
return HAM_IGNORED

static iClipExtra

if(g_has_skull6[id])
iClipExtra = get_pcvar_num(cvar_clip_skull6)

g_skull6_TmpClip[id] = -1

new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

if(iBpAmmo <= 0)
return HAM_SUPERCEDE

if(iClip >= iClipExtra)
return HAM_SUPERCEDE

g_skull6_TmpClip[id] = iClip

return HAM_IGNORED
}

public skull6_Reload_Post(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED

if(!g_has_skull6[id])
return HAM_IGNORED

if(g_skull6_TmpClip[id] == -1)
return HAM_IGNORED

if(get_pdata_int(id, m_iFOV) != 90)
{
set_pdata_int(id, m_iFOV, 10)
SecondaryAttack_AWP_Style(id)
}

set_pdata_int(weapon_entity, m_iClip, g_skull6_TmpClip[id], WEAP_LINUX_XTRA_OFF)

set_pdata_float(weapon_entity, m_flTimeWeaponIdle, skull6_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)

set_pdata_float(id, m_flNextAttack, skull6_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)

set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)

UTIL_PlayWeaponAnimation(id, skull6_RELOAD)

return HAM_IGNORED
}

stock drop_weapons(id, dropwhat)
{
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)

for (i = 0; i < num; i++)
{
weaponid = weapons[i]

if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
{
static wname[32]
get_weaponname(weaponid, wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}



Отредактировал: DANDY, - 19.3.2017, 21:48
Прикрепленные файлы:
Прикрепленный файл  zp_extra_skull5.sma ( 18,21 килобайт ) Кол-во скачиваний: 8
Прикрепленный файл  zp_extra_skull6.sma ( 20,42 килобайт ) Кол-во скачиваний: 12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
EvilSMS
сообщение 19.3.2017, 21:49
Сообщение #8
Стаж: 10 лет

Сообщений: 1801
Благодарностей: 410
Полезность: < 0

DANDY, 1.0 - дефолт.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DANDY
сообщение 19.3.2017, 21:51
Сообщение #9
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Просьба также сообщить, какой параметр -pingboost и sys_ticrate ( у меня 800 стоит, а на втором зм сервере вообще 500 о_О) лучше для ZM сервера и почему?

Отредактировал: DANDY, - 19.3.2017, 21:54
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
EvilSMS
сообщение 19.3.2017, 21:54
Сообщение #10
Стаж: 10 лет

Сообщений: 1801
Благодарностей: 410
Полезность: < 0

DANDY, смотря какой проц, ну я на био у себя ставил 100ку, и норм.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DANDY
сообщение 19.3.2017, 21:57
Сообщение #11
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Цитата(EvilSMS @ 19.3.2017, 22:54) *
DANDY, смотря какой проц, ну я на био у себя ставил 100ку, и норм.

Параметры VDSок:
cat /proc/cpuinfo

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 62
model name : Intel® Xeon® CPU E5-1650 v2 @ 3.50GHz
stepping : 4
microcode : 0x428
cpu MHz : 3500.096
cache size : 12288 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fdiv_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht nx pdpe1gb rdtscp lm constant_tsc eagerfp u pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer a es xsave avx f16c rdrand hypervisor lahf_lm xsaveopt fsgsbase smep erms
bogomips : 7000.19
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual


free

total used free shared buffers cached
Mem: 3094636 1801272 1293364 69184 87976 1196264
-/+ buffers/cache: 517032 2577604
Swap: 524284 728 523556
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
EvilSMS
сообщение 19.3.2017, 21:59
Сообщение #12
Стаж: 10 лет

Сообщений: 1801
Благодарностей: 410
Полезность: < 0

DANDY, тести все от 100 до 500, и смотри где лучше играется, я с вдс-ками не очень, если вдс то 500 думаю с головой - выше это уже жадность.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DANDY
сообщение 19.3.2017, 22:08
Сообщение #13
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Хорошо, вернемся к основной проблеме темы: Скорострельность оружия, как решить? Исходники скинул
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
EvilSMS
сообщение 19.3.2017, 22:10
Сообщение #14
Стаж: 10 лет

Сообщений: 1801
Благодарностей: 410
Полезность: < 0

DANDY, выше же написано.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DANDY
сообщение 19.3.2017, 22:12
Сообщение #15
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Цитата(EvilSMS @ 19.3.2017, 23:10) *
DANDY, выше же написано.

Ты про пингбуст 1 поставить?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
EvilSMS
сообщение 19.3.2017, 22:24
Сообщение #16
Стаж: 10 лет

Сообщений: 1801
Благодарностей: 410
Полезность: < 0

DANDY, в пинбусте нету 1.0
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DANDY
сообщение 19.3.2017, 22:27
Сообщение #17
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Цитата(EvilSMS @ 19.3.2017, 23:24) *
DANDY, в пинбусте нету 1.0

Тогда какой параметр ты имел ввиду?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
EvilSMS
сообщение 19.3.2017, 22:33
Сообщение #18
Стаж: 10 лет

Сообщений: 1801
Благодарностей: 410
Полезность: < 0

DANDY, деф скорость 1.0 если не ошибаюсь, как и в дамаге, пробуй менять осторожно, и перезагружать сервер а не менять карту.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DANDY
сообщение 19.3.2017, 22:34
Сообщение #19
Стаж: 15 лет

Сообщений: 270
Благодарностей: 38
Полезность: 120

Цитата(EvilSMS @ 19.3.2017, 23:33) *
DANDY, деф скорость 1.0 если не ошибаюсь, как и в дамаге, пробуй менять осторожно, и перезагружать сервер а не менять карту.

Я знаю, что дефолт скорость - 1.0. Но мне не нужна дефолт скорость, мне нужна скорость, в 2 раза большая, чем дефолт.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
EvilSMS
сообщение 19.3.2017, 22:44
Сообщение #20
Стаж: 10 лет

Сообщений: 1801
Благодарностей: 410
Полезность: < 0

DANDY, тестируй с значением, там реально можно задолбатться я не спорю, я просто сильно в это не вникую, у меня везде стоит по дефолту, а если скорость то по памяти, 2к поставь для интереса.

DANDY, да и у тебя меньше чем дефолт стоит, вот к чему я и написал что 1.0 деф.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: