Gravitatea, speed-ul(atat cea marita cat si cea scazuta) si daca puteti sa faceti cumva sa apara in chat un mesaj cand se spawneaza cadourile, gen ***Cadourile au aparut pe harta, cauta-le***
Si sa apara mesajul in chat cu ceea ce primeste din gift , ex mesaj: [CSGO]Ai gasit 25 HP
- plugin | Afiseaza codul
/* Plugin: Xmas Gifts 2.3.2 Autor: KronoS # GG Site: www.eXtreamCS.com Credite: @FakeNick - pentru pluginul Pick up present de unde a pornit tot @joropito - pentru Super Spawns @Askhanar - pentru fixarea Super Spawns Cvar-uri: - presents_respawn_time 60.0 (Dupa cat timp dupa ridicarea unui cadou apare altul pe harta) - presents_on_map 11 (Cate cadouri sa apara pe harta) ATENTIE: Se calculeaza numarul cvar-ului - 1!!! Daca puneti 11 or sa apara doar 10 cadouri! Changelog: * v2.3.2 - 28.12.2012 - cadourile primeau respawn chiar daca timpul era setat pe 0.0 * v2.3.1 - 28.12.2012 - cadourile nu primeau respawn * v2.3 - 28.12.2012 - cod infrumusetat - cadourile nu mai apareau dupa prima runda (fixat de Askhanar) * v2.2 - 25.11.2010 - bug reparat: cadourile dispareau de pe harta - FM_Think indeparta * v2.1 - 17.11.2010 - super spawns - cvar: presents_on_map - bug reparat: cadourile apareau in aer - variabila globala - FUN -> Fakemeta - Hamsandwich - optimizare mesaje HUD * v1.0 - 14.11.2010 - plugin publicat */ #include < amxmodx > #include < amxmisc > #include < fakemeta > #include < hamsandwich > #include < engine > #include < cellarray > #include < xs > native set_user_puncte(id, amount); native get_user_puncte(id); native set_user_key(id, amount); native get_user_key(id); /* Extras din Fakemeta Util */ #define fm_find_ent_by_class( %1, %2 ) engfunc( EngFunc_FindEntityByString, %1, "classname", %2 ) #define fm_create_entity(%1) engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, %1 ) ) /* Extras din Super Spawns */ #define SS_MIN_DISTANCE 500.0 #define SS_MAX_LOOPS 100000 #pragma semicolon 1; /* Modele cadouri */ new const model_present[ ][ ] = { "models/gift1.mdl" }; new Array:g_vecSsOrigins; new Array:g_vecSsSpawns; new Array:g_vecSsUsed; new Float:g_flSsMinDist; new g_iSsTime; new const g_szStarts[ ][ ] = { "info_player_start", "info_player_deathmatch" }; new const Float:g_flOffsets[ ] = { 3500.0, 3500.0, 1500.0 }; /* Offset-uri */ #if cellbits == 32 const OFFSET_CSMONEY = 115; #else const OFFSET_CSMONEY = 140; #endif const OFFSET_LINUX = 5; new pcvar_respawn_time, pcvar_presents_on_map; new g_money; new g_bonus[ 33 ]; public plugin_init( ) { register_plugin( "XMAS GIFTS", "2.3.2", "KronoS" ); // Eventuri register_event( "HLTV", "spawn_gifts", "a", "1=0", "2=0" ); RegisterHam( Ham_Spawn, "player", "round_start", 1 ); RegisterHam( Ham_Killed, "player", "client_death", 1 ); RegisterHam( Ham_Item_PreFrame, "player", "FwdPreFramePost", 1 ); register_forward( FM_Touch, "forward_touch" ); // Cvar-uri pcvar_respawn_time = register_cvar( "presents_respawn_time", "60.0" ); pcvar_presents_on_map = register_cvar( "presents_on_map", "11" ); SsInit( 800.0 ); SsScan( ); XGIFTS_Spawn( ); g_money = get_user_msgid( "Money" ); } public plugin_precache( ) { for ( new i = 0; i < sizeof model_present ; i++ ) engfunc( EngFunc_PrecacheModel, model_present[ i ] ); } public spawn_gifts( ) XGIFTS_Spawn( ); public round_start( id ) { if ( g_bonus[id] > 0 ) { switch ( g_bonus[ id ] ) { case 1: fm_set_user_health( id, get_user_health( id ) + 25 ); case 2: fm_set_user_gravity( id, 0.4 ); } } } public XGIFTS_Spawn( ) { new Float:fOrigin[ 3 ]; for ( new i = 0; i < get_pcvar_num( pcvar_presents_on_map ) ; i++ ) { if ( SsGetOrigin( fOrigin ) ) XGIFTS_Create( fOrigin ); } } public XGIFTS_Create( const Float:fOrigin[ 3 ] ) { new ent = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) ); if ( pev_valid( ent ) ) { engfunc( EngFunc_SetModel, ent, model_present[ random_num( 0, sizeof model_present - 1 ) ] ); engfunc( EngFunc_SetOrigin, ent, fOrigin ); static Float:fMaxs[ 3 ] = { 2.0, 2.0, 4.0 }; static Float:fMins[ 3 ] = { -2.0, -2.0, -4.0 }; set_pev( ent, pev_solid, SOLID_BBOX ); engfunc( EngFunc_SetSize, ent, fMins, fMaxs ); engfunc( EngFunc_DropToFloor, ent ); switch ( random_num( 0, 1 ) ) { case 0: set_pev( ent, pev_classname, "small_present" ); case 1: set_pev( ent, pev_classname, "large_present" ); } } } public XGIFTS_Respawn( iOrigin[ ] ) { new Float:fOrigin[ 3 ], auxOrigin[ 3 ]; auxOrigin[ 0 ] = iOrigin[ 0 ]; auxOrigin[ 1 ] = iOrigin[ 1 ]; auxOrigin[ 2 ] = iOrigin[ 2 ]; IVecFVec( auxOrigin, fOrigin ); XGIFTS_Create( fOrigin ); } public client_death( id ) { if ( g_bonus[ id ] > 0 ) g_bonus[ id ] = 0; } public FwdPreFramePost( iClient ) { if ( is_user_connected( iClient ) ) { if ( g_bonus[ iClient ] == 3 ) fm_set_user_maxspeed( iClient, 330.0 ); else if ( g_bonus[ iClient ] == 4 ) fm_set_user_maxspeed( iClient, 220.0 ); } } public forward_touch( ent, id ) { if ( !pev_valid( ent ) ) return FMRES_IGNORED; static class[ 20 ]; pev( ent, pev_classname, class, sizeof class - 1 ); if ( ( !equali( class, "small_present" ) && !equali( class, "large_present" ) ) ) return FMRES_IGNORED; if ( !is_user_alive( id ) ) return FMRES_IGNORED; set_pev( ent, pev_solid, SOLID_NOT ); set_pev( ent, pev_effects, EF_NODRAW ); if ( get_pcvar_float( pcvar_respawn_time ) > 0.0 ) { new Float:flOrigin[ 3 ], iOrigin[ 3 ]; entity_get_vector( ent, EV_VEC_origin, flOrigin ); FVecIVec( flOrigin, iOrigin ); set_task( get_pcvar_float( pcvar_respawn_time ), "XGIFTS_Respawn", _, iOrigin, 3 ); } if ( equali( class, "small_present" ) ) { switch ( random_num( 0, 4 ) ) { case 0: { set_user_puncte( id, get_user_puncte( id ) + 150 ); set_hudmessage( 255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0 ); show_hudmessage( id, "Ai fost un baiat bun si Mosul ti-a oferit: 150 BitCoins" ); } case 1: { fm_set_user_money( id, fm_get_user_money( id ) + 500 ); set_hudmessage( 255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0 ); show_hudmessage( id, "Ho Ho HO! Esti pe lista alba a Mosului!!! Ai primit 500$" ); } case 2: { set_user_key( id, get_user_key( id ) + 1 ); set_hudmessage( 255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0 ); show_hudmessage( id, "Ai fost baiat bun si Mosul ti-a daruit o keye!" ); } case 3: { fm_set_user_money( id, fm_get_user_money( id ) - 500 ); set_hudmessage( 255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0 ); show_hudmessage( id, "Ho Ho Ho! Mosul a fost iertator si ti-a luat 500$" ); } case 4: { fm_give_item( id, "weapon_smokegrenade" ); set_hudmessage( 255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0 ); show_hudmessage( id, "Ho Ho Ho! Mosul a fost bun cu tine si ti-a oferit un Molotov." ); } } } else if ( equali( class,"large_present" ) && !g_bonus[ id ] ) { switch (random_num(0,3)) { case 0: { fm_set_user_health( id, get_user_health( id ) + 25); g_bonus[ id ] = 1; large_present_hud( id ); } case 1: { fm_set_user_gravity( id, 0.4 ); g_bonus[ id ] = 2; large_present_hud( id ); } case 2: { fm_set_user_maxspeed( id, 330.0 ); g_bonus[ id ] = 3; large_present_hud( id ); } case 3: { fm_set_user_maxspeed( id, 220.0 ); g_bonus[ id ] = 4; large_present_hud( id ); } } } return FMRES_IGNORED; } public large_present_hud( id ) { if ( is_user_alive( id ) ) { if ( g_bonus[ id ] > 0 ) { switch( g_bonus[ id ] ) { case 1: { set_hudmessage( 0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0); show_hudmessage( id, "[Cadou] Viata in +" ); } case 2: { set_hudmessage( 0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0 ); show_hudmessage( id, "[Cadou] Gravitate scazuta" ); } case 3: { set_hudmessage( 0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0 ); show_hudmessage( id, "[Cadou] Viteza marita" ); } case 4: { set_hudmessage( 200, 0, 0, 0.02, 0.73, 0, 6.0, 12.0 ); show_hudmessage( id, "[Cadou] Viteza scazuta" ); } } set_task( 12.0, "large_present_hud", id ); } } } public client_disconnect( id ) g_bonus[ id ] = 0; // Fakemeta Util stock fm_set_user_money( id, money, flash = 1 ) { set_pdata_int( id, OFFSET_CSMONEY, money, OFFSET_LINUX ); message_begin( MSG_ONE, g_money, { 0, 0, 0 }, id ); write_long( money ); write_byte( flash ); message_end( ); } stock fm_get_user_money( id ) return get_pdata_int( id, OFFSET_CSMONEY, OFFSET_LINUX ); stock fm_set_user_health( id, health ) { ( health > 0 ) ? set_pev( id, pev_health, float( health ) ) : dllfunc( DLLFunc_ClientKill, id ); return 1; } stock fm_give_item( index, const item[ ] ) { if ( !equal( item, "weapon_", 7 ) && !equal( item, "ammo_", 5 ) && !equal( item, "item_", 5 ) && !equal( item, "tf_weapon_", 10 ) ) return 0; new ent = fm_create_entity( item) ; if ( !pev_valid( ent ) ) return 0; new Float:origin[ 3 ]; pev( index, pev_origin, origin ); set_pev( ent, pev_origin, origin ); set_pev( ent, pev_spawnflags, pev( ent, pev_spawnflags ) | SF_NORESPAWN ); dllfunc( DLLFunc_Spawn, ent ); new save = pev( ent, pev_solid ); dllfunc( DLLFunc_Touch, ent, index ); if ( pev( ent, pev_solid ) != save ) return ent; engfunc( EngFunc_RemoveEntity, ent ); return -1; } stock fm_set_user_gravity( index, Float:gravity = 1.0 ) { set_pev( index, pev_gravity, gravity ); return 1; } stock fm_set_user_maxspeed( index, Float:speed = -1.0 ) { engfunc( EngFunc_SetClientMaxspeed, index, speed ); set_pev( index, pev_maxspeed, speed ); return 1; } // Super spawns public SsInit( Float:mindist ) { g_flSsMinDist = mindist; g_vecSsOrigins = ArrayCreate( 3, 1 ); g_vecSsSpawns = ArrayCreate( 3, 1 ); g_vecSsUsed = ArrayCreate( 3, 1 ); } stock SsClean( ) { g_flSsMinDist = 0.0; ArrayClear( g_vecSsOrigins ); ArrayClear( g_vecSsSpawns ); ArrayClear( g_vecSsUsed ); } stock SsGetOrigin( Float:origin[ 3 ] ) { new Float:data[3], size; new ok = 1; while ( ( size = ArraySize( g_vecSsOrigins ) ) ) { new idx = random_num( 0, size - 1 ); ArrayGetArray( g_vecSsOrigins, idx, origin ); new used = ArraySize( g_vecSsUsed ); for ( new i = 0; i < used ; i++ ) { ok = 0; ArrayGetArray( g_vecSsUsed, i, data ); if ( get_distance_f( data, origin ) >= g_flSsMinDist ) { ok = 1; break; } } ArrayDeleteItem( g_vecSsOrigins, idx ); if ( ok ) { ArrayPushArray( g_vecSsUsed, origin ); return true; } } return false; } public SsScan( ) { new start, Float:origin[ 3 ], starttime; starttime = get_systime( ); for ( start = 0 ; start < sizeof( g_szStarts ) ; start++ ) { server_print( "Searching for %s", g_szStarts[ start ] ); new ent; if ( ( ent = engfunc( EngFunc_FindEntityByString, ent, "classname", g_szStarts[ start ] ) ) ) { new counter; pev( ent, pev_origin, origin ); ArrayPushArray( g_vecSsSpawns, origin ); while ( counter < SS_MAX_LOOPS ) counter = GetLocation( origin, counter ); } } g_iSsTime = get_systime( ); g_iSsTime -= starttime; } GetLocation( Float:start[ 3 ], &counter ) { new Float:end[ 3 ]; for ( new i = 0 ; i < 3 ; i++ ) end[ i ] += random_float( 0.0 - g_flOffsets[ i ], g_flOffsets[ i ] ); if ( IsValid( start, end ) ) { start[ 0 ] = end[ 0 ]; start[ 1 ] = end[ 1 ]; start[ 2 ] = end[ 2 ]; ArrayPushArray( g_vecSsOrigins, end ); } counter++; return counter; } IsValid( Float:start[ 3 ], Float:end[ 3 ] ) { SetFloor( end ); end[ 2 ] += 36.0; new point = engfunc( EngFunc_PointContents, end ); if ( point == CONTENTS_EMPTY ) { if ( CheckPoints( end ) && CheckDistance( end ) && CheckVisibility( start, end ) ) { if ( !trace_hull( end, HULL_LARGE, -1 ) ) return true; } } return false; } CheckVisibility( Float:start[ 3 ], Float:end[ 3 ] ) { new tr; engfunc( EngFunc_TraceLine, start, end, IGNORE_GLASS, -1, tr ); return ( get_tr2( tr, TR_pHit ) < 0 ); } SetFloor( Float:start[ 3 ] ) { new tr, Float:end[ 3 ]; end[ 0 ] = start[ 0 ]; end[ 1 ] = start[ 1 ]; end[ 2 ] = -99999.9; engfunc( EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, -1, tr ); get_tr2( tr, TR_vecEndPos, start ); } CheckPoints( Float:origin[ 3 ] ) { new Float:data[ 3 ], tr, point; data[ 0 ] = origin[ 0 ]; data[ 1 ] = origin[ 1 ]; data[ 2 ] = 99999.9; engfunc( EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr ); get_tr2( tr, TR_vecEndPos, data ); point = engfunc( EngFunc_PointContents, data ); if ( point == CONTENTS_SKY && get_distance_f( origin, data ) < 250.0 ) return false; data[ 2 ] = -99999.9; engfunc( EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr ); get_tr2( tr, TR_vecEndPos, data ); point = engfunc( EngFunc_PointContents, data ); if ( point < CONTENTS_SOLID ) return false; return true; } CheckDistance( Float:origin[ 3 ] ) { new Float:dist, Float:data[ 3 ]; new count = ArraySize( g_vecSsSpawns ); for ( new i = 0; i < count ; i++ ) { ArrayGetArray( g_vecSsSpawns, i, data ); dist = get_distance_f( origin, data ); if ( dist < SS_MIN_DISTANCE ) return false; } count = ArraySize( g_vecSsOrigins ); for ( new i = 0 ; i < count ; i++ ) { ArrayGetArray( g_vecSsOrigins, i, data ); dist = get_distance_f( origin, data ); if ( dist < SS_MIN_DISTANCE ) return false; } return true; }