- Код: Выделить всё
FATAL ERROR (shutting down): Host_Error: WriteDest_Parm: not a client
Так вот искал в google, пишут что проблема в каком то из плагинов. Я начал ковырять исходники, но думаю что это из за этого плагина:
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <fakemeta_util>
#include <engine>
#include <hamsandwich>
#include <cssb/war3ft_natives.inc>
#include <cssb/stocks.inc>
#include <cssb/public.inc>
#include <cssb/constants.inc>
#include <cssb/effects.inc>
#include <cssb/messages.inc>
#define PLUGIN "CSSB [WC3] SVD-M203"
#define VERSION "1.1"
#define AUTHOR "CSSB"
#pragma semicolon 1
//Идентификаторы оружия
new idItemSVD;
new idItemNade;
//Сообщения
//Сообщения
new msgDeathMsg;
//Переменные спрайтов
new sprTrail;
new sprExplode;
//Переменные моделей
new mdlSVD_V[64] = "models/v_svdex.mdl";
new mdlSVD_P[64] = "models/p_svdex.mdl";
new mdlSVD_W[64] = "models/w_svdex.mdl";
new mdlNade[64] = "models/grenade.mdl";
//Переменные Cvar
new iCvarKnockBack, iCvarSpeed, iCvarRecoil,iCvarDmgMulti,iCvarTrail, iCvarRadius, iCvarDamage, iCvarReload, iCvarRemove, iCvarZoom, iCvarWeaponCost, iCvarM203Cost,iCvarItemLimitGun,iCvarM203Nade,iCvarOnOffItem;
//Константы
const iConstInReload = 54;
new Float:fZoomDelay[33];
new Float:cl_pushangle[33][3];
new bHasZoom[33];
new bIsSvd[33];
new bIsM203Loaded[33];
new iIsAmmo[33];
new iLimitSVD[33][33];
new iMaxPlayers;
new bool:bIsAlivePlayer[33];
//=============================================================================
//=============================================================================
//=============================================================================
//--------------------Встроенные функции--------------------BEGIN
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
//Команды
register_clcmd("drop","cssbCommandDropWeapons", 0);
//Регистрация переменных
iCvarItemLimitGun = register_cvar("wc3_limit_svd", "0");
iCvarKnockBack = register_cvar("wc3_svd_knock", "3");
iCvarSpeed = register_cvar("wc3_svd_speed", "3.0");
iCvarRecoil = register_cvar("wc3_svd_recoil", "0.2");
iCvarDmgMulti = register_cvar("wc3_svd_dmg_multi", "1.0");
iCvarTrail = register_cvar("wc3_svd_trail","1");
iCvarRadius = register_cvar("wc3_svd_rad","200");
iCvarDamage = register_cvar("wc3_svd_dmg","140");
iCvarReload = register_cvar("wc3_svd_reloadtime","3.0");
iCvarRemove = register_cvar("wc3_svd_remove","0");
iCvarZoom = register_cvar("wc3_svd_zoom", "1");
iCvarWeaponCost = register_cvar("wc3_svd_cost", "2000");
iCvarM203Cost = register_cvar("wc3_svd_m203_cost", "500");
iCvarM203Nade = register_cvar("wc3_svd_m203_amount", "5");
iCvarOnOffItem = register_cvar("wc3_svd_m203_on_off", "1");
//HAM Форварды
RegisterHam(Ham_Spawn, "player", "fwPlayerSpawn");
RegisterHam(Ham_TakeDamage, "player", "fwTakeDamage");
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m4a1", "fwWeaponPrimaryAttack");
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m4a1", "fwWeaponPrimaryAttackPost",1);
RegisterHam(Ham_Weapon_Reload, "weapon_m4a1", "fwWeaponReload");
RegisterHam(Ham_Item_AddToPlayer, "weapon_m4a1", "fwWeaponPickup");
RegisterHam(Ham_Killed, "player", "fwPlayerKilled");
//FM Форварды
register_forward(FM_CmdStart, "fwCommandStart");
register_forward(FM_SetModel, "fwSetModel");
register_forward(FM_ClientDisconnect, "fwClientDisconnect");
//События
register_event("DeathMsg","evDeathMsg","a");
register_event("CurWeapon","evCurrentWeapon","be","1=1");
register_event("TextMsg", "evGameWillRestart", "a", "2=#Game_will_restart_in");
//Процедуры 'прикосновения'
register_touch("m203_nade", "*", "m203_touch");
//Сообщения ID
msgDeathMsg = get_user_msgid("DeathMsg");
//Регистрация предмета
idItemSVD = wc3_register_extra_item("СВД",get_pcvar_num(iCvarWeaponCost),iCvarOnOffItem,1);
idItemNade = wc3_register_extra_item("M203 Грены для СВД",get_pcvar_num(iCvarM203Cost),iCvarOnOffItem,1);
//Количество игроков
iMaxPlayers = get_maxplayers();
}
public plugin_precache()
{
sprTrail = precache_model("sprites/smoke.spr");
sprExplode = precache_model("sprites/explode_nade.spr");
precache_sound("weapons/svdex_shoot2.wav");
precache_sound("weapons/svdex_exp.wav");
precache_sound("weapons/svdex_shoot1.wav");
precache_model(mdlSVD_V);
precache_model(mdlSVD_P);
precache_model(mdlSVD_W);
precache_model(mdlNade);
}
public client_connect(idUser)
{
bIsSvd[idUser] = false;
bIsM203Loaded[idUser] = true;
iIsAmmo[idUser] = 1;
iLimitSVD[idUser][idUser] = 0;
}
//--------------------Встроенные функции--------------------END
//=============================================================================
//=============================================================================
//=============================================================================
//--------------------Команды плагина--------------------BEGIN
public cssbCommandDropWeapons(idUser)
{
if(bIsSvd[idUser] && bIsAlivePlayer[idUser])
{
bIsSvd[idUser] = false;
fRemoveGun(idUser,CSW_M4A1);
setAmmoHud(idUser,0);
iIsAmmo[idUser] = 0;
}
}
//--------------------Команды плагина--------------------END
//=============================================================================
//=============================================================================
//=============================================================================
//--------------------Forwards--------------------BEGIN
public fw_ClientDisconnect(idUser)
{
bIsAlivePlayer[idUser] = false;
}
public fwPlayerKilled(idVictim,idKiller, shouldgib)
{
bIsAlivePlayer[idVictim] = false;
}
//Стрельба
public fwWeaponPrimaryAttack(ent)
{
new idUser = pev(ent,pev_owner);
pev(idUser,pev_punchangle,cl_pushangle[idUser]);
return HAM_IGNORED;
}
public fwWeaponPrimaryAttackPost(ent)
{
new idUser = pev(ent,pev_owner);
new clip, ammo;
new weap = get_user_weapon( idUser, clip, ammo );
if( weap == CSW_M4A1 && bIsSvd[idUser])
{
new Float:push[3];
pev(idUser,pev_punchangle,push);
xs_vec_sub(push,cl_pushangle[idUser],push);
xs_vec_mul_scalar(push,get_pcvar_float(iCvarRecoil),push);
xs_vec_add(push,cl_pushangle[idUser],push);
set_pev(idUser,pev_punchangle,push);
if( clip > 0)
{
ExecuteHamB(Ham_Weapon_PlayEmptySound, ent);
emit_sound(idUser, CHAN_AUTO, "weapons/svdex_shoot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
}
}
return HAM_IGNORED;
}
//Перезарядка оружия
public fwWeaponReload(ent)
{
new idUser = pev(ent, pev_owner);
new button = pev(idUser, pev_button);
if(bIsSvd[idUser] && bHasZoom[idUser] && button&IN_RELOAD)
{
bHasZoom[idUser] = false;
cs_set_user_zoom(idUser, CS_RESET_ZOOM, 0);
}
return HAM_IGNORED;
}
//Игрок поднимает оружие с земли
public fwWeaponPickup(svd, idUser)
{
if( is_valid_ent(svd) && is_user_connected(idUser) && entity_get_int(svd, EV_INT_impulse) == 1995)
{
// Update
bIsSvd[idUser] = true;
setAmmoHud(idUser, 1);
// BP ammo
cs_set_user_bpammo(idUser, CSW_M4A1, 90);
// Reset weapon options
entity_set_int(svd, EV_INT_impulse, 0);
return HAM_HANDLED;
}
return HAM_IGNORED;
}
//Срабатывает когда игрок нажимает кнопки (в данном случае Attack2 или E)
public fwCommandStart(idUser, uc_handle, seed)
{
if(is_user_alive(idUser) && get_user_weapon(idUser) == CSW_M4A1 && bIsSvd[idUser])
{
//set button , entity,...
new button = get_uc(uc_handle, UC_Buttons);
new ent = find_ent_by_owner(-1, "weapon_m4a1", idUser);
new fInReload = get_pdata_int(ent, iConstInReload, 4);
//if player press Attack2...
if(entity_get_int(idUser, EV_INT_button) & IN_ATTACK2)
{
//lauch it...
setLaunchNade(idUser);
return FMRES_IGNORED;
}
//when player press key E
if (button & IN_USE)
{
set_pev(idUser, pev_button, button &~ IN_USE);
//set zoom delay
if (get_gametime() - fZoomDelay[idUser] >= 0.5 && !fInReload && get_pcvar_num(iCvarZoom))
{
//is zooming...
if (bHasZoom[idUser])
{
//erser it...
bHasZoom[idUser] = false;
cs_set_user_zoom(idUser, CS_RESET_ZOOM, 0);
}
else
{
bHasZoom[idUser] = true;
cs_set_user_zoom(idUser, CS_SET_AUGSG552_ZOOM, 0);
}
fZoomDelay[idUser] = get_gametime();
}
}
}
return FMRES_IGNORED;
}
//Повреждения
public fwTakeDamage(victim, inflictor, attacker, Float:damage)
{
if ( is_user_alive( attacker ) && get_user_weapon(attacker) == CSW_M4A1 && bIsSvd[attacker] )
{
SetHamParamFloat(4, damage * get_pcvar_float( iCvarDmgMulti ) );
}
}
// Создание W класса модели для оружия
public fwSetModel(Entity, const Model [])
{
// Entity is not valid
if (!is_valid_ent(Entity))
return FMRES_IGNORED;
// Not m4a1
if(!equal(Model, "models/w_m4a1.mdl"))
return FMRES_IGNORED;
// Get classname
static szClassName[33];
entity_get_string(Entity, EV_SZ_classname, szClassName, charsmax(szClassName));
// Not a Weapon box
if ( !equal ( szClassName, "weaponbox" ) )
return FMRES_IGNORED;
// Some vars
static iOwner, iStoredAkID;
// Get owner
iOwner = entity_get_edict(Entity, EV_ENT_owner);
// Get drop weapon index
iStoredAkID = find_ent_by_owner(-1, "weapon_m4a1", Entity);
// Entity classname is weaponbox, and m4a1 was founded
if(bIsSvd[iOwner] && is_valid_ent(iStoredAkID))
{
// Setting weapon options
entity_set_int(iStoredAkID, EV_INT_impulse, 1995);
// Reset user vars
bIsSvd [ iOwner ] = false;
setAmmoHud(iOwner, 0);
entity_set_model(Entity, mdlSVD_W);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
// Игрок появился в игре (респаунился)
public fwPlayerSpawn(idUser)
{
if ( get_pcvar_num(iCvarRemove) == 1 && bIsSvd[idUser] )
{
setAmmoHud(idUser,0);
bIsSvd[idUser] = false;
iIsAmmo[idUser] = 0;
}
bIsAlivePlayer[idUser] = true;
}
//--------------------Forwards--------------------END
//=============================================================================
//=============================================================================
//=============================================================================
//--------------------Вызов Natives--------------------BEGIN
//wc3_register_extra_item
public wc3_extra_item_selected(idUser, idItemSelected)
{
if(get_pcvar_num(iCvarItemLimitGun) != 0)
if(iLimitSVD[idUser][idUser] == get_pcvar_num(iCvarItemLimitGun))
return;
if (idItemSelected == idItemNade)
{
if(!bIsSvd[idUser])
return;
setAmmoHud(idUser,0);
iIsAmmo[idUser] += get_pcvar_num(iCvarM203Nade);
setAmmoHud(idUser,1);
}
if(idItemSelected == idItemSVD)
{
if(bIsSvd[idUser] && user_has_weapon(idUser, CSW_M4A1))
return;
fRemoveGun(idUser,CSW_M4A1);
fm_give_item(idUser,"weapon_m4a1");
bIsSvd[idUser] = true;
iIsAmmo[idUser] = get_pcvar_num(iCvarM203Nade);
setAmmoHud(idUser,1);
cs_set_user_bpammo(idUser, CSW_M4A1, 90);
iLimitSVD[idUser][idUser] += 1;
}
}
//--------------------Вызов Natives--------------------END
//=============================================================================
//=============================================================================
//=============================================================================
//--------------------События--------------------BEGIN
//Рестарт игры
public evGameWillRestart()
{
static iPlayers[32], iPlayersNum, i;
get_players(iPlayers, iPlayersNum, "a") ;
for (i = 0; i <= iPlayersNum; ++i)
{
bIsSvd[iPlayers[i]] = false;
iLimitSVD[iPlayers[i]][iPlayers[i]] = 0;
}
}
//Срабатывает когда игрок умирает
public evDeathMsg(idUser)
{
new idUser = read_data(2);
if(bIsSvd[idUser] && !bIsAlivePlayer[idUser] && !is_user_bot(idUser))
{
fRemoveGun(idUser,CSW_M4A1);
bIsSvd[idUser] = false;
setAmmoHud(idUser,0);
iIsAmmo[idUser] = 0;
}
return PLUGIN_CONTINUE;
}
public evCurrentWeapon(idUser)
{
new plrClip, plrAmmo, plrWeapId;
plrWeapId = get_user_weapon(idUser, plrClip , plrAmmo);
if (plrWeapId == CSW_M4A1 && bIsSvd[idUser])
{
setCheckModelWeapon(idUser);
new Ent = stGetWeaponEntity(idUser,plrWeapId);
new Float:N_Speed;
if(Ent)
{
N_Speed = get_pcvar_float(iCvarSpeed);
new Float:Delay = get_pdata_float( Ent, 46, 4) * N_Speed;
if (Delay > 0.0)
{
set_pdata_float( Ent, 46, Delay, 4);
}
}
}
else
{
return PLUGIN_CONTINUE;
}
return PLUGIN_HANDLED;
}
//--------------------События--------------------END
//=============================================================================
//=============================================================================
//=============================================================================
//--------------------Вспомогательные функции--------------------BEGIN
//Установка P и W модели
public setCheckModelWeapon(idUser)
{
new g_weapon = read_data(2);
if ( g_weapon == CSW_M4A1 && bIsSvd[idUser])
{
set_pev(idUser, pev_viewmodel2, mdlSVD_V);
set_pev(idUser, pev_weaponmodel2, mdlSVD_P);
}
return PLUGIN_HANDLED;
}
//--------------------Вспомогательные функции--------------------END
//=============================================================================
//=============================================================================
//=============================================================================
//--------------------Функции для гранат M203--------------------BEGIN
//Выстрел гранатой
public setLaunchNade(idUser)
{
if(is_user_bot(idUser))
return PLUGIN_CONTINUE;
if(bIsSvd[idUser] == 0 || bIsM203Loaded[idUser] == 0 || !(is_user_alive(idUser)))
return PLUGIN_CONTINUE;
if(iIsAmmo[idUser] == 0)
{
format(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"WC3SHM_SVD_1");
client_print(idUser, print_center, szMessage);
return PLUGIN_CONTINUE;
}
entity_set_int(idUser, EV_INT_weaponanim, 3);
new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent;
entity_get_vector(idUser, EV_VEC_origin , Origin);
entity_get_vector(idUser, EV_VEC_v_angle, vAngle);
Origin[2] = Origin[2] + 10;
Ent = create_entity("info_target");
if (!Ent)
return PLUGIN_HANDLED;
//set weapon classname
entity_set_string(Ent, EV_SZ_classname, "m203_nade");
//set Nade model for weapon:D
entity_set_model(Ent, mdlNade);
//set size
new Float:MinBox[3] = {-1.0, -1.0, -1.0};
new Float:MaxBox[3] = {1.0, 1.0, 1.0};
//size
entity_set_vector(Ent, EV_VEC_mins, MinBox);
entity_set_vector(Ent, EV_VEC_maxs, MaxBox);
//set origin & vector...
entity_set_origin(Ent, Origin);
entity_set_vector(Ent, EV_VEC_angles, vAngle);
entity_set_int(Ent, EV_INT_effects, 2);
entity_set_int(Ent, EV_INT_solid, 1);
entity_set_int(Ent, EV_INT_movetype, 10);
entity_set_edict(Ent, EV_ENT_owner, idUser);
VelocityByAim(idUser, 2500 , Velocity);
entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
//sound when lauch...
emit_sound(idUser,CHAN_VOICE,"weapons/svdex_shoot2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
bIsM203Loaded[idUser] = false;
setAmmoHud(idUser,0);
iIsAmmo[idUser]--;
setAmmoHud(idUser,1);
new parm[1];
parm[0] = Ent;
if(get_pcvar_num(iCvarTrail))
set_task(0.2, "setGrenadeTrail",idUser,parm,1);
parm[0] = idUser;
set_task(get_pcvar_float(iCvarReload), "m203_reload",idUser+9910,parm,1);
format(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"WC3SHM_SVD_2");
client_print(idUser, print_center,szMessage);
return PLUGIN_CONTINUE;
}
//Перезарядка гранаты
public m203_reload(parm[])
{
bIsM203Loaded[parm[0]] = true;
}
//Когда граната прикосается чего либо
public m203_touch(Nade, Other)
{
if(!pev_valid(Nade))
return 0;
// Get it's origin
static Float:origin[3];
pev(Nade, pev_origin, origin);
stShowExplosion2(origin, sprExplode, 40, 30, 0 );
// Owner
static owner;
owner = pev(Nade, pev_owner);
if(!is_user_connected(owner) || owner < 1 || owner > 32) return 0;
// Make a loop
for(new i = 1; i < iMaxPlayers;i++)
{
//not alive
// if (!is_user_alive(i) || !is_user_connected(i) || i < 1 || i > 32)
if (!is_user_alive(i) || !pev_valid(i))
continue;
if( get_user_team(i) == get_user_team(owner) && i!=owner)
continue;
// Godmode
if (get_user_godmode(i))
continue;
// Get victims origin
static Float:origin2 [3];
pev(i, pev_origin, origin2);
// Get distance between those origins
static Float:distance_f;
distance_f = get_distance_f(origin, origin2);
// Convert distnace to non-float
static distance;
distance = floatround(distance_f);
// Radius
static radius;
radius = get_pcvar_num(iCvarRadius);
// We are in damage radius
if ( distance <= radius )
{
// Max damage
static maxdmg;
maxdmg = get_pcvar_num(iCvarDamage);
// Normal dmg
new Damage;
Damage = maxdmg - floatround(floatmul(float(maxdmg), floatdiv(float(distance), float(radius))));
//set damage when touch buy Ham ExecuteHamB(Ham_TakeDamage, victim, inflictor, attacker, Float:damage, damagebits)
ExecuteHamB(Ham_TakeDamage, i, "grenade", owner,Damage, DMG_BLAST);
//explode sound
emit_sound(owner,CHAN_VOICE,"weapons/svdex_exp.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
// Calculate health
new health = get_user_health(i);
// We have at least 1 hp
if(health - Damage >= 1)
{
// New health
set_user_health(i, health - Damage);
setMakeKnockBack(i, origin, get_pcvar_float(iCvarKnockBack) * Damage);
}
else
{
setDeathMessageM203(owner,i,"grenade",1);
// I hope they'll not find the bodies....
origin2 [ 2 ] -= 45.0;
}
}
}
// Breakable
static ClassName[32];
pev(Other, pev_classname, ClassName, charsmax(ClassName));
if(equal(ClassName,"func_breakable"))
{
// Entity health
static Float:health;
health = entity_get_float(Other, EV_FL_health);
if (health <= get_pcvar_num(iCvarDamage))
{
// Break it
force_use(owner, Other);
}
}
// Remove grenade
engfunc(EngFunc_RemoveEntity, Nade); return 0;
}
// Когда убивает с гранаты
public setDeathMessageM203(idKiller, idVictim, const Weapon[], ScoreBoard)
{
//Блокировка сообщения смерти
set_msg_block(msgDeathMsg, BLOCK_SET);
ExecuteHamB(Ham_Killed, idVictim, idKiller, 2);
set_msg_block(msgDeathMsg, BLOCK_NOT);
// Смерть
make_deathmsg(idKiller, idVictim, 0, Weapon);
// Обновление очков
if ( ScoreBoard )
{
if(!is_user_bot(idKiller))
stShowScoreInfo(idKiller,pev(idKiller, pev_frags),cs_get_user_deaths(idKiller),0,get_user_team(idKiller) );
if(!is_user_bot(idVictim))
stShowScoreInfo(idVictim,pev(idVictim, pev_frags),cs_get_user_deaths(idVictim),0,get_user_team(idVictim) );
}
}
//Отображение количества гранат в обойме
setAmmoHud(idUser, sw)
{
if(is_user_bot(idUser))
return;
new s_sprite[33];
format(s_sprite,32,"number_%d",iIsAmmo[idUser]);
if(sw)
stShowStatusIcon(idUser, ICON_SHOW, s_sprite, 0, 150, 0);
else
stShowStatusIcon(idUser, ICON_HIDE, s_sprite, 0, 150, 0);
}
//След
public setGrenadeTrail(parm[])
{
new idEntity = parm[0];
if (idEntity)
stShowTrailGrenade(idEntity, sprTrail, 10, 5, 255,255,255,100);
}
//Отбрасывание от гранаты
public setMakeKnockBack ( Victim, Float:origin [ 3 ], Float:maxspeed )
{
//Считывание и установка скорости
new Float:fVelocity[3];
stSetKickBack ( Victim, origin, maxspeed, fVelocity);
entity_set_vector( Victim, EV_VEC_velocity, fVelocity);
return (1);
}
//--------------------Функции для гранат M203--------------------END
//=============================================================================
//=============================================================================
//=============================================================================
Посмотрите пожалуйста есть ли тут ошибки, что этот плагин может ронять сервер.
Перенесено в раздел "Вопросы по AMXX и его плагинам" // liFe iS GoOD