Member
|
09-09-2018
, 13:24
Re: "Force" rain or snow?
|
#6
|
I tried and it's only play sound, but there is no rain.
PHP Code:
#include <amxmodx> #include <amxmisc> #include <hamsandwich> #include <engine> #include <fakemeta>
#define PLUGIN "[SC] Weather System" #define VERSION "1.0" #define AUTHOR "."
#define MAX_LIGHT_POINTS 3 #define SET_FLOAT(%1,%2,%3) set_pev(%1,pev_%2,%3) #define NEXTTHINK(%1,%2) SET_FLOAT(%1,nextthink,get_gametime()+%2) #define IS_VALID_ENT(%1) is_valid_ent(%1) #define GET_ORIGIN(%1,%2) GET_VECTOR(%1,origin,%2) #define GET_VECTOR(%1,%2,%3) entity_get_vector(%1,EV_VEC_%2,%3) #define SET_INT(%1,%2,%3) set_pev(%1,pev_%2,%3) #define SET_MODEL(%1,%2) entity_set_model(%1,%2) #define SET_VECTOR(%1,%2,%3) set_pev(%1,pev_%2,%3) #define POINTCONTENTS(%1) point_contents(%1) #define DISPATCH_KEYVALUE(%1,%2,%3) DispatchKeyValue(%1,%2,%3) #define MDLL_SPAWN(%1) dllfunc(DLLFunc_Spawn,%1) #define SET_STRING(%1,%2,%3) set_pev(%1,pev_%2,%3) #define FAKE_TOUCH(%1,%2) dllfunc(DLLFunc_Touch,%1,%2)
new HamHook:g_Think new weather_ent new g_fxbeam new g_stormintensity new Float:g_strikedelay new g_maxplayers new g_soundstate[33] new g_lightpoints[MAX_LIGHT_POINTS]
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /rain", "cmd_rain") register_clcmd("say /srain", "cmd_srain") g_maxplayers = get_maxplayers() }
public plugin_precache() { g_fxbeam = precache_model("sprites/laserbeam.spr"); precache_model("models/chick.mdl"); precache_sound("ambience/rain.wav"); }
public cmd_srain() { DisableHamForward(g_Think) remove_entity(weather_ent) }
public cmd_rain() { weather_ent = create_entity("env_rain") g_Think = RegisterHam(Ham_Think, "env_rain", "think_rain") NEXTTHINK(weather_ent,1.0) EnableHamForward(g_Think) }
public think_rain(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); }
//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; }
stock FAKE_DAMAGE(idvictim,szClassname[],Float:takedmgdamage,damagetype) { new entity = create_entity("trigger_hurt") if (entity) { new szDamage[16] format(szDamage,15,"%f",takedmgdamage * 2) DISPATCH_KEYVALUE(entity,"dmg",szDamage) format(szDamage,15,"%i",damagetype) DISPATCH_KEYVALUE(entity,"damagetype",szDamage) MDLL_SPAWN(entity) SET_STRING(entity,classname,szClassname) FAKE_TOUCH(entity,idvictim) remove_entity(entity) return 1 } return 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(); }
@OciXCrom
Quote:
Originally Posted by GasmoN
Thanks but I won't us it anyway becouse I can't unregister think with 1.8.2 version of amx mod x.
|
I see that you didn't undrestood what that message means. That message means that I DON'T WANT to update to 1.9 (reason is not important at all) so now when you know what that means, I will kindly ask you to post here only if you know how to help me, otherwise you are not helping me at all, thanks.
Last edited by GasmoN; 09-09-2018 at 13:34.
|
|