
Стаж: 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 } */
Как его сейчас сделать что бы оно было в руках после покупки? Помогите, я чайник почти в скриптинге

Я русский и мне за нас стыдно!!!
|