PDA

View Full Version : [Plugin] Cadouri pe server (XMAS GIFTS)



~TraNda~
05-11-2015, 06:29 PM
Descriere: Cu acest plugin puteti plasa pe harta mai multe cadouri de craciun (ca pe serverul de cs.wargods.ro)
* Cadouri mici
o Mosul iti da 500$
o Mosul iti fura 500$
o Mosul iti da 16000$
o Mosul te lasa fara bani
o Mosul iti da un AWP
* Cadouri mari
o Mosul iti ofera 50 HP
o Mosul iti scade gravitatia
o Mosul iti mareste viteza
o Mosul iti scade viteza

Plugin: XMAS GIFTS
Versiune: 2.2
Autor: KronoS
Download link:



/*
======================================
========== XMAS GIFTS 2.2 ============
======================================

Autor: KronoS
Versiune: 2.2
Site: <b>You have to register to ba able to see this link</b>

Credite:
FakeNick - pentru pluginul Pick up present de unde a pornit tot
AlinHD - pentru pluginul de cadouri facut de el dar care nu l-a publicat
joropito - pentru Super Spawns
si alte persoane pentru informatii despre entitati

C-var-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 c-var-ului - 1!!!
Daca puneti 11 or sa apara doar 10 cadouri!

Changelog:
_______________________________
V 2.0
-super spawns
-cvar: presents_on_map
_______________________________
V 2.1
-bug reparat: cadourile apareau in aer
-variabila globala
-FUN -> Fakemeta
-Hamsandwich
-optimizare mesaje HUD
_______________________________
V 2.2
-bug reparat: cadourile dispareau de pe harta
-FM_Think indepartat
_______________________________
*/

#include <amxmodx>
#include <amxmisc>

/* Module necesare */
#include <fakemeta>
#include <hamsandwich>
#include <engine>

/* INC-uri */
#include <cellarray>
#include <xs>

/* Model la cadouri */
new const model_present[][] = { "models/present/w_present.mdl","models/present/w_present2.mdl" }

/* 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_VERSION "1.0"
#define SS_MIN_DISTANCE 500.0
#define SS_MAX_LOOPS 100000

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.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()

g_money = get_user_msgid("Money")
}

public plugin_precache()
{
new i
for(i = 0; i < sizeof model_present; i++)
engfunc(EngFunc_PrecacheModel,model_present[i])
}

public spawn_gifts()
{
func_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) + 50)
}
case 2:
{
fm_set_user_gravity(id, 0.4)
}
}
}
}

public func_spawn()
{
new Float:origin[3]
new i

for(i=0; i< get_pcvar_num(pcvar_presents_on_map); i++)
{
if(SsGetOrigin(origin))
{
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, origin)
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 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, 350.0)
}
if(g_bonus[iClient] == 4)
{
fm_set_user_maxspeed(iClient, 200.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((equali(class,"large_present") && (g_bonus[id] > 0)))
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)
set_task(get_pcvar_float(pcvar_respawn_time), "func_spawn", ent)

if(equali(class,"small_present"))
{
switch(random_num(0,4))
{
case 0:
{
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, "[XMAS Gift] Mosul ti-a oferit 500$")
}
case 1:
{
fm_set_user_money(id, 16000)
set_hudmessage(255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0)
show_hudmessage(id, "[XMAS Gift] Mosul ti-a oferit 16000$")
}
case 2:
{
fm_set_user_money(id, 0)
set_hudmessage(255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0)
show_hudmessage(id, "[XMAS Gift] Mosul ti-a furat toti banii")
}
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, "[XMAS Gift] Mosul ti-a furat 500$")
}
case 4:
{
fm_give_item(id, "weapon_awp")
set_hudmessage(255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0)
show_hudmessage(id, "[XMAS Gift] Mosul ti-a oferit un AWP")
}
}
}
if(equali(class,"large_present"))
{
switch(random_num(0,3))
{
case 0:
{
fm_set_user_health(id, get_user_health(id) + 50)
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, 350.0)
g_bonus[id] = 3
large_present_hud(id)
}
case 3:
{
fm_set_user_maxspeed(id, 200.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, "[XMAS Gift] Viata+")
}
case 2:
{
set_hudmessage(0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0)
show_hudmessage(id, "[XMAS Gift] Gravitatie-")
}
case 3:
{
set_hudmessage(0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0)
show_hudmessage(id, "[XMAS Gift] Viteza+")
}
case 4:
{
set_hudmessage(200, 0, 0, 0.02, 0.73, 0, 6.0, 12.0)
show_hudmessage(id, "[XMAS Gift] Viteza-")
}
}
set_task(12.0, "large_present_hud", id)
}
}
}

public client_disconnect(id)
{
g_bonus[id] = 0
}

/*====================================
========Inceput 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;
}

/*====================================
========Sfarsit Fakemeta Util=======*/

/*====================================
========Inceput Super Spawns========*/

public SsInit(Float:mindist)
{
new cmd[32]
format(cmd, 15, "_ss_dump%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'))
register_cvar("sv_superspawns", SS_VERSION, (FCVAR_SERVER|FCVAR_SPONLY))
register_concmd(cmd, "SsDump")

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 SsDump()
{
new Float:origin[3]
new count = ArraySize(g_vecSsOrigins)
server_print("-------------------------------------------------------")
for(new i = 0; i < count; i++)
{
ArrayGetArray(g_vecSsOrigins, i, origin)
server_print("Origin: %f %f %f", origin[0], origin[1], origin[2])
}
server_print("-------------------------------------------------------")
server_print("Number of origins: %i", count)
server_print("Time: %i", g_iSsTime)
server_print("-------------------------------------------------------")
}

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
}

/*====================================
========Sfarsit Super Spawns========*/



Instalare:
1.Fisierul xmas_gifts.amxx il puneti in addons/amxmodx/plugins.
[Optional]: Fisierul xmas_gifts.sma il puneti in addons/amxmodx/scripting.
2.Intrati în addons/amxmodx/configs/plugins.ini si adaugati la urma: xmas_gifts.amxx .
3.Folderul "present" il puneti in cstrike/models.

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)

Modules:
- Fakemeta
- Fun
- Engine

TABoo
01-12-2017, 01:56 PM
nu are SMA ??

--------------- Added after 17 minutes ---------------

Cineva,cumva ma poate ajuta cu acest plugin,va multumesc.

-=Christian=-
02-12-2017, 01:42 PM
nu are SMA ??

Cineva,cumva ma poate ajuta cu acest plugin,va multumesc.

Link ul de download la pluginul de mai sus nu mai este bun.
Ti-am cautat un plugin asemanator: Download (<b>You have to register to ba able to see this link</b>)
PS: Nici acest plugin nu are SMA.

Tiger
02-12-2017, 03:27 PM
Acesta este codul sursa de la plugin-ul din primul post. Ai grija cu acest plugin, nu sterge toate entitatiile si e posibil sa iti crash-uie server-ul.

/*

Plugin: Xmas Gifts 2.3.2
Autor: KronoS # GG
Site: <b>You have to register to ba able to see this link</b>*********.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 >

/* 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/present/w_present.mdl","models/present/w_present2.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 ) + 50 );
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, 350.0 );
else if ( g_bonus[ iClient ] == 4 )
fm_set_user_maxspeed( iClient, 200.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:
{
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, "[XMAS Gift] Mosul ti-a oferit 500$" );
}
case 1:
{
fm_set_user_money( id, 16000 );
set_hudmessage( 255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0 );
show_hudmessage( id, "[XMAS Gift] Mosul ti-a oferit 16000$" );
}
case 2:
{
fm_set_user_money( id, 0 );
set_hudmessage( 255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0 );
show_hudmessage( id, "[XMAS Gift] Mosul ti-a furat toti banii" );
}
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, "[XMAS Gift] Mosul ti-a furat 500$" );
}
case 4:
{
fm_give_item( id, "weapon_awp" );
set_hudmessage( 255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0 );
show_hudmessage( id, "[XMAS Gift] Mosul ti-a oferit un AWP" );
}
}
}
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 ) + 50);
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, 350.0 );
g_bonus[ id ] = 3;
large_present_hud( id );
}
case 3:
{
fm_set_user_maxspeed( id, 200.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, "[XMAS Gift] Viata+" );
}
case 2:
{
set_hudmessage( 0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0 );
show_hudmessage( id, "[XMAS Gift] Gravitatie-" );
}
case 3:
{
set_hudmessage( 0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0 );
show_hudmessage( id, "[XMAS Gift] Viteza+" );
}
case 4:
{
set_hudmessage( 200, 0, 0, 0.02, 0.73, 0, 6.0, 12.0 );
show_hudmessage( id, "[XMAS Gift] Viteza-" );
}
}

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;
}

Iulica7821
02-04-2021, 05:04 PM
Salut, dar modele unde sunt?