hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.06.17. 01:39



Jelenlévő felhasználók

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

A legtöbb felhasználó (2761 fő) 2025.01.09. 20:06-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó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  [1 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Lézer eltűntés kör végén
HozzászólásElküldve:2016.11.22. 00:04 
Offline
Beavatott
Avatar

Csatlakozott:2013.11.24. 19:19
Hozzászólások:76
Megköszönt másnak: 24 alkalommal
Sziasztok

Annyit szeretnék kérni hogy valaki ki tudná javítani nekem ezt az sma-t???
Annyit kéne meg csinálni hogy körvégén a lézer tűnjön el mert pl ha utolsó zm bele megy az ember lézerébe meg hal, de utána a lézer ott marad és ha valaki bele megy(ember), akkor meg hal a lézerben

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


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  [1 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 5 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