AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   How to copy smoke entity? (https://forums.alliedmods.net/showthread.php?t=338526)

damage220 07-10-2022 14:43

How to copy smoke entity?
 
In an effort to make smoke more dense, I am looking for a way to copy its entity sprite. I ended up with the code:

Code:

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
        register_forward(FM_EmitSound, "emit_sound_event");
}
public emit_sound_event(orig_ent, channel, const sample[], Float:vol, Float:attn, flags, pitch)
{
        static const smoke_sound[] = "weapons/sg_explode.wav";
        static num = 0;
        new ent;
        new Float:origin[3], Float:angles[3], Float:velocity[3];
        new model[64], classname[64];

        entity_get_string(orig_ent, EV_SZ_classname, classname, charsmax(classname));
        entity_get_string(orig_ent, EV_SZ_model, model, charsmax(model));
        // client_print(1, print_chat, "#%d on channel %d: %s", ++num, channel, sample);
        if(channel != CHAN_WEAPON || !equal(sample, smoke_sound))
                return;
        /* copy smoke info */
        entity_get_vector(orig_ent, EV_VEC_origin, origin);
        entity_get_vector(orig_ent, EV_VEC_angles, angles);
        entity_get_string(orig_ent, EV_SZ_model, model, charsmax(model));
        // client_print(1, print_chat, "classname: %s, model: %s", classname, model);
        entity_set_vector(orig_ent, EV_VEC_origin, Float:{9999.9, 9999.9, 9999.9});
        ent = create_entity("info_target");
        if(ent == 0)
                return;
        entity_set_string(ent, EV_SZ_classname, classname);
        entity_set_origin(ent, origin);
        entity_set_vector(ent, EV_VEC_angles, angles);
        entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);
        entity_set_int(ent, EV_INT_solid, SOLID_NOT);
        entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.1);
        entity_set_model(ent, model);
        velocity[0] = random_float(-120.0, 120.0);
        velocity[1] = random_float(-120.0, 120.0);
        velocity[2] = random_float(200.0, 300.0);
        entity_set_vector(ent, EV_VEC_velocity, velocity);
        call_think(ent);
        emit_sound(ent, channel, sample, vol, attn, flags, pitch);
        client_print(1, print_chat, "reached end of the function");
}

The entity (smoke grenade) is created and placed in the right place, the sound is also emitted. But I do not see the smoke puff. I was hoping that creating an entity with appropriate classname would be enough to trigger "think" process. Forcing call_think() has no effect too. I decided to move on and tried to write my own logic for the smoke with no luck. The first image is message "TE_SMOKE" and the second one is message "TE_SPRITE". I want the smoke to be gray, not with black background or white.

https://i.ibb.co/hfGQ38Y/20220710213200-1.jpg https://i.ibb.co/mrs0Vys/20220710212804-1.jpg

If possible I would like to just copy an entity and trigger default engine behavior. Otherwise, here is the code of messages:

Code:

public add_smoke(ent)
{
        new Float:origin[3]
        new smokescale = 50;
        new fps = 2;
        new brightness = 20;
        new smoke;
       
        // new smoke_path[] = "sprites/unrealsmoke_2.spr";
        // smoke = precache_model(smoke_path);
        new smoke_path[] = "sprites/smoke.spr";
        smoke = engfunc(EngFunc_PrecacheModel, smoke_path);
        entity_get_vector(ent, EV_VEC_origin, origin);
        // show smoke
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
        // write_byte(TE_SMOKE);
        write_byte(TE_SPRITE);
        engfunc(EngFunc_WriteCoord, origin[0]);
        engfunc(EngFunc_WriteCoord, origin[1]);
        engfunc(EngFunc_WriteCoord, origin[2]);
        write_short(smoke);
        write_byte(smokescale);
        // write_byte(fps);
        write_byte(brightness);
        message_end();
}



All times are GMT -4. The time now is 15:36.

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