Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 28.93 KB | None | 0 0
  1. /*==================================================================================================
  2. LIBRARIES.
  3. ==================================================================================================*/
  4.  
  5. #include <amxmodx>
  6. #include <engine>
  7. #include <hamsandwich>
  8. #include <xs>
  9.  
  10. #include <ipci/Ascend>
  11. #include <ipci/Core>
  12. #include <ipci/FXLib>
  13.  
  14. #include <xtension/Special>
  15.  
  16.  
  17. #include <amxmisc>
  18. #include <fun>
  19. #include <fakemeta>
  20.  
  21. #include <ipci/ascend>
  22. #include <ipci/dragonball>
  23. #include <xs>
  24.  
  25.  
  26.  
  27.  
  28. /*==================================================================================================
  29. ADDITIONAL MATERIAL.
  30. ==================================================================================================*/
  31.  
  32. #define SPECIAL_VALREQSTATE 1
  33. #define SPECIAL_NULREQSTATE 0
  34.  
  35. stock SpecialXtension:__sx_Mafuba;
  36.  
  37. // Sequence
  38. static __int_Sequence[2], __int_Capsule;
  39.  
  40. // Effects
  41. static __int_Gibs[3], __int_Trail, __int_Lightning;
  42.  
  43. // Conditions
  44.  
  45. /*==================================================================================================
  46. START OF THE SPECIAL.
  47. ==================================================================================================*/
  48.  
  49. public plugin_init()
  50. {
  51.     register_forward(FM_AddToFullPack, "@FM_AddToFullPack", ._post = true);
  52.    
  53.     RegisterHam(Ham_Use, "func_button", "@Ham_Use");
  54.     RegisterHam(Ham_TakeDamage, "info_target", "@Ham_TakeDamage");
  55.    
  56.     register_clcmd("say c", "@CreateMafubaBeamEntity");
  57.    
  58.     register_think("capsule_jar", "@Think_Jar");
  59.    
  60.     register_touch("worldspawn", "capsule_jar", "@Touch_Jar");
  61.    
  62.     register_forward( FM_Touch, "@EntityTouch" );  
  63.    
  64.     register_message(get_user_msgid("Explosion"), "ExplosionDetected");
  65.    
  66.     register_clcmd("say weg", "removeEntity");
  67. }
  68.  
  69. public plugin_precache()
  70. {
  71.     precache_model("models/capsule.mdl");
  72.     precache_model("models/ricecooker.mdl");
  73.    
  74.     precache_model("sprites/mafuba.spr");
  75.    
  76.     __int_Trail = precache_model("sprites/auratrail.spr");
  77.    
  78.     __int_Lightning = precache_model("sprites/lgtning.spr");
  79.    
  80.     __int_Gibs[0] = precache_model("models/teil1.mdl");
  81.     __int_Gibs[1] = precache_model("models/teil2.mdl");
  82.     __int_Gibs[2] = precache_model("models/teil3.mdl");
  83.    
  84.     precache_sound("weapons/mafuba/capsule_click.wav");
  85.     precache_sound("weapons/mafuba/capsule_bounce.wav");
  86.     precache_sound("weapons/mafuba/capsule_decompression.wav");
  87.    
  88.     precache_sound("weapons/mafuba/jar_use.wav");
  89.     precache_sound("weapons/mafuba/jar_break.wav");
  90.    
  91.     precache_sound("weapons/powerup.wav");
  92.     precache_sound("weapons/mafuba/player_scream.wav");
  93.    
  94.     precache_model( "sprites/mafubatrail2.spr" );
  95.     precache_model( "sprites/sv_ff_t.spr" );
  96.    
  97.     precache_sound("common/wpn_select.wav");
  98. }
  99.  
  100. public @EntityTouch(ptr,ptd)   //toucher+touched
  101. {
  102.     new classname[32]
  103.    
  104.     pev(ptr,pev_classname,classname,31)
  105.    
  106.    
  107.     if ( equal(classname, "mafuba") )
  108.     {
  109.         //client_print(0,print_chat,"damn touched");
  110.         // and other stuff
  111.        
  112.         phase2(ptd)
  113.        
  114.        
  115.     }  
  116.  
  117.     return FMRES_HANDLED
  118. }
  119.  
  120. phase2(ball)
  121. {
  122.    
  123.     new Float:orig[3]
  124.     pev(ball, pev_origin, orig)
  125.    
  126.    
  127.     //client_print(ball,print_chat,"jo");
  128.     set_task(2.0, "removeEntity", ball);
  129. }
  130.  
  131. public removeEntity(ptr,ptd)
  132. {
  133.     new classname[32]
  134.    
  135.     pev(ptd,pev_classname,classname,31)
  136.    
  137.    
  138.     if ( equal(classname, "mafuba") && is_valid_ent(ptd) )
  139.     {
  140.         remove_entity(ptd);
  141.     }
  142. }
  143.  
  144.  
  145.  
  146.  
  147. public @CreateMafubaBeamEntityphase2(__int_Entity, const __int_Owner, const Float:__float_Scale, const __int_Velocity)
  148. {
  149.     __int_Entity = create_entity("env_sprite");
  150.    
  151.     entity_set_model(__int_Entity, "sprites/mafuba.spr");
  152.    
  153.     entity_set_int(__int_Entity, EV_INT_spawnflags, SF_SPRITE_STARTON);
  154.    
  155.     DispatchSpawn(__int_Entity);
  156.    
  157.     entity_set_int(__int_Entity, EV_INT_renderfx, kRenderFxGlowShell);
  158.     entity_set_int(__int_Entity, EV_INT_rendermode, kRenderTransAdd);
  159.  
  160.     entity_set_float(__int_Entity, EV_FL_animtime, get_gametime());
  161.     entity_set_float(__int_Entity, EV_FL_framerate, float(10));
  162.    
  163.     entity_set_string(__int_Entity, EV_SZ_classname, "mafubaphase2");
  164.    
  165.     entity_set_float(__int_Entity, EV_FL_renderamt, float(254));
  166.    
  167.     entity_set_float(__int_Entity, EV_FL_scale, __float_Scale);
  168.    
  169.     entity_set_int(__int_Entity, EV_INT_movetype, MOVETYPE_FLY);
  170.    
  171.     entity_set_size(__int_Entity, Float:{-8.000_000, -8.000_000, -8.000_000}, Float:{8.000_000, 8.000_000, 8.000_000});
  172.    
  173.     entity_set_int(__int_Entity, EV_INT_solid, SOLID_TRIGGER);
  174.    
  175.     //entity_set_edict(__int_Entity, EV_ENT_owner, __int_Owner);
  176.     set_pev(__int_Entity,pev_owner, __int_Owner)
  177.     entity_set_edict(__int_Entity, EV_ENT_pContainingEntity, __int_Entity);
  178.    
  179.     static Float:__float_Origin[3];
  180.     entity_get_vector(__int_Owner, EV_VEC_origin, __float_Origin);
  181.    
  182.     entity_set_origin(__int_Entity, __float_Origin);
  183.    
  184.     static Float:__float_Velocity[3];
  185.     velocity_by_aim(__int_Owner, __int_Velocity, __float_Velocity);
  186.    
  187.     entity_set_vector(__int_Entity, EV_VEC_velocity, __float_Velocity);
  188.    
  189.    
  190.     message_begin( MSG_BROADCAST,SVC_TEMPENTITY )
  191.     write_byte( TE_BEAMFOLLOW )
  192.     write_short( __int_Entity )
  193.     write_short( engfunc( EngFunc_ModelIndex,"sprites/sv_ff_t.spr" ) )
  194.     write_byte( 30 )// 持续时间[] life in 0.1's
  195.     write_byte( 10 )// 宽度[] line width in 0.1's
  196.     write_byte( 255 )// Red
  197.     write_byte( 255 )// Green
  198.     write_byte( 255 )// Blue
  199.     write_byte( 255 )// Brightness
  200.     message_end( )
  201. }
  202.  
  203.  
  204. public @CreateMafubaBeamEntity(__int_Entity, const __int_Owner, const Float:__float_Scale, const __int_Velocity)
  205. {
  206.     __int_Entity = create_entity("env_sprite");
  207.    
  208.     entity_set_model(__int_Entity, "sprites/mafuba.spr");
  209.    
  210.     entity_set_int(__int_Entity, EV_INT_spawnflags, SF_SPRITE_STARTON);
  211.    
  212.     DispatchSpawn(__int_Entity);
  213.    
  214.     entity_set_int(__int_Entity, EV_INT_renderfx, kRenderFxGlowShell);
  215.     entity_set_int(__int_Entity, EV_INT_rendermode, kRenderTransAdd);
  216.  
  217.     entity_set_float(__int_Entity, EV_FL_animtime, get_gametime());
  218.     entity_set_float(__int_Entity, EV_FL_framerate, float(10));
  219.    
  220.     entity_set_string(__int_Entity, EV_SZ_classname, "mafuba");
  221.    
  222.     entity_set_float(__int_Entity, EV_FL_renderamt, float(254));
  223.    
  224.     entity_set_float(__int_Entity, EV_FL_scale, __float_Scale);
  225.    
  226.     entity_set_int(__int_Entity, EV_INT_movetype, MOVETYPE_FLY);
  227.    
  228.     entity_set_size(__int_Entity, Float:{-8.000_000, -8.000_000, -8.000_000}, Float:{8.000_000, 8.000_000, 8.000_000});
  229.    
  230.     entity_set_int(__int_Entity, EV_INT_solid, SOLID_TRIGGER);
  231.    
  232.     //entity_set_edict(__int_Entity, EV_ENT_owner, __int_Owner);
  233.     set_pev(__int_Entity,pev_owner, __int_Owner)
  234.     entity_set_edict(__int_Entity, EV_ENT_pContainingEntity, __int_Entity);
  235.    
  236.     static Float:__float_Origin[3];
  237.     entity_get_vector(__int_Owner, EV_VEC_origin, __float_Origin);
  238.    
  239.     entity_set_origin(__int_Entity, __float_Origin);
  240.    
  241.     static Float:__float_Velocity[3];
  242.     velocity_by_aim(__int_Owner, __int_Velocity, __float_Velocity);
  243.    
  244.     entity_set_vector(__int_Entity, EV_VEC_velocity, __float_Velocity);
  245.     set_task(0.1, "follow_enemy", __int_Entity,_,_,"b")
  246.    
  247.    
  248.     message_begin( MSG_BROADCAST,SVC_TEMPENTITY )
  249.     write_byte( TE_BEAMFOLLOW )
  250.     write_short( __int_Entity )
  251.     write_short( engfunc( EngFunc_ModelIndex,"sprites/mafubatrail2.spr" ) )
  252.     write_byte( 10 )// 持续时间[] life in 0.1's
  253.     write_byte( 30 )// 宽度[] line width in 0.1's
  254.     write_byte( 255 )// Red
  255.     write_byte( 255 )// Green
  256.     write_byte( 255 )// Blue
  257.     write_byte( 255 )// Brightness
  258.     message_end( )
  259. }
  260.  
  261. public follow_enemy(ball)
  262. {
  263.     static tid, id, closest[2]
  264.     closest[0] = 0
  265.     closest[1]= 6000
  266.     id = pev(ball, pev_owner)
  267.     tid = pev(ball, pev_iuser1)
  268.    
  269.     if(tid == 0)
  270.     {
  271.         new user_team = get_user_team(id)
  272.         new pl[32], num, Float:flAngles[3], Float:flForward[3],
  273.         Float:vector[3], Float:fired_particle_start_origin[3], Float:flVecSrc2[3],
  274.         Float:maxdist, Float:flVecDest[3]
  275.         get_players(pl,num,"a")
  276.        
  277.         pev(id, pev_v_angle, flAngles)
  278.         angle_vector(flAngles, ANGLEVECTOR_FORWARD, flForward)
  279.        
  280.         pev(id, pev_origin, fired_particle_start_origin)
  281.         pev(id, pev_view_ofs, vector)
  282.    
  283.         // get the fired particle start origin
  284.         xs_vec_add(fired_particle_start_origin, vector, fired_particle_start_origin)
  285.        
  286.         for(new i = 0; i<num;i++)
  287.         {
  288.             tid = pl[i]
  289.             if(tid == id && get_user_team(tid) == user_team) continue
  290.            
  291.             pev(tid, pev_origin, flVecSrc2)
  292.            
  293.             maxdist = get_distance_f(fired_particle_start_origin, flVecSrc2)
  294.            
  295.             flVecDest[0] = fired_particle_start_origin[0] + (flForward[0] * maxdist);
  296.             flVecDest[1] = fired_particle_start_origin[1] + (flForward[1] * maxdist);
  297.             flVecDest[2] = fired_particle_start_origin[2] + (flForward[2] * maxdist);
  298.            
  299.             if(get_distance_f(flVecDest, flVecSrc2) < closest[1]*1.0)
  300.             {
  301.                 closest[0] = tid
  302.             } else closest[1] = floatround(get_distance_f(flVecDest, flVecSrc2))
  303.         }
  304.     } else if(!is_user_alive(tid))
  305.     {
  306.         new Float:orig[3], Float:Torig[3]
  307.        
  308.         pev(ball, pev_origin, orig)
  309.        
  310.         new pl[32], num
  311.        
  312.         get_players(pl,num,"a")
  313.         for(new i;i<num;i++)
  314.         {
  315.             tid = pl[i]
  316.            
  317.             pev(tid, pev_origin, Torig)
  318.            
  319.             if(get_distance_f(orig, Torig) < closest[1]*1.0)
  320.                 closest[0] = tid
  321.             else
  322.                 closest[1] = floatround(get_distance_f(orig, Torig))
  323.         }
  324.     }
  325.     if(closest[0] != 0) tid = closest[0]
  326.    
  327.     if(!is_user_alive(tid))
  328.     {
  329.         remove_task(ball)
  330.         engfunc(EngFunc_RemoveEntity, ball)
  331.         return
  332.     }
  333.     new Float:origin[3], Float:AimVec[3], Float:speed = 800.0
  334.    
  335.     pev(tid, pev_origin, AimVec)
  336.  
  337.     entity_get_vector(ball, EV_VEC_origin, origin)
  338.  
  339.     new Float:iNewVelocity[3]
  340.  
  341.     new Float:velocityVec[3], Float:length
  342.  
  343.     velocityVec[0] = AimVec[0]-origin[0]
  344.     velocityVec[1] = AimVec[1]-origin[1]
  345.     velocityVec[2] = AimVec[2]-origin[2]
  346.  
  347.     length = floatsqroot(velocityVec[0]*velocityVec[0] + velocityVec[1]*velocityVec[1] + velocityVec[2]*velocityVec[2])
  348.     // Stupid Check but lets make sure you don't devide by 0
  349.     if ( length < 1.0 ) length = 1.0
  350.  
  351.     velocityVec[0] = velocityVec[0]*speed/length
  352.     velocityVec[1] = velocityVec[1]*speed/length
  353.     velocityVec[2] = velocityVec[2]*speed/length
  354.  
  355.     new Float:args[3]
  356.     pev(ball, pev_velocity, args)
  357.     iNewVelocity[0] = (velocityVec[0] + (args[0] * 2.0)) / 3.0
  358.     iNewVelocity[1] = (velocityVec[1] + (args[1] * 2.0)) / 3.0
  359.     iNewVelocity[2] = (velocityVec[2] + (args[2] * 2.0)) / 3.0
  360.  
  361.     set_pev(ball, pev_velocity, iNewVelocity)
  362. }
  363.  
  364. public client_connect(__int_Index)
  365. {
  366.     @RemoveData(__int_Index);
  367. }
  368.  
  369. public client_disconnect(__int_Index)
  370. {
  371.     @RemoveData(__int_Index);
  372. }
  373.  
  374. public @ClientReSpawned(__int_Index)
  375. {
  376.     if(is_user_alive(__int_Index))
  377.     {
  378.         __int_Capsule |= (1 << __int_Index);
  379.     }
  380. }
  381.  
  382. public @SpecialCreation()
  383. {
  384.     beginSpecialCreation("Mafuba", "", "@CallBackMafuba", "special_mafuba");
  385.    
  386.     addSpecialCharge(   .ControlSequence = IN_ATTACK,
  387.                 .SecsForFullCharge = float(8),
  388.                 .KiPerStep = float(6),
  389.                 .CanMove = false);
  390.    
  391.     addSpecialCharge(   .ControlSequence = IN_ATTACK2,
  392.                 .SecsForFullCharge = float(1),
  393.                 .KiPerStep = float(0),
  394.                 .CanMove = true);
  395.    
  396.     __sx_Mafuba = endSpecialCreation();
  397. }
  398.  
  399. public @CallBackMafuba(__int_Index, CSpecialState:__Status, __int_Control, Float:__float_Charge)
  400. {
  401.     switch(__Status)
  402.     {
  403.         case ssCharge:
  404.         {
  405.             if(__int_Control == IN_ATTACK2)
  406.             {
  407.                 if(@IsPlayerBusy(__int_Index)
  408.                 || getClientINFREEFALL(__int_Index)
  409.                 || @ReturnAnimation(__int_Index, 1))
  410.                 {
  411.                     return SPECIAL_NULREQSTATE;
  412.                 }
  413.                
  414.                 if(__float_Charge == float(-1))
  415.                 {
  416.                     set_pdata_int(__int_Index, 200, false);
  417.                    
  418.                     @StopAnimation(__int_Index, 2);
  419.                 }
  420.                
  421.                 if(__float_Charge == float(0))
  422.                 {
  423.                     set_pdata_int(__int_Index, 200, true);
  424.                    
  425.                     @StartAnimation(__int_Index, 0);
  426.                 }
  427.                
  428.                 if(__float_Charge == 0.300_000 && __int_Capsule & (1 << __int_Index))
  429.                 {
  430.                     emit_sound(__int_Index, CHAN_WEAPON, "weapons/mafuba/capsule_click.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  431.                 }
  432.             }
  433.            
  434.             else
  435.             {
  436.                 if(getClientPOWERUP(__int_Index) && getClientXFROZEN(__int_Index))
  437.                 {
  438.                     setClientFLY(__int_Index, false);
  439.                 }
  440.                
  441.                 if(@IsPlayerBusy(__int_Index)
  442.                 || getClientFLY(__int_Index)
  443.                 || getClientTURBO(__int_Index)
  444.                 || ~entity_get_int(__int_Index, EV_INT_flags) & FL_ONGROUND)
  445.                 {
  446.                     return SPECIAL_NULREQSTATE;
  447.                 }
  448.                
  449.                 if(__float_Charge == 0.050_000)
  450.                 {
  451.                     set_task(0.5, "@fxWorldLight", __int_Index, _, _, "b");
  452.                    
  453.                     message_begin(MSG_ALL, get_user_msgid("Powerup"));
  454.                     {
  455.                         write_byte(__int_Index);
  456.                        
  457.                         write_byte(0);
  458.                         write_byte(0);
  459.                         write_byte(0);
  460.                     }
  461.                     message_end();
  462.                    
  463.                     emit_sound(__int_Index, CHAN_WEAPON, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  464.                    
  465.                     emit_sound(__int_Index, CHAN_ITEM, "weapons/powerup.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  466.                 }
  467.                
  468.                 if(__float_Charge == 0.700_000)
  469.                 {
  470.                     set_rendering(__int_Index, kRenderFxGlowShell, 0, _, 0, _, 10);
  471.                 }
  472.                
  473.                 else if(__float_Charge == 0.325_000 || __float_Charge == 0.987_500)
  474.                 {
  475.                     AddFx(__int_Index, "fxBlow");
  476.                     AddFx(__int_Index, "fxScreenShake", float(5), float(1), float(5));
  477.                 }
  478.             }
  479.            
  480.             entity_set_float(__int_Index, EV_FL_fuser2, __float_Charge);
  481.            
  482.             return SPECIAL_VALREQSTATE;
  483.         }
  484.        
  485.         case ssChargeReleased:
  486.         {
  487.             if(__int_Control == IN_ATTACK2)
  488.             {
  489.                 if(__float_Charge >= 0.325_000)
  490.                 {
  491.                     @StartAnimation(__int_Index, 1);
  492.                    
  493.                     if(__int_Capsule & (1 << __int_Index))
  494.                     {
  495.                         @ThrowCapsule(__int_Index, (120 * floatround(__float_Charge * float(10))));
  496.                     }
  497.                    
  498.                     else
  499.                     {
  500.                         client_print(__int_Index, print_center, "You don't have more capsules.");
  501.                     }
  502.                 }
  503.                
  504.                 else
  505.                 {
  506.                     set_pdata_int(__int_Index, 200, false);
  507.                    
  508.                     @StopAnimation(__int_Index, 2);
  509.                 }
  510.             }
  511.            
  512.             else
  513.             {
  514.                 if(__float_Charge >= 0.900_000)
  515.                 {  
  516.                     @CreateMafubaBeamEntity(100, __int_Index, 1.0, 800);
  517.                     emit_sound(__int_Index, CHAN_AUTO, "weapons/mafuba/player_scream.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  518.                 }
  519.                
  520.                 emit_sound(__int_Index, CHAN_ITEM, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  521.                
  522.                 @RemoveChargeReferences(__int_Index);
  523.             }
  524.         }
  525.        
  526.         case ssChargeAborted:
  527.         {
  528.             if(__int_Control == IN_ATTACK2)
  529.             {
  530.                 set_pdata_int(__int_Index, 200, false);
  531.                
  532.                 @StopAnimation(__int_Index, 2);
  533.             }
  534.            
  535.             else
  536.             {
  537.                 emit_sound(__int_Index, CHAN_ITEM, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  538.                
  539.                 @RemoveChargeReferences(__int_Index);
  540.             }
  541.            
  542.             return SPECIAL_NULREQSTATE;
  543.         }
  544.        
  545.         case ssForceAbort:
  546.         {
  547.             if(__int_Control == IN_ATTACK2)
  548.             {
  549.                 set_pdata_int(__int_Index, 200, false);
  550.                
  551.                 @StopAnimation(__int_Index, 2);
  552.             }
  553.            
  554.             else
  555.             {
  556.                 emit_sound(__int_Index, CHAN_ITEM, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  557.                
  558.                 @RemoveChargeReferences(__int_Index);
  559.             }
  560.         }
  561.     }
  562.    
  563.     return SPECIAL_VALREQSTATE;
  564. }
  565.  
  566. public @ThrowCapsule(const __int_Index, const __int_Strengh)
  567. {
  568.     static __int_Entity;
  569.     __int_Entity = create_entity("info_target");
  570.    
  571.     entity_set_string(__int_Entity, EV_SZ_classname, "capsule_jar");
  572.    
  573.     entity_set_model(__int_Entity, "models/capsule.mdl");
  574.    
  575.     DispatchKeyValue(__int_Entity, "health", "10");
  576.    
  577.     entity_set_int(__int_Entity, EV_INT_spawnflags, entity_get_int(__int_Entity, EV_INT_spawnflags) & SF_NORESPAWN);
  578.    
  579.     DispatchSpawn(__int_Entity);
  580.    
  581.     entity_set_float(__int_Entity, EV_FL_nextthink, (get_gametime() + 0.01));
  582.    
  583.     entity_set_float(__int_Entity, EV_FL_scale, 0.6);
  584.    
  585.     entity_set_int(__int_Entity, EV_INT_solid, SOLID_TRIGGER);
  586.    
  587.     entity_set_int(__int_Entity, EV_INT_movetype, MOVETYPE_BOUNCE);
  588.    
  589.     entity_set_size(__int_Entity, Float:{-0.500_000, -0.500_000, -0.500_000}, Float:{0.500_000, 0.500_000, 0.500_000});
  590.    
  591.     static Float:__float_Origin[3], Float:__float_Velocity[3];
  592.     entity_get_vector(__int_Index, EV_VEC_origin, __float_Origin);
  593.     entity_set_origin(__int_Entity, __float_Origin);
  594.    
  595.     velocity_by_aim(__int_Index, __int_Strengh, __float_Velocity);
  596.    
  597.     __float_Velocity[2] += float(100);
  598.    
  599.     entity_set_vector(__int_Entity, EV_VEC_avelocity, Float:{200.0, 400.0, 600.0});
  600.     entity_set_vector(__int_Entity, EV_VEC_velocity, __float_Velocity);
  601.    
  602.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  603.     {
  604.         write_byte(TE_BEAMFOLLOW);
  605.        
  606.         write_short(__int_Entity);
  607.         write_short(__int_Trail);
  608.        
  609.         write_byte(5);
  610.         write_byte(1);
  611.        
  612.         write_byte(255);
  613.         write_byte(255);
  614.         write_byte(255);
  615.        
  616.         write_byte(100);
  617.     }
  618.     message_end();
  619.    
  620.     __int_Capsule &= ~(1 << __int_Index);
  621. }
  622.  
  623. public @SpawnJar(__int_Entity)
  624. {
  625.     if(is_valid_ent(__int_Entity))
  626.     {
  627.         entity_set_model(__int_Entity, "models/ricecooker.mdl");
  628.        
  629.         entity_set_int(__int_Entity, EV_INT_solid, SOLID_BBOX);
  630.        
  631.         entity_set_int(__int_Entity, EV_INT_movetype, MOVETYPE_TOSS);
  632.        
  633.         entity_set_size(__int_Entity, Float:{-0.500_000, -0.500_000, -0.500_000}, Float:{0.500_000, 0.500_000, 0.500_000});
  634.        
  635.         entity_set_float(__int_Entity, EV_FL_scale, float(1));
  636.        
  637.         entity_set_float(__int_Entity, EV_FL_animtime, get_gametime());
  638.         entity_set_float(__int_Entity, EV_FL_framerate, 1.0);
  639.        
  640.         entity_set_int(__int_Entity, EV_INT_effects, EF_MUZZLEFLASH);
  641.        
  642.         entity_set_float(__int_Entity, EV_FL_takedamage, float(1));
  643.        
  644.         static Float:__float_Origin[3], __int_Origin[3];
  645.         entity_get_vector(__int_Entity, EV_VEC_origin, __float_Origin);
  646.         FVecIVec(__float_Origin, __int_Origin);
  647.        
  648.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  649.         {
  650.             write_byte(TE_DLIGHT);
  651.            
  652.             write_coord(__int_Origin[0]);
  653.             write_coord(__int_Origin[1]);
  654.             write_coord(__int_Origin[2]);
  655.            
  656.             write_byte(10);
  657.             write_byte(255);
  658.             write_byte(255);
  659.             write_byte(255);
  660.             write_byte(30);
  661.             write_byte(1);
  662.         }
  663.         message_end();
  664.        
  665.         message_begin(MSG_ALL, 98);
  666.         {
  667.             write_byte(2);
  668.             write_short(__int_Entity);
  669.            
  670.             write_coord(__int_Origin[0]);
  671.             write_coord(__int_Origin[1]);
  672.             write_coord(__int_Origin[2]);
  673.            
  674.             write_short(200);
  675.         }
  676.         message_end();
  677.        
  678.         message_begin(MSG_ALL, 115, __int_Origin);
  679.         {
  680.             write_byte(3);
  681.             write_byte(__int_Entity);
  682.         }
  683.         message_end();
  684.        
  685.         message_begin(MSG_ALL, 106, __int_Origin);
  686.         {
  687.             write_short(__int_Entity);
  688.             write_byte(10);
  689.         }
  690.         message_end();
  691.        
  692.         entity_set_int(__int_Entity, EV_INT_sequence, 1);
  693.        
  694.         emit_sound(__int_Entity, CHAN_WEAPON, "weapons/mafuba/capsule_decompression.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  695.        
  696.         static __int_Use;
  697.         __int_Use = create_entity("func_button");
  698.        
  699.         entity_set_int(__int_Use, EV_INT_movetype, MOVETYPE_FOLLOW);
  700.         entity_set_edict(__int_Use, EV_ENT_aiment, __int_Entity);
  701.        
  702.         entity_set_edict(__int_Use, EV_ENT_euser1, __int_Entity);
  703.        
  704.         entity_set_string(__int_Use, EV_SZ_classname, "mafuba_use");
  705.        
  706.         entity_set_edict(__int_Entity, EV_ENT_euser3, __int_Use);
  707.     }
  708. }
  709.  
  710. public @FM_AddToFullPack(__int_Handle, __int_Edict, __int_Entity, __int_Host, __int_Flags, __int_Player, __int_Set)
  711. {
  712.     if(__int_Player
  713.     && __int_Entity == __int_Host
  714.     && (is_user_alive(__int_Host) && !is_user_bot(__int_Host)))
  715.     {
  716.         if(__int_Sequence[0] & (1 << __int_Entity))
  717.         {
  718.             entity_set_float(__int_Entity, EV_FL_animtime, get_gametime());
  719.             set_es(__int_Handle, ES_Sequence, 90);
  720.             entity_set_float(__int_Entity, EV_FL_framerate, 0.380_000);
  721.            
  722.             if(entity_get_float(__int_Entity, EV_FL_fuser2) == float(1))
  723.             {
  724.                 entity_set_float(__int_Entity, EV_FL_framerate, float(0));
  725.             }
  726.         }
  727.        
  728.         if(__int_Sequence[1] & (1 << __int_Entity))
  729.         {
  730.             entity_set_float(__int_Entity, EV_FL_framerate, float(2));
  731.            
  732.             static Float:__int_Frame[2];
  733.            
  734.             __int_Frame[0] = __int_Frame[1];
  735.             __int_Frame[1] = entity_get_float(__int_Entity, EV_FL_frame);
  736.            
  737.             if(__int_Frame[0] > __int_Frame[1])
  738.             {
  739.                 set_pdata_int(__int_Entity, 200, false);
  740.                
  741.                 @StopAnimation(__int_Entity, 2);
  742.             }
  743.         }
  744.     }
  745.    
  746.     return FMRES_IGNORED;
  747. }
  748.  
  749. public @Think_Jar(__int_Entity)
  750. {
  751.     if(is_valid_ent(__int_Entity))
  752.     {
  753.         if(task_exists(__int_Entity))
  754.         {
  755.             remove_task(__int_Entity);
  756.         }
  757.        
  758.         static Float:__float_Start[3], Float:__float_End[3];
  759.         entity_get_vector(__int_Entity, EV_VEC_origin, __float_Start);
  760.        
  761.         __float_End[0] = __float_Start[0];
  762.         __float_End[1] = __float_Start[1];
  763.         __float_End[2] = (__float_Start[2] - float(9999));
  764.        
  765.         static __int_Trace;
  766.         engfunc(EngFunc_TraceLine, __float_Start, __float_End, IGNORE_MONSTERS, 0, __int_Trace);
  767.        
  768.         static Float:__float_Angles[3];
  769.         get_tr2(__int_Trace, TR_vecPlaneNormal, __float_Angles);
  770.        
  771.         vector_to_angle(__float_Angles, __float_Angles);
  772.        
  773.         __float_Angles[0] -= float(90);
  774.        
  775.         entity_set_vector(__int_Entity, EV_VEC_angles, __float_Angles);
  776.        
  777.         set_task(2.500_000, "@fxLight", __int_Entity);
  778.         set_task(float(3), "@SpawnJar", __int_Entity);
  779.     }
  780. }
  781.  
  782. public @Touch_Jar(__int_Touched, __int_Toucher)
  783. {
  784.     if(is_valid_ent(__int_Toucher))
  785.     {
  786.         static Float:__float_Velocity[3];
  787.         entity_get_vector(__int_Toucher, EV_VEC_velocity, __float_Velocity);
  788.        
  789.         __float_Velocity[0] /= 2.500_000;
  790.         __float_Velocity[1] /= 2.500_000;
  791.         __float_Velocity[2] /= 2.500_000;
  792.        
  793.         entity_set_vector(__int_Toucher, EV_VEC_velocity, __float_Velocity);
  794.        
  795.         entity_set_float(__int_Toucher, EV_FL_nextthink, (get_gametime() + 0.01));
  796.        
  797.         emit_sound(__int_Toucher, random_num(0, 7), "weapons/mafuba/capsule_bounce.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  798.     }
  799. }
  800.  
  801. public @Ham_Use(__int_Entity, __int_Index)
  802. {
  803.     if(entity_get_int(entity_get_edict(__int_Entity, EV_ENT_euser1), EV_INT_iuser3) != 1)
  804.     {
  805.         static __int_Classname[32];
  806.         entity_get_string(__int_Entity, EV_SZ_classname, __int_Classname, sizeof(__int_Classname)-1);
  807.        
  808.         if(equal(__int_Classname, "mafuba_use"))
  809.         {
  810.             emit_sound(__int_Index, CHAN_ITEM, "weapons/mafuba/jar_use.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  811.            
  812.             entity_set_int(entity_get_edict(__int_Entity, EV_ENT_euser1), EV_INT_sequence, entity_get_int(entity_get_edict(__int_Entity, EV_ENT_euser1), EV_INT_sequence) == 0 ? 1 : 0);
  813.         }
  814.     }
  815. }
  816.  
  817. public @Ham_TakeDamage(__int_Victim, __int_Inflictor, __int_Attacker, Float:__float_Damage, __int_Bits)
  818. {
  819.     static __int_Classname[32];
  820.     entity_get_string(__int_Victim, EV_SZ_classname, __int_Classname, sizeof(__int_Classname)-1);
  821.    
  822.     if(equal(__int_Classname, "capsule_jar"))
  823.     {
  824.         if((entity_get_float(__int_Victim, EV_FL_health) - __float_Damage) < float(0))
  825.         {
  826.             SetHamParamFloat(4, float(0));
  827.            
  828.             if(!task_exists(__int_Victim))
  829.             {
  830.                 entity_set_int(__int_Victim, EV_INT_iuser3, 1);
  831.                
  832.                 static __int_Data[2];
  833.                 __int_Data[0] = __int_Victim;
  834.                 __int_Data[1] = __int_Attacker;
  835.                
  836.                 set_rendering(__int_Victim, kRenderFxGlowShell, _, _, _, _, 20);
  837.                
  838.                 set_task(0.5, "@fxLightning", __int_Victim, _, _, "a", 8);
  839.                 set_task(float(5), "@fxKillJar", __int_Victim, __int_Data, 2);
  840.                
  841.                 emit_sound(__int_Victim, CHAN_ITEM, "weapons/mafuba/jar_break.wav", VOL_NORM, ATTN_NORM, 0 ,PITCH_NORM);
  842.             }
  843.         }
  844.     }
  845. }
  846.  
  847. /*==================================================================================================
  848. EFFECTS.
  849. ==================================================================================================*/
  850.  
  851. public @fxKillJar(__int_Data[])
  852. {
  853.     if(is_valid_ent(__int_Data[0]))
  854.     {
  855.         static Float:__float_Origin[3];
  856.         entity_get_vector(__int_Data[0], EV_VEC_origin, __float_Origin);
  857.        
  858.         for(new __int_Models = 0; __int_Models < 3; __int_Models++)
  859.         {
  860.             message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  861.             {
  862.                 write_byte(TE_MODEL);
  863.                 write_coord(floatround(__float_Origin[0]));
  864.                 write_coord(floatround(__float_Origin[1]));
  865.                 write_coord(floatround(__float_Origin[2]));
  866.                
  867.                 write_coord(random_num(random_num(-200, -300), random_num(200, 300)));
  868.                 write_coord(random_num(random_num(-200, -300), random_num(200, 300)));
  869.                 write_coord(random_num(250, 300));
  870.                
  871.                 write_angle(random_num(0, 360));
  872.                
  873.                 write_short(__int_Gibs[__int_Models]);
  874.                 write_byte(0);
  875.                 write_byte(200);
  876.             }
  877.             message_end();
  878.         }
  879.        
  880.         message_begin(MSG_ALL, 98);
  881.         {
  882.             write_byte(2);
  883.             write_short(__int_Data[0]);
  884.            
  885.             write_coord(floatround(__float_Origin[0]));
  886.             write_coord(floatround(__float_Origin[1]));
  887.             write_coord(floatround(__float_Origin[2]));
  888.            
  889.             write_short(60);
  890.         }
  891.         message_end();
  892.        
  893.         if(is_valid_ent(entity_get_edict(__int_Data[0], EV_ENT_euser3)))
  894.         {
  895.             remove_entity(entity_get_edict(__int_Data[0], EV_ENT_euser3));
  896.         }
  897.        
  898.         ExecuteHam(Ham_Killed, __int_Data[0], __int_Data[1], 0);
  899.     }
  900. }
  901.  
  902. public @fxLightning(__int_Entity)
  903. {
  904.     if(is_valid_ent(__int_Entity))
  905.     {
  906.         static Float:__float_Origin[3];
  907.         entity_get_vector(__int_Entity, EV_VEC_origin, __float_Origin);
  908.        
  909.         message_begin(MSG_ALL, SVC_TEMPENTITY);
  910.         {
  911.             write_byte(TE_BEAMPOINTS);
  912.             write_coord(floatround(__float_Origin[0]));
  913.             write_coord(floatround(__float_Origin[1]));
  914.             write_coord(floatround(__float_Origin[2]));
  915.            
  916.             write_coord(floatround(__float_Origin[0] + random_float(-11.0, 11.0)));
  917.             write_coord(floatround(__float_Origin[1] + random_float(-11.0, 11.0)));
  918.             write_coord(floatround(__float_Origin[2] + random_float(0.0, 11.0)));
  919.            
  920.             write_short(__int_Lightning);
  921.            
  922.             write_byte(1);
  923.             write_byte(10);
  924.             write_byte(10);
  925.             write_byte(5);
  926.             write_byte(125);
  927.             write_byte(255);
  928.            
  929.             write_byte(255);
  930.             write_byte(255);
  931.             write_byte(255);
  932.            
  933.             write_byte(150);
  934.         }
  935.         message_end();
  936.     }
  937. }
  938.  
  939. public @fxLight(__int_Entity)
  940. {
  941.     if(is_valid_ent(__int_Entity))
  942.     {
  943.         static Float:__float_Origin[3];
  944.         entity_get_vector(__int_Entity, EV_VEC_origin, __float_Origin);
  945.        
  946.         static __int_Players;
  947.         __int_Players = -1;
  948.        
  949.         while((__int_Players = find_ent_in_sphere(__int_Players, __float_Origin, float(15))))
  950.         {
  951.             if(is_user_alive(__int_Players) && is_user_connected(__int_Players))
  952.             {
  953.                 static Float:__float_Origin[3];
  954.                 entity_get_vector(__int_Players, EV_VEC_origin, __float_Origin);
  955.                
  956.                 __float_Origin[2] += float(100);
  957.                
  958.                 entity_set_origin(__int_Players, __float_Origin);
  959.             }
  960.         }
  961.        
  962.         entity_set_int(__int_Entity, EV_INT_effects, EF_LIGHT);
  963.     }
  964. }
  965.  
  966. public @fxWorldLight(__int_Index)
  967. {
  968.     if(is_user_alive(__int_Index))
  969.     {
  970.         static __int_Origin[3];
  971.         get_user_origin(__int_Index, __int_Origin);
  972.        
  973.         message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, __int_Index);
  974.         {
  975.             write_byte(TE_DLIGHT);
  976.            
  977.             write_coord(__int_Origin[0]);
  978.             write_coord(__int_Origin[1]);
  979.             write_coord(__int_Origin[2]);
  980.            
  981.             write_byte(12);
  982.            
  983.             write_byte(entity_get_float(__int_Index, EV_FL_fuser2) < 0.699_999 ? 255 : 0);
  984.             write_byte(255);
  985.             write_byte(entity_get_float(__int_Index, EV_FL_fuser2) < 0.699_999 ? 255 : 0);
  986.            
  987.             write_byte(255);
  988.             write_byte(floatround(2.500_000));
  989.         }
  990.         message_end();
  991.        
  992.         static Float:__float_Charge;
  993.         __float_Charge = entity_get_float(__int_Index, EV_FL_fuser2);
  994.        
  995.         if(__float_Charge >= 0.325_000)
  996.         {
  997.             set_rendering(.index = __int_Index,
  998.                 .fx = kRenderFxGlowShell,
  999.                 .r = (__float_Charge < 0.700_000 ? 255 : 0),
  1000.                 .g = _,
  1001.                 .b = (__float_Charge < 0.700_000 ? 255 : 0),
  1002.                 .render = kRenderNormal,
  1003.                 .amount = (__float_Charge < 0.700_000 ? 6 : 8));
  1004.         }
  1005.     }
  1006. }
  1007.  
  1008. /*==================================================================================================
  1009. POST-USE.
  1010. ==================================================================================================*/
  1011.  
  1012. public @RemoveData(const __int_Index)
  1013. {
  1014.     @StopAnimation(__int_Index, 2);
  1015.    
  1016.     __int_Capsule &= ~(1 << __int_Index);
  1017.    
  1018.     if(is_valid_ent(entity_get_edict(__int_Index, EV_ENT_euser1)))
  1019.     {
  1020.         remove_entity(entity_get_edict(__int_Index, EV_ENT_euser1));
  1021.     }
  1022. }
  1023.  
  1024. public @IsPlayerBusy(const __int_Index)
  1025. {
  1026.     if(getClientPOWERUP(__int_Index) && !getClientXFROZEN(__int_Index)
  1027.     || getClientSWOOPING(__int_Index)
  1028.     || getClientBLOCK(__int_Index)
  1029.     || getClientATKSHOOT(__int_Index)
  1030.     || getClientMELEE(__int_Index)
  1031.     || getClientMELEEPUSHBACK(__int_Index)
  1032.     || getClientTHROWAWAY(__int_Index)
  1033.     || getClientTHROW(__int_Index)
  1034.     || getClientWALLGND(__int_Index))
  1035.     {
  1036.         return 1;
  1037.     }
  1038.    
  1039.     return 0;
  1040. }
  1041.  
  1042. public @RemoveChargeReferences(const __int_Index)
  1043. {
  1044.     if(task_exists(__int_Index))
  1045.     {
  1046.         remove_task(__int_Index);
  1047.     }
  1048.    
  1049.     message_begin(MSG_ALL, get_user_msgid("StopPowerup"));
  1050.     {
  1051.         write_byte(__int_Index);
  1052.     }
  1053.     message_end();
  1054.    
  1055.     set_rendering(__int_Index, kRenderFxNone, _, _, _, kRenderNormal);
  1056. }
  1057.  
  1058. public @ReturnAnimation(const __int_Index, const __int_Wich)
  1059. {
  1060.     return (__int_Sequence[__int_Wich] & (1 << __int_Index)); // Handle.
  1061. }
  1062.  
  1063. public @StartAnimation(const __int_Index, const __int_Wich)
  1064. {
  1065.     if(__int_Wich == 0) // Hold.
  1066.     {
  1067.         __int_Sequence[0] |= (1 << __int_Index);
  1068.     }
  1069.    
  1070.     else // Throw.
  1071.     {
  1072.         __int_Sequence[1] |= (1 << __int_Index);
  1073.     }
  1074. }
  1075.  
  1076. public @StopAnimation(const __int_Index, const __int_Wich)
  1077. {
  1078.     if(__int_Wich == 0) // Hold.
  1079.     {
  1080.         __int_Sequence[0] &= ~(1 << __int_Index);
  1081.     }
  1082.    
  1083.     else if(__int_Wich == 1) // Throw.
  1084.     {
  1085.         __int_Sequence[1] &= ~(1 << __int_Index);
  1086.     }
  1087.    
  1088.     else // Both.
  1089.     {
  1090.         __int_Sequence[0] &= ~(1 << __int_Index);
  1091.         __int_Sequence[1] &= ~(1 << __int_Index);
  1092.     }
  1093. }
  1094.  
  1095. /*==================================================================================================
  1096. END OF THE SPECIAL.
  1097. ==================================================================================================*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement