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

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

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

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

Изменить исходник

, Нужно изменит исходник zp_extra на biohazar
Статус пользователя skitls187
сообщение 27.8.2015, 15:25
Сообщение #1


Стаж: 13 лет
Город: Москва

Сообщений: 390
Благодарностей: 100
Полезность: 139

Добрый день. Нашел для себя интересный плагин zombieplague c для зомби сервера, но как оказалось он не подходит для biohazard. Ссылка на сам плагин тык
Если кому то лень переходить то архив так же прикладываюПрикрепленный файл  zp_extra_plazmagun.rar ( 911,99 килобайт ) Кол-во скачиваний: 11

Как можно осуществить и сколько это будет стоить?

Отредактировал: skitls187, - 27.8.2015, 15:26


Я русский и мне за нас стыдно!!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя skitls187
сообщение 27.8.2015, 21:53
Сообщение #2


Стаж: 13 лет
Город: Москва

Сообщений: 390
Благодарностей: 100
Полезность: 139

Нашел похожий плагин, получилось переделать. Возникла проблема.. Сейчас если его берешь, то оно не отображается, для того что бы оно появилось в руках, нужно скинуть оружие. Все кнопки поклацал, эффекта 0.
Сам исходник из которого было сделано
Код:
/* Plugin generated by AMXX-Studio */

#include < AmxModX >
#include < FakeMeta >
#include < HamSandwich >
#include < ZombiePlague >
#include < xs >

#define PLUGIN "PlasmaGun"
#define VERSION "0.1"
#define AUTHOR "Opo4uMapy"

//##########Cvars [Start]##########//

#define WEAPON_MULTI_DAMAGE 1.0 // Множитель урона (Работает если запущено ACTIVE_TRACCE_ATTACK_DAMAGE)
#define WEAPON_TIME_NEXT_ATTACK 0.15 // Время через сколько будет возможна след. аттака
#define WEAPON_TIME_RELOAD 3.19 // Время перезарядки
#define WEAPON__SPEED 0.15

#define WEAPON_BALL_SPEED 2000 // Скорость шара
#define WEAPON_BALL_DAMAGE 250.0 // Урон шара
#define WEAPON_BALL_RADIUS_EXPLODE 130.0 // Радиус взрыва шара
#define WEAPON_BALL_SIZE random_float(random_float(0.1 , 0.2), random_float(0.3, 0.4)) // Размер шара

#define CLIP 45 // Патроны в обойме
#define AMMO 200 // Патроны в запасе

//#define ACTIVE_SHOOT_DECALS // Включить декали(дырки) от выстрелов
//#define ACTIVE_SHELL // Включить/выключить гильзы
//#define ACTIVE_TRACCE_ATTACK_DAMAGE // Включить урон с помощью трейс аттак

enum // Отдача
{
x = -5.0,
y = 0.0,
z = 0.0
}

//##########Cvars [End]##########//

#define WEAPON_NEW "weapon_plasmagun"
#define WEAPON_REFERANCE "weapon_m249"
#define CLASS_NAME_BALL "EntBall"

#define STATEMENT_FALLBACK(%0,%1,%2) public %0()<>{return %1;} public %0()<%2>{return %1;}

const m_iClip = 51 // оффсет обоймы
const m_pPlayer = 41 // оффсет для получение id игрока
const m_fInReload = 54 // оффсет для получения перезарядки
const m_iShellLate = 57 // оффсет гильз
const m_pActiveItem = 373 // оффсет get_pdata_cbase
const m_flNextAttack = 83 // оффсет для блкирования нажатие
const m_flEjectBrass = 111 // оффсет для вылета гильз с задержкой
const m_szAnimExtention = 492 // оффсет для установки анимации на игроке
const m_afButtonPressed = 246 // оффсет для выстрела из пистолета
const m_flTimeWeaponIdle = 48 // оффсет для анимации idle
const m_flNextPrimaryAttack = 46 // оффсет для скорости ввыстрела первичной атаки
const m_flNextSecondaryAttack = 47 // оффсет для скорости ввыстрела вторичной атаки
const m_rgpPlayerItems_CBasePlayer = 367
const m_rgpPlayerItems_CWeaponBox = 34
const m_iShotsFired = 64
const m_pNext = 42

const OFFSET_LINUX_WEAPONS = 4 // оффсет для пушки
const OFFSET_LINUX = 5 // оффсет для игрока

enum
{
IDLE = 0, // 1
RELOAD, // 2
DRAW, // 3
SHOOT, // 4
SHOOT_END // 5
}

new const Resources_Models[3][] =
{
"models/v_plasmagun2.mdl", // 0
"models/p_plasmagun.mdl", // 1
"models/w_plasmagun.mdl" // 2
}

new const Resources_Sounds[2][] =
{
"weapons/plasmagun-1.wav", // 0
"weapons/plasmagun_exp.wav" // 1
}

new const Resources_WeaponList[2][] =
{
"sprites/640hud3x.spr", // 0
"sprites/640hud91.spr" // 1
}

new const Resources_Sprites[2][] =
{
"sprites/plasmaball.spr", // 0
"sprites/plasmabomb.spr" // 1
}

new const OFFSET_AMMO[31] = // Офсеты патронов
{
0, 385, 0, 378, 0, 381, 0, 382, 380, 0, 386, 383, 382, 380, 380, 380, 382, 386, 377, 386, 379, 381, 380, 386, 378, 0, 384, 380, 378, 0, 383
}
#if defined ACTIVE_TRACCE_ATTACK_DAMAGE
new const TRACE_ATTACK[][] =
{
"func_breakable",
"hostage_entity",
"info_target",
"player"
}
#endif

#if defined ACTIVE_SHELL
new g_Shell
new const SHELL_MODEL[] = "models/rshell.mdl"
#endif

new g_WeaponID = 0, g_WeaponKey, g_SpriteExp
new g_iForwardDecalIndex, g_WeaponListData[8]

public plugin_init()
{
//Authors
register_plugin(PLUGIN, VERSION, AUTHOR)

//Ham
RegisterHam(Ham_Spawn, "weaponbox", "Weapon_SpawnPost", 1)
RegisterHam(Ham_Touch, "env_sprite", "Weapon_Ball_Touch", 1)
RegisterHam(Ham_Item_Deploy, WEAPON_REFERANCE, "Weapon_Deploy", 1)
RegisterHam(Ham_Weapon_Reload, WEAPON_REFERANCE, "Hook_Reload", 0)
RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_REFERANCE, "Hook_PrimaryAttack_Pre", 0)
RegisterHam(Ham_Item_AddToPlayer, WEAPON_REFERANCE, "Weapon_AddToPlayer", 0)
RegisterHam(Ham_Item_PostFrame, WEAPON_REFERANCE, "Weapon_ItemPostFrame", 0)

#if defined ACTIVE_TRACCE_ATTACK_DAMAGE
for(new i = 0; i < sizeof TRACE_ATTACK; i++)
{
RegisterHam(Ham_TraceAttack, TRACE_ATTACK[i], "Hook_TraceAttack", 0)
}
#endif

//Forward
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_PlaybackEvent, "fw_PlaybackEvent", 0)
register_forward(FM_SetModel, "fw_SetModel", 0)
register_forward(FM_AddToFullPack, "CPlayer__AddToFullPack_post", 1)
register_forward(FM_CheckVisibility, "CEntity__CheckVisibility", 0)

#if defined ACTIVE_SHOOT_DECALS
register_forward(FM_TraceLine, "FakeMeta_TraceLine_Post", 1)
#endif

#if defined ACTIVE_ZOMBIE_PLAGUE
g_item = zp_register_extra_item("PlasmaGun", 15, ZP_TEAM_HUMAN)
#else
register_clcmd("plasmagun", "Weapon_Give")
#endif

//Other's
g_WeaponID = get_weaponid(WEAPON_REFERANCE)
unregister_forward(FM_DecalIndex, g_iForwardDecalIndex, true)
}

public plugin_precache()
{
g_WeaponKey = engfunc(EngFunc_AllocString, WEAPON_NEW)
register_message(78, "Hook_WeaponList")

new i

for(i = 0; i < sizeof Resources_Models; i++)
precache_model(Resources_Models[i])

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

for(i = 0; i < sizeof Resources_Sprites; i++)
precache_model(Resources_Sprites[i])

for(i = 0; i < sizeof Resources_WeaponList; i++)
precache_generic(Resources_WeaponList[i])

PRECACHE_SOUNDS_FROM_MODEL(Resources_Models[0])

#if defined ACTIVE_SHELL
g_Shell = precache_model(SHELL_MODEL)
#endif
g_SpriteExp = precache_model(Resources_Sprites[1])

new Buffer[32]
formatex(Buffer, charsmax(Buffer), "sprites/%s.txt", WEAPON_NEW)
precache_generic(Buffer)

g_iForwardDecalIndex = register_forward(FM_DecalIndex, "FakeMeta_DecalIndex_Post", true)

register_clcmd(WEAPON_NEW, "Weapon_Hook")
}

public Weapon_Hook(id)
{
engclient_cmd(id, WEAPON_REFERANCE)
return PLUGIN_HANDLED
}

#if defined ACTIVE_ZOMBIE_PLAGUE
public zp_extra_item_selected(id, itemid)
{
if(itemid == g_item)
{
Weapon_Give(id)
}
}
#endif

public Weapon_Deploy(weapon)
{
static id

if(!CheckItem(weapon, id))
return HAM_IGNORED

#if defined ACTIVE_SHOOT_DECALS
if(zp_get_user_zombie(id))
return
#endif

set_pev(id, pev_viewmodel2, Resources_Models[0])
set_pev(id, pev_weaponmodel2, Resources_Models[1])

WeaponList(id, WEAPON_NEW)
Weapon_SendAnim(id, DRAW)

set_pdata_string(id, m_szAnimExtention * 4, "rifle", -1, OFFSET_LINUX * 4)
set_pdata_float(id, m_flNextAttack, WEAPON_TIME_NEXT_ATTACK, OFFSET_LINUX)

return HAM_IGNORED
}

public Weapon_AddToPlayer(weapon, id)
{
if(pev_valid(weapon) != 2 || pev_valid(id) != 2)
return HAM_IGNORED

if(pev(weapon, pev_impulse) == g_WeaponKey)
{
WeaponList(id, WEAPON_NEW)
return HAM_HANDLED
}
else
{
WeaponList(id, WEAPON_REFERANCE)
return HAM_IGNORED
}
return HAM_IGNORED
}

public fw_SetModel(entity) <WeaponBox: Enabled>
{
state WeaponBox: Disabled

if(pev_valid(entity) != 2)
return FMRES_IGNORED

for(new i, iItem; i < 6; i++)
{
iItem = get_pdata_cbase(entity, m_rgpPlayerItems_CWeaponBox + i, OFFSET_LINUX_WEAPONS)

if(pev_valid(iItem) == 2 && pev(iItem, pev_impulse) == g_WeaponKey)
{
InstallWorldModel(entity)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
STATEMENT_FALLBACK(fw_SetModel, FMRES_IGNORED, WeaponBox: Disabled)

public Hook_PrimaryAttack_Pre(weapon)
{
static id

if(CheckItem(weapon, id))
{
Weapon_PrimaryAttack_Pre(weapon, id)
return HAM_SUPERCEDE
}
return HAM_IGNORED
}

public Weapon_PrimaryAttack_Pre(Weapon, id)
{
static Float:vecPuncheAngle[3]

state FireBullets: Enabled

pev(id, pev_punchangle, vecPuncheAngle)
ExecuteHam(Ham_Weapon_PrimaryAttack, Weapon)
set_pev(id, pev_punchangle, vecPuncheAngle)
state FireBullets: Disabled

if(get_pdata_int(Weapon, m_iClip, OFFSET_LINUX_WEAPONS) <= 0)
return

if(!get_pdata_int(id, OFFSET_AMMO[g_WeaponID]))
return

#if defined ACTIVE_SHOOT_DECALS
if(zp_get_user_zombie(id))
return
#endif

set_pev(id, pev_punchangle, Float:{x, y, z})

#if defined ACTIVE_SHELL
cmdBrass(Weapon, id, g_Shell)
#endif

CreateBall(id)
Weapon_SendAnim(id, SHOOT)
emit_sound(id, CHAN_WEAPON, Resources_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(Weapon, m_flNextPrimaryAttack , WEAPON__SPEED , OFFSET_LINUX_WEAPONS)
set_pdata_float(Weapon, m_flTimeWeaponIdle, WEAPON__SPEED + 3.0, OFFSET_LINUX_WEAPONS)
}

public Weapon_Ball_Touch(entity)
{
if(!pev_valid(entity))
return

static ClassName[32]
pev(entity, pev_classname, ClassName, charsmax(ClassName))

if(equali(ClassName, CLASS_NAME_BALL))
{
static Float:flOrigin[3]
pev(entity, pev_origin, flOrigin)

engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, flOrigin[0])
engfunc(EngFunc_WriteCoord, flOrigin[1])
engfunc(EngFunc_WriteCoord, flOrigin[2])
write_short(g_SpriteExp)
write_byte(5)
write_byte(15)
write_byte(TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NOSOUND)
message_end()

emit_sound(entity, CHAN_WEAPON, Resources_Sounds[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

new victim = FM_NULLENT,
attacker = pev(entity, pev_iuser1)

while((victim = engfunc(EngFunc_FindEntityInSphere, victim, flOrigin, WEAPON_BALL_RADIUS_EXPLODE)) != 0)
{
if(!is_user_alive(victim))
continue

#if defined ACTIVE_SHOOT_DECALS
if(!zp_get_user_zombie(victim))
return
#endif

ExecuteHamB(Ham_TakeDamage, victim, attacker, attacker, WEAPON_BALL_DAMAGE, DMG_SONIC)
}
engfunc(EngFunc_RemoveEntity, entity)
}
}

public Weapon_ItemPostFrame(weapon)
{
static id
id = get_pdata_cbase(weapon, m_pPlayer, OFFSET_LINUX_WEAPONS)

if(!CheckItem(weapon, id))
return

#if defined ACTIVE_SHOOT_DECALS
if(zp_get_user_zombie(id))
return
#endif

if(!get_pdata_int(weapon, m_fInReload, OFFSET_LINUX_WEAPONS) || get_pdata_float(id, m_flNextAttack) > 0.0)
return

new iAmmo = get_pdata_int(id, OFFSET_AMMO[g_WeaponID])
new iClip = get_pdata_int(weapon, m_iClip, OFFSET_LINUX_WEAPONS)
new j = min(CLIP - iClip, iAmmo)

set_pdata_int(weapon, m_iClip, iClip + j, OFFSET_LINUX_WEAPONS)
set_pdata_int(id, OFFSET_AMMO[g_WeaponID], iAmmo - j)
set_pdata_int(weapon, m_fInReload, 0, OFFSET_LINUX_WEAPONS)
}

public Hook_Reload(weapon)
{
static id

if(CheckItem(weapon, id))
{
Weapon_Reload(weapon, id)
return HAM_SUPERCEDE
}
return HAM_IGNORED
}

public Weapon_Reload(weapon, id)
{
if(get_pdata_int(id, OFFSET_AMMO[g_WeaponID]) <= 0)
return

#if defined ACTIVE_SHOOT_DECALS
if(zp_get_user_zombie(id))
return
#endif

ExecuteHam(Ham_Weapon_Reload, weapon)

Weapon_SendAnim(id, RELOAD)

set_pdata_float(id, m_flNextAttack, WEAPON_TIME_RELOAD)
set_pdata_int(weapon, m_fInReload, 1, OFFSET_LINUX_WEAPONS)
set_pdata_float(weapon, m_flTimeWeaponIdle, WEAPON_TIME_RELOAD, OFFSET_LINUX_WEAPONS)
}

public Weapon_Give(id)
{
if(pev_valid(id) != 2)
return FM_NULLENT

new entity, Float:Origin[3]
pev(id, pev_origin, Origin)

if ((entity = Weapon_Create(Origin)) != FM_NULLENT)
{
Player_DropWeapons(id, ExecuteHamB(Ham_Item_ItemSlot, entity))

set_pev(entity, pev_spawnflags, pev(entity, pev_spawnflags) | SF_NORESPAWN)
dllfunc(DLLFunc_Touch, entity, id)

set_pdata_int(id, OFFSET_AMMO[g_WeaponID], AMMO, OFFSET_LINUX)

return entity
}

return FM_NULLENT
}

Weapon_Create(const Float: vecOrigin[3] = {0.0, 0.0, 0.0}, const Float: vecAngles[3] = {0.0, 0.0, 0.0})
{
new entity

static iszAllocStringCached
if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, WEAPON_REFERANCE)))
{
entity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached)
}

if(pev_valid(entity) != 2)
{
return FM_NULLENT
}

dllfunc(DLLFunc_Spawn, entity)
engfunc(EngFunc_SetOrigin, entity, vecOrigin)

set_pdata_int(entity, m_iClip, CLIP ,OFFSET_LINUX_WEAPONS)

set_pev_string(entity, pev_classname, g_WeaponKey)
set_pev(entity, pev_impulse, g_WeaponKey)
set_pev(entity, pev_angles, vecAngles)

InstallWorldModel(entity)

return entity
}

public Weapon_SpawnPost(entity)
{
if(pev_valid(entity) == 2)
{
state (pev_valid(pev(entity, pev_owner)) == 2) WeaponBox: Enabled
}

return HAM_IGNORED
}
#if defined ACTIVE_SHOOT_DECALS
public FakeMeta_TraceLine_Post(const Float: vecTraceStart[3], const Float: vecTraceEnd[3], const fNoMonsters, const iEntToSkip, const iTrace) <FireBullets: Enabled>
{
static Float: vecEndPos[3]

get_tr2(iTrace, TR_vecEndPos, vecEndPos)
engfunc(EngFunc_TraceLine, vecEndPos, vecTraceStart, fNoMonsters, iEntToSkip, 0)

UTIL_GunshotDecalTrace(0)
UTIL_GunshotDecalTrace(iTrace, true)

return FMRES_IGNORED
}
STATEMENT_FALLBACK(FakeMeta_TraceLine_Post, FMRES_IGNORED, FireBullets: Disabled)
#endif
#if defined ACTIVE_TRACCE_ATTACK_DAMAGE
public Hook_TraceAttack(entity, iAttacker, Float:flDamage) <FireBullets: Enabled>
{
SetHamParamFloat(3, flDamage * WEAPON_MULTI_DAMAGE)
return HAM_IGNORED
}
STATEMENT_FALLBACK(Hook_TraceAttack, HAM_IGNORED, FireBullets: Disabled)
#endif

public fw_PlaybackEvent() <FireBullets: Enabled>
{
return FMRES_SUPERCEDE
}
STATEMENT_FALLBACK(fw_PlaybackEvent, FMRES_IGNORED, FireBullets: Disabled)

public fw_UpdateClientData_Post(id, SendWeapons, CD_Handle )
{
static iItem

if(CheckItem2(id, iItem))
{
set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001)
}
}

#if defined ACTIVE_SHELL
public cmdBrass(Weapon, id, ModelIndex)
{
set_pdata_int(Weapon, m_iShellLate, ModelIndex, OFFSET_LINUX)
set_pdata_float(id, m_flEjectBrass, get_gametime())
}
#endif

public Hook_WeaponList(MsgID, MsgDest, MsgEntity)
{
new WeaponName[32]
get_msg_arg_string(1, WeaponName, charsmax(WeaponName))

if (!strcmp(WeaponName, WEAPON_REFERANCE))
{
for(new i, a = sizeof g_WeaponListData; i < a; i++)
{
g_WeaponListData[i] = get_msg_arg_int(i + 2)
}
}
}

CreateBall(id)
{
static entity

if((entity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite"))))
{
static Float:vOrigin[3], Float:vVelocity[3], vAngles[3]

get_weapon_position(id, vOrigin, 40.0, 12.0, -5.0)

set_pev(entity, pev_classname, CLASS_NAME_BALL)
set_pev(entity, pev_movetype, MOVETYPE_FLY)
set_pev(entity, pev_solid, SOLID_SLIDEBOX)

engfunc(EngFunc_SetModel, entity, Resources_Sprites[0])
engfunc(EngFunc_SetOrigin, entity, vOrigin)
engfunc(EngFunc_SetSize, entity, Float:{ 0.0, 0.0, 0.0 }, Float:{ 0.0, 0.0, 0.0 })

set_pev(entity, pev_renderfx, kRenderFxGlowShell)
set_pev(entity, pev_rendermode, kRenderTransAdd)
set_pev(entity, pev_renderamt, 255.0)
set_pev(entity, pev_scale, WEAPON_BALL_SIZE)
set_pev(entity, pev_iuser1, id)

velocity_by_aim(id, WEAPON_BALL_SPEED, vVelocity)

set_pev(entity, pev_velocity, vVelocity)
engfunc(EngFunc_VecToAngles, vVelocity, vAngles)
set_pev(entity, pev_angles, vAngles)
}
}

WeaponList(id, const WeaponName[32])
{
engfunc(EngFunc_MessageBegin, MSG_ONE, 78, {0.0, 0.0, 0.0}, id)
write_string(WeaponName)

for(new i, a = sizeof g_WeaponListData; i < a; i++)
{
write_byte(g_WeaponListData[i])
}
message_end()
}

InstallWorldModel(entity)
engfunc(EngFunc_SetModel, entity, Resources_Models[2])

Weapon_SendAnim(id, anim)
{
set_pev(id, pev_weaponanim, anim)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0.0, 0.0, 0.0}, id)
write_byte(anim)
write_byte(0)
message_end()
}

stock bool:CheckItem(weapon, &id)
{
if(pev_valid(weapon) == 2 && pev(weapon, pev_impulse) == g_WeaponKey)
{
id = get_pdata_cbase(weapon, m_pPlayer, OFFSET_LINUX_WEAPONS)
if(pev_valid(id) == 2)
return true
}
return false
}

stock bool:CheckItem2(id, &iItem)
{
if(pev_valid(id) != 2)
{
return false
}

iItem = get_pdata_cbase(id, m_pActiveItem, OFFSET_LINUX)

if(pev_valid(iItem) != 2 || pev(iItem, pev_impulse) != g_WeaponKey)
{
return false
}

return true
}

Player_DropWeapons(id, iSlot)
{
new WeaponName[32], entity = get_pdata_cbase(id, m_rgpPlayerItems_CBasePlayer + iSlot, OFFSET_LINUX)

while(pev_valid(entity) == 2)
{
pev(entity, pev_classname, WeaponName, charsmax(WeaponName))
engclient_cmd(id, "drop", WeaponName)

entity = get_pdata_cbase(entity, m_pNext, OFFSET_LINUX_WEAPONS)
}
}

stock get_weapon_position(id, Float:fOrigin[], Float:add_forward = 0.0, Float:add_right = 0.0, Float:add_up = 0.0)
{
static Float:Angles[3],Float:ViewOfs[3], Float:vAngles[3]
static Float:Forward[3], Float:Right[3], Float:Up[3]

pev(id, pev_v_angle, vAngles)
pev(id, pev_origin, fOrigin)
pev(id, pev_view_ofs, ViewOfs)
xs_vec_add(fOrigin, ViewOfs, fOrigin)

pev(id, pev_angles, Angles)

Angles[0] = vAngles[0]

engfunc(EngFunc_MakeVectors, Angles)

global_get(glb_v_forward, Forward)
global_get(glb_v_right, Right)
global_get(glb_v_up, Up)

xs_vec_mul_scalar(Forward, add_forward, Forward)
xs_vec_mul_scalar(Right, add_right, Right)
xs_vec_mul_scalar(Up, add_up, Up)

fOrigin[0] = fOrigin[0] + Forward[0] + Right[0] + Up[0]
fOrigin[1] = fOrigin[1] + Forward[1] + Right[1] + Up[1]
fOrigin[2] = fOrigin[2] + Forward[2] + Right[2] + Up[2]
}
#if defined ACTIVE_SHOOT_DECALS
//Decals
//By KORD
#define INSTANCE(%0) ((%0 == -1) ? 0 : %0)

new Array:g_hDecals

public FakeMeta_DecalIndex_Post()
{
if(!g_hDecals)
g_hDecals = ArrayCreate(1, 1)

ArrayPushCell(g_hDecals, get_orig_retval())
}

UTIL_GunshotDecalTrace(const iTrace, const bool: bIsGunshot = false)
{
static iHit;
static iMessage;
static iDecalIndex;

static Float: flFraction;
static Float: vecEndPos[3];

iHit = INSTANCE(get_tr2(iTrace, TR_pHit));

if (iHit && pev_valid(iHit) != 2 || (pev(iHit, pev_flags) & FL_KILLME))
{
return;
}

if (pev(iHit, pev_solid) != SOLID_BSP && pev(iHit, pev_movetype) != MOVETYPE_PUSHSTEP)
{
return;
}

iDecalIndex = ExecuteHamB(Ham_DamageDecal, iHit, 0);

if (iDecalIndex < 0 || iDecalIndex >= ArraySize(g_hDecals))
{
return;
}

iDecalIndex = ArrayGetCell(g_hDecals, iDecalIndex);

get_tr2(iTrace, TR_flFraction, flFraction);
get_tr2(iTrace, TR_vecEndPos, vecEndPos);

if (iDecalIndex < 0 || flFraction >= 1.0)
{
return;
}

if (bIsGunshot)
{
iMessage = TE_GUNSHOTDECAL
}
else
{
iMessage = TE_DECAL;

if (iHit != 0)
{
if (iDecalIndex > 255)
{
iMessage = TE_DECALHIGH
iDecalIndex -= 256
}
}
else
{
iMessage = TE_WORLDDECAL

if (iDecalIndex > 255)
{
iMessage = TE_WORLDDECALHIGH
iDecalIndex -= 256
}
}
}

engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEndPos, 0)
write_byte(iMessage)
engfunc(EngFunc_WriteCoord, vecEndPos[0])
engfunc(EngFunc_WriteCoord, vecEndPos[1])
engfunc(EngFunc_WriteCoord, vecEndPos[2])

if (bIsGunshot)
{
write_short(iHit)
write_byte(iDecalIndex)
}
else
{
write_byte(iDecalIndex)

if (iHit)
{
write_short(iHit)
}
}

message_end()
}
#endif
PRECACHE_SOUNDS_FROM_MODEL(const szModelPath[])
{
new iFile

if ((iFile = fopen(szModelPath, "rt")))
{
new szSoundPath[64]

new iNumSeq, iSeqIndex
new iEvent, iNumEvents, iEventIndex

fseek(iFile, 164, SEEK_SET)
fread(iFile, iNumSeq, BLOCK_INT)
fread(iFile, iSeqIndex, BLOCK_INT)

for (new k, i = 0; i < iNumSeq; i++)
{
fseek(iFile, iSeqIndex + 48 + 176 * i, SEEK_SET)
fread(iFile, iNumEvents, BLOCK_INT)
fread(iFile, iEventIndex, BLOCK_INT)
fseek(iFile, iEventIndex + 176 * i, SEEK_SET)

for (k = 0; k < iNumEvents; k++)
{
fseek(iFile, iEventIndex + 4 + 76 * k, SEEK_SET)
fread(iFile, iEvent, BLOCK_INT)
fseek(iFile, 4, SEEK_CUR)

if (iEvent != 5004)
{
continue
}

fread_blocks(iFile, szSoundPath, 64, BLOCK_CHAR)

if (strlen(szSoundPath))
{
strtolower(szSoundPath)
precache_sound(szSoundPath)
}
}
}
}

fclose(iFile);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/


Что вышло
Код:
/* Plugin generated by AMXX-Studio */

#include < AmxModX >
#include < FakeMeta >
#include < HamSandwich >
#include < xs >

#define PLUGIN "PlasmaGun"
#define VERSION "0.1"
#define AUTHOR "Opo4uMapy"

//##########Cvars [Start]##########//

#define WEAPON_MULTI_DAMAGE 1.0 // Множитель урона (Работает если запущено ACTIVE_TRACCE_ATTACK_DAMAGE)
#define WEAPON_TIME_NEXT_ATTACK 0.15 // Время через сколько будет возможна след. аттака
#define WEAPON_TIME_RELOAD 3.19 // Время перезарядки
#define WEAPON__SPEED 0.15

#define WEAPON_BALL_SPEED 2000 // Скорость шара
#define WEAPON_BALL_DAMAGE 250.0 // Урон шара
#define WEAPON_BALL_RADIUS_EXPLODE 130.0 // Радиус взрыва шара
#define WEAPON_BALL_SIZE random_float(random_float(0.1 , 0.2), random_float(0.3, 0.4)) // Размер шара

#define CLIP 50 // Патроны в обойме
#define AMMO 200 // Патроны в запасе

//#define ACTIVE_SHOOT_DECALS // Включить декали(дырки) от выстрелов
//#define ACTIVE_SHELL // Включить/выключить гильзы
//#define ACTIVE_TRACCE_ATTACK_DAMAGE // Включить урон с помощью трейс аттак

enum // Отдача
{
x = -5.0,
y = 0.0,
z = 0.0
}

//##########Cvars [End]##########//

#define WEAPON_NEW "weapon_plasmagun"
#define WEAPON_REFERANCE "weapon_m249"
#define CLASS_NAME_BALL "EntBall"

#define STATEMENT_FALLBACK(%0,%1,%2) public %0()<>{return %1;} public %0()<%2>{return %1;}

const m_iClip = 51 // оффсет обоймы
const m_pPlayer = 41 // оффсет для получение id игрока
const m_fInReload = 54 // оффсет для получения перезарядки
const m_iShellLate = 57 // оффсет гильз
const m_pActiveItem = 373 // оффсет get_pdata_cbase
const m_flNextAttack = 83 // оффсет для блкирования нажатие
const m_flEjectBrass = 111 // оффсет для вылета гильз с задержкой
const m_szAnimExtention = 492 // оффсет для установки анимации на игроке
const m_afButtonPressed = 246 // оффсет для выстрела из пистолета
const m_flTimeWeaponIdle = 48 // оффсет для анимации idle
const m_flNextPrimaryAttack = 46 // оффсет для скорости ввыстрела первичной атаки
const m_flNextSecondaryAttack = 47 // оффсет для скорости ввыстрела вторичной атаки
const m_rgpPlayerItems_CBasePlayer = 367
const m_rgpPlayerItems_CWeaponBox = 34
const m_iShotsFired = 64
const m_pNext = 42

const OFFSET_LINUX_WEAPONS = 4 // оффсет для пушки
const OFFSET_LINUX = 5 // оффсет для игрока

enum
{
IDLE = 0, // 1
RELOAD, // 2
DRAW, // 3
SHOOT, // 4
SHOOT_END // 5
}

new const Resources_Models[3][] =
{
"models/v_plasmagun2.mdl", // 0
"models/p_plasmagun.mdl", // 1
"models/w_plasmagun.mdl" // 2
}

new const Resources_Sounds[2][] =
{
"weapons/plasmagun-1.wav", // 0
"weapons/plasmagun_exp.wav" // 1
}

new const Resources_WeaponList[2][] =
{
"sprites/640hud3x.spr", // 0
"sprites/640hud91.spr" // 1
}

new const Resources_Sprites[2][] =
{
"sprites/plasmaball.spr", // 0
"sprites/plasmabomb.spr" // 1
}

new const OFFSET_AMMO[31] = // Офсеты патронов
{
0, 385, 0, 378, 0, 381, 0, 382, 380, 0, 386, 383, 382, 380, 380, 380, 382, 386, 377, 386, 379, 381, 380, 386, 378, 0, 384, 380, 378, 0, 383
}
#if defined ACTIVE_TRACCE_ATTACK_DAMAGE
new const TRACE_ATTACK[][] =
{
"func_breakable",
"hostage_entity",
"info_target",
"player"
}
#endif

#if defined ACTIVE_SHELL
new g_Shell
new const SHELL_MODEL[] = "models/rshell.mdl"
#endif

new g_WeaponID = 0, g_WeaponKey, g_SpriteExp
new g_iForwardDecalIndex, g_WeaponListData[8]

public plugin_init()
{
//Authors
register_plugin(PLUGIN, VERSION, AUTHOR)

//Ham
RegisterHam(Ham_Spawn, "weaponbox", "Weapon_SpawnPost", 1)
RegisterHam(Ham_Touch, "env_sprite", "Weapon_Ball_Touch", 1)
RegisterHam(Ham_Item_Deploy, WEAPON_REFERANCE, "Weapon_Deploy", 1)
RegisterHam(Ham_Weapon_Reload, WEAPON_REFERANCE, "Hook_Reload", 0)
RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_REFERANCE, "Hook_PrimaryAttack_Pre", 0)
RegisterHam(Ham_Item_AddToPlayer, WEAPON_REFERANCE, "Weapon_AddToPlayer", 0)
RegisterHam(Ham_Item_PostFrame, WEAPON_REFERANCE, "Weapon_ItemPostFrame", 0)

#if defined ACTIVE_TRACCE_ATTACK_DAMAGE
for(new i = 0; i < sizeof TRACE_ATTACK; i++)
{
RegisterHam(Ham_TraceAttack, TRACE_ATTACK[i], "Hook_TraceAttack", 0)
}
#endif

//Forward
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_PlaybackEvent, "fw_PlaybackEvent", 0)
register_forward(FM_SetModel, "fw_SetModel", 0)
register_forward(FM_AddToFullPack, "CPlayer__AddToFullPack_post", 1)
register_forward(FM_CheckVisibility, "CEntity__CheckVisibility", 0)

#if defined ACTIVE_SHOOT_DECALS
register_forward(FM_TraceLine, "FakeMeta_TraceLine_Post", 1)
#endif

#if defined ACTIVE_ZOMBIE_PLAGUE
g_item = zp_register_extra_item("PlasmaGun", 15, ZP_TEAM_HUMAN)
#else
register_clcmd("plasmagun", "Weapon_Give")
#endif

//Other's
g_WeaponID = get_weaponid(WEAPON_REFERANCE)
unregister_forward(FM_DecalIndex, g_iForwardDecalIndex, true)
}

public plugin_precache()
{
g_WeaponKey = engfunc(EngFunc_AllocString, WEAPON_NEW)
register_message(78, "Hook_WeaponList")

new i

for(i = 0; i < sizeof Resources_Models; i++)
precache_model(Resources_Models[i])

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

for(i = 0; i < sizeof Resources_Sprites; i++)
precache_model(Resources_Sprites[i])

for(i = 0; i < sizeof Resources_WeaponList; i++)
precache_generic(Resources_WeaponList[i])

PRECACHE_SOUNDS_FROM_MODEL(Resources_Models[0])

#if defined ACTIVE_SHELL
g_Shell = precache_model(SHELL_MODEL)
#endif
g_SpriteExp = precache_model(Resources_Sprites[1])

new Buffer[32]
formatex(Buffer, charsmax(Buffer), "sprites/%s.txt", WEAPON_NEW)
precache_generic(Buffer)

g_iForwardDecalIndex = register_forward(FM_DecalIndex, "FakeMeta_DecalIndex_Post", true)

register_clcmd(WEAPON_NEW, "Weapon_Hook")
}

public Weapon_Hook(id)
{
engclient_cmd(id, WEAPON_REFERANCE)
return PLUGIN_HANDLED
}

public Weapon_Deploy(weapon)
{
static id

if(!CheckItem(weapon, id))
return HAM_IGNORED

set_pev(id, pev_viewmodel2, Resources_Models[0])
set_pev(id, pev_weaponmodel2, Resources_Models[1])

WeaponList(id, WEAPON_NEW)
Weapon_SendAnim(id, DRAW)

set_pdata_string(id, m_szAnimExtention * 4, "rifle", -1, OFFSET_LINUX * 4)
set_pdata_float(id, m_flNextAttack, WEAPON_TIME_NEXT_ATTACK, OFFSET_LINUX)

return HAM_IGNORED
}

public Weapon_AddToPlayer(weapon, id)
{
if(pev_valid(weapon) != 2 || pev_valid(id) != 2)
return HAM_IGNORED

if(pev(weapon, pev_impulse) == g_WeaponKey)
{
WeaponList(id, WEAPON_NEW)
return HAM_HANDLED
}
else
{
WeaponList(id, WEAPON_REFERANCE)
return HAM_IGNORED
}
return HAM_IGNORED
}

public fw_SetModel(entity) <WeaponBox: Enabled>
{
state WeaponBox: Disabled

if(pev_valid(entity) != 2)
return FMRES_IGNORED

for(new i, iItem; i < 6; i++)
{
iItem = get_pdata_cbase(entity, m_rgpPlayerItems_CWeaponBox + i, OFFSET_LINUX_WEAPONS)

if(pev_valid(iItem) == 2 && pev(iItem, pev_impulse) == g_WeaponKey)
{
InstallWorldModel(entity)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
STATEMENT_FALLBACK(fw_SetModel, FMRES_IGNORED, WeaponBox: Disabled)

public Hook_PrimaryAttack_Pre(weapon)
{
static id

if(CheckItem(weapon, id))
{
Weapon_PrimaryAttack_Pre(weapon, id)
return HAM_SUPERCEDE
}
return HAM_IGNORED
}

public Weapon_PrimaryAttack_Pre(Weapon, id)
{
static Float:vecPuncheAngle[3]

state FireBullets: Enabled

pev(id, pev_punchangle, vecPuncheAngle)
ExecuteHam(Ham_Weapon_PrimaryAttack, Weapon)
set_pev(id, pev_punchangle, vecPuncheAngle)
state FireBullets: Disabled

if(get_pdata_int(Weapon, m_iClip, OFFSET_LINUX_WEAPONS) <= 0)
return

if(!get_pdata_int(id, OFFSET_AMMO[g_WeaponID]))
return

set_pev(id, pev_punchangle, Float:{x, y, z})

#if defined ACTIVE_SHELL
cmdBrass(Weapon, id, g_Shell)
#endif

CreateBall(id)
Weapon_SendAnim(id, SHOOT)
emit_sound(id, CHAN_WEAPON, Resources_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(Weapon, m_flNextPrimaryAttack , WEAPON__SPEED , OFFSET_LINUX_WEAPONS)
set_pdata_float(Weapon, m_flTimeWeaponIdle, WEAPON__SPEED + 3.0, OFFSET_LINUX_WEAPONS)
}

public Weapon_Ball_Touch(entity)
{
if(!pev_valid(entity))
return

static ClassName[32]
pev(entity, pev_classname, ClassName, charsmax(ClassName))

if(equali(ClassName, CLASS_NAME_BALL))
{
static Float:flOrigin[3]
pev(entity, pev_origin, flOrigin)

engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, flOrigin[0])
engfunc(EngFunc_WriteCoord, flOrigin[1])
engfunc(EngFunc_WriteCoord, flOrigin[2])
write_short(g_SpriteExp)
write_byte(5)
write_byte(15)
write_byte(TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NOSOUND)
message_end()

emit_sound(entity, CHAN_WEAPON, Resources_Sounds[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

new victim = FM_NULLENT,
attacker = pev(entity, pev_iuser1)

while((victim = engfunc(EngFunc_FindEntityInSphere, victim, flOrigin, WEAPON_BALL_RADIUS_EXPLODE)) != 0)
{
if(!is_user_alive(victim))
continue

ExecuteHamB(Ham_TakeDamage, victim, attacker, attacker, WEAPON_BALL_DAMAGE, DMG_SONIC)
}
engfunc(EngFunc_RemoveEntity, entity)
}
}

public Weapon_ItemPostFrame(weapon)
{
static id
id = get_pdata_cbase(weapon, m_pPlayer, OFFSET_LINUX_WEAPONS)

if(!CheckItem(weapon, id))
return

if(!get_pdata_int(weapon, m_fInReload, OFFSET_LINUX_WEAPONS) || get_pdata_float(id, m_flNextAttack) > 0.0)
return

new iAmmo = get_pdata_int(id, OFFSET_AMMO[g_WeaponID])
new iClip = get_pdata_int(weapon, m_iClip, OFFSET_LINUX_WEAPONS)
new j = min(CLIP - iClip, iAmmo)

set_pdata_int(weapon, m_iClip, iClip + j, OFFSET_LINUX_WEAPONS)
set_pdata_int(id, OFFSET_AMMO[g_WeaponID], iAmmo - j)
set_pdata_int(weapon, m_fInReload, 0, OFFSET_LINUX_WEAPONS)
}

public Hook_Reload(weapon)
{
static id

if(CheckItem(weapon, id))
{
Weapon_Reload(weapon, id)
return HAM_SUPERCEDE
}
return HAM_IGNORED
}

public Weapon_Reload(weapon, id)
{
if(get_pdata_int(id, OFFSET_AMMO[g_WeaponID]) <= 0)
return

ExecuteHam(Ham_Weapon_Reload, weapon)

Weapon_SendAnim(id, RELOAD)

set_pdata_float(id, m_flNextAttack, WEAPON_TIME_RELOAD)
set_pdata_int(weapon, m_fInReload, 1, OFFSET_LINUX_WEAPONS)
set_pdata_float(weapon, m_flTimeWeaponIdle, WEAPON_TIME_RELOAD, OFFSET_LINUX_WEAPONS)
}

public Weapon_Give(id)
{
if(pev_valid(id) != 2)
return FM_NULLENT

new entity, Float:Origin[3]
pev(id, pev_origin, Origin)

if ((entity = Weapon_Create(Origin)) != FM_NULLENT)
{
Player_DropWeapons(id, ExecuteHamB(Ham_Item_ItemSlot, entity))

set_pev(entity, pev_spawnflags, pev(entity, pev_spawnflags) | SF_NORESPAWN)
dllfunc(DLLFunc_Touch, entity, id)

set_pdata_int(id, OFFSET_AMMO[g_WeaponID], AMMO, OFFSET_LINUX)

return entity
}

return FM_NULLENT
}

Weapon_Create(const Float: vecOrigin[3] = {0.0, 0.0, 0.0}, const Float: vecAngles[3] = {0.0, 0.0, 0.0})
{
new entity

static iszAllocStringCached
if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, WEAPON_REFERANCE)))
{
entity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached)
}

if(pev_valid(entity) != 2)
{
return FM_NULLENT
}

dllfunc(DLLFunc_Spawn, entity)
engfunc(EngFunc_SetOrigin, entity, vecOrigin)

set_pdata_int(entity, m_iClip, CLIP ,OFFSET_LINUX_WEAPONS)

set_pev_string(entity, pev_classname, g_WeaponKey)
set_pev(entity, pev_impulse, g_WeaponKey)
set_pev(entity, pev_angles, vecAngles)

InstallWorldModel(entity)

return entity
}

public Weapon_SpawnPost(entity)
{
if(pev_valid(entity) == 2)
{
state (pev_valid(pev(entity, pev_owner)) == 2) WeaponBox: Enabled
}

return HAM_IGNORED
}
#if defined ACTIVE_SHOOT_DECALS
public FakeMeta_TraceLine_Post(const Float: vecTraceStart[3], const Float: vecTraceEnd[3], const fNoMonsters, const iEntToSkip, const iTrace) <FireBullets: Enabled>
{
static Float: vecEndPos[3]

get_tr2(iTrace, TR_vecEndPos, vecEndPos)
engfunc(EngFunc_TraceLine, vecEndPos, vecTraceStart, fNoMonsters, iEntToSkip, 0)

UTIL_GunshotDecalTrace(0)
UTIL_GunshotDecalTrace(iTrace, true)

return FMRES_IGNORED
}
STATEMENT_FALLBACK(FakeMeta_TraceLine_Post, FMRES_IGNORED, FireBullets: Disabled)
#endif
#if defined ACTIVE_TRACCE_ATTACK_DAMAGE
public Hook_TraceAttack(entity, iAttacker, Float:flDamage) <FireBullets: Enabled>
{
SetHamParamFloat(3, flDamage * WEAPON_MULTI_DAMAGE)
return HAM_IGNORED
}
STATEMENT_FALLBACK(Hook_TraceAttack, HAM_IGNORED, FireBullets: Disabled)
#endif

public fw_PlaybackEvent() <FireBullets: Enabled>
{
return FMRES_SUPERCEDE
}
STATEMENT_FALLBACK(fw_PlaybackEvent, FMRES_IGNORED, FireBullets: Disabled)

public fw_UpdateClientData_Post(id, SendWeapons, CD_Handle )
{
static iItem

if(CheckItem2(id, iItem))
{
set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001)
}
}

#if defined ACTIVE_SHELL
public cmdBrass(Weapon, id, ModelIndex)
{
set_pdata_int(Weapon, m_iShellLate, ModelIndex, OFFSET_LINUX)
set_pdata_float(id, m_flEjectBrass, get_gametime())
}
#endif

public Hook_WeaponList(MsgID, MsgDest, MsgEntity)
{
new WeaponName[32]
get_msg_arg_string(1, WeaponName, charsmax(WeaponName))

if (!strcmp(WeaponName, WEAPON_REFERANCE))
{
for(new i, a = sizeof g_WeaponListData; i < a; i++)
{
g_WeaponListData[i] = get_msg_arg_int(i + 2)
}
}
}

CreateBall(id)
{
static entity

if((entity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite"))))
{
static Float:vOrigin[3], Float:vVelocity[3], vAngles[3]

get_weapon_position(id, vOrigin, 40.0, 12.0, -5.0)

set_pev(entity, pev_classname, CLASS_NAME_BALL)
set_pev(entity, pev_movetype, MOVETYPE_FLY)
set_pev(entity, pev_solid, SOLID_SLIDEBOX)

engfunc(EngFunc_SetModel, entity, Resources_Sprites[0])
engfunc(EngFunc_SetOrigin, entity, vOrigin)
engfunc(EngFunc_SetSize, entity, Float:{ 0.0, 0.0, 0.0 }, Float:{ 0.0, 0.0, 0.0 })

set_pev(entity, pev_renderfx, kRenderFxGlowShell)
set_pev(entity, pev_rendermode, kRenderTransAdd)
set_pev(entity, pev_renderamt, 255.0)
set_pev(entity, pev_scale, WEAPON_BALL_SIZE)
set_pev(entity, pev_iuser1, id)

velocity_by_aim(id, WEAPON_BALL_SPEED, vVelocity)

set_pev(entity, pev_velocity, vVelocity)
engfunc(EngFunc_VecToAngles, vVelocity, vAngles)
set_pev(entity, pev_angles, vAngles)
}
}

WeaponList(id, const WeaponName[32])
{
engfunc(EngFunc_MessageBegin, MSG_ONE, 78, {0.0, 0.0, 0.0}, id)
write_string(WeaponName)

for(new i, a = sizeof g_WeaponListData; i < a; i++)
{
write_byte(g_WeaponListData[i])
}
message_end()
}

InstallWorldModel(entity)
engfunc(EngFunc_SetModel, entity, Resources_Models[2])

Weapon_SendAnim(id, anim)
{
set_pev(id, pev_weaponanim, anim)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0.0, 0.0, 0.0}, id)
write_byte(anim)
write_byte(0)
message_end()
}

stock bool:CheckItem(weapon, &id)
{
if(pev_valid(weapon) == 2 && pev(weapon, pev_impulse) == g_WeaponKey)
{
id = get_pdata_cbase(weapon, m_pPlayer, OFFSET_LINUX_WEAPONS)
if(pev_valid(id) == 2)
return true
}
return false
}

stock bool:CheckItem2(id, &iItem)
{
if(pev_valid(id) != 2)
{
return false
}

iItem = get_pdata_cbase(id, m_pActiveItem, OFFSET_LINUX)

if(pev_valid(iItem) != 2 || pev(iItem, pev_impulse) != g_WeaponKey)
{
return false
}

return true
}

Player_DropWeapons(id, iSlot)
{
new WeaponName[32], entity = get_pdata_cbase(id, m_rgpPlayerItems_CBasePlayer + iSlot, OFFSET_LINUX)

while(pev_valid(entity) == 2)
{
pev(entity, pev_classname, WeaponName, charsmax(WeaponName))
engclient_cmd(id, "drop", WeaponName)

entity = get_pdata_cbase(entity, m_pNext, OFFSET_LINUX_WEAPONS)
}
}

stock get_weapon_position(id, Float:fOrigin[], Float:add_forward = 0.0, Float:add_right = 0.0, Float:add_up = 0.0)
{
static Float:Angles[3],Float:ViewOfs[3], Float:vAngles[3]
static Float:Forward[3], Float:Right[3], Float:Up[3]

pev(id, pev_v_angle, vAngles)
pev(id, pev_origin, fOrigin)
pev(id, pev_view_ofs, ViewOfs)
xs_vec_add(fOrigin, ViewOfs, fOrigin)

pev(id, pev_angles, Angles)

Angles[0] = vAngles[0]

engfunc(EngFunc_MakeVectors, Angles)

global_get(glb_v_forward, Forward)
global_get(glb_v_right, Right)
global_get(glb_v_up, Up)

xs_vec_mul_scalar(Forward, add_forward, Forward)
xs_vec_mul_scalar(Right, add_right, Right)
xs_vec_mul_scalar(Up, add_up, Up)

fOrigin[0] = fOrigin[0] + Forward[0] + Right[0] + Up[0]
fOrigin[1] = fOrigin[1] + Forward[1] + Right[1] + Up[1]
fOrigin[2] = fOrigin[2] + Forward[2] + Right[2] + Up[2]
}
#if defined ACTIVE_SHOOT_DECALS
//Decals
//By KORD
#define INSTANCE(%0) ((%0 == -1) ? 0 : %0)

new Array:g_hDecals

public FakeMeta_DecalIndex_Post()
{
if(!g_hDecals)
g_hDecals = ArrayCreate(1, 1)

ArrayPushCell(g_hDecals, get_orig_retval())
}

UTIL_GunshotDecalTrace(const iTrace, const bool: bIsGunshot = false)
{
static iHit;
static iMessage;
static iDecalIndex;

static Float: flFraction;
static Float: vecEndPos[3];

iHit = INSTANCE(get_tr2(iTrace, TR_pHit));

if (iHit && pev_valid(iHit) != 2 || (pev(iHit, pev_flags) & FL_KILLME))
{
return;
}

if (pev(iHit, pev_solid) != SOLID_BSP && pev(iHit, pev_movetype) != MOVETYPE_PUSHSTEP)
{
return;
}

iDecalIndex = ExecuteHamB(Ham_DamageDecal, iHit, 0);

if (iDecalIndex < 0 || iDecalIndex >= ArraySize(g_hDecals))
{
return;
}

iDecalIndex = ArrayGetCell(g_hDecals, iDecalIndex);

get_tr2(iTrace, TR_flFraction, flFraction);
get_tr2(iTrace, TR_vecEndPos, vecEndPos);

if (iDecalIndex < 0 || flFraction >= 1.0)
{
return;
}

if (bIsGunshot)
{
iMessage = TE_GUNSHOTDECAL
}
else
{
iMessage = TE_DECAL;

if (iHit != 0)
{
if (iDecalIndex > 255)
{
iMessage = TE_DECALHIGH
iDecalIndex -= 256
}
}
else
{
iMessage = TE_WORLDDECAL

if (iDecalIndex > 255)
{
iMessage = TE_WORLDDECALHIGH
iDecalIndex -= 256
}
}
}

engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEndPos, 0)
write_byte(iMessage)
engfunc(EngFunc_WriteCoord, vecEndPos[0])
engfunc(EngFunc_WriteCoord, vecEndPos[1])
engfunc(EngFunc_WriteCoord, vecEndPos[2])

if (bIsGunshot)
{
write_short(iHit)
write_byte(iDecalIndex)
}
else
{
write_byte(iDecalIndex)

if (iHit)
{
write_short(iHit)
}
}

message_end()
}
#endif
PRECACHE_SOUNDS_FROM_MODEL(const szModelPath[])
{
new iFile

if ((iFile = fopen(szModelPath, "rt")))
{
new szSoundPath[64]

new iNumSeq, iSeqIndex
new iEvent, iNumEvents, iEventIndex

fseek(iFile, 164, SEEK_SET)
fread(iFile, iNumSeq, BLOCK_INT)
fread(iFile, iSeqIndex, BLOCK_INT)

for (new k, i = 0; i < iNumSeq; i++)
{
fseek(iFile, iSeqIndex + 48 + 176 * i, SEEK_SET)
fread(iFile, iNumEvents, BLOCK_INT)
fread(iFile, iEventIndex, BLOCK_INT)
fseek(iFile, iEventIndex + 176 * i, SEEK_SET)

for (k = 0; k < iNumEvents; k++)
{
fseek(iFile, iEventIndex + 4 + 76 * k, SEEK_SET)
fread(iFile, iEvent, BLOCK_INT)
fseek(iFile, 4, SEEK_CUR)

if (iEvent != 5004)
{
continue
}

fread_blocks(iFile, szSoundPath, 64, BLOCK_CHAR)

if (strlen(szSoundPath))
{
strtolower(szSoundPath)
precache_sound(szSoundPath)
}
}
}
}

fclose(iFile);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/

Как его сейчас сделать что бы оно было в руках после покупки? Помогите, я чайник почти в скриптинге


Я русский и мне за нас стыдно!!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя strelok93
сообщение 27.8.2015, 22:07
Сообщение #3


Стаж: 12 лет

Сообщений: 905
Благодарностей: 392
Полезность: 576

Есть эта плазма на моем серве с таким же модом.
Если интересно глянь - 46.174.48.40:27257
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя skitls187
сообщение 27.8.2015, 22:33
Сообщение #4


Стаж: 13 лет
Город: Москва

Сообщений: 390
Благодарностей: 100
Полезность: 139

Цитата(strelok93 @ 27.8.2015, 23:02) *
Есть эта плазма на моем серве с таким же модом.
Если интересно глянь - 46.174.48.40:27257

Доступ имеют все игроки или только админы? И Есть ли урон по себе?


Я русский и мне за нас стыдно!!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя strelok93
сообщение 27.8.2015, 22:55
Сообщение #5


Стаж: 12 лет

Сообщений: 905
Благодарностей: 392
Полезность: 576

Цитата(skitls187 @ 27.8.2015, 23:29) *
Доступ имеют все игроки или только админы? И Есть ли урон по себе?

По себе урона нет, доступ имеют все
Ну я же дал Ip

Отредактировал: strelok93, - 27.8.2015, 22:56
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя skitls187
сообщение 28.8.2015, 2:37
Сообщение #6


Стаж: 13 лет
Город: Москва

Сообщений: 390
Благодарностей: 100
Полезность: 139

Цитата(strelok93 @ 27.8.2015, 23:50) *
По себе урона нет, доступ имеют все
Ну я же дал Ip

Заходил. Не подскажешь как урон по себе убрать без уменьшения радиуса поражения?


Я русский и мне за нас стыдно!!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя strelok93
сообщение 28.8.2015, 6:30
Сообщение #7


Стаж: 12 лет

Сообщений: 905
Благодарностей: 392
Полезность: 576

Цитата(skitls187 @ 28.8.2015, 3:32) *
Заходил. Не подскажешь как урон по себе убрать без уменьшения радиуса поражения?

У меня не было такой проблемы, так что не подскажу)
Да и Ip я давал с намеком на то что у меня уже есть плагин готовый и его можно купить derisive.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 28.8.2015, 8:10
Сообщение #8
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

Код:
while((victim = engfunc(EngFunc_FindEntityInSphere, victim, flOrigin, WEAPON_BALL_RADIUS_EXPLODE)) != 0)
{
if(!is_user_alive(victim))
continue

if(victim == attacker )
continue



вот и все . добавь 2 строки


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 28.8.2015, 10:50
Сообщение #9


Иконка группы

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Скажите, зачем вам старый забагованный биохазард, если вы всё равно пытаетесь превратить его в зп и даже плагины оттуда переписываете? :I


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя strelok93
сообщение 28.8.2015, 12:55
Сообщение #10


Стаж: 12 лет

Сообщений: 905
Благодарностей: 392
Полезность: 576

Цитата(AndrewZ @ 28.8.2015, 11:45) *
Скажите, зачем вам старый забагованный биохазард, если вы всё равно пытаетесь превратить его в зп и даже плагины оттуда переписываете? :I

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

Отредактировал: strelok93, - 28.8.2015, 12:55
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя skitls187
сообщение 28.8.2015, 13:31
Сообщение #11


Стаж: 13 лет
Город: Москва

Сообщений: 390
Благодарностей: 100
Полезность: 139

Цитата(strelok93 @ 28.8.2015, 13:50) *
Ну так то у тебя тоже сервер с таким модом был или есть до сих пор) Поэтому тоже хотелось бы ответ получить на твой же вопрос
А я в какой то теме уже отвечал почему
Да и про забагованный не соглашусь, у меня нету багов в моде.

Согласен, багов не замечал, если только косяк с моей стороны где то был.


Я русский и мне за нас стыдно!!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 28.8.2015, 14:56
Сообщение #12


Иконка группы

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Да просто смысла нет, вот и всё. Бессмысленно это.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя skitls187
сообщение 29.8.2015, 15:38
Сообщение #13


Стаж: 13 лет
Город: Москва

Сообщений: 390
Благодарностей: 100
Полезность: 139

Цитата(AndrewZ @ 28.8.2015, 15:52) *
Да просто смысла нет, вот и всё. Бессмысленно это.

А в чем же тогда смысл? Флудить в теме о помощи?

Цитата(csnet @ 28.8.2015, 9:06) *
Код:
while((victim = engfunc(EngFunc_FindEntityInSphere, victim, flOrigin, WEAPON_BALL_RADIUS_EXPLODE)) != 0)
{
if(!is_user_alive(victim))
continue

if(victim == attacker )
continue



вот и все . добавь 2 строки

Много куда пытался впихнуть, но так и не вышло у меня ни чего =( либо ошибки при компиляции, либо если ошибок нет, то плагин вообще отказывается работать.
Сама ошибка при замене строк
error 017: undefined symbol "victim"


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