AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Help with "w" model (https://forums.alliedmods.net/showthread.php?t=337665)

OW3R 05-06-2022 08:37

Help with "w" model
 
1 Attachment(s)
Hi, guys. Can you add the "w" model code to the code below?



Code:



#include <amxmodx>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#include <amx_settings_api>
#include <cs_weap_models_api>
#include <cs_ham_bots_api>
#include <zp50_core>
#include <zp50_class_nightcrawler>

// Settings file
new const ZP_SETTINGS_FILE[] = "zombieplague.ini"

enum
{
        SECTION_WEAPON_MODELS
}

// Default sounds
new const sound_grenade_frost_explode[][] = { "warcraft3/frostnova.wav" }
new const sound_grenade_frost_player[][] = { "warcraft3/impalehit.wav" }
new const sound_grenade_frost_break[][] = { "warcraft3/impalelaunch1.wav" }

new g_iFlare, g_ExploSpr

#define MODEL_MAX_LENGTH 64
#define SOUND_MAX_LENGTH 64
#define SPRITE_MAX_LENGTH 64

// Models
new g_model_grenade_frost[MODEL_MAX_LENGTH] = "models/zombie_plague/v_grenade_frost.mdl"
new g_model_grenade_frost_p[MODEL_MAX_LENGTH] = "models/zombie_plague/p_grenades_frost.mdl"
// Sprites
new g_sprite_grenade_trail[SPRITE_MAX_LENGTH] = "sprites/laserbeam.spr"
new g_sprite_grenade_ring[SPRITE_MAX_LENGTH] = "sprites/shockwave.spr"
new g_sprite_grenade_glass[SPRITE_MAX_LENGTH] = "models/glassgibs.mdl"

new Array:g_sound_grenade_frost_explode
new Array:g_sound_grenade_frost_player
new Array:g_sound_grenade_frost_break

#define GRAVITY_HIGH 999999.9
#define GRAVITY_NONE 0.000001

#define TASK_FROST_REMOVE 100
#define ID_FROST_REMOVE (taskid - TASK_FROST_REMOVE)


#define MAXPLAYERS 32

#define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
#define flag_get_boolean(%1,%2) (flag_get(%1,%2) ? true : false)
#define flag_set(%1,%2) %1 |= (1 << (%2 & 31))
#define flag_unset(%1,%2) %1 &= ~(1 << (%2 & 31))

// Hack to be able to use Ham_Player_ResetMaxSpeed (by joaquimandrade)
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame

// Explosion radius for custom grenades
const Float:NADE_EXPLOSION_RADIUS = 240.0

// HACK: pev_ field used to store custom nade types and their values
const PEV_NADE_TYPE = pev_flTimeStepSound
const NADE_TYPE_FROST = 3333

// Some constants
const UNIT_SECOND = (1<<12)
const BREAK_GLASS = 0x01
const FFADE_IN = 0x0000
const FFADE_STAYOUT = 0x0004

// Custom Forwards
enum _:TOTAL_FORWARDS
{
        FW_USER_FREEZE_PRE = 0,
        FW_USER_UNFROZEN
}
new g_Forwards[TOTAL_FORWARDS]
new g_ForwardResult

new g_IsFrozen
new Float:g_FrozenGravity[MAXPLAYERS+1]
new g_FrozenRenderingFx[MAXPLAYERS+1]
new Float:g_FrozenRenderingColor[MAXPLAYERS+1][3]
new g_FrozenRenderingRender[MAXPLAYERS+1]
new Float:g_FrozenRenderingAmount[MAXPLAYERS+1]

new g_MsgDamage, g_MsgScreenFade
new g_trailSpr, g_exploSpr, g_glassSpr

new cvar_grenade_frost_hudicon, cvar_grenade_frost_duration

public plugin_init()
{
        register_plugin("[ZP] Grenade: Frost", ZP_VERSION_STRING, "ZP Dev Team")
       
        RegisterHam(Ham_Player_ResetMaxSpeed, "player", "fw_ResetMaxSpeed_Post", 1)
        RegisterHamBots(Ham_Player_ResetMaxSpeed, "fw_ResetMaxSpeed_Post", 1)
        RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
        RegisterHamBots(Ham_TakeDamage, "fw_TakeDamage")
        RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
        RegisterHamBots(Ham_TraceAttack, "fw_TraceAttack")
        RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
        RegisterHamBots(Ham_Killed, "fw_PlayerKilled")
        register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
        register_forward(FM_SetModel, "fw_SetModel")
        RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
       
        g_MsgDamage = get_user_msgid("Damage")
        g_MsgScreenFade = get_user_msgid("ScreenFade")
       
        cvar_grenade_frost_hudicon = register_cvar("zp_grenade_frost_hudicon", "1")
        cvar_grenade_frost_duration = register_cvar("zp_grenade_frost_duration", "2.0")
        g_Forwards[FW_USER_FREEZE_PRE] = CreateMultiForward("zp_fw_grenade_frost_pre", ET_CONTINUE, FP_CELL)
        g_Forwards[FW_USER_UNFROZEN] = CreateMultiForward("zp_fw_grenade_frost_unfreeze", ET_IGNORE, FP_CELL)
}

public plugin_natives()
{
        register_library("zp50_grenade_frost")
        register_native("zp_grenade_frost_get", "native_grenade_frost_get")
        register_native("zp_grenade_frost_set", "native_grenade_frost_set")
}

public native_grenade_frost_get(plugin_id, num_params)
{
        new id = get_param(1)
       
        if (!is_user_alive(id))
        {
                log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
                return false;
        }
       
        return flag_get_boolean(g_IsFrozen, id);
}

public native_grenade_frost_set(plugin_id, num_params)
{
        new id = get_param(1)
       
        if (!is_user_alive(id))
        {
                log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
                return false;
        }
       
        new set = get_param(2)
       
        // Unfreeze
        if (!set)
        {
                // Not frozen
                if (!flag_get(g_IsFrozen, id))
                        return true;
               
                // Remove freeze right away and stop the task
                remove_freeze(id+TASK_FROST_REMOVE)
                remove_task(id+TASK_FROST_REMOVE)
                return true;
        }
       
        return set_freeze(id);
}

public plugin_precache()
{
        // Initialize arrays
        g_sound_grenade_frost_explode = ArrayCreate(SOUND_MAX_LENGTH, 1)
        g_sound_grenade_frost_player = ArrayCreate(SOUND_MAX_LENGTH, 1)
        g_sound_grenade_frost_break = ArrayCreate(SOUND_MAX_LENGTH, 1)
       
        // Load from external file
        amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "GRENADE FROST EXPLODE", g_sound_grenade_frost_explode)
        amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "GRENADE FROST PLAYER", g_sound_grenade_frost_player)
        amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "GRENADE FROST BREAK", g_sound_grenade_frost_break)
       
        // If we couldn't load custom sounds from file, use and save default ones
        new index
        if (ArraySize(g_sound_grenade_frost_explode) == 0)
        {
                for (index = 0; index < sizeof sound_grenade_frost_explode; index++)
                        ArrayPushString(g_sound_grenade_frost_explode, sound_grenade_frost_explode[index])
               
                // Save to external file
                amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "GRENADE FROST EXPLODE", g_sound_grenade_frost_explode)
        }
        if (ArraySize(g_sound_grenade_frost_player) == 0)
        {
                for (index = 0; index < sizeof sound_grenade_frost_player; index++)
                        ArrayPushString(g_sound_grenade_frost_player, sound_grenade_frost_player[index])
               
                // Save to external file
                amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "GRENADE FROST PLAYER", g_sound_grenade_frost_player)
        }
        if (ArraySize(g_sound_grenade_frost_break) == 0)
        {
                for (index = 0; index < sizeof sound_grenade_frost_break; index++)
                        ArrayPushString(g_sound_grenade_frost_break, sound_grenade_frost_break[index])
               
                // Save to external file
                amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "GRENADE FROST BREAK", g_sound_grenade_frost_break)
        }
       
        // Load from external file, save if not found
        if (!amx_load_setting_string(ZP_SETTINGS_FILE, "Weapon Models", "GRENADE FROST", g_model_grenade_frost, charsmax(g_model_grenade_frost)))
                amx_save_setting_string(ZP_SETTINGS_FILE, "Weapon Models", "GRENADE FROST", g_model_grenade_frost)
        if (!amx_load_setting_string(ZP_SETTINGS_FILE, "Weapon Models", "GRENADE FROST_p", g_model_grenade_frost_p, charsmax(g_model_grenade_frost_p)))
                amx_save_setting_string(ZP_SETTINGS_FILE, "Weapon Models", "GRENADE FROST_p", g_model_grenade_frost_p)
        if (!amx_load_setting_string(ZP_SETTINGS_FILE, "Grenade Sprites", "TRAIL", g_sprite_grenade_trail, charsmax(g_sprite_grenade_trail)))
                amx_save_setting_string(ZP_SETTINGS_FILE, "Grenade Sprites", "TRAIL", g_sprite_grenade_trail)
        if (!amx_load_setting_string(ZP_SETTINGS_FILE, "Grenade Sprites", "RING", g_sprite_grenade_ring, charsmax(g_sprite_grenade_ring)))
                amx_save_setting_string(ZP_SETTINGS_FILE, "Grenade Sprites", "RING", g_sprite_grenade_ring)
        if (!amx_load_setting_string(ZP_SETTINGS_FILE, "Grenade Sprites", "GLASS", g_sprite_grenade_glass, charsmax(g_sprite_grenade_glass)))
                amx_save_setting_string(ZP_SETTINGS_FILE, "Grenade Sprites", "GLASS", g_sprite_grenade_glass)
       
        // Precache sounds
        new sound[SOUND_MAX_LENGTH]
        for (index = 0; index < ArraySize(g_sound_grenade_frost_explode); index++)
        {
                ArrayGetString(g_sound_grenade_frost_explode, index, sound, charsmax(sound))
                precache_sound(sound)
        }
        for (index = 0; index < ArraySize(g_sound_grenade_frost_player); index++)
        {
                ArrayGetString(g_sound_grenade_frost_player, index, sound, charsmax(sound))
                precache_sound(sound)
        }
        for (index = 0; index < ArraySize(g_sound_grenade_frost_break); index++)
        {
                ArrayGetString(g_sound_grenade_frost_break, index, sound, charsmax(sound))
                precache_sound(sound)
        }
       
        // Precache models
        precache_model(g_model_grenade_frost)
        precache_model(g_model_grenade_frost_p)
        g_trailSpr = precache_model(g_sprite_grenade_trail)
        g_exploSpr = precache_model(g_sprite_grenade_ring)
        g_glassSpr = precache_model(g_sprite_grenade_glass)
        g_iFlare = precache_model("sprites/zombie_plague/frost_gib.spr")
        g_ExploSpr = precache_model("sprites/zombie_plague/frost_explode.spr") 
}       
public zp_fw_core_cure_post(id, attacker)
{
        // Set custom grenade model
        cs_set_player_view_model(id, CSW_FLASHBANG, g_model_grenade_frost)
        cs_set_player_weap_model(id, CSW_FLASHBANG, g_model_grenade_frost_p)
       
        // If frozen, remove freeze after player is cured
        if (flag_get(g_IsFrozen, id))
        {
                // Update gravity and rendering values first
                ApplyFrozenGravity(id)
                ApplyFrozenRendering(id)
               
                // Remove freeze right away and stop the task
                remove_freeze(id+TASK_FROST_REMOVE)
                remove_task(id+TASK_FROST_REMOVE)
        }
}

public zp_fw_core_infect(id, attacker)
{
        // Remove custom grenade model
        cs_reset_player_view_model(id, CSW_FLASHBANG)
        cs_reset_player_weap_model(id, CSW_FLASHBANG)
}

public zp_fw_core_infect_post(id, attacker)
{
        // If frozen, update gravity and rendering
        if (flag_get(g_IsFrozen, id))
        {
                ApplyFrozenGravity(id)
                ApplyFrozenRendering(id)
        }
}

public client_disconnected(id)
{
        flag_unset(g_IsFrozen, id)
        remove_task(id+TASK_FROST_REMOVE)
}

public fw_ResetMaxSpeed_Post(id)
{
        // Dead or not frozen
        if(!is_user_alive(id) || !flag_get(g_IsFrozen, id))
                return;
               
        // Prevent from moving
        set_user_maxspeed(id, 1.0)
}

// Ham Trace Attack Forward
public fw_TraceAttack(victim, attacker)
{
        // Non-player damage or self damage
        if (victim == attacker || !is_user_alive(attacker))
                return HAM_IGNORED;
       
        // Block damage while frozen, as it makes killing zombies too easy
        if (flag_get(g_IsFrozen, victim) || flag_get(g_IsFrozen, attacker))
                return HAM_SUPERCEDE;

       
        return HAM_IGNORED;
}

// Ham Take Damage Forward (needed to block explosion damage too)
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
        // Non-player damage or self damage
        if (victim == attacker || !is_user_alive(attacker))
                return HAM_IGNORED;
       
        // Block damage while frozen, as it makes killing zombies too easy
        if (flag_get(g_IsFrozen, victim) || flag_get(g_IsFrozen, attacker))
                return HAM_SUPERCEDE;
               
        return HAM_IGNORED;
}

// Ham Player Killed Forward
public fw_PlayerKilled(victim, attacker, shouldgib)
{
        // Frozen player being killed (usually caused by a 3rd party plugin, e.g. lasermines)
        if (flag_get(g_IsFrozen, victim))
        {
                // Remove freeze right away and stop the task
                remove_freeze(victim+TASK_FROST_REMOVE)
                remove_task(victim+TASK_FROST_REMOVE)
        }
}

// Forward Player PreThink
public fw_PlayerPreThink(id)
{
        // Not alive or not frozen
        if(!is_user_alive(id) || !flag_get(g_IsFrozen, id))
                return;

       
        // Stop motion
        set_pev(id, pev_velocity, Float:{0.0,0.0,0.0})
}

// Forward Set Model
public fw_SetModel(entity, const model[])
{       

        // We don't care
        if (strlen(model) < 8)
                return;
       
        // Narrow down our matches a bit
        if (model[7] != 'w' || model[8] != '_')
                return;
       
        // Get damage time of grenade
        static Float:dmgtime
        pev(entity, pev_dmgtime, dmgtime)
       
        // Grenade not yet thrown
        if (dmgtime == 0.0)
                return;
       
        // Grenade's owner is zombie?
        if (zp_core_is_zombie(pev(entity, pev_owner)))
                return;
        if (zp_class_nightcrawler_get(pev(entity, pev_owner)))
                return;
               
        // Flashbang
        if (model[9] == 'f' && model[10] == 'l')
        {       
                        // Give it a glow
                        fm_set_rendering(entity, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 16);
               
                        // And a colored trail
                        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                        write_byte(TE_BEAMFOLLOW) // TE id
                        write_short(entity) // entity
                        write_short(g_trailSpr) // sprite
                        write_byte(10) // life
                        write_byte(10) // width
                        write_byte(0) // r
                        write_byte(100) // g
                        write_byte(200) // b
                        write_byte(200) // brightness
                        message_end()
               
                        // Set grenade type on the thrown grenade entity
                        set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_FROST)
        }


}

// Ham Grenade Think Forward
public fw_ThinkGrenade(entity)
{
        // Invalid entity
        if (!pev_valid(entity)) return HAM_IGNORED;
       
        // Get damage time of grenade
        static Float:dmgtime
        pev(entity, pev_dmgtime, dmgtime)
       
        // Check if it's time to go off
        if (dmgtime > get_gametime())
                return HAM_IGNORED;
       
        // Check if it's one of our custom nades
        switch (pev(entity, PEV_NADE_TYPE))
        {
                case NADE_TYPE_FROST: // Frost Grenade
                {               
                        frost_explode(entity)
                        return HAM_SUPERCEDE;
                }
        }
       
        return HAM_IGNORED;
}

// Frost Grenade Explosion
frost_explode(ent)
{
        // Get origin
        static Float:origin[3]
        pev(ent, pev_origin, origin)
       
        // Make the explosion
        create_blast3(origin)
       
        // Frost nade explode sound
        static sound[SOUND_MAX_LENGTH]
        ArrayGetString(g_sound_grenade_frost_explode, random_num(0, ArraySize(g_sound_grenade_frost_explode) - 1), sound, charsmax(sound))
        emit_sound(ent, CHAN_WEAPON, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
       
        // Collisions
        new victim = -1
       
        while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, origin, NADE_EXPLOSION_RADIUS)) != 0)
        {
                // Only effect alive zombies
                if (!is_user_alive(victim) || !zp_core_is_zombie(victim))
                        continue;
               
                set_freeze(victim)
        }
       
        // Get rid of the grenade
        engfunc(EngFunc_RemoveEntity, ent)
}

set_freeze(victim)
{
        // Already frozen
        if (flag_get(g_IsFrozen, victim))
                return false;
       
        // Allow other plugins to decide whether player should be frozen or not
        ExecuteForward(g_Forwards[FW_USER_FREEZE_PRE], g_ForwardResult, victim)
        if (g_ForwardResult >= PLUGIN_HANDLED)
        {
                // Get player's origin
                static origin2[3]
                get_user_origin(victim, origin2)
               
                // Broken glass sound
                static sound[SOUND_MAX_LENGTH]
                ArrayGetString(g_sound_grenade_frost_break, random_num(0, ArraySize(g_sound_grenade_frost_break) - 1), sound, charsmax(sound))
                emit_sound(victim, CHAN_BODY, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
               
                // Glass shatter
                message_begin(MSG_PVS, SVC_TEMPENTITY, origin2)
                write_byte(TE_BREAKMODEL) // TE id
                write_coord(origin2[0]) // x
                write_coord(origin2[1]) // y
                write_coord(origin2[2]+24) // z
                write_coord(16) // size x
                write_coord(16) // size y
                write_coord(16) // size z
                write_coord(random_num(-50, 50)) // velocity x
                write_coord(random_num(-50, 50)) // velocity y
                write_coord(25) // velocity z
                write_byte(10) // random velocity
                write_short(g_glassSpr) // model
                write_byte(10) // count
                write_byte(25) // life
                write_byte(BREAK_GLASS) // flags
                message_end()
               
                return false;
        }
       
        // Freeze icon?
        if (get_pcvar_num(cvar_grenade_frost_hudicon))
        {
                message_begin(MSG_ONE_UNRELIABLE, g_MsgDamage, _, victim)
                write_byte(0) // damage save
                write_byte(0) // damage take
                write_long(DMG_DROWN) // damage type - DMG_FREEZE
                write_coord(0) // x
                write_coord(0) // y
                write_coord(0) // z
                message_end()
        }
       
        // Set frozen flag
        flag_set(g_IsFrozen, victim)
       
        // Freeze sound
        static sound[SOUND_MAX_LENGTH]
        ArrayGetString(g_sound_grenade_frost_player, random_num(0, ArraySize(g_sound_grenade_frost_player) - 1), sound, charsmax(sound))
        emit_sound(victim, CHAN_BODY, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
       
        // Add a blue tint to their screen
        message_begin(MSG_ONE, g_MsgScreenFade, _, victim)
        write_short(0) // duration
        write_short(0) // hold time
        write_short(FFADE_STAYOUT) // fade type
        write_byte(0) // red
        write_byte(50) // green
        write_byte(200) // blue
        write_byte(100) // alpha
        message_end()
       
        // Update player entity rendering
        ApplyFrozenRendering(victim)
       
        // Block gravity
        ApplyFrozenGravity(victim)
       
        // Update player's maxspeed
        ExecuteHamB(Ham_Player_ResetMaxSpeed, victim)
       
        // Set a task to remove the freeze
        set_task(get_pcvar_float(cvar_grenade_frost_duration), "remove_freeze", victim+TASK_FROST_REMOVE)
        return true;
}

ApplyFrozenGravity(id)
{
        // Get current gravity
        new Float:gravity = get_user_gravity(id)
       
        // Already set, no worries...
        if (gravity == GRAVITY_HIGH || gravity == GRAVITY_NONE)
                return;
       
        // Save player's old gravity
        g_FrozenGravity[id] = gravity
       
        // Prevent from jumping
        if (pev(id, pev_flags) & FL_ONGROUND)
                set_user_gravity(id, GRAVITY_HIGH) // set really high
        else
                set_user_gravity(id, GRAVITY_NONE) // no gravity
}

ApplyFrozenRendering(id)
{
        // Get current rendering
        new rendering_fx = pev(id, pev_renderfx)
        new Float:rendering_color[3]
        pev(id, pev_rendercolor, rendering_color)
        new rendering_render = pev(id, pev_rendermode)
        new Float:rendering_amount
        pev(id, pev_renderamt, rendering_amount)
       
        // Already set, no worries...
        if (rendering_fx == kRenderFxGlowShell && rendering_color[0] == 0.0 && rendering_color[1] == 100.0
                && rendering_color[2] == 200.0 && rendering_render == kRenderNormal && rendering_amount == 25.0)
                return;
       
        // Save player's old rendering       
        g_FrozenRenderingFx[id] = pev(id, pev_renderfx)
        pev(id, pev_rendercolor, g_FrozenRenderingColor[id])
        g_FrozenRenderingRender[id] = pev(id, pev_rendermode)
        pev(id, pev_renderamt, g_FrozenRenderingAmount[id])
       
        // Light blue glow while frozen
        fm_set_rendering(id, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
}

// Remove freeze task
public remove_freeze(taskid)
{
        // Remove frozen flag
        flag_unset(g_IsFrozen, ID_FROST_REMOVE)
       
        // Restore gravity
        set_pev(ID_FROST_REMOVE, pev_gravity, g_FrozenGravity[ID_FROST_REMOVE])
       
        // Update player's maxspeed
        ExecuteHamB(Ham_Player_ResetMaxSpeed, ID_FROST_REMOVE)
       
        // Restore rendering
        fm_set_rendering_float(ID_FROST_REMOVE, g_FrozenRenderingFx[ID_FROST_REMOVE], g_FrozenRenderingColor[ID_FROST_REMOVE], g_FrozenRenderingRender[ID_FROST_REMOVE], g_FrozenRenderingAmount[ID_FROST_REMOVE])
       
        // Gradually remove screen's blue tint
        message_begin(MSG_ONE, g_MsgScreenFade, _, ID_FROST_REMOVE)
        write_short(UNIT_SECOND) // duration
        write_short(0) // hold time
        write_short(FFADE_IN) // fade type
        write_byte(0) // red
        write_byte(50) // green
        write_byte(200) // blue
        write_byte(100) // alpha
        message_end()
       
        // Broken glass sound
        static sound[SOUND_MAX_LENGTH]
        ArrayGetString(g_sound_grenade_frost_break, random_num(0, ArraySize(g_sound_grenade_frost_break) - 1), sound, charsmax(sound))
        emit_sound(ID_FROST_REMOVE, CHAN_BODY, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
       
        // Get player's origin
        static origin[3]
        get_user_origin(ID_FROST_REMOVE, origin)
       
        // Glass shatter
        message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
        write_byte(TE_BREAKMODEL) // TE id
        write_coord(origin[0]) // x
        write_coord(origin[1]) // y
        write_coord(origin[2]+24) // z
        write_coord(16) // size x
        write_coord(16) // size y
        write_coord(16) // size z
        write_coord(random_num(-50, 50)) // velocity x
        write_coord(random_num(-50, 50)) // velocity y
        write_coord(25) // velocity z
        write_byte(10) // random velocity
        write_short(g_glassSpr) // model
        write_byte(10) // count
        write_byte(25) // life
        write_byte(BREAK_GLASS) // flags
        message_end()
       
        ExecuteForward(g_Forwards[FW_USER_UNFROZEN], g_ForwardResult, ID_FROST_REMOVE)
}

// Frost Grenade: Freeze Blast
create_blast3(const Float:originF[3])
{
        // Smallest ring
        engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
        write_byte(TE_BEAMCYLINDER) // TE id
        engfunc(EngFunc_WriteCoord, originF[0]) // x
        engfunc(EngFunc_WriteCoord, originF[1]) // y
        engfunc(EngFunc_WriteCoord, originF[2]) // z
        engfunc(EngFunc_WriteCoord, originF[0]) // x axis
        engfunc(EngFunc_WriteCoord, originF[1]) // y axis
        engfunc(EngFunc_WriteCoord, originF[2]+385.0) // z axis
        write_short(g_exploSpr) // sprite
        write_byte(0) // startframe
        write_byte(0) // framerate
        write_byte(4) // life
        write_byte(60) // width
        write_byte(0) // noise
        write_byte(0) // red
        write_byte(100) // green
        write_byte(200) // blue
        write_byte(200) // brightness
        write_byte(0) // speed
        message_end()
       
        // Medium ring
        engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
        write_byte(TE_BEAMCYLINDER) // TE id
        engfunc(EngFunc_WriteCoord, originF[0]) // x
        engfunc(EngFunc_WriteCoord, originF[1]) // y
        engfunc(EngFunc_WriteCoord, originF[2]) // z
        engfunc(EngFunc_WriteCoord, originF[0]) // x axis
        engfunc(EngFunc_WriteCoord, originF[1]) // y axis
        engfunc(EngFunc_WriteCoord, originF[2]+470.0) // z axis
        write_short(g_exploSpr) // sprite
        write_byte(0) // startframe
        write_byte(0) // framerate
        write_byte(4) // life
        write_byte(60) // width
        write_byte(0) // noise
        write_byte(0) // red
        write_byte(100) // green
        write_byte(200) // blue
        write_byte(200) // brightness
        write_byte(0) // speed
        message_end()
       
        // Largest ring
        engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
        write_byte(TE_BEAMCYLINDER) // TE id
        engfunc(EngFunc_WriteCoord, originF[0]) // x
        engfunc(EngFunc_WriteCoord, originF[1]) // y
        engfunc(EngFunc_WriteCoord, originF[2]) // z
        engfunc(EngFunc_WriteCoord, originF[0]) // x axis
        engfunc(EngFunc_WriteCoord, originF[1]) // y axis
        engfunc(EngFunc_WriteCoord, originF[2]+555.0) // z axis
        write_short(g_exploSpr) // sprite
        write_byte(0) // startframe
        write_byte(0) // framerate
        write_byte(4) // life
        write_byte(60) // width
        write_byte(0) // noise
        write_byte(0) // red
        write_byte(100) // green
        write_byte(200) // blue
        write_byte(200) // brightness
        write_byte(0) // speed
        message_end()
       
        new origin[3]
        origin[0] = floatround(originF[0])
        origin[1] = floatround(originF[1])
        origin[2] = floatround(originF[2])
       
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
        write_byte(TE_SPRITETRAIL)
        write_coord(origin[0])
        write_coord(origin[1])
        write_coord(origin[2]+40)
        write_coord(origin[0])
        write_coord(origin[1])
        write_coord(origin[2])
        write_short(g_iFlare)
        write_byte(25)
        write_byte(25)
        write_byte(5)
        write_byte(50)
        write_byte(10)
        message_end()

        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
        write_byte(17)
        write_coord(origin[0])
        write_coord(origin[1])
        write_coord(origin[2] + 100)
        write_short(g_ExploSpr)
        write_byte(30)
        write_byte(255)
        message_end()
}

// Set entity's rendering type (from fakemeta_util)
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
        static Float:color[3]
        color[0] = float(r)
        color[1] = float(g)
        color[2] = float(b)
       
        set_pev(entity, pev_renderfx, fx)
        set_pev(entity, pev_rendercolor, color)
        set_pev(entity, pev_rendermode, render)
        set_pev(entity, pev_renderamt, float(amount))
}

// Set entity's rendering type (float parameters version)
stock fm_set_rendering_float(entity, fx = kRenderFxNone, Float:color[3], render = kRenderNormal, Float:amount = 16.0)
{
        set_pev(entity, pev_renderfx, fx)
        set_pev(entity, pev_rendercolor, color)
        set_pev(entity, pev_rendermode, render)
        set_pev(entity, pev_renderamt, amount)
}


fingerprint 05-06-2022 09:11

Re: Help with "w" model
 
Code:

public SetModel(ent, model[])
{
        if(!pev_valid(ent) || !equal(model, "models/w_your_old_model.mdl")) {
                return FMRES_IGNORED
        }

        new id = pev(ent, pev_owner);
        if(!has_weapon[id]) {
                return FMRES_IGNORED;
        }

        engfunc(EngFunc_SetModel, ent, "models/new/w_your_new_model.mdl");
        fm_set_rendering(entity, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 16);
        set_pev(ent, pev_iuser, frost_grenade[id]);

        return FMRES_SUPERCEDE;
}


OW3R 05-06-2022 09:34

Re: Help with "w" model
 
thank you it is working


All times are GMT -4. The time now is 08:47.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.