Raised This Month: $51 Target: $400
 12% 

Rainy/snowy effects


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
juanjotoronja
Member
Join Date: Mar 2014
Old 04-10-2015 , 13:49   Rainy/snowy effects
Reply With Quote #1

Hi... im using this two plugins Day/night https://forums.alliedmods.net/showthread.php?t=143313 and Rainy/snowy both have custom skys pictures so the "problem" i have is day/night plugin is taking priority over rain sky picture. Is there any chance to reverse this effect so whenever is raining it shows the cloudy sky picture over day/night sky? This is what i have...


Code:
#include <amxmodx>
#include <amxmisc>

/* Choose One */
//#include <engine>
#include <fakemeta>

#include "ojos.inc"

#define MAX_LIGHT_POINTS 3
#define max_suffix 6

new weather_ent
new Float:g_strikedelay
new g_suffix[max_suffix][3] = { "up", "dn", "ft", "bk", "lf", "rt" }
new g_lightpoints[MAX_LIGHT_POINTS]
new g_fxbeam;
new g_soundstate[33]
new g_maxplayers;
new g_stormintensity;

public plugin_precache() 
{
    register_plugin("RainySnowy", "2.0y", "OneEyed & teame06");
    register_cvar("rainysnowy", "2.0y", FCVAR_SERVER);
    register_cvar("weather_type", "3");
    register_cvar("weather_storm", "0");
    register_cvar("sv_customskyname", "rain")
    
    g_maxplayers = get_maxplayers();
    
    new type = get_cvar_num("weather_type");
    if(type == 3)
        type = random_num(0,2);
        
    switch(type) {
        case 1: 
        {    
            g_fxbeam = precache_model("sprites/laserbeam.spr");
            precache_model("models/chick.mdl");
            precache_sound("ambience/rain.wav");
            precache_sound("ambience/thunder_clap.wav");
            weather_ent = CREATE_ENTITY("env_rain")
            THINK("env_rain","WeatherSystem")
            NEXTTHINK(weather_ent,1.0)
            static cvar_skyname[32]
            get_cvar_string("sv_customskyname", cvar_skyname, 31)
            
            if(strlen(cvar_skyname) > 0)
                precache_sky(cvar_skyname)
        }
        case 2: 
        {
            weather_ent = CREATE_ENTITY("env_snow");
        }
    }    
}

public client_putinserver(id)
    client_cmd(id,"cl_weather 1");    

//This is only for rain.
public WeatherSystem(entid) {
    if(entid == weather_ent) 
    {
        //Is weather_storm activated? ( 0 = OFF ) -- ( 1-100 = INTENSITY )
        g_stormintensity = get_cvar_num("weather_storm");
        
        //Do our soundstate and picks random player.
        new victim = GetSomeoneUnworthy(); 
        
        if(g_stormintensity) 
        {
            //Is the delay up?
            if(g_strikedelay < get_gametime()) 
            {
                //We got player to create lightning from?
                if(victim)
                {
                    //Do our Lightning Technique.
                    CreateLightningPoints(victim);
                }
            }
        }
        NEXTTHINK(weather_ent,2.0)
    }
    return PLUGIN_CONTINUE
}

GetSomeoneUnworthy() {
    new cnt, id, total[33];
    for(id=1;id<g_maxplayers;id++)
        if(is_user_alive(id))
            if(is_user_outside(id)) 
            {
                total[cnt++] = id;    
                
                if(!g_soundstate[id]) {
                    g_soundstate[id] = 1;
                    client_cmd(id, "speak ambience/rain.wav");
                }    
            }
            else if(g_soundstate[id]) 
            {
                g_soundstate[id] = 0;
                client_cmd(id, "speak NULL")
            }
    
    if(cnt)
        return total[random_num(0, (cnt-1))];
    return 0;
}

CreateLightningPoints(victim) 
{
    if(IS_VALID_ENT(g_lightpoints[0]))
        return 0;
        
    new ent, x, Float:tVel[3];
    new Float:vOrig[3];
    new Float:mins[3] = { -1.0, -1.0, -1.0 };
    new Float:maxs[3] = { 1.0, 1.0, 1.0 };
    new Float:dist = is_user_outside(victim)-5; //Get distance to set ents at.
    
    GET_ORIGIN(victim,vOrig)
    if(dist > 700.0) { //cap distance.
        dist = 700.0;
    }
    vOrig[2] += dist;

    //Create lightning bolts by spreading X entities randomly with velocity
    for(x=0;x<MAX_LIGHT_POINTS;x++) 
    {
        ent = CREATE_ENTITY("env_sprite")
        SET_INT(ent,movetype,MOVETYPE_FLY)
        SET_INT(ent,solid,SOLID_TRIGGER)
        SET_FLOAT(ent,renderamt,0.0)
        SET_INT(ent,rendermode,kRenderTransAlpha)
        SET_MODEL(ent,"models/chick.mdl")
        
        SET_VECTOR(ent,mins,mins)
        SET_VECTOR(ent,maxs,maxs)
        tVel[0] = random_float(-500.0,500.0);
        tVel[1] = random_float(-500.0,500.0);
        tVel[2] = random_float((dist<=700.0?0.0:-100.0),(dist<=700.0?0.0:50.0));
        
        SET_VECTOR(ent,origin,vOrig)
        SET_VECTOR(ent,velocity,tVel)
        g_lightpoints[x] = ent;
    }
    emit_sound(ent, CHAN_STREAM, "ambience/thunder_clap.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
    set_task(random_float(0.6,2.0),"Lightning",victim);
    return 1;
}

// Creating a beam at each entity consecutively.
// Player has 1 in 1000 chance of getting struck !
public Lightning(victim) 
{
    new x, a, b, rand;
    new endpoint = MAX_LIGHT_POINTS-1;
    while(x < endpoint) {
        a = g_lightpoints[x];
        b = g_lightpoints[x+1];
        x++
        if(x == endpoint) {
            rand = random_num(1,1000); //One unlucky son of a bish.
            if(rand == 1) {
                b = victim;
                FAKE_DAMAGE(victim,"Lightning",100.0,1);
            }
        }
        CreateBeam(a,b);
    }
    
    for(x=0;x<MAX_LIGHT_POINTS;x++)
        if(IS_VALID_ENT(g_lightpoints[x]))
            REMOVE_ENTITY(g_lightpoints[x])
    
    
    //Set up next lightning.
    if(g_stormintensity > 100) {
        set_cvar_num("weather_storm", 100);
        g_stormintensity = 100;    
    }
    new Float:mins = 50.0-float(g_stormintensity/2);
    new Float:maxs = 50.0-float(g_stormintensity/3);
    g_strikedelay = get_gametime() + random_float(mins, maxs);
}

public precache_sky(const skyname[])
{
    new bool:found = true
    static tgafile[35]
    
    for(new i = 0; i < max_suffix; ++i)
    {
        formatex(tgafile, 34, "gfx/env/%s%s.tga", skyname, g_suffix[i])
        if(file_exists(tgafile))
            precache_generic(tgafile)
        else
        {
            log_amx("Cannot locate file '%s'", tgafile)
            found = false
            break
        }
    }
    
    if(found)
        set_cvar_string("sv_skyname", skyname)
}

//return distance above us to sky
Float:is_user_outside(id) {
    new Float:origin[3], Float:dist;
    GET_ORIGIN(id, origin)
    
    dist = origin[2];
    
    while (POINTCONTENTS(origin) == -1)
        origin[2] += 5.0;

    if (POINTCONTENTS(origin) == -6) return (origin[2]-dist);
    return 0.0;
}

CreateBeam(entA, entB)
{
    message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
    write_byte( 8 );
    write_short( entA );
    write_short( entB );
    write_short( g_fxbeam );
    write_byte(0);      //start frame
    write_byte(10);     //framerate
    write_byte(5);         //life
    write_byte(8);      //width
    write_byte(100);     //noise
    write_byte(255);    //red
    write_byte(255);    //green
    write_byte(255);    //blue
    write_byte(255);    //brightness
    write_byte(10);        //scroll speed
    message_end();
}
juanjotoronja is offline
Kiske
Veteran Member
Join Date: May 2009
Old 04-11-2015 , 21:35   Re: Rainy/snowy effects
Reply With Quote #2

I think the best way is join both plugins (I don't know if 'join' is the appropiate word)

Anyway, you can do the trick with this:
PHP Code:
public precache_sky(const skyname[])
{
    new 
bool:found true
    
static tgafile[35]
    
    for(new 
0max_suffix; ++i)
    {
        
formatex(tgafile34"gfx/env/%s%s.tga"skynameg_suffix[i])
        if(
file_exists(tgafile))
            
precache_generic(tgafile)
        else
        {
            
log_amx("Cannot locate file '%s'"tgafile)
            
found false
            
break
        }
    }
    
    if(
found)
        
set_cvar_string("sv_skyname"skyname)

>
PHP Code:
public precache_sky(const skyname[])
{
    new 
bool:found true
    
static tgafile[35]
    
    for(new 
0max_suffix; ++i)
    {
        
formatex(tgafile34"gfx/env/%s%s.tga"skynameg_suffix[i])
        if(
file_exists(tgafile))
            
precache_generic(tgafile)
        else
        {
            
log_amx("Cannot locate file '%s'"tgafile)
            
found false
            
break
        }
    }
    
    if(
found)
        
set_task(5.0"task__Sky");
}

public 
task__Sky() {
    static 
sSkyName[32];
    
get_cvar_string("sv_customskyname"sSkyName31);
    
    
set_cvar_string("sv_skyname"sSkyName);

__________________

Kiske is offline
Send a message via Skype™ to Kiske
juanjotoronja
Member
Join Date: Mar 2014
Old 04-12-2015 , 11:28   Re: Rainy/snowy effects
Reply With Quote #3

Thanks for your help but it's not working, the task it's supposed to delay the texture sky to be shown?
juanjotoronja is offline
Kiske
Veteran Member
Join Date: May 2009
Old 04-12-2015 , 11:43   Re: Rainy/snowy effects
Reply With Quote #4

Quote:
sv_skyname : It sets the name of the sky that should be used for the current map (players need to reconnect if you change it through this cvar to see the new sky). Mappers can set a specific sky for their map and it auto-set this cvar. If nothing is set, the sky will be the default one : desert
Change
PHP Code:
set_task(5.0"task__Sky"); 
to
PHP Code:
set_task(0.25"task__Sky"); 
and try.
__________________

Kiske is offline
Send a message via Skype™ to Kiske
juanjotoronja
Member
Join Date: Mar 2014
Old 04-12-2015 , 15:03   Re: Rainy/snowy effects
Reply With Quote #5

Thanks! now works like a charm
juanjotoronja is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


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


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