hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 18:06



Jelenlévő felhasználók

Jelenleg 206 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 205 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Google [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Lézer rombolása
HozzászólásElküldve: 2017.03.25. 16:17 
Offline
Tag

Csatlakozott: 2012.05.14. 15:23
Hozzászólások: 51
Megköszönt másnak: 10 alkalommal
Megköszönték neki: 1 alkalommal
Sziasztok! Én nem azzal kéréssel jöttem mint a többiek, hogy adminok mindenki lézerét szét tudja rombolni, hanem azt, hogy az emberek csak a zombik lézerét és ugyan ez fordítva, a zombik az emberek lézerét rombolhatja le!
Felraktam a [ZP] Kiegészítő: Lézer rombolás blokkoló-t és azzal csak a zombik rombolhatnak!
Én a [ZP] Lézer-t használom a szerveren!

Aki segít , annak megy a pacsi!

itt az sma:
  1. /*
  2.     Плагин редактировал Shidla [SGC] специально для тех, кого достали те, кто ломают мины)))
  3.     ICQ: 312-298-513
  4.  
  5.     Shidla [SGC] | 2010 год
  6.  
  7.     2.8.1 [Final Version] | 09.09.2010
  8. */
  9.  
  10. #include <amxmodx>
  11. #include <fakemeta>
  12. #include <hamsandwich>
  13. #include <xs>
  14. #include <zombieplague>
  15.  
  16. #if AMXX_VERSION_NUM < 180
  17.     #assert AMX Mod X v1.8.0 or greater library required!
  18. #endif
  19.  
  20. #define PLUGIN "[ZP] LaserMine"
  21. #define VERSION "2.8.1"
  22. #define AUTHOR "SandStriker / Shidla / QuZ/DJ_WEST"
  23.  
  24. #define RemoveEntity(%1)    engfunc(EngFunc_RemoveEntity,%1)
  25. #define TASK_PLANT          15100
  26. #define TASK_RESET          15500
  27. #define TASK_RELEASE        15900
  28.  
  29. #define LASERMINE_TEAM      pev_iuser1 //EV_INT_iuser1
  30. #define LASERMINE_OWNER     pev_iuser2 //EV_INT_iuser3
  31. #define LASERMINE_STEP      pev_iuser3
  32. #define LASERMINE_HITING    pev_iuser4
  33. #define LASERMINE_COUNT     pev_fuser1
  34.  
  35. #define LASERMINE_POWERUP   pev_fuser2
  36. #define LASERMINE_BEAMTHINK pev_fuser3
  37.  
  38. #define LASERMINE_BEAMENDPOINT  pev_vuser1
  39. #define MAX_MINES           10
  40. #define MODE_LASERMINE      0
  41. #define OFFSET_TEAM         114
  42. #define OFFSET_MONEY        115
  43. #define OFFSET_DEATH        444
  44.  
  45. #define cs_get_user_team(%1)    CsTeams:get_offset_value(%1,OFFSET_TEAM)
  46. #define cs_get_user_deaths(%1)  get_offset_value(%1,OFFSET_DEATH)
  47.  
  48. // Цена за мину ОТОБРАЖАЕМОЕ в Меню. Реальная цена задаётся КВАРом!
  49. new const LMCost = 2
  50.  
  51.  
  52. /*########### Цвета Мин и лазерных лучей ###########*/
  53. // Цвет мины и лазера людей
  54. new const
  55.     Red_Hum     = 0,
  56.     Green_Hum   = 0,
  57.     Blue_Hum    = 255;
  58.  
  59. // Цвет мины и лазера зомби
  60. new const
  61.     Red_Zomb    = 0,
  62.     Green_Zomb  = 255,
  63.     Blue_Zomb   = 0;
  64. /*####### Цвета Мин и лазерных лучей (конец) #######*/
  65.  
  66. enum CsTeams {
  67. CS_TEAM_UNASSIGNED = 0,
  68. CS_TEAM_T = 1,
  69. CS_TEAM_CT = 2,
  70. CS_TEAM_SPECTATOR = 3
  71. };
  72.  
  73. enum tripmine_e {
  74.     TRIPMINE_IDLE1 = 0,
  75.     TRIPMINE_IDLE2,
  76.     TRIPMINE_ARM1,
  77.     TRIPMINE_ARM2,
  78.     TRIPMINE_FIDGET,
  79.     TRIPMINE_HOLSTER,
  80.     TRIPMINE_DRAW,
  81.     TRIPMINE_WORLD,
  82.     TRIPMINE_GROUND,
  83. };
  84.  
  85. enum
  86. {
  87.     POWERUP_THINK,
  88.     BEAMBREAK_THINK,
  89.     EXPLOSE_THINK
  90. };
  91.  
  92. enum
  93. {
  94.     POWERUP_SOUND,
  95.     ACTIVATE_SOUND,
  96.     STOP_SOUND
  97. };
  98.  
  99. new const
  100.     ENT_MODELS[]    = "models/zombie_plague/LaserMines/v_laser_mine.mdl",
  101.     ENT_SOUND1[]    = "weapons/mine_deploy.wav",
  102.     ENT_SOUND2[]    = "weapons/mine_charge.wav",
  103.     ENT_SOUND3[]    = "weapons/mine_activate.wav",
  104.     ENT_SOUND4[]    = "items/suitchargeok1.wav",
  105.     ENT_SOUND5[]    = "items/gunpickup2.wav",
  106.     ENT_SOUND6[]    = "debris/bustglass1.wav",
  107.     ENT_SOUND7[]    = "debris/bustglass2.wav",
  108.     ENT_SPRITE1[]   = "sprites/laserbeam.spr",
  109.     ENT_SPRITE2[]   = "sprites/lm_explode.spr";
  110.  
  111. new const
  112.     ENT_CLASS_NAME[]    =   "lasermine",
  113.     ENT_CLASS_NAME3[]   =   "func_breakable",
  114.     gSnarkClassName[]   =   "wpn_snark",    // Для совместимости с плагином "Snark"
  115.     barnacle_class[]    =   "barnacle",     // Для совместимости с плагином "Barnacle"
  116.     weapon_box[]        =   "weaponbox";
  117.  
  118. new g_EntMine, beam, boom
  119. new g_LENABLE, g_LFMONEY, g_LAMMO, g_LDMG, g_LBEO, g_LTMAX, g_LCOST, g_LHEALTH, g_LMODE, g_LRADIUS, g_NOROUND, g_NEMROUND, g_SURVROUND
  120. new g_LRDMG,g_LFF,g_LCBT, g_LDELAY, g_LVISIBLE, g_LSTAMMO, g_LACCESS, g_LGLOW, g_LDMGMODE, g_LCLMODE
  121. new g_LCBRIGHT, g_LDSEC, g_LCMDMODE, g_LBUYMODE, g_LME;
  122. new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText;
  123. new g_dcount[33],g_nowtime,g_MaxPL
  124. new bool:g_settinglaser[33]
  125. new Float:plspeed[33], plsetting[33], g_havemine[33], g_deployed[33];
  126. //new CVAR_LMCost
  127.  
  128. public plugin_init()
  129. {
  130.     register_plugin(PLUGIN, VERSION, AUTHOR);
  131.  
  132.     // Регистрируем ExtraItem
  133.  
  134.     g_LME = zp_register_extra_item("Laser Mine", LMCost, ZP_TEAM_ANY)
  135.  
  136.     // Вызываем функцию Laser_TakeDamage при получении урона объектом ENT_CLASS_NAME3 (func_breakable)
  137.     RegisterHam(Ham_TakeDamage, ENT_CLASS_NAME3, "Laser_TakeDamage")
  138.     // Add your code here...
  139.     register_clcmd("+setlaser","CreateLaserMine_Progress_b");
  140.     register_clcmd("-setlaser","StopCreateLaserMine");
  141.     register_clcmd("+dellaser","ReturnLaserMine_Progress");
  142.     register_clcmd("-dellaser","StopReturnLaserMine");
  143.     register_clcmd("say","say_lasermine");
  144.     register_clcmd("buy_lasermine","BuyLasermine");
  145.  
  146.     g_LENABLE   = register_cvar("zp_ltm","1")
  147.     g_LACCESS   = register_cvar("zp_ltm_acs","0") //0 all, 1 admin
  148.     g_LMODE     = register_cvar("zp_ltm_mode","0") //0 lasermine, 1 tripmine
  149.     g_LAMMO     = register_cvar("zp_ltm_ammo","5")
  150.     g_LDMG      = register_cvar("zp_ltm_dmg","60") //laser hit dmg
  151.     g_LCOST     = register_cvar("zp_ltm_cost","2")
  152.     g_LFMONEY   = register_cvar("zp_ltm_fragmoney","1")
  153.     g_LHEALTH   = register_cvar("zp_ltm_health","5")
  154.     g_LTMAX     = register_cvar("zp_ltm_teammax","100")
  155.     g_LRADIUS   = register_cvar("zp_ltm_radius","320.0")
  156.     g_LRDMG     = register_cvar("zp_ltm_rdmg","100") //radius damage
  157.     g_LFF       = register_cvar("zp_ltm_ff","0")
  158.     g_LCBT      = register_cvar("zp_ltm_cbt","ALL")
  159.     g_LDELAY    = register_cvar("zp_ltm_delay","0.1")
  160.     g_LVISIBLE  = register_cvar("zp_ltm_line","1")
  161.     g_LGLOW     = register_cvar("zp_ltm_glow","0")
  162.     g_LCBRIGHT  = register_cvar("zp_ltm_bright","255")//laser line brightness.
  163.     g_LCLMODE   = register_cvar("zp_ltm_color","0") //0 is team color,1 is green
  164.     g_LDMGMODE  = register_cvar("zp_ltm_ldmgmode","0") //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg
  165.     g_LDSEC     = register_cvar("zp_ltm_ldmgseconds","1") //mode 2 only, damage / seconds. default 1 (sec)
  166.     g_LSTAMMO   = register_cvar("zp_ltm_startammo","1")
  167.     g_LBUYMODE  = register_cvar("zp_ltm_buymode","1");
  168.     g_LCMDMODE  = register_cvar("zp_ltm_cmdmode","0");      //0 is +USE key, 1 is bind, 2 is each.
  169.     g_LBEO      = register_cvar("zp_ltm_brokeenemy","1");
  170.     g_NOROUND   = register_cvar("zp_ltm_noround","1");
  171.     g_NEMROUND  = register_cvar("zp_ltm_nemround","1");
  172.     g_SURVROUND = register_cvar("zp_ltm_survround","1");
  173.  
  174.     register_event("DeathMsg", "DeathEvent", "a");
  175.     register_event("CurWeapon", "standing", "be", "1=1");
  176.     register_event("ResetHUD", "delaycount", "a");
  177.     register_event("ResetHUD", "newround", "b");
  178.     register_logevent("endround", 2, "0=World triggered", "1=Round_End");   // Регистрируем конец раунда
  179.     register_event("Damage","CutDeploy_onDamage","b");
  180.     g_msgDeathMsg   = get_user_msgid("DeathMsg");
  181.     g_msgScoreInfo  = get_user_msgid("ScoreInfo");
  182.     g_msgDamage     = get_user_msgid("Damage");
  183.     g_msgStatusText = get_user_msgid("StatusText");
  184.  
  185.     // Forward.
  186.     register_forward(FM_Think, "ltm_Think");
  187.     register_forward(FM_PlayerPostThink, "ltm_PostThink");
  188.     register_forward(FM_PlayerPreThink, "ltm_PreThink");
  189.  
  190.     // Регистируем файл языков
  191.     register_dictionary("LaserMines.txt")
  192.     register_cvar("Shidla", "[ZP] LaserMines v.2.8.1 Final", FCVAR_SERVER|FCVAR_SPONLY)
  193. }
  194.  
  195. public plugin_precache()
  196. {
  197.     precache_sound(ENT_SOUND1);
  198.     precache_sound(ENT_SOUND2);
  199.     precache_sound(ENT_SOUND3);
  200.     precache_sound(ENT_SOUND4);
  201.     precache_sound(ENT_SOUND5);
  202.     precache_sound(ENT_SOUND6);
  203.     precache_sound(ENT_SOUND7);
  204.     precache_model(ENT_MODELS);
  205.     beam = precache_model(ENT_SPRITE1);
  206.     boom = precache_model(ENT_SPRITE2);
  207.     return PLUGIN_CONTINUE;
  208. }
  209.  
  210. public plugin_modules()
  211. {
  212.     require_module("fakemeta");
  213.     require_module("cstrike");
  214. }
  215.  
  216. public plugin_cfg()
  217. {
  218.     g_EntMine = engfunc(EngFunc_AllocString,ENT_CLASS_NAME3);
  219.     arrayset(g_havemine,0,sizeof(g_havemine));
  220.     arrayset(g_deployed,0,sizeof(g_deployed));
  221.     g_MaxPL = get_maxplayers();
  222.  
  223.     new file[64]; get_localinfo("amxx_configsdir",file,63);
  224.     format(file, 63, "%s/zp_ltm_cvars_ap.cfg", file);
  225.     if(file_exists(file)) server_cmd("exec %s", file), server_exec();
  226. }
  227.  
  228. public Laser_TakeDamage(victim, inflictor, attacker, Float:f_Damage, bit_Damage)
  229. {
  230.     if(get_pcvar_num(g_LBEO))
  231.     {
  232.         new i_Owner
  233.  
  234.         // Получаем ID игрока, который поставил мину
  235.         i_Owner = pev(victim, LASERMINE_OWNER)
  236.  
  237.         // Если команда того, кто поставил мину и того, кто атаковал совпадают
  238.         if(CsTeams:pev(victim, LASERMINE_TEAM) == cs_get_user_team(attacker))
  239.         // Если тот кто поставил мину, не совпадает с тем, кто ее атаковал, то прекращаем выполнение
  240.         if(i_Owner != attacker)
  241.             return HAM_SUPERCEDE
  242.         return PLUGIN_CONTINUE
  243.     }
  244.     return PLUGIN_CONTINUE
  245. }
  246.  
  247. public delaycount(id)
  248. {
  249.     g_dcount[id] = floatround(get_gametime());
  250. }
  251.  
  252. bool:CheckTime(id)
  253. {
  254.     g_nowtime = floatround(get_gametime()) - g_dcount[id];
  255.     if(g_nowtime >= get_pcvar_num(g_LDELAY))
  256.         return true;
  257.     return false;
  258. }
  259.  
  260. public CreateLaserMine_Progress_b(id)
  261. {
  262.     if(get_pcvar_num(g_LCMDMODE) != 0)
  263.         CreateLaserMine_Progress(id);
  264.     return PLUGIN_HANDLED;
  265. }
  266.  
  267. public CreateLaserMine_Progress(id)
  268. {
  269.  
  270.     if(!CreateCheck(id))
  271.         return PLUGIN_HANDLED;
  272.     g_settinglaser[id] = true;
  273.  
  274.     message_begin(MSG_ONE, 108, {0,0,0}, id);
  275.     write_byte(1);
  276.     write_byte(0);
  277.     message_end();
  278.  
  279.     set_task(1.2, "Spawn", (TASK_PLANT + id));
  280.  
  281.     return PLUGIN_HANDLED;
  282. }
  283.  
  284. public ReturnLaserMine_Progress(id)
  285. {
  286.  
  287.     if(!ReturnCheck(id))
  288.         return PLUGIN_HANDLED;
  289.     g_settinglaser[id] = true;
  290.  
  291.     message_begin(MSG_ONE, 108, {0,0,0}, id);
  292.     write_byte(1);
  293.     write_byte(0);
  294.     message_end();
  295.  
  296.     set_task(1.2, "ReturnMine", (TASK_RELEASE + id));
  297.  
  298.     return PLUGIN_HANDLED;
  299. }
  300.  
  301. public StopCreateLaserMine(id)
  302. {
  303.  
  304.     DeleteTask(id);
  305.     message_begin(MSG_ONE, 108, {0,0,0}, id);
  306.     write_byte(0);
  307.     write_byte(0);
  308.     message_end();
  309.  
  310.     return PLUGIN_HANDLED;
  311. }
  312.  
  313. public StopReturnLaserMine(id)
  314. {
  315.  
  316.     DeleteTask(id);
  317.     message_begin(MSG_ONE, 108, {0,0,0}, id);
  318.     write_byte(0);
  319.     write_byte(0);
  320.     message_end();
  321.  
  322.     return PLUGIN_HANDLED;
  323. }
  324.  
  325. public ReturnMine(id)
  326. {
  327.     id -= TASK_RELEASE;
  328.     new tgt,body,Float:vo[3],Float:to[3];
  329.     get_user_aiming(id,tgt,body);
  330.     if(!pev_valid(tgt)) return;
  331.     pev(id,pev_origin,vo);
  332.     pev(tgt,pev_origin,to);
  333.     if(get_distance_f(vo,to) > 70.0) return;
  334.     new EntityName[32];
  335.     pev(tgt, pev_classname, EntityName, 31);
  336.     if(!equal(EntityName, ENT_CLASS_NAME)) return;
  337.     if(pev(tgt,LASERMINE_OWNER) != id) return;
  338.     RemoveEntity(tgt);
  339.  
  340.     g_havemine[id] ++;
  341.     g_deployed[id] --;
  342.     emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  343.     ShowAmmo(id)
  344.  
  345.     return;
  346. }
  347.  
  348. public Spawn(id)
  349. {
  350.     id -= TASK_PLANT
  351.     // motor
  352.     new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_EntMine);
  353.     if(!i_Ent)
  354.     {
  355.         client_print(id, print_chat,"[Laesrmine Debug] Can't Create Entity");
  356.         return PLUGIN_HANDLED_MAIN;
  357.     }
  358.     set_pev(i_Ent,pev_classname,ENT_CLASS_NAME);
  359.  
  360.     engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS);
  361.  
  362.     set_pev(i_Ent,pev_solid,SOLID_NOT);
  363.     set_pev(i_Ent,pev_movetype,MOVETYPE_FLY);
  364.  
  365.     set_pev(i_Ent,pev_frame,0);
  366.     set_pev(i_Ent,pev_body,3);
  367.     set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD);
  368.     set_pev(i_Ent,pev_framerate,0);
  369.     set_pev(i_Ent,pev_takedamage,DAMAGE_YES);
  370.     set_pev(i_Ent,pev_dmg,100.0);
  371.     set_user_health(i_Ent,get_pcvar_num(g_LHEALTH));
  372.     new Float:vOrigin[3];
  373.     new Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
  374.         Float:vTraceEnd[3],Float:vEntAngles[3];
  375.     pev(id, pev_origin, vOrigin);
  376.     velocity_by_aim(id, 128, vTraceDirection);
  377.     xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
  378.     engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
  379.     new Float:fFraction;
  380.     get_tr2(0, TR_flFraction, fFraction);
  381.  
  382.     // -- We hit something!
  383.     if(fFraction < 1.0)
  384.     {
  385.         // -- Save results to be used later.
  386.         get_tr2(0, TR_vecEndPos, vTraceEnd);
  387.         get_tr2(0, TR_vecPlaneNormal, vNormal);
  388.     }
  389.  
  390.  
  391.     xs_vec_mul_scalar(vNormal, 8.0, vNormal);
  392.     xs_vec_add(vTraceEnd, vNormal, vNewOrigin);
  393.  
  394.     engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 });
  395.     engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin);
  396.  
  397.     // -- Rotate tripmine.
  398.     vector_to_angle(vNormal,vEntAngles);
  399.     set_pev(i_Ent,pev_angles,vEntAngles);
  400.  
  401.     // -- Calculate laser end origin.
  402.     new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];
  403.  
  404.     xs_vec_mul_scalar(vNormal, 8192.0, vNormal);
  405.     xs_vec_add(vNewOrigin, vNormal, vBeamEnd);
  406.  
  407.     engfunc(EngFunc_TraceLine, vNewOrigin, vBeamEnd, IGNORE_MONSTERS, -1, 0);
  408.  
  409.     get_tr2(0, TR_vecPlaneNormal, vNormal);
  410.     get_tr2(0, TR_vecEndPos, vTracedBeamEnd);
  411.  
  412.     // -- Save results to be used later.
  413.     set_pev(i_Ent, LASERMINE_OWNER, id);
  414.     set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd);
  415.     set_pev(i_Ent,LASERMINE_TEAM,int:cs_get_user_team(id));
  416.     new Float:fCurrTime = get_gametime();
  417.  
  418.     set_pev(i_Ent,LASERMINE_POWERUP, fCurrTime + 2.5);
  419.     set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
  420.     set_pev(i_Ent,pev_nextthink, fCurrTime + 0.2);
  421.  
  422.     PlaySound(i_Ent,POWERUP_SOUND);
  423.     g_deployed[id]++;
  424.     g_havemine[id]--;
  425.     DeleteTask(id);
  426.     ShowAmmo(id);
  427.     return 1;
  428. }
  429.  
  430. stock TeamDeployedCount(id)
  431. {
  432.     static i;
  433.     static CsTeams:t;t = cs_get_user_team(id);
  434.     static cnt;cnt=0;
  435.  
  436.     for(i = 1;i <= g_MaxPL;i++)
  437.     {
  438.         if(is_user_connected(i))
  439.             if(t == cs_get_user_team(i))
  440.                 cnt += g_deployed[i];
  441.     }
  442.  
  443.     return cnt;
  444. }
  445.  
  446. bool:CheckCanTeam(id)
  447. {
  448.     new arg[5],CsTeam:num;
  449.     get_pcvar_string(g_LCBT,arg,3);
  450.     if(equali(arg,"Z"))
  451.     {
  452.         num = CsTeam:CS_TEAM_T;
  453.     }
  454.     else if(equali(arg,"H"))
  455.     {
  456.         num = CsTeam:CS_TEAM_CT;
  457.     }
  458.     else if(equali(arg,"ALL") || equali(arg,"HZ") || equali(arg,"ZH"))
  459.     {
  460.         num = CsTeam:CS_TEAM_UNASSIGNED;
  461.     }
  462.     else
  463.     {
  464.         num = CsTeam:CS_TEAM_UNASSIGNED;
  465.     }
  466.     if(num != CsTeam:CS_TEAM_UNASSIGNED && num != CsTeam:cs_get_user_team(id))
  467.         return false;
  468.     return true;
  469. }
  470.  
  471. bool:CanCheck(id,mode)  // Проверки: когда можно ставить мины
  472. {
  473.     if(!get_pcvar_num(g_LENABLE))
  474.     {
  475.         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOTACTIVE")
  476.  
  477.         return false;
  478.     }
  479.     if(get_pcvar_num(g_LACCESS) != 0)
  480.         if(!(get_user_flags(id) & ADMIN_IMMUNITY))
  481.         {
  482.             client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOACCESS")
  483.             return false;
  484.         }
  485.     if(!pev_user_alive(id)) return false;
  486.     if(!CheckCanTeam(id))
  487.     {
  488.         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CBT")
  489.         return false;
  490.     }
  491.     if(mode == 0)
  492.     {
  493.         if(g_havemine[id] <= 0)
  494.         {
  495.             client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_DONTHAVEMINE")
  496.             return false;
  497.         }
  498.     }
  499.     if(mode == 1)
  500.     {
  501.         if(get_pcvar_num(g_LBUYMODE) == 0)
  502.         {
  503.             client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CANTBUY")
  504.             return false;
  505.         }
  506.         if(g_havemine[id] >= get_pcvar_num(g_LAMMO))
  507.         {
  508.             client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_HAVEMAX")
  509.             return false;
  510.         }
  511.         if(zp_get_user_ammo_packs(id) < get_pcvar_num(g_LCOST))
  512.         {
  513.             client_print(id, print_chat, "%L %L%d %L", id, "CHATTAG",id, "STR_NOMONEY",get_pcvar_num(g_LCOST),id, "STR_NEEDED")
  514.             return false;
  515.         }
  516.     }
  517.     if(!CheckTime(id))
  518.     {
  519.         client_print(id, print_chat, "%L %L %d %L", id, "CHATTAG",id, "STR_DELAY",get_pcvar_num(g_LDELAY)-g_nowtime,id, "STR_SECONDS")
  520.         return false;
  521.     }
  522.  
  523.     return true;
  524. }
  525.  
  526. bool:ReturnCheck(id)
  527. {
  528.     if(!CanCheck(id,-1)) return false;
  529.     if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false;
  530.     new tgt,body,Float:vo[3],Float:to[3];
  531.     get_user_aiming(id,tgt,body);
  532.     if(!pev_valid(tgt)) return false;
  533.     pev(id,pev_origin,vo);
  534.     pev(tgt,pev_origin,to);
  535.     if(get_distance_f(vo,to) > 70.0) return false;
  536.     new EntityName[32];
  537.     pev(tgt, pev_classname, EntityName, 31);
  538.     if(!equal(EntityName, ENT_CLASS_NAME)) return false;
  539.     if(pev(tgt,LASERMINE_OWNER) != id) return false;
  540.     return true;
  541. }
  542.  
  543. bool:CreateCheck(id)
  544. {
  545.     if(!CanCheck(id,0)) return false;
  546.  
  547.     // Проверка на разрешение
  548.     if(!zp_has_round_started() && get_pcvar_num(g_NOROUND))
  549.     {
  550.         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOROUND")
  551.         return false;
  552.     }
  553.  
  554.     if(zp_is_nemesis_round() && get_pcvar_num(g_NEMROUND))
  555.     {
  556.         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NEMROUND")
  557.         return false;
  558.     }
  559.  
  560.     if(zp_is_survivor_round() && get_pcvar_num(g_SURVROUND))
  561.     {
  562.         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_SURVROUND")
  563.         return false;
  564.     }
  565.  
  566.     if(g_deployed[id] >= get_pcvar_num(g_LAMMO))
  567.     {
  568.         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MAXDEPLOY")
  569.         return false;
  570.     }
  571.  
  572.     if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))
  573.     {
  574.         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MANYPPL")
  575.         return false;
  576.     }
  577.     new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
  578.     pev(id, pev_origin, vOrigin);
  579.     velocity_by_aim(id, 128, vTraceDirection);
  580.     xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
  581.     engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
  582.     new Float:fFraction,Float:vTraceNormal[3];
  583.     get_tr2(0, TR_flFraction, fFraction);
  584.     // -- We hit something!
  585.     if(fFraction < 1.0)
  586.     {
  587.         // -- Save results to be used later.
  588.         get_tr2(0, TR_vecEndPos, vTraceEnd);
  589.         get_tr2(0, TR_vecPlaneNormal, vTraceNormal);
  590.  
  591.         return true;
  592.     }
  593.  
  594.     client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_PLANTWALL")
  595.     DeleteTask(id);
  596.     // -- Did not touched something. (not solid)
  597.     return false;
  598. }
  599.  
  600. public ltm_Think(i_Ent)
  601. {
  602.     if(!pev_valid(i_Ent))
  603.         return FMRES_IGNORED;
  604.     new EntityName[32];
  605.     pev(i_Ent, pev_classname, EntityName, 31);
  606.     if(!get_pcvar_num(g_LENABLE)) return FMRES_IGNORED;
  607.     // -- Entity is not a tripmine, ignoring the next...
  608.     if(!equal(EntityName, ENT_CLASS_NAME))
  609.         return FMRES_IGNORED;
  610.  
  611.     static Float:fCurrTime;
  612.     fCurrTime = get_gametime();
  613.  
  614.     switch(pev(i_Ent, LASERMINE_STEP))
  615.     {
  616.         case POWERUP_THINK :
  617.         {
  618.             new Float:fPowerupTime;
  619.             pev(i_Ent, LASERMINE_POWERUP, fPowerupTime);
  620.  
  621.             if(fCurrTime > fPowerupTime)
  622.             {
  623.                 set_pev(i_Ent, pev_solid, SOLID_BBOX);
  624.                 set_pev(i_Ent, LASERMINE_STEP, BEAMBREAK_THINK);
  625.  
  626.                 PlaySound(i_Ent, ACTIVATE_SOUND);
  627.             }
  628.             if(get_pcvar_num(g_LGLOW)!=0)
  629.             {
  630.                 if(get_pcvar_num(g_LCLMODE)==0)
  631.                 {
  632.                     switch (pev(i_Ent,LASERMINE_TEAM))
  633.                     {
  634.                         // цвет лазера Зомби
  635.                         case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,Red_Zomb,Green_Zomb,Blue_Zomb,kRenderNormal,5);
  636.                         // цвет лазера Человека
  637.                         case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,Red_Hum,Green_Hum,Blue_Hum,kRenderNormal,5);
  638.                     }
  639.                 }else
  640.                 {
  641.                     // цвет лазера, если стоит "одинаковый для всех" цвет
  642.                     set_rendering(i_Ent,kRenderFxGlowShell,random_num(50 , 200),random_num(50 , 200),random_num(50 , 200),kRenderNormal,5);
  643.                 }
  644.             }
  645.             set_pev(i_Ent, pev_nextthink, fCurrTime + 0.1);
  646.         }
  647.         case BEAMBREAK_THINK :
  648.         {
  649.             static Float:vEnd[3],Float:vOrigin[3];
  650.             pev(i_Ent, pev_origin, vOrigin);
  651.             pev(i_Ent, LASERMINE_BEAMENDPOINT, vEnd);
  652.  
  653.             static iHit, Float:fFraction;
  654.             engfunc(EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, i_Ent, 0);
  655.  
  656.             get_tr2(0, TR_flFraction, fFraction);
  657.             iHit = get_tr2(0, TR_pHit);
  658.  
  659.             // -- Something has passed the laser.
  660.             if(fFraction < 1.0)
  661.             {
  662.                 // -- Ignoring others tripmines entity.
  663.                 if(pev_valid(iHit))
  664.                 {
  665.                     pev(iHit, pev_classname, EntityName, 31);
  666.                     // Игнорим всякую хрень
  667.                     if(!equal(EntityName, ENT_CLASS_NAME) && !equal(EntityName, gSnarkClassName) && !equal(EntityName, barnacle_class) && !equal(EntityName, weapon_box))
  668.                     {
  669.                         set_pev(i_Ent, pev_enemy, iHit);
  670.  
  671.                         if(get_pcvar_num(g_LMODE) == MODE_LASERMINE)
  672.                             CreateLaserDamage(i_Ent,iHit);
  673.                         else
  674.                             if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit))
  675.                                 set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);
  676.  
  677.                         if (!pev_valid(i_Ent))  // если не верный объект - ничего не делаем. Спасибо DJ_WEST
  678.                             return FMRES_IGNORED;
  679.  
  680.                         set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
  681.                     }
  682.                 }
  683.             }
  684.             if(get_pcvar_num(g_LDMGMODE)!=0)
  685.                 if(pev(i_Ent,LASERMINE_HITING) != iHit)
  686.                     set_pev(i_Ent,LASERMINE_HITING,iHit);
  687.  
  688.             // -- Tripmine is still there.
  689.             if(pev_valid(i_Ent))
  690.             {
  691.                 static Float:fHealth;
  692.                 pev(i_Ent, pev_health, fHealth);
  693.  
  694.                 if(fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))
  695.                 {
  696.                 set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);
  697.                 set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
  698.                 }
  699.  
  700.                 static Float:fBeamthink;
  701.                 pev(i_Ent, LASERMINE_BEAMTHINK, fBeamthink);
  702.  
  703.                 if(fBeamthink < fCurrTime && get_pcvar_num(g_LVISIBLE))
  704.                 {
  705.                     DrawLaser(i_Ent, vOrigin, vEnd);
  706.                     set_pev(i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1);
  707.                 }
  708.                 set_pev(i_Ent, pev_nextthink, fCurrTime + 0.01);
  709.             }
  710.         }
  711.         case EXPLOSE_THINK :
  712.         {
  713.             // -- Stopping entity to think
  714.             set_pev(i_Ent, pev_nextthink, 0.0);
  715.             PlaySound(i_Ent, STOP_SOUND);
  716.             g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
  717.             CreateExplosion(i_Ent);
  718.             CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))
  719.             RemoveEntity    (i_Ent);
  720.         }
  721.     }
  722.  
  723.     return FMRES_IGNORED;
  724. }
  725.  
  726. PlaySound(i_Ent, i_SoundType)
  727. {
  728.     switch (i_SoundType)
  729.     {
  730.         case POWERUP_SOUND :
  731.         {
  732.             emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  733.             emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, 0, PITCH_NORM);
  734.         }
  735.         case ACTIVATE_SOUND :
  736.         {
  737.             emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, 1, 75);
  738.         }
  739.         case STOP_SOUND :
  740.         {
  741.             emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, SND_STOP, PITCH_NORM);
  742.             emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, SND_STOP, 75);
  743.         }
  744.     }
  745. }
  746.  
  747. DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3])
  748. {
  749.     new tcolor[3];
  750.     new teamid = pev(i_Ent, LASERMINE_TEAM);
  751.     if(get_pcvar_num(g_LCLMODE) == 0)
  752.     {
  753.         switch(teamid){
  754.             case 1:{
  755.                 // Цвет луча для Зомби
  756.                 tcolor[0] = Red_Zomb;
  757.                 tcolor[1] = Green_Zomb;
  758.                 tcolor[2] = Blue_Zomb;
  759.             }
  760.             case 2:{
  761.                 // Цвет луча для Человека
  762.                 tcolor[0] = Red_Hum;
  763.                 tcolor[1] = Green_Hum;
  764.                 tcolor[2] = Blue_Hum;
  765.             }
  766.         }
  767.     }else
  768.     {
  769.         // Цвет луча для всез при режиме 1-н луч для всех
  770.         tcolor[0] = random_num(50 , 200);
  771.         tcolor[1] = random_num(50 , 200);
  772.         tcolor[2] = random_num(50 , 200);
  773.     }
  774.     message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
  775.     write_byte(TE_BEAMPOINTS);
  776.     engfunc(EngFunc_WriteCoord,v_Origin[0]);
  777.     engfunc(EngFunc_WriteCoord,v_Origin[1]);
  778.     engfunc(EngFunc_WriteCoord,v_Origin[2]);
  779.     engfunc(EngFunc_WriteCoord,v_EndOrigin[0]); //Random
  780.     engfunc(EngFunc_WriteCoord,v_EndOrigin[1]); //Random
  781.     engfunc(EngFunc_WriteCoord,v_EndOrigin[2]); //Random
  782.     write_short(beam);
  783.     write_byte(0);
  784.     write_byte(0);
  785.     write_byte(1)//Life
  786.     write_byte(5)//Width
  787.     write_byte(0)//wave
  788.     write_byte(tcolor[0]); // r
  789.     write_byte(tcolor[1]); // g
  790.     write_byte(tcolor[2]); // b
  791.     write_byte(get_pcvar_num(g_LCBRIGHT));
  792.     write_byte(255);
  793.     message_end();
  794. }
  795.  
  796. CreateDamage(iCurrent,Float:DmgMAX,Float:Radius)
  797. {
  798.     // Get given parameters
  799.     new Float:vecSrc[3];
  800.     pev(iCurrent, pev_origin, vecSrc);
  801.  
  802.     new AtkID =pev(iCurrent,LASERMINE_OWNER);
  803.     new TeamID=pev(iCurrent,LASERMINE_TEAM);
  804.  
  805.     new ent = -1;
  806.     new Float:tmpdmg = DmgMAX;
  807.  
  808.     new Float:kickback = 0.0;
  809.     // Needed for doing some nice calculations :P
  810.     new Float:Tabsmin[3], Float:Tabsmax[3];
  811.     new Float:vecSpot[3];
  812.     new Float:Aabsmin[3], Float:Aabsmax[3];
  813.     new Float:vecSee[3];
  814.     new trRes;
  815.     new Float:flFraction;
  816.     new Float:vecEndPos[3];
  817.     new Float:distance;
  818.     new Float:origin[3], Float:vecPush[3];
  819.     new Float:invlen;
  820.     new Float:velocity[3];
  821.     new iHitHP,iHitTeam;
  822.     // Calculate falloff
  823.     new Float:falloff;
  824.     if(Radius > 0.0)
  825.     {
  826.         falloff = DmgMAX / Radius;
  827.     } else {
  828.         falloff = 1.0;
  829.     }
  830.     // Find monsters and players inside a specifiec radius
  831.     while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0)
  832.     {
  833.         if(!pev_valid(ent)) continue;
  834.         if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
  835.         {
  836.             // Entity is not a player or monster, ignore it
  837.             continue;
  838.         }
  839.         if(!pev_user_alive(ent)) continue;
  840.         // Reset data
  841.         kickback = 1.0;
  842.         tmpdmg = DmgMAX;
  843.         // The following calculations are provided by Orangutanz, THANKS!
  844.         // We use absmin and absmax for the most accurate information
  845.         pev(ent, pev_absmin, Tabsmin);
  846.         pev(ent, pev_absmax, Tabsmax);
  847.         xs_vec_add(Tabsmin,Tabsmax,Tabsmin);
  848.         xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
  849.         pev(iCurrent, pev_absmin, Aabsmin);
  850.         pev(iCurrent, pev_absmax, Aabsmax);
  851.         xs_vec_add(Aabsmin,Aabsmax,Aabsmin);
  852.         xs_vec_mul_scalar(Aabsmin,0.5,vecSee);
  853.         engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes);
  854.         get_tr2(trRes, TR_flFraction, flFraction);
  855.         // Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)
  856.         if(flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent)
  857.         {
  858.             // Work out the distance between impact and entity
  859.             get_tr2(trRes, TR_vecEndPos, vecEndPos);
  860.             distance = get_distance_f(vecSrc, vecEndPos) * falloff;
  861.             tmpdmg -= distance;
  862.             if(tmpdmg < 0.0)
  863.                 tmpdmg = 0.0;
  864.             // Kickback Effect
  865.             if(kickback != 0.0)
  866.             {
  867.                 xs_vec_sub(vecSpot,vecSee,origin);
  868.                 invlen = 1.0/get_distance_f(vecSpot, vecSee);
  869.  
  870.                 xs_vec_mul_scalar(origin,invlen,vecPush);
  871.                 pev(ent, pev_velocity, velocity)
  872.                 xs_vec_mul_scalar(vecPush,tmpdmg,vecPush);
  873.                 xs_vec_mul_scalar(vecPush,kickback,vecPush);
  874.                 xs_vec_add(velocity,vecPush,velocity);
  875.                 if(tmpdmg < 60.0)
  876.                 {
  877.                     xs_vec_mul_scalar(velocity,12.0,velocity);
  878.                 } else {
  879.                     xs_vec_mul_scalar(velocity,4.0,velocity);
  880.                 }
  881.                 if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0)
  882.                 {
  883.                     // There's some movement todo :)
  884.                     set_pev(ent, pev_velocity, velocity)
  885.                 }
  886.             }
  887.  
  888.             iHitHP = pev_user_health(ent) - floatround(tmpdmg)
  889.             iHitTeam = int:cs_get_user_team(ent)
  890.             if(iHitHP <= 0)
  891.             {
  892.                 if(iHitTeam != TeamID)
  893.                 {
  894.                     zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) + get_pcvar_num(g_LFMONEY))
  895.                     set_score(AtkID,ent,1,iHitHP)
  896.                 }else
  897.                 {
  898.                     if(get_pcvar_num(g_LFF))
  899.                     {
  900.                         zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) - get_pcvar_num(g_LFMONEY))
  901.                         set_score(AtkID,ent,-1,iHitHP)
  902.                     }
  903.                 }
  904.             }else
  905.             {
  906.                 if(iHitTeam != TeamID || get_pcvar_num(g_LFF))
  907.                 {
  908.                     //set_pev(Player,pev_health,iHitHP)
  909.                     set_user_health(ent, iHitHP)
  910.                     engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},ent);
  911.                     write_byte(floatround(tmpdmg))
  912.                     write_byte(floatround(tmpdmg))
  913.                     write_long(DMG_BULLET)
  914.                     engfunc(EngFunc_WriteCoord,vecSrc[0])
  915.                     engfunc(EngFunc_WriteCoord,vecSrc[1])
  916.                     engfunc(EngFunc_WriteCoord,vecSrc[2])
  917.                     message_end()
  918.                 }
  919.             }
  920.         }
  921.     }
  922.     return
  923. }
  924.  
  925. bool:pev_user_alive(ent)
  926. {
  927.     new deadflag = pev(ent,pev_deadflag);
  928.     if(deadflag != DEAD_NO)
  929.         return false;
  930.     return true;
  931. }
  932.  
  933. CreateExplosion(iCurrent)
  934. {
  935.     new Float:vOrigin[3];
  936.     pev(iCurrent,pev_origin,vOrigin);
  937.  
  938.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  939.     write_byte(99); //99 = KillBeam
  940.     write_short(iCurrent);
  941.     message_end();
  942.  
  943.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0);
  944.     write_byte(TE_EXPLOSION);
  945.     engfunc(EngFunc_WriteCoord,vOrigin[0]);
  946.     engfunc(EngFunc_WriteCoord,vOrigin[1]);
  947.     engfunc(EngFunc_WriteCoord,vOrigin[2]);
  948.     write_short(boom);
  949.     write_byte(30);
  950.     write_byte(15);
  951.     write_byte(0);
  952.     message_end();
  953. }
  954.  
  955. CreateLaserDamage(iCurrent,isHit)
  956. {
  957.     if(isHit < 0) return PLUGIN_CONTINUE
  958.     switch(get_pcvar_num(g_LDMGMODE))
  959.     {
  960.         case 1:
  961.         {
  962.             if(pev(iCurrent,LASERMINE_HITING) == isHit)
  963.                 return PLUGIN_CONTINUE
  964.         }
  965.         case 2:
  966.         {
  967.             if(pev(iCurrent,LASERMINE_HITING) == isHit)
  968.             {
  969.                 static Float:cnt
  970.                 static now,htime;now = floatround(get_gametime())
  971.  
  972.                 pev(iCurrent,LASERMINE_COUNT,cnt)
  973.                 htime = floatround(cnt)
  974.                 if(now - htime < get_pcvar_num(g_LDSEC))
  975.                 {
  976.                     return PLUGIN_CONTINUE;
  977.                 }else{
  978.                     set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
  979.                 }
  980.             }else
  981.             {
  982.                 set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
  983.             }
  984.         }
  985.     }
  986.  
  987.     new Float:vOrigin[3],Float:vEnd[3]
  988.     pev(iCurrent,pev_origin,vOrigin)
  989.     pev(iCurrent,pev_vuser1,vEnd)
  990.  
  991.     new teamid = pev(iCurrent, LASERMINE_TEAM)
  992.  
  993.     new szClassName[32]
  994.     new Alive,God
  995.     new iHitTeam,iHitHP,id
  996.     new hitscore
  997.  
  998.     szClassName[0] = '^0'
  999.     pev(isHit,pev_classname,szClassName,32)
  1000.     if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
  1001.     {
  1002.         Alive = pev_user_alive(isHit)
  1003.         God = get_user_godmode(isHit)
  1004.         if(!Alive || God) return PLUGIN_CONTINUE
  1005.         iHitTeam = int:cs_get_user_team(isHit)
  1006.         iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)
  1007.         id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]
  1008.         if(iHitHP <= 0)
  1009.         {
  1010.             if(iHitTeam != teamid)
  1011.             {
  1012.                 emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
  1013.                 hitscore = 1
  1014.                 zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) + get_pcvar_num(g_LFMONEY))
  1015.                 set_score(id,isHit,hitscore,iHitHP)
  1016.             }else
  1017.             {
  1018.                 if(get_pcvar_num(g_LFF))
  1019.                 {
  1020.                     emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
  1021.                     hitscore = -1
  1022.                     zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LFMONEY))
  1023.                     set_score(id,isHit,hitscore,iHitHP)
  1024.                 }
  1025.             }
  1026.         }else if(iHitTeam != teamid || get_pcvar_num(g_LFF))
  1027.         {
  1028.             emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
  1029.             set_user_health(isHit,iHitHP)
  1030.             set_pev(iCurrent,LASERMINE_HITING,isHit);
  1031.             engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit);
  1032.             write_byte(get_pcvar_num(g_LDMG))
  1033.             write_byte(get_pcvar_num(g_LDMG))
  1034.             write_long(DMG_BULLET)
  1035.             engfunc(EngFunc_WriteCoord,vOrigin[0])
  1036.             engfunc(EngFunc_WriteCoord,vOrigin[1])
  1037.             engfunc(EngFunc_WriteCoord,vOrigin[2])
  1038.             message_end()
  1039.         }
  1040.     }else if(equal(szClassName, ENT_CLASS_NAME3))
  1041.     {
  1042.         new hl;
  1043.         hl = pev_user_health(isHit);
  1044.         set_user_health(isHit,hl-get_pcvar_num(g_LDMG));
  1045.     }
  1046.     return PLUGIN_CONTINUE
  1047. }
  1048.  
  1049. stock pev_user_health(id)
  1050. {
  1051.     new Float:health
  1052.     pev(id,pev_health,health)
  1053.     return floatround(health)
  1054. }
  1055.  
  1056. stock set_user_health(id,health)
  1057. {
  1058.     health > 0 ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);
  1059. }
  1060.  
  1061. stock get_user_godmode(index) {
  1062.     new Float:val
  1063.     pev(index, pev_takedamage, val)
  1064.  
  1065.     return (val == DAMAGE_NO)
  1066. }
  1067.  
  1068. stock set_user_frags(index, frags)
  1069. {
  1070.     set_pev(index, pev_frags, float(frags))
  1071.  
  1072.     return 1
  1073. }
  1074.  
  1075. stock pev_user_frags(index)
  1076. {
  1077.     new Float:frags;
  1078.     pev(index,pev_frags,frags);
  1079.     return floatround(frags);
  1080. }
  1081.  
  1082. set_score(id,target,hitscore,HP){
  1083.  
  1084.     new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore
  1085.     set_user_frags(id,idfrags)
  1086.     new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1
  1087.     set_user_frags(target,tarfrags)
  1088.     new idteam = int:cs_get_user_team(id)
  1089.     new iddeaths = cs_get_user_deaths(id)
  1090.  
  1091.  
  1092.     message_begin(MSG_ALL, g_msgDeathMsg, {0, 0, 0} ,0)
  1093.     write_byte(id)
  1094.     write_byte(target)
  1095.     write_byte(0)
  1096.     write_string(ENT_CLASS_NAME)
  1097.     message_end()
  1098.  
  1099.     message_begin(MSG_ALL, g_msgScoreInfo)
  1100.     write_byte(id)
  1101.     write_short(idfrags)
  1102.     write_short(iddeaths)
  1103.     write_short(0)
  1104.     write_short(idteam)
  1105.     message_end()
  1106.  
  1107.     set_msg_block(g_msgDeathMsg, BLOCK_ONCE)
  1108.  
  1109.     set_user_health(target, HP)
  1110.  
  1111. }
  1112.  
  1113. public BuyLasermine(id)
  1114. {
  1115.     if(!CanCheck(id,1)) return PLUGIN_CONTINUE
  1116.  
  1117.     zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LCOST))
  1118.     g_havemine[id]++;
  1119.  
  1120.     client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_BOUGHT")
  1121.  
  1122.     emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  1123.     ShowAmmo(id)
  1124.     return PLUGIN_HANDLED
  1125. }
  1126.  
  1127. public zp_extra_item_selected(id, itemid)
  1128. {
  1129.     if(itemid == g_LME)
  1130.         {
  1131.         zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + LMCost)
  1132.         BuyLasermine(id)
  1133.         }
  1134.     return PLUGIN_CONTINUE
  1135. }
  1136.  
  1137. ShowAmmo(id)
  1138. {
  1139.     new ammo[51]
  1140.     new PlugStat[ 555 char ];
  1141.     formatex(PlugStat, charsmax(PlugStat), "%L", LANG_PLAYER, "STR_STATE")
  1142.     formatex(ammo, 50, "%s %i/%i",PlugStat, g_havemine[id],get_pcvar_num(g_LAMMO))
  1143.  
  1144.     message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id)
  1145.     write_byte(0)
  1146.     write_string(ammo)
  1147.     message_end()
  1148. }
  1149.  
  1150. public showInfo(id)
  1151. {
  1152.     client_print(id, print_chat, "%L", id, "STR_REF")
  1153. }
  1154.  
  1155. public say_lasermine(id){
  1156.     new said[32]
  1157.     read_argv(1,said,31);
  1158.     if(!get_pcvar_num(g_LENABLE))
  1159.     {
  1160.         return PLUGIN_CONTINUE
  1161.     }
  1162.     if(equali(said,"/buy lasermine")||equali(said,"/lm")||equali(said,"buy_lasermine")){
  1163.         BuyLasermine(id)
  1164.     }else if(equali(said, "lasermine") || equali(said, "/lasermine")){
  1165.         const SIZE = 1024
  1166.         new msg[SIZE+1],len = 0;
  1167.         len += formatex(msg[len], SIZE - len, "<html><body>")
  1168.         len += formatex(msg[len], SIZE - len, "<p><b>LaserMine</b></p><br/><br/>")
  1169.         len += formatex(msg[len], SIZE - len, "<p>You can be setting the mine on the wall.</p><br/>")
  1170.         len += formatex(msg[len], SIZE - len, "<p>That laser will give what touched it damage.</p><br/><br/>")
  1171.         len += formatex(msg[len], SIZE - len, "<p><b>LaserMine Commands</b></p><br/><br/>")
  1172.         len += formatex(msg[len], SIZE - len, "<p><b>Say /buy lasermine</b> or <b>Say /lm</b> //buying lasermine<br/>")
  1173.         len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //bind ^"F2^" buy_lasermine : using F2 buying lasermine<br/>")
  1174.         len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : using mouse3 set lasermine on wall<br/>")
  1175.         len += formatex(msg[len], SIZE - len, "</body></html>")
  1176.         show_motd(id, msg, "Lasermine Entity help")
  1177.         return PLUGIN_CONTINUE
  1178.     }
  1179.     else if(containi(said, "laser") != -1) {
  1180.         showInfo(id)
  1181.         return PLUGIN_CONTINUE
  1182.     }
  1183.     return PLUGIN_CONTINUE
  1184. }
  1185.  
  1186. public standing(id)
  1187. {
  1188.     if(!g_settinglaser[id])
  1189.         return PLUGIN_CONTINUE
  1190.  
  1191.     set_pev(id, pev_maxspeed, 1.0)
  1192.  
  1193.     return PLUGIN_CONTINUE
  1194. }
  1195.  
  1196. public ltm_PostThink(id)
  1197. {
  1198.     if(!g_settinglaser[id] && plsetting[id]){
  1199.         resetspeed(id)
  1200.     }
  1201.     else if(g_settinglaser[id] && !plsetting[id]) {
  1202.         pev(id, pev_maxspeed,plspeed[id])
  1203.         set_pev(id, pev_maxspeed, 1.0)
  1204.     }
  1205.     plsetting[id] = g_settinglaser[id]
  1206.     return FMRES_IGNORED
  1207. }
  1208.  
  1209. public ltm_PreThink(id)
  1210. {
  1211.     if(!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1)
  1212.         return FMRES_IGNORED;
  1213.  
  1214.     if(pev(id, pev_button) & IN_USE && !(pev(id, pev_oldbuttons) & IN_USE))
  1215.         CreateLaserMine_Progress(id)
  1216.     return FMRES_IGNORED;
  1217. }
  1218.  
  1219. resetspeed(id)
  1220. {
  1221.     set_pev(id, pev_maxspeed, plspeed[id])
  1222. }
  1223.  
  1224. public client_putinserver(id){
  1225.     g_deployed[id] = 0;
  1226.     g_havemine[id] = 0;
  1227.     DeleteTask(id);
  1228.     return PLUGIN_CONTINUE
  1229. }
  1230.  
  1231. public client_disconnect(id){
  1232.     if(!get_pcvar_num(g_LENABLE))
  1233.         return PLUGIN_CONTINUE
  1234.     DeleteTask(id);
  1235.     RemoveAllTripmines(id);
  1236.     return PLUGIN_CONTINUE
  1237. }
  1238.  
  1239.  
  1240. public newround(id){
  1241.     if(!get_pcvar_num(g_LENABLE))
  1242.         return PLUGIN_CONTINUE
  1243.     pev(id, pev_maxspeed,plspeed[id])
  1244.     DeleteTask(id);
  1245.     RemoveAllTripmines(id);
  1246.     //client_print(id, print_chat, "[ZP][LM][DeBug] All Mines removied!");
  1247.     delaycount(id);
  1248.     SetStartAmmo(id);
  1249.     return PLUGIN_CONTINUE
  1250. }
  1251.  
  1252. public endround(id)
  1253. {
  1254.     if(!get_pcvar_num(g_LENABLE))
  1255.         return PLUGIN_CONTINUE
  1256.  
  1257.     // Удаление мин после конца раунда
  1258.     DeleteTask(id);
  1259.     RemoveAllTripmines(id);
  1260.  
  1261.     return PLUGIN_CONTINUE
  1262. }
  1263.  
  1264. public DeathEvent(){
  1265.     if(!get_pcvar_num(g_LENABLE))
  1266.         return PLUGIN_CONTINUE
  1267.  
  1268.     new id = read_data(2)
  1269.     if(is_user_connected(id)) DeleteTask(id);
  1270.     return PLUGIN_CONTINUE
  1271. }
  1272.  
  1273. public RemoveAllTripmines(i_Owner)
  1274. {
  1275.     new iEnt = g_MaxPL + 1;
  1276.     new clsname[32];
  1277.     while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ENT_CLASS_NAME)))
  1278.     {
  1279.         if(i_Owner)
  1280.         {
  1281.             if(pev(iEnt, LASERMINE_OWNER) != i_Owner)
  1282.                 continue;
  1283.             clsname[0] = '^0'
  1284.             pev(iEnt, pev_classname, clsname, sizeof(clsname)-1);
  1285.             if(equali(clsname, ENT_CLASS_NAME))
  1286.             {
  1287.                 PlaySound(iEnt, STOP_SOUND);
  1288.                 RemoveEntity(iEnt);
  1289.             }
  1290.         }
  1291.         else
  1292.             set_pev(iEnt, pev_flags, FL_KILLME);
  1293.     }
  1294.     g_deployed[i_Owner]=0;
  1295. }
  1296.  
  1297. SetStartAmmo(id)
  1298. {
  1299.     new stammo = get_pcvar_num(g_LSTAMMO);
  1300.     if(stammo <= 0) return PLUGIN_CONTINUE;
  1301.     g_havemine[id] = (g_havemine[id] <= stammo) ? stammo : g_havemine[id];
  1302.     return PLUGIN_CONTINUE;
  1303. }
  1304.  
  1305. public CutDeploy_onDamage(id)
  1306. {
  1307.     if(get_user_health(id) < 1)
  1308.         DeleteTask(id);
  1309. }
  1310.  
  1311. DeleteTask(id)
  1312. {
  1313.     if(task_exists((TASK_PLANT + id)))
  1314.     {
  1315.         remove_task((TASK_PLANT + id))
  1316.     }
  1317.     if(task_exists((TASK_RELEASE + id)))
  1318.     {
  1319.         remove_task((TASK_RELEASE + id))
  1320.     }
  1321.     g_settinglaser[id] = false
  1322.     return PLUGIN_CONTINUE;
  1323. }
  1324.  
  1325. stock set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
  1326. {
  1327.     static Float:RenderColor[3];
  1328.     RenderColor[0] = float(r);
  1329.     RenderColor[1] = float(g);
  1330.     RenderColor[2] = float(b);
  1331.  
  1332.     set_pev(entity, pev_renderfx, fx);
  1333.     set_pev(entity, pev_rendercolor, RenderColor);
  1334.     set_pev(entity, pev_rendermode, render);
  1335.     set_pev(entity, pev_renderamt, float(amount));
  1336.  
  1337.     return 1
  1338. }
  1339.  
  1340. // Gets offset data
  1341. get_offset_value(id, type)
  1342. {
  1343.     new key = -1;
  1344.     switch(type)
  1345.     {
  1346.         case OFFSET_TEAM: key = OFFSET_TEAM;
  1347.         case OFFSET_MONEY:
  1348.         key = OFFSET_MONEY;
  1349.         case OFFSET_DEATH: key = OFFSET_DEATH;
  1350.     }
  1351.     if(key != -1)
  1352.     {
  1353.         if(is_amd64_server()) key += 25;
  1354.         return get_pdata_int(id, key);
  1355.     }
  1356.     return -1;
  1357. }


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Lézer rombolása
HozzászólásElküldve: 2017.03.25. 22:08 
Offline
Jómunkásember
Avatar

Csatlakozott: 2013.01.15. 19:04
Hozzászólások: 407
Megköszönt másnak: 17 alkalommal
Megköszönték neki: 176 alkalommal
Alapból tartalmazza ezt a funkciót.
  1. public Laser_TakeDamage(victim, inflictor, attacker, Float:f_Damage, bit_Damage)
  2. {
  3.     if(get_pcvar_num(g_LBEO))
  4.     {
  5.         new i_Owner
  6.  
  7.         // Получаем ID игрока, который поставил мину
  8.         i_Owner = pev(victim, LASERMINE_OWNER)
  9.  
  10.         // Если команда того, кто поставил мину и того, кто атаковал совпадают
  11.         if(CsTeams:pev(victim, LASERMINE_TEAM) == cs_get_user_team(attacker))
  12.         // Если тот кто поставил мину, не совпадает с тем, кто ее атаковал, то прекращаем выполнение
  13.         if(i_Owner != attacker)
  14.             return HAM_SUPERCEDE
  15.         return PLUGIN_CONTINUE
  16.     }
  17.     return PLUGIN_CONTINUE
  18. }

Csak akkor tudod szétlőni a csapatod lézerét, ha az a sajátod.

Ők köszönték meg demon nek ezt a hozzászólást: RihO (2017.03.27. 00:35)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 10 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole