Advertisement
FlacoBey

Untitled

Jun 28th, 2019
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 18.39 KB | None | 0 0
  1. #pragma semicolon 1
  2. #pragma newdecls required
  3.  
  4. #include <sourcemod>
  5. #include <sdktools>
  6. #include <sdkhooks>
  7.  
  8. #define SOUND_PASS1         "animation/c130_flyby.wav"
  9. #define PARTICLE_FLARE      "flare_burning"
  10. #define PARTICLE_FUSE       "weapon_pipebomb_fuse"
  11. #define SOUND_CRACKLE       "ambient/fire/fire_small_loop2.wav"
  12.  
  13. #define MAXLIST 26
  14.  
  15. char sMap[56];
  16. int gIndexCrate[2048+1], gHealth[2048+1], g_iFlares[2048+1][5];
  17. ConVar cTankChance, cDropType, cCountItems, cCountAirdrops, cTimeOpen, cUseString, cHealth, cColorFlare;
  18. bool IsLeft4Dead2;
  19. float fTimeGame[MAXPLAYERS+1];
  20.  
  21. public Plugin myinfo =
  22. {
  23.     name = "[L4D2] Airdrop",
  24.     author = "BHaType",
  25.     description = "Admin can call airdrop.",
  26.     version = "0.3",
  27.     url = "https://www.sourcemod.net/plugins.php?cat=0&mod=-1&title=&author=BHaType&description=&search=1"
  28. }
  29.  
  30. static const char gModeList[6][] =
  31. {
  32.     "models/props_vehicles/c130.mdl",
  33.     "models/props_crates/supply_crate02.mdl",
  34.     "models/props_crates/supply_crate02_gib1.mdl",
  35.     "models/props_junk/wood_crate001a.mdl",
  36.     "models/props_swamp/parachute01.mdl",
  37.     "models/props_lighting/light_flares.mdl"
  38. };
  39.  
  40. static const char gItemsListL4D1[MAXLIST - 18][] =
  41. {
  42.     "weapon_autoshotgun",
  43.     "weapon_first_aid_kit",
  44.     "weapon_pipe_bomb",
  45.     "weapon_molotov",
  46.     "weapon_rifle",
  47.     "weapon_hunting_rifle",
  48.     "weapon_pain_pills",
  49.     "weapon_pistol"
  50. };
  51.  
  52. static const char gItemsList[MAXLIST][] =
  53. {
  54.     "weapon_autoshotgun", //0
  55.     "weapon_first_aid_kit",//1
  56.     "weapon_pipe_bomb",//2
  57.     "weapon_molotov",//3
  58.     "weapon_rifle",//4
  59.     "weapon_hunting_rifle",//5
  60.     "weapon_pain_pills",//6
  61.     "weapon_pistol",//7
  62.     "weapon_adrenaline",//8
  63.     "weapon_smg_mp5",//9
  64.     "weapon_smg",//10
  65.     "weapon_smg_silenced",//11
  66.     "weapon_pumpshotgun",//12
  67.     "weapon_shotgun_chrome",//13
  68.     "weapon_rifle_m60",//14
  69.     "weapon_shotgun_spas",//15
  70.     "weapon_sniper_military",//16
  71.     "weapon_rifle_ak47",//17
  72.     "weapon_rifle_desert",//18
  73.     "weapon_sniper_awp",//19
  74.     "weapon_rifle_sg552",//20
  75.     "weapon_sniper_scout",//21
  76.     "weapon_grenade_launcher",//22
  77.     "weapon_pistol_magnum",//23
  78.     "weapon_vomitjar",//24
  79.     "weapon_defibrillator"//25
  80. };
  81.  
  82. static const char gModelsItemsList[MAXLIST][] =
  83. {
  84.     "models/w_models/weapons/w_autoshot_m4super.mdl", //0
  85.     "models/w_models/weapons/w_eq_Medkit.mdl", //1
  86.     "models/w_models/weapons/w_eq_pipebomb.mdl", //2
  87.     "models/w_models/weapons/w_eq_molotov.mdl", //3
  88.     "models/w_models/weapons/w_rifle_m16a2.mdl", //4
  89.     "models/w_models/weapons/w_sniper_mini14.mdl", //5
  90.     "models/w_models/weapons/w_eq_painpills.mdl", //6
  91.     "models/w_models/weapons/w_pistol_a.mdl", //7
  92.     "models/w_models/weapons/w_eq_adrenaline.mdl", //8
  93.     "models/w_models/weapons/w_smg_mp5.mdl", //9
  94.     "models/w_models/weapons/w_smg_uzi.mdl", //10
  95.     "models/w_models/weapons/w_smg_a.mdl", //11
  96.     "models/w_models/weapons/w_shotgun.mdl", //12
  97.     "models/w_models/weapons/w_pumpshotgun_a.mdl", //13
  98.     "models/w_models/weapons/w_m60.mdl", //14
  99.     "models/w_models/weapons/w_shotgun_spas.mdl", //15
  100.     "models/w_models/weapons/w_sniper_military.mdl", //16
  101.     "models/w_models/weapons/w_rifle_ak47.mdl", //17
  102.     "models/w_models/weapons/w_desert_rifle.mdl", //18
  103.     "models/w_models/weapons/w_sniper_awp.mdl", //19
  104.     "models/w_models/weapons/w_rifle_sg552.mdl", //20
  105.     "models/w_models/weapons/w_sniper_scout.mdl", //21
  106.     "models/w_models/weapons/w_grenade_launcher.mdl", //22
  107.     "models/w_models/weapons/w_desert_eagle.mdl", //23
  108.     "models/w_models/weapons/w_eq_bile_flask.mdl", //24
  109.     "models/w_models/weapons/w_eq_defibrillator.mdl" //25
  110. };
  111.  
  112. static int gAmmoList[MAXLIST] =
  113. {
  114.     90,
  115.     -1,
  116.     -1,
  117.     -1,
  118.     360,
  119.     150,
  120.     -1,
  121.     -1,
  122.     -1,
  123.     650,
  124.     650,
  125.     650,
  126.     56,
  127.     56,
  128.     -1,
  129.     90,
  130.     180,
  131.     360,
  132.     360,
  133.     180,
  134.     360,
  135.     180,
  136.     30,
  137.     -1,
  138.     -1,
  139.     -1
  140. };
  141.  
  142. public void OnPluginStart()
  143. {
  144.     GetCurrentMap(sMap, sizeof sMap);
  145.     char sEngine[24];
  146.     GetGameFolderName(sEngine, sizeof(sEngine));
  147.     if (StrEqual(sEngine, "left4dead2", false))
  148.         IsLeft4Dead2 = true;
  149.    
  150.     RegAdminCmd("sm_ac130", CallAirdrop, ADMFLAG_ROOT);
  151.     //HookEvent("tank_spawn", EventTank);
  152.     HookEvent("tank_killed", EventTank);
  153.    
  154.     //cParahute =       CreateConVar("airdrop_parachute",   "1", "Будет ли парашут у ящиков", FCVAR_NONE);
  155.     cColorFlare =       CreateConVar("airdrop_flare_color",     "255 0 0", "Цвет флаера", FCVAR_NONE);
  156.     cHealth =           CreateConVar("airdrop_health",          "666", "Кол-во хп у аирдропа", FCVAR_NONE);
  157.     cUseString =        CreateConVar("airdrop_open_string",     "Hehe boi", "Что будет написано при открытии ящика", FCVAR_NONE);
  158.     cTimeOpen =         CreateConVar("airdrop_open_time",       "2.5", "Время открытия", FCVAR_NONE);
  159.     cCountAirdrops =    CreateConVar("airdrop_count_airdrops",  "3", "Кол-во ящиков", FCVAR_NONE);
  160.     cCountItems =       CreateConVar("airdrop_count_items",     "6", "Кол-во предметов из ящиков", FCVAR_NONE);
  161.     cDropType =         CreateConVar("airdrop_type_drop",       "1", "Разные предметы будут выпадать либо нет(Ставить 1, только если квар \"airdrop count items\" > 1)", FCVAR_NONE);
  162.     cTankChance =       CreateConVar("airdrop_tank_chance",     "50", "Шанс аирдропа при смерти танка", FCVAR_NONE);
  163.     AutoExecConfig(true, "Airdrop");
  164. }
  165.  
  166. public Action EventTank(Event event, const char[] name, bool dontbroadcast)
  167. {
  168.     if(GetRandomInt(1, 100) <= GetConVarInt(cTankChance))
  169.     {
  170.         int client = GetClientOfUserId(event.GetInt("userid"));
  171.         AirPlane(client);
  172.     }
  173. }
  174.  
  175. public void OnMapStart()
  176. {  
  177.     PrecacheSound(SOUND_CRACKLE, true);
  178.  
  179.     PrecacheParticle(PARTICLE_FLARE);
  180.     PrecacheParticle(PARTICLE_FUSE);
  181.     PrecacheSound(SOUND_PASS1, true);
  182.     for (int i = 0; i < 6; i++)
  183.         PrecacheModel(gModeList[i], true);
  184.     for (int i = 0; i < MAXLIST - 1; i++)
  185.         PrecacheModel(gModelsItemsList[i], true);
  186. }
  187.  
  188. public Action CallAirdrop(int client, int args)
  189. {
  190.     AirPlane(client);
  191.     PrintToChatAll("\x04[Air] \x03%N \x04вызвал аирдроп", client);
  192. }
  193.  
  194. stock void AirPlane(int client)
  195. {
  196.     float vPos[3], vAng[3], direction;
  197.     GetEntPropVector(client, Prop_Send, "m_vecOrigin", vPos);
  198.     vPos[2] += 64;
  199.     GetEntPropVector(client, Prop_Send, "m_angRotation", vAng);
  200.     direction = vAng[1];
  201.    
  202.     float vSkybox[3];
  203.     vAng[0] = 0.0;
  204.     vAng[1] = direction;
  205.     vAng[2] = 0.0;
  206.    
  207.     GetEntPropVector(0, Prop_Data, "m_WorldMaxs", vSkybox);
  208.  
  209.     int entity = CreateEntityByName("prop_dynamic_override");
  210.     DispatchKeyValue(entity, "targetname", "ac130");
  211.     DispatchKeyValue(entity, "disableshadows", "1");
  212.     DispatchKeyValue(entity, "model", gModeList[0]);
  213.     DispatchSpawn(entity);
  214.     float height = vPos[2] + 1150.0;
  215.     if( height > vSkybox[2] - 200 )
  216.         vPos[2] = vSkybox[2] - 200;
  217.     else
  218.         vPos[2] = height;
  219.        
  220.     TeleportEntity(entity, vPos, vAng, NULL_VECTOR);
  221.     EmitSoundToAll(SOUND_PASS1, entity, SNDCHAN_AUTO, SNDLEVEL_HELICOPTER);
  222.     SetVariantString("airport_intro_flyby");
  223.     AcceptEntityInput(entity, "SetAnimation");
  224.     AcceptEntityInput(entity, "Enable");
  225.  
  226.     SetVariantString("OnUser1 !self:Kill::20.19:1");
  227.     AcceptEntityInput(entity, "AddOutput");
  228.     AcceptEntityInput(entity, "FireUser1");
  229.     CreateTimer(6.2, TimerDropAirDrop, EntIndexToEntRef(entity));
  230. }
  231.  
  232. public Action TimerDropAirDrop(Handle timer, any entity)
  233. {
  234.     entity = EntRefToEntIndex(entity);
  235.     if(entity != INVALID_ENT_REFERENCE)
  236.     {
  237.         float vPos[3];
  238.         GetEntPropVector(entity, Prop_Send, "m_vecOrigin", vPos);
  239.         CreateCrates(vPos);
  240.     }
  241. }
  242.  
  243. void CreateCrates(float vPos[3])
  244. {
  245.     Handle hTrace;
  246.     char sUseString[16], sTimeOpen[16], sColor[12];
  247.     int entity, iTrigger;
  248.     float vAng[3], vEndPos[3], vDistance, fTime;
  249.     vAng[0] = 89.0; vAng[1] = 0.0; vAng[2] = 0.0;
  250.    
  251.     GetConVarString(cUseString, sUseString, sizeof sUseString);
  252.     GetConVarString(cTimeOpen, sTimeOpen, sizeof sTimeOpen);
  253.     GetConVarString(cColorFlare, sColor, sizeof sColor);
  254.    
  255.     if(strcmp(sMap, "c5m1_waterfront") == 0)
  256.         vPos[2] -= 475.0;
  257.    
  258.     for(int i = 0; i < GetConVarInt(cCountAirdrops); i++)
  259.     {
  260.         vPos[1] += GetRandomInt(-150, 150);
  261.         vPos[0] += GetRandomInt(-150, 150);
  262.        
  263.         entity = CreateEntityByName("prop_physics_override");
  264.         DispatchKeyValue(entity, "targetname", "SupplyDrop");
  265.         DispatchKeyValueVector(entity, "origin", vPos);
  266.         if(IsLeft4Dead2)
  267.             SetEntityModel(entity, gModeList[1]);
  268.         else
  269.         {
  270.             DispatchKeyValue(entity, "StartGlowing", "1");
  271.             DispatchKeyValue(entity, "model", gModeList[3]);
  272.         }
  273.         DispatchSpawn(entity);
  274.        
  275.         GetEntPropVector(entity, Prop_Send, "m_vecOrigin", vPos);
  276.         gHealth[entity] = GetConVarInt(cHealth);
  277.         vPos[2] -= 25;
  278.         gIndexCrate[entity] = EntIndexToEntRef(entity);
  279.         hTrace = TR_TraceRayFilterEx(vPos, vAng, MASK_SHOT, RayType_Infinite, TraceDontHitSelf, entity);
  280.         if(TR_DidHit(hTrace))
  281.             TR_GetEndPosition(vEndPos, hTrace);
  282.         vDistance = GetVectorDistance(vPos, vEndPos);
  283.         fTime = vDistance / 225.0;
  284.         CreateTimer(fTime, tToDelete, entity);
  285.         MakeFlare(entity, vEndPos, vAng, sColor, sColor);
  286.         PrintToChatAll("%.2f %.2f %.2f", vEndPos[0], vEndPos[1], vEndPos[2]);
  287.         if(IsLeft4Dead2)
  288.         {
  289.             iTrigger = CreateEntityByName("func_button_timed");
  290.             DispatchKeyValueVector(iTrigger, "origin", vPos);
  291.             DispatchKeyValue(iTrigger, "use_string", sUseString);
  292.             DispatchKeyValue(iTrigger, "use_time", sTimeOpen);
  293.             DispatchKeyValue(iTrigger, "auto_disable", "1");
  294.             DispatchSpawn(iTrigger);
  295.             ActivateEntity(iTrigger);
  296.            
  297.             SetEntPropVector(iTrigger, Prop_Send, "m_vecMins", view_as<float>({-75.0, -75.0, -125.0}));
  298.             SetEntPropVector(iTrigger, Prop_Send, "m_vecMaxs", view_as<float>({75.0, 75.0, 125.0}));
  299.             HookSingleEntityOutput(iTrigger, "OnTimeUp", OnTimeUp);
  300.             SetEntityModel(iTrigger, gModeList[2]);
  301.             SetEntityRenderMode(iTrigger, RENDER_NONE);
  302.             SetVariantString("!activator");
  303.             AcceptEntityInput(iTrigger, "SetParent", entity);
  304.             Format(sColor, sizeof sColor, "255 255 255");
  305.             SetEntProp(entity, Prop_Send, "m_nGlowRange", 500);
  306.             SetEntProp(entity, Prop_Send, "m_iGlowType", 3);
  307.             SetEntProp(entity, Prop_Send, "m_glowColorOverride", GetColor(sColor));
  308.             gIndexCrate[iTrigger] = EntIndexToEntRef(entity);
  309.             SDKHook(entity, SDKHook_OnTakeDamage, OnTakeDamage);
  310.         }
  311.         SDKHook(entity, SDKHook_OnTakeDamage, OnTakeDamage);
  312.     }
  313.     //SDKHook(entity, SDKHook_OnTakeDamage, OnTakeDamage);
  314.     PrintToChatAll("\x04[Air] \x03Аирдроп(ы) \x04упал(и) в примерных координатах \x05%.2f %.2f %.2f", vPos[0], vPos[1], vPos[2]);
  315. }
  316.  
  317. public Action tToDelete(Handle timer, int entity)
  318. {
  319.     entity = EntRefToEntIndex(gIndexCrate[entity]);
  320.     if(entity != INVALID_ENT_REFERENCE)
  321.     {
  322.         float vPos[3], vAng[3];
  323.         char sColor[12];
  324.         PrintToChatAll("%.2f %.2f %.2f", vAng[0], vAng[1], vAng[2]);
  325.         GetConVarString(cColorFlare, sColor, sizeof sColor);
  326.         MakeFlare(entity, vPos, vAng, sColor, sColor);
  327.     }
  328. }
  329.  
  330.  
  331. public bool TraceDontHitSelf(int entity, int mask, any data)
  332. {
  333.     if(entity == data)
  334.     {
  335.         return false;
  336.     }
  337.     return true;
  338. }
  339.  
  340. public void OnTimeUp(const char[] output, int caller, int activator, float delay)
  341. {
  342.     if (activator > 0 && IsClientInGame(activator))
  343.     {
  344.         int entity = gIndexCrate[caller];
  345.         if((entity = EntRefToEntIndex(entity)) != INVALID_ENT_REFERENCE)
  346.         {
  347.             int SupplyItem;
  348.             float vPos[3], vAng[3];
  349.             AcceptEntityInput(caller, "kill");
  350.             GetEntPropVector(entity, Prop_Send, "m_vecOrigin", vPos);
  351.             GetEntPropVector(entity, Prop_Send, "m_angRotation", vAng);
  352.             int OpenedCrate = CreateEntityByName("prop_physics_override");
  353.             DispatchKeyValueVector(OpenedCrate, "origin", vPos);
  354.             DispatchKeyValueVector(OpenedCrate, "angles", vAng);
  355.             SetEntityModel(OpenedCrate, gModeList[2]);
  356.             DispatchSpawn(OpenedCrate);
  357.             int RandomIntType = GetRandomInt(0, 24);
  358.             AcceptEntityInput(entity, "kill");
  359.             for(int i = 0; i <= GetConVarInt(cCountItems); i++)
  360.             {
  361.                 if(GetConVarInt(cDropType) != 1) SupplyItem = CreateEntityByName(gItemsList[RandomIntType]);
  362.                 else
  363.                 {
  364.                     if(IsLeft4Dead2) RandomIntType = GetRandomInt(0, 24);
  365.                     else RandomIntType = GetRandomInt(0, 8);
  366.                     SupplyItem = CreateEntityByName(gItemsList[RandomIntType]);
  367.                 }
  368.                 if(IsValidEntity(SupplyItem))
  369.                 {
  370.                     DispatchSpawn(SupplyItem);
  371.                     SetEntityModel(SupplyItem, gModelsItemsList[RandomIntType]);
  372.                     vPos[2] += 2.5;
  373.                     vAng[0] = 0.0;
  374.                     vAng[1] = 90.0;
  375.                     vAng[2] = 0.0;
  376.                     TeleportEntity(SupplyItem, vPos, vAng, NULL_VECTOR);
  377.                     if(gAmmoList[RandomIntType] != -1)
  378.                         SetEntProp(SupplyItem, Prop_Send, "m_iExtraPrimaryAmmo", gAmmoList[RandomIntType], 4);
  379.                 }
  380.             }
  381.         }
  382.     }
  383. }
  384.  
  385. public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)  
  386. {
  387.     if(IsValidEntity(victim) && IsValidEntity(attacker) && attacker > 0 && attacker < MaxClients && IsClientInGame(attacker) && GetClientTeam(attacker) == 2 && damagetype != DMG_BURN)
  388.     {
  389.         float vPos[3];
  390.         char sModel[126];
  391.         int SupplyItem;
  392.         GetEntPropString(victim, Prop_Data, "m_ModelName", sModel, sizeof(sModel));
  393.         if(strcmp(sModel, gModeList[3]) == 0 || strcmp(sModel, gModeList[1]) == 0)
  394.         {
  395.             if(gHealth[victim] - damage < 0 || gHealth[victim] == 0)
  396.             {
  397.                 gHealth[victim] = 0;
  398.                 GetEntPropVector(victim, Prop_Send, "m_vecOrigin", vPos);
  399.                 if(!IsLeft4Dead2)
  400.                 {
  401.                     AcceptEntityInput(victim, "break");
  402.                    
  403.                     for(int v = 0; v < GetConVarInt(cCountItems); v++)
  404.                     {
  405.                         int iInt = GetRandomInt(0, 7);
  406.                         if(GetConVarInt(cDropType) == 1) SupplyItem = CreateEntityByName(gItemsListL4D1[GetRandomInt(0, 7)]);
  407.                         else SupplyItem = CreateEntityByName(gItemsListL4D1[iInt]);
  408.                         DispatchSpawn(SupplyItem);
  409.                         vPos[2] += 5.0;
  410.                         TeleportEntity(SupplyItem, vPos, NULL_VECTOR, NULL_VECTOR);
  411.                     }
  412.                     PrintToChatAll("\x04[Air] \x03%N \x04вскрыл аирдроп", attacker);
  413.                 }
  414.                 else
  415.                 {
  416.                     AcceptEntityInput(victim, "kill");
  417.                     for(int v = 0; v < GetConVarInt(cCountItems); v++)
  418.                     {
  419.                         int iInt = GetRandomInt(0, 25);
  420.                         if(GetConVarInt(cDropType) == 1) SupplyItem = CreateEntityByName(gItemsList[GetRandomInt(0, 25)]);
  421.                         else SupplyItem = CreateEntityByName(gItemsList[iInt]);
  422.                         DispatchSpawn(SupplyItem);
  423.                         vPos[2] += 5.0;
  424.                         TeleportEntity(SupplyItem, vPos, NULL_VECTOR, NULL_VECTOR);
  425.                     }
  426.                     if((GetGameTime() - fTimeGame[attacker]) < 1.5)
  427.                     {
  428.                         PrintToChatAll("\x04[Air] \x03%N \x04сломал аирдроп");
  429.                         fTimeGame[attacker] = GetGameTime();
  430.                     }
  431.                 }
  432.             }
  433.             else
  434.             {
  435.                 gHealth[victim] -= RoundToCeil(damage);
  436.                 PrintHintText(attacker, "%i", gHealth[victim]);
  437.             }
  438.         }
  439.     }
  440. }
  441.  
  442. //Thanks to Silvers...
  443. int MakeFlare(int client, float vAngles[3], float vOrigin[3], const char[] sColorL, const char[] sColorS)
  444. {
  445.     int entity;
  446.    
  447.     entity = CreateEntityByName("prop_dynamic");
  448.  
  449.     SetEntityModel(entity, gModeList[5]);
  450.     DispatchSpawn(entity);
  451.     TeleportEntity(entity, vOrigin, vAngles, NULL_VECTOR);
  452.    
  453.     g_iFlares[client][0] = entity;
  454.     vOrigin[2] += 15.0;
  455.     entity = MakeLightDynamic(vOrigin, view_as<float>({ 90.0, 0.0, 0.0 }), sColorL, 255);
  456.     vOrigin[2] -= 15.0;
  457.    
  458.     g_iFlares[client][1] = entity;
  459.     // Position particles / smoke
  460.     entity = 0;
  461.     vAngles[1] = GetRandomFloat(1.0, 360.0);
  462.     vAngles[0] = -80.0;
  463.     vOrigin[0] += (1.0 * (Cosine(DegToRad(vAngles[1]))));
  464.     vOrigin[1] += (1.5 * (Sine(DegToRad(vAngles[1]))));
  465.     vOrigin[2] += 1.0;
  466.  
  467.     // Flare particles
  468.     entity = DisplayParticle(PARTICLE_FLARE, vOrigin, vAngles);
  469.     g_iFlares[client][2] = entity;
  470.    
  471.     // Fuse particles
  472.     entity = DisplayParticle(PARTICLE_FUSE, vOrigin, vAngles);
  473.     g_iFlares[client][3] = entity;
  474.  
  475.     // Smoke
  476.     vAngles[0] = -85.0;
  477.     entity = MakeEnvSteam(vOrigin, vAngles, sColorS, 255, 100);
  478.     g_iFlares[client][4] = entity;
  479.  
  480.     PlaySound(g_iFlares[entity][0]);
  481.  
  482.     return g_iFlares[entity][0];
  483. }
  484.  
  485. //Thanks to Silvers...
  486. int DisplayParticle(const char[] sParticle, const float vPos[3], const float vAng[3])
  487. {
  488.     int entity = CreateEntityByName("info_particle_system");
  489.     if( entity != -1 )
  490.     {
  491.         DispatchKeyValue(entity, "effect_name", sParticle);
  492.         DispatchSpawn(entity);
  493.         ActivateEntity(entity);
  494.         AcceptEntityInput(entity, "start");
  495.         TeleportEntity(entity, vPos, vAng, NULL_VECTOR);
  496.         return entity;
  497.     }
  498.     return 0;
  499. }
  500.  
  501. //Thanks to Silvers...
  502. int MakeEnvSteam(const float vOrigin[3], const float vAngles[3], const char[] sColor, int iAlpha, int iLength)
  503. {
  504.     int entity = CreateEntityByName("env_steam");
  505.     char sTemp[5];
  506.     DispatchKeyValue(entity, "SpawnFlags", "1");
  507.     DispatchKeyValue(entity, "rendercolor", sColor);
  508.     DispatchKeyValue(entity, "SpreadSpeed", "1");
  509.     DispatchKeyValue(entity, "Speed", "15");
  510.     DispatchKeyValue(entity, "StartSize", "1");
  511.     DispatchKeyValue(entity, "EndSize", "3");
  512.     DispatchKeyValue(entity, "Rate", "10");
  513.     IntToString(iLength, sTemp, sizeof(sTemp));
  514.     DispatchKeyValue(entity, "JetLength", sTemp);
  515.     IntToString(iAlpha, sTemp, sizeof(sTemp));
  516.     DispatchKeyValue(entity, "renderamt", sTemp);
  517.     DispatchKeyValue(entity, "InitialState", "1");
  518.     DispatchSpawn(entity);
  519.     AcceptEntityInput(entity, "TurnOn");
  520.     TeleportEntity(entity, vOrigin, vAngles, NULL_VECTOR);
  521.     return entity;
  522. }
  523.  
  524. void PlaySound(int entity)
  525. {
  526.     EmitSoundToAll(SOUND_CRACKLE, entity, SNDCHAN_AUTO, SNDLEVEL_DISHWASHER, SND_SHOULDPAUSE, SNDVOL_NORMAL, SNDPITCH_HIGH, -1, NULL_VECTOR, NULL_VECTOR);
  527. }
  528.  
  529. //Thanks to Silvers...
  530. int MakeLightDynamic(const float vOrigin[3], const float vAngles[3], const char[] sColor, int iDist)
  531. {
  532.     int entity = CreateEntityByName("light_dynamic");
  533.     char sTemp[16];
  534.     Format(sTemp, sizeof(sTemp), "6");
  535.     DispatchKeyValue(entity, "style", sTemp);
  536.     Format(sTemp, sizeof(sTemp), "%s 255", sColor);
  537.     DispatchKeyValue(entity, "_light", sTemp);
  538.     DispatchKeyValue(entity, "brightness", "1");
  539.     DispatchKeyValueFloat(entity, "spotlight_radius", 32.0);
  540.     DispatchKeyValueFloat(entity, "distance", float(iDist));
  541.     DispatchSpawn(entity);
  542.     AcceptEntityInput(entity, "TurnOn");
  543.     TeleportEntity(entity, vOrigin, vAngles, NULL_VECTOR);
  544.     return entity;
  545. }
  546.  
  547. void PrecacheParticle(const char[] ParticleName)
  548. {
  549.     int entity = CreateEntityByName("info_particle_system");
  550.     DispatchKeyValue(entity, "effect_name", ParticleName);
  551.     DispatchSpawn(entity);
  552.     ActivateEntity(entity);
  553.     AcceptEntityInput(entity, "start");
  554.     SetVariantString("OnUser1 !self:Kill::0.1:-1");
  555.     AcceptEntityInput(entity, "AddOutput");
  556.     AcceptEntityInput(entity, "FireUser1");
  557. }
  558.  
  559. int GetColor(char[] sTemp)
  560. {
  561.     if( StrEqual(sTemp, "") )
  562.         return 0;
  563.  
  564.     char sColors[3][4];
  565.     int color = ExplodeString(sTemp, " ", sColors, 3, 4);
  566.  
  567.     if( color != 3 )
  568.         return 0;
  569.  
  570.     color = StringToInt(sColors[0]);
  571.     color += 256 * StringToInt(sColors[1]);
  572.     color += 65536 * StringToInt(sColors[2]);
  573.  
  574.     return color;
  575. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement